Extract more hint tests into separate files
Change-Id: I110f815c6bb124596b31cf3bac739ed8604d6c3b
Reviewed-on: https://dart-review.googlesource.com/c/89100
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index f2b54ab..47bdb3a 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -1227,69 +1227,6 @@
]);
}
- test_invalidAssignment_instanceVariable() async {
- Source source = addSource(r'''
-class A {
- int x;
-}
-f(var y) {
- A a;
- if(y is String) {
- a.x = y;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
- verify([source]);
- }
-
- test_invalidAssignment_localVariable() async {
- Source source = addSource(r'''
-f(var y) {
- if(y is String) {
- int x = y;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
- verify([source]);
- }
-
- test_invalidAssignment_staticVariable() async {
- Source source = addSource(r'''
-class A {
- static int x;
-}
-f(var y) {
- if(y is String) {
- A.x = y;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
- verify([source]);
- }
-
- test_invalidAssignment_variableDeclaration() async {
- // 17971
- Source source = addSource(r'''
-class Point {
- final num x, y;
- Point(this.x, this.y);
- Point operator +(Point other) {
- return new Point(x+other.x, y+other.y);
- }
-}
-main() {
- var p1 = new Point(0, 0);
- var p2 = new Point(10, 10);
- int n = p1 + p2;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
- verify([source]);
- }
-
test_invalidImmutableAnnotation_method() async {
Source source = addSource(r'''
import 'package:meta/meta.dart';
@@ -3942,26 +3879,6 @@
assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
}
- test_unnecessaryCast_type_supertype() async {
- Source source = addSource(r'''
-m(int i) {
- var b = i as Object;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNNECESSARY_CAST]);
- verify([source]);
- }
-
- test_unnecessaryCast_type_type() async {
- Source source = addSource(r'''
-m(num i) {
- var b = i as num;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNNECESSARY_CAST]);
- verify([source]);
- }
-
test_unnecessaryNoSuchMethod_blockBody() async {
Source source = addSource(r'''
class A {
@@ -4788,346 +4705,6 @@
verify([source]);
}
- test_unusedField_isUsed_argument() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f = 0;
- main() {
- print(++_f);
- }
-}
-print(x) {}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_isUsed_reference_implicitThis() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- main() {
- print(_f);
- }
-}
-print(x) {}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_isUsed_reference_implicitThis_expressionFunctionBody() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- m() => _f;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_isUsed_reference_implicitThis_subclass() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- main() {
- print(_f);
- }
-}
-class B extends A {
- int _f;
-}
-print(x) {}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_isUsed_reference_qualified_propagatedElement() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
-}
-main() {
- var a = new A();
- print(a._f);
-}
-print(x) {}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_isUsed_reference_qualified_staticElement() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
-}
-main() {
- A a = new A();
- print(a._f);
-}
-print(x) {}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_isUsed_reference_qualified_unresolved() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
-}
-main(a) {
- print(a._f);
-}
-print(x) {}''');
- await computeAnalysisResult(source);
- assertErrors(source);
- verify([source]);
- }
-
- test_unusedField_notUsed_compoundAssign() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- main() {
- _f += 2;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedField_notUsed_constructorFieldInitializers() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- A() : _f = 0;
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedField_notUsed_fieldFormalParameter() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- A(this._f);
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedField_notUsed_noReference() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
-}
-''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedField_notUsed_nullAssign() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- var _f;
- m() {
- _f ??= doSomething();
- }
-}
-doSomething() => 0;
-''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedField_notUsed_postfixExpr() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f = 0;
- main() {
- _f++;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedField_notUsed_prefixExpr() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f = 0;
- main() {
- ++_f;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedField_notUsed_simpleAssignment() async {
- enableUnusedElement = true;
- Source source = addSource(r'''
-class A {
- int _f;
- m() {
- _f = 1;
- }
-}
-main(A a) {
- a._f = 2;
-}
-''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_FIELD]);
- verify([source]);
- }
-
- test_unusedImport() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart';''');
- Source source2 = addNamedSource("/lib1.dart", "library lib1;");
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_IMPORT]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- test_unusedImport_as() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart';
-import 'lib1.dart' as one;
-one.A a;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_IMPORT]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- @failingTest
- test_unusedImport_as_equalPrefixes() async {
- // See todo at ImportsVerifier.prefixElementMap.
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' as one;
-import 'lib2.dart' as one;
-one.A a;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}''');
- Source source3 = addNamedSource("/lib2.dart", r'''
-library lib2;
-class B {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- await computeAnalysisResult(source3);
- assertErrors(source, [HintCode.UNUSED_IMPORT]);
- assertNoErrors(source2);
- assertNoErrors(source3);
- verify([source, source2, source3]);
- }
-
- test_unusedImport_hide() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart';
-import 'lib1.dart' hide A;
-A a;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_IMPORT]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- test_unusedImport_inComment_libraryDirective() async {
- Source source = addSource(r'''
-/// Use [Future] class.
-library L;
-import 'dart:async';
-''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- }
-
- test_unusedImport_show() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' show A;
-import 'lib1.dart' show B;
-A a;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}
-class B {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_IMPORT]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- test_unusedLabel_inSwitch() async {
- Source source = addSource(r'''
-f(x) {
- switch (x) {
- label: case 0:
- break;
- default:
- break;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_LABEL]);
- verify([source]);
- }
-
- test_unusedLabel_onWhile() async {
- Source source = addSource(r'''
-f(condition()) {
- label: while (condition()) {
- break;
- }
-}''');
- await computeAnalysisResult(source);
- assertErrors(source, [HintCode.UNUSED_LABEL]);
- verify([source]);
- }
-
test_unusedLocalVariable_inCatch_exception() async {
enableUnusedLocalVariable = true;
Source source = addSource(r'''
@@ -5329,78 +4906,4 @@
assertErrors(source);
verify([source]);
}
-
- test_unusedShownName() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' show A, B;
-A a;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}
-class B {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- test_unusedShownName_as() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' as p show A, B;
-p.A a;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}
-class B {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- test_unusedShownName_duplicates() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' show A, B;
-import 'lib1.dart' show C, D;
-A a;
-C c;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}
-class B {}
-class C {}
-class D {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(
- source, [HintCode.UNUSED_SHOWN_NAME, HintCode.UNUSED_SHOWN_NAME]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
-
- test_unusedShownName_topLevelVariable() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' show var1, var2;
-import 'lib1.dart' show var3, var4;
-int a = var1;
-int b = var2;
-int c = var3;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-const int var1 = 1;
-const int var2 = 2;
-const int var3 = 3;
-const int var4 = 4;''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
- assertNoErrors(source2);
- verify([source, source2]);
- }
}
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index 26c4abc..bf270f1 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -961,102 +961,6 @@
assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
}
- test_unnecessaryCast_13855_parameter_A() async {
- // dartbug.com/13855, dartbug.com/13732
- Source source = addSource(r'''
-class A{
- a() {}
-}
-class B<E> {
- E e;
- m() {
- (e as A).a();
- }
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unnecessaryCast_conditionalExpression() async {
- Source source = addSource(r'''
-abstract class I {}
-class A implements I {}
-class B implements I {}
-I m(A a, B b) {
- return a == null ? b as I : a as I;
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unnecessaryCast_dynamic_type() async {
- Source source = addSource(r'''
-m(v) {
- var b = v as Object;
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unnecessaryCast_function() async {
- Source source = addSource(r'''
-void main() {
- Function(Null) f = (String x) => x;
- (f as Function(int))(3);
-}
-''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unnecessaryCast_function2() async {
- Source source = addSource(r'''
-class A {}
-
-class B<T extends A> {
- void foo() {
- T Function(T) f;
- A Function(A) g;
- g = f as A Function(A);
- }
-}
-''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unnecessaryCast_generics() async {
- // dartbug.com/18953
- Source source = addSource(r'''
-import 'dart:async';
-Future<int> f() => new Future.value(0);
-void g(bool c) {
- (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
-}''');
- await computeAnalysisResult(source);
- if (enableNewAnalysisDriver) {
- assertErrors(source, [HintCode.UNNECESSARY_CAST]);
- } else {
- assertNoErrors(source);
- }
- verify([source]);
- }
-
- test_unnecessaryCast_type_dynamic() async {
- Source source = addSource(r'''
-m(v) {
- var b = Object as dynamic;
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
test_unnecessaryNoSuchMethod_blockBody_notReturnStatement() async {
Source source = addSource(r'''
class A {
@@ -1117,224 +1021,6 @@
assertNoErrors(source);
verify([source]);
}
-
- test_unusedImport_annotationOnDirective() async {
- Source source = addSource(r'''
-library L;
-@A()
-import 'lib1.dart';''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {
- const A() {}
-}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- assertErrors(source);
- verify([source, source2]);
- }
-
- test_unusedImport_as_equalPrefixes() async {
- // 18818
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' as one;
-import 'lib2.dart' as one;
-one.A a;
-one.B b;''');
- Source source2 = addNamedSource("/lib1.dart", r'''
-library lib1;
-class A {}''');
- Source source3 = addNamedSource("/lib2.dart", r'''
-library lib2;
-class B {}''');
- await computeAnalysisResult(source);
- await computeAnalysisResult(source2);
- await computeAnalysisResult(source3);
- assertErrors(source);
- assertNoErrors(source2);
- assertNoErrors(source3);
- verify([source, source2, source3]);
- }
-
- test_unusedImport_core_library() async {
- Source source = addSource(r'''
-library L;
-import 'dart:core';''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedImport_export() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart';
-Two two;''');
- addNamedSource("/lib1.dart", r'''
-library lib1;
-export 'lib2.dart';
-class One {}''');
- addNamedSource("/lib2.dart", r'''
-library lib2;
-class Two {}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedImport_export2() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart';
-Three three;''');
- addNamedSource("/lib1.dart", r'''
-library lib1;
-export 'lib2.dart';
-class One {}''');
- addNamedSource("/lib2.dart", r'''
-library lib2;
-export 'lib3.dart';
-class Two {}''');
- addNamedSource("/lib3.dart", r'''
-library lib3;
-class Three {}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedImport_export_infiniteLoop() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart';
-Two two;''');
- addNamedSource("/lib1.dart", r'''
-library lib1;
-export 'lib2.dart';
-class One {}''');
- addNamedSource("/lib2.dart", r'''
-library lib2;
-export 'lib3.dart';
-class Two {}''');
- addNamedSource("/lib3.dart", r'''
-library lib3;
-export 'lib2.dart';
-class Three {}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedImport_metadata() async {
- Source source = addSource(r'''
-library L;
-@A(x)
-import 'lib1.dart';
-class A {
- final int value;
- const A(this.value);
-}''');
- addNamedSource("/lib1.dart", r'''
-library lib1;
-const x = 0;''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedImport_prefix_topLevelFunction() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' hide topLevelFunction;
-import 'lib1.dart' as one show topLevelFunction;
-class A {
- static void x() {
- One o;
- one.topLevelFunction();
- }
-}''');
- addNamedSource("/lib1.dart", r'''
-library lib1;
-class One {}
-topLevelFunction() {}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedImport_prefix_topLevelFunction2() async {
- Source source = addSource(r'''
-library L;
-import 'lib1.dart' hide topLevelFunction;
-import 'lib1.dart' as one show topLevelFunction;
-import 'lib1.dart' as two show topLevelFunction;
-class A {
- static void x() {
- One o;
- one.topLevelFunction();
- two.topLevelFunction();
- }
-}''');
- addNamedSource("/lib1.dart", r'''
-library lib1;
-class One {}
-topLevelFunction() {}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedLabel_inSwitch() async {
- Source source = addSource(r'''
-f(x) {
- switch (x) {
- label: case 0:
- break;
- default:
- continue label;
- }
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_unusedLabel_onWhile() async {
- Source source = addSource(r'''
-f(condition()) {
- label: while (condition()) {
- break label;
- }
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_useOfVoidResult_implicitReturnValue() async {
- Source source = addSource(r'''
-f() {}
-class A {
- n() {
- var a = f();
- }
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
-
- test_useOfVoidResult_nonVoidReturnValue() async {
- Source source = addSource(r'''
-int f() => 1;
-g() {
- var a = f();
-}''');
- await computeAnalysisResult(source);
- assertNoErrors(source);
- verify([source]);
- }
}
class PubSuggestionCodeTest extends ResolverTestCase {
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
index bd6d96e..73966e0 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class ArgumentTypeNotAssignableTest extends ResolverTestCase {
test_functionType() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m() {
var a = new A();
a.n(() => 0);
@@ -29,7 +29,7 @@
}
test_interfaceType() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m() {
var i = '';
n(i);
diff --git a/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart b/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart
index 61f3441..94f9c00 100644
--- a/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/can_be_null_after_null_aware_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class CanBeNullAfterNullAwareTest extends ResolverTestCase {
test_afterCascade() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
x..a?.b.c;
}
@@ -25,7 +25,7 @@
}
test_beforeCascade() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
x?.a..m();
}
@@ -33,7 +33,7 @@
}
test_cascadeWithParenthesis() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
(x?.a)..m();
}
@@ -41,7 +41,7 @@
}
test_definedForNull() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
m(x) {
x?.a.hashCode;
x?.a.runtimeType;
@@ -54,7 +54,7 @@
}
test_guarded_methodInvocation() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
m(x) {
x?.a()?.b();
}
@@ -62,7 +62,7 @@
}
test_guarded_propertyAccess() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
m(x) {
x?.a?.b;
}
@@ -70,7 +70,7 @@
}
test_methodInvocation() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
x?.a.b();
}
@@ -78,7 +78,7 @@
}
test_multipleInvocations() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
x?.a
..m()
@@ -88,7 +88,7 @@
}
test_parenthesized() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
(x?.a).b;
}
@@ -96,7 +96,7 @@
}
test_propertyAccess() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
m(x) {
x?.a.b;
}
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart
index 2102064..c864b70 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart
@@ -16,7 +16,6 @@
});
}
-@reflectiveTest
mixin ConstConstructorWithMixinWithFieldMixin implements ResolutionTest {
test_class_instance() async {
addTestFile(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index 7519905..b65409d 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class DeprecatedMemberUseTest extends ResolverTestCase {
test__methodInvocation_contructor() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@Deprecated('0.9')
m() {}
@@ -27,7 +27,7 @@
}
test_call() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
call() {}
@@ -40,7 +40,7 @@
}
test_compoundAssignment() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
A operator+(A a) { return a; }
@@ -58,13 +58,13 @@
library deprecated_library;
class A {}
''');
- assertErrorsInCode('''
+ await assertErrorsInCode('''
export 'deprecated_library.dart';
''', [HintCode.DEPRECATED_MEMBER_USE]);
}
test_field() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
int x = 1;
@@ -76,7 +76,7 @@
}
test_getter() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
get m => 1;
@@ -93,14 +93,14 @@
library deprecated_library;
class A {}
''');
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
import 'deprecated_library.dart';
f(A a) {}
''', [HintCode.DEPRECATED_MEMBER_USE]);
}
test_inDeprecatedClass() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
f() {}
@@ -114,7 +114,7 @@
}
test_inDeprecatedField() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
class C {}
@@ -126,7 +126,7 @@
}
test_inDeprecatedFunction() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
f() {}
@@ -138,7 +138,7 @@
}
test_inDeprecatedLibrary() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
library lib;
@@ -154,7 +154,7 @@
}
test_inDeprecatedMethod() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
f() {}
@@ -168,7 +168,7 @@
}
test_inDeprecatedMethod_inDeprecatedClass() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
f() {}
@@ -183,7 +183,7 @@
}
test_inDeprecatedMixin() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
f() {}
@@ -197,7 +197,7 @@
}
test_inDeprecatedTopLevelVariable() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
@deprecated
class C {}
@@ -207,7 +207,7 @@
}
test_indexExpression() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
operator[](int i) {}
@@ -219,7 +219,7 @@
}
test_instanceCreation_defaultConstructor() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
A(int i) {}
@@ -231,7 +231,7 @@
}
test_instanceCreation_namedConstructor() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
A.named(int i) {}
@@ -243,7 +243,7 @@
}
test_methodInvocation_constant() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
m() {}
@@ -253,7 +253,7 @@
}
test_operator() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
operator+(A a) {}
@@ -266,7 +266,7 @@
}
test_parameter_named() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
m({@deprecated int x}) {}
n() {m(x: 1);}
@@ -275,13 +275,13 @@
}
test_parameter_named_inDefiningFunction() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
f({@deprecated int x}) => x;
''');
}
test_parameter_named_inDefiningLocalFunction() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
class C {
m() {
f({@deprecated int x}) {
@@ -294,7 +294,7 @@
}
test_parameter_named_inDefiningMethod() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
class C {
m({@deprecated int x}) {
return x;
@@ -304,7 +304,7 @@
}
test_parameter_named_inNestedLocalFunction() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
class C {
m({@deprecated int x}) {
f() {
@@ -317,7 +317,7 @@
}
test_parameter_positional() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
m([@deprecated int x]) {}
n() {m(1);}
@@ -326,7 +326,7 @@
}
test_setter() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
set s(v) {}
@@ -338,7 +338,7 @@
}
test_superConstructor_defaultConstructor() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
A() {}
@@ -350,7 +350,7 @@
}
test_superConstructor_namedConstructor() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
class A {
@deprecated
A.named() {}
diff --git a/pkg/analyzer/test/src/diagnostics/division_optimization_test.dart b/pkg/analyzer/test/src/diagnostics/division_optimization_test.dart
index 539cdf1..6adfcf2 100644
--- a/pkg/analyzer/test/src/diagnostics/division_optimization_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/division_optimization_test.dart
@@ -17,7 +17,7 @@
@reflectiveTest
class DivisionOptimizationTest extends ResolverTestCase {
test_divisionOptimization() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
f(int x, int y) {
var v = x / y.toInt();
}
@@ -25,7 +25,7 @@
}
test_double() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
f(double x, double y) {
var v = (x / y).toInt();
}
@@ -33,7 +33,7 @@
}
test_dynamic() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
f(x, y) {
var v = (x / y).toInt();
}
@@ -41,7 +41,7 @@
}
test_int() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
f(int x, int y) {
var v = (x / y).toInt();
}
@@ -49,7 +49,7 @@
}
test_nonNumeric() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
class A {
num operator /(x) { return x; }
}
@@ -60,7 +60,7 @@
}
test_wrappedInParentheses() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
f(int x, int y) {
var v = (((x / y))).toInt();
}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
new file mode 100644
index 0000000..0630617
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(InvalidAssignmentTest);
+ defineReflectiveTests(InvalidAssignmentTest_Driver);
+ });
+}
+
+@reflectiveTest
+class InvalidAssignmentTest extends ResolverTestCase {
+ test_instanceVariable() async {
+ await assertErrorsInCode(r'''
+class A {
+ int x;
+}
+f(var y) {
+ A a;
+ if (y is String) {
+ a.x = y;
+ }
+}
+''', [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ }
+
+ test_localVariable() async {
+ await assertErrorsInCode(r'''
+f(var y) {
+ if (y is String) {
+ int x = y;
+ }
+}
+''', [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ }
+
+ test_staticVariable() async {
+ await assertErrorsInCode(r'''
+class A {
+ static int x;
+}
+f(var y) {
+ if (y is String) {
+ A.x = y;
+ }
+}
+''', [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ }
+
+ test_variableDeclaration() async {
+ // 17971
+ await assertErrorsInCode(r'''
+class Point {
+ final num x, y;
+ Point(this.x, this.y);
+ Point operator +(Point other) {
+ return new Point(x+other.x, y+other.y);
+ }
+}
+main() {
+ var p1 = new Point(0, 0);
+ var p2 = new Point(10, 10);
+ int n = p1 + p2;
+}
+''', [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+ }
+}
+
+@reflectiveTest
+class InvalidAssignmentTest_Driver extends InvalidAssignmentTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_required_param_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_required_param_test.dart
index 70c22e5..e10b266 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_required_param_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_required_param_test.dart
@@ -25,7 +25,7 @@
}
test_namedParameter_withDefault() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
import 'package:meta/meta.dart';
m({@required a = 1}) => null;
@@ -33,7 +33,7 @@
}
test_positionalParameter_withDefault() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
import 'package:meta/meta.dart';
m([@required a = 1]) => null;
@@ -41,7 +41,7 @@
}
test_ppositionalParameter_noDefault() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
import 'package:meta/meta.dart';
m([@required a]) => null;
@@ -49,7 +49,7 @@
}
test_requiredParameter() async {
- assertErrorsInCode(r'''
+ await assertErrorsInCode(r'''
import 'package:meta/meta.dart';
m(@required a) => null;
@@ -57,7 +57,7 @@
}
test_valid() async {
- assertNoErrorsInCode(r'''
+ await assertNoErrorsInCode(r'''
import 'package:meta/meta.dart';
m1() => null;
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index a0b3585..0be860c 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -8,7 +8,14 @@
import 'can_be_null_after_null_aware_test.dart' as can_be_null_after_null_aware;
import 'deprecated_member_use_test.dart' as deprecated_member_use;
import 'division_optimization_test.dart' as division_optimization;
+import 'invalid_assignment_test.dart' as invalid_assignment;
import 'invalid_required_param_test.dart' as invalid_required_param;
+import 'unnecessary_cast_test.dart' as unnecessary_cast;
+import 'unused_field_test.dart' as unused_field;
+import 'unused_import_test.dart' as unused_import;
+import 'unused_label_test.dart' as unused_label;
+import 'unused_shown_name_test.dart' as unused_shown_name;
+import 'use_of_void_result_test.dart' as use_of_void_result;
main() {
defineReflectiveSuite(() {
@@ -16,6 +23,13 @@
can_be_null_after_null_aware.main();
deprecated_member_use.main();
division_optimization.main();
+ invalid_assignment.main();
invalid_required_param.main();
+ unnecessary_cast.main();
+ unused_field.main();
+ unused_import.main();
+ unused_label.main();
+ unused_shown_name.main();
+ use_of_void_result.main();
}, name: 'diagnostics');
}
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
new file mode 100644
index 0000000..507e656
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
@@ -0,0 +1,128 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UnnecessaryCastTest);
+ defineReflectiveTests(UnnecessaryCastTest_Driver);
+ });
+}
+
+@reflectiveTest
+class UnnecessaryCastTest extends ResolverTestCase {
+ test_conditionalExpression() async {
+ await assertNoErrorsInCode(r'''
+abstract class I {}
+class A implements I {}
+class B implements I {}
+I m(A a, B b) {
+ return a == null ? b as I : a as I;
+}
+''');
+ }
+
+ test_dynamic_type() async {
+ await assertNoErrorsInCode(r'''
+m(v) {
+ var b = v as Object;
+}
+''');
+ }
+
+ test_function() async {
+ await assertNoErrorsInCode(r'''
+void main() {
+ Function(Null) f = (String x) => x;
+ (f as Function(int))(3);
+}
+''');
+ }
+
+ test_function2() async {
+ await assertNoErrorsInCode(r'''
+class A {}
+
+class B<T extends A> {
+ void foo() {
+ T Function(T) f;
+ A Function(A) g;
+ g = f as A Function(A);
+ }
+}
+''');
+ }
+
+ test_generics() async {
+ // dartbug.com/18953
+ await assertNoErrorsInCode(r'''
+import 'dart:async';
+Future<int> f() => new Future.value(0);
+void g(bool c) {
+ (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
+}
+''');
+ }
+
+ test_parameter_A() async {
+ // dartbug.com/13855, dartbug.com/13732
+ await assertNoErrorsInCode(r'''
+class A{
+ a() {}
+}
+class B<E> {
+ E e;
+ m() {
+ (e as A).a();
+ }
+}
+''');
+ }
+
+ test_type_dynamic() async {
+ await assertNoErrorsInCode(r'''
+m(v) {
+ var b = Object as dynamic;
+}
+''');
+ }
+
+ test_type_supertype() async {
+ await assertErrorsInCode(r'''
+m(int i) {
+ var b = i as Object;
+}
+''', [HintCode.UNNECESSARY_CAST]);
+ }
+
+ test_type_type() async {
+ await assertErrorsInCode(r'''
+m(num i) {
+ var b = i as num;
+}
+''', [HintCode.UNNECESSARY_CAST]);
+ }
+}
+
+@reflectiveTest
+class UnnecessaryCastTest_Driver extends UnnecessaryCastTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+
+ @override
+ test_generics() async {
+ // dartbug.com/18953
+ assertErrorsInCode(r'''
+import 'dart:async';
+Future<int> f() => new Future.value(0);
+void g(bool c) {
+ (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
+}
+''', [HintCode.UNNECESSARY_CAST]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
new file mode 100644
index 0000000..6a60a1b
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
@@ -0,0 +1,198 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UnusedFieldTest);
+ defineReflectiveTests(UnusedFieldTest_Driver);
+ });
+}
+
+@reflectiveTest
+class UnusedFieldTest extends ResolverTestCase {
+ @override
+ bool get enableUnusedElement => true;
+
+ test_unusedField_isUsed_argument() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f = 0;
+ main() {
+ print(++_f);
+ }
+}
+print(x) {}
+''');
+ }
+
+ test_unusedField_isUsed_reference_implicitThis() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f;
+ main() {
+ print(_f);
+ }
+}
+print(x) {}
+''');
+ }
+
+ test_unusedField_isUsed_reference_implicitThis_expressionFunctionBody() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f;
+ m() => _f;
+}
+''');
+ }
+
+ test_unusedField_isUsed_reference_implicitThis_subclass() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f;
+ main() {
+ print(_f);
+ }
+}
+class B extends A {
+ int _f;
+}
+print(x) {}
+''');
+ }
+
+ test_unusedField_isUsed_reference_qualified_propagatedElement() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f;
+}
+main() {
+ var a = new A();
+ print(a._f);
+}
+print(x) {}
+''');
+ }
+
+ test_unusedField_isUsed_reference_qualified_staticElement() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f;
+}
+main() {
+ A a = new A();
+ print(a._f);
+}
+print(x) {}
+''');
+ }
+
+ test_unusedField_isUsed_reference_qualified_unresolved() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ int _f;
+}
+main(a) {
+ print(a._f);
+}
+print(x) {}
+''');
+ }
+
+ test_unusedField_notUsed_compoundAssign() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f;
+ main() {
+ _f += 2;
+ }
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+
+ test_unusedField_notUsed_constructorFieldInitializers() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f;
+ A() : _f = 0;
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+
+ test_unusedField_notUsed_fieldFormalParameter() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f;
+ A(this._f);
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+
+ test_unusedField_notUsed_noReference() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f;
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+
+ test_unusedField_notUsed_nullAssign() async {
+ await assertNoErrorsInCode(r'''
+class A {
+ var _f;
+ m() {
+ _f ??= doSomething();
+ }
+}
+doSomething() => 0;
+''');
+ }
+
+ test_unusedField_notUsed_postfixExpr() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f = 0;
+ main() {
+ _f++;
+ }
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+
+ test_unusedField_notUsed_prefixExpr() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f = 0;
+ main() {
+ ++_f;
+ }
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+
+ test_unusedField_notUsed_simpleAssignment() async {
+ await assertErrorsInCode(r'''
+class A {
+ int _f;
+ m() {
+ _f = 1;
+ }
+}
+main(A a) {
+ a._f = 2;
+}
+''', [HintCode.UNUSED_FIELD]);
+ }
+}
+
+@reflectiveTest
+class UnusedFieldTest_Driver extends UnusedFieldTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
new file mode 100644
index 0000000..e930e3e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
@@ -0,0 +1,321 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UnusedImportTest);
+ defineReflectiveTests(UnusedImportTest_Driver);
+ });
+}
+
+@reflectiveTest
+class UnusedImportTest extends ResolverTestCase {
+ test_annotationOnDirective() async {
+ Source source = addSource(r'''
+library L;
+@A()
+import 'lib1.dart';
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {
+ const A() {}
+}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source);
+ verify([source, source2]);
+ }
+
+ test_as() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+import 'lib1.dart' as one;
+one.A a;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_IMPORT]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
+ test_as_equalPrefixes_referenced() async {
+ // 18818
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' as one;
+import 'lib2.dart' as one;
+one.A a;
+one.B b;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+''');
+ Source source3 = addNamedSource("/lib2.dart", r'''
+library lib2;
+class B {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ await computeAnalysisResult(source3);
+ assertErrors(source);
+ assertNoErrors(source2);
+ assertNoErrors(source3);
+ verify([source, source2, source3]);
+ }
+
+ @failingTest
+ test_as_equalPrefixes_unreferenced() async {
+ // See todo at ImportsVerifier.prefixElementMap.
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' as one;
+import 'lib2.dart' as one;
+one.A a;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+''');
+ Source source3 = addNamedSource("/lib2.dart", r'''
+library lib2;
+class B {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ await computeAnalysisResult(source3);
+ assertErrors(source, [HintCode.UNUSED_IMPORT]);
+ assertNoErrors(source2);
+ assertNoErrors(source3);
+ verify([source, source2, source3]);
+ }
+
+ test_core_library() async {
+ Source source = addSource(r'''
+library L;
+import 'dart:core';
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_export() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+Two two;
+''');
+ addNamedSource("/lib1.dart", r'''
+library lib1;
+export 'lib2.dart';
+class One {}
+''');
+ addNamedSource("/lib2.dart", r'''
+library lib2;
+class Two {}
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_export2() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+Three three;
+''');
+ addNamedSource("/lib1.dart", r'''
+library lib1;
+export 'lib2.dart';
+class One {}
+''');
+ addNamedSource("/lib2.dart", r'''
+library lib2;
+export 'lib3.dart';
+class Two {}
+''');
+ addNamedSource("/lib3.dart", r'''
+library lib3;
+class Three {}
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_export_infiniteLoop() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+Two two;
+''');
+ addNamedSource("/lib1.dart", r'''
+library lib1;
+export 'lib2.dart';
+class One {}
+''');
+ addNamedSource("/lib2.dart", r'''
+library lib2;
+export 'lib3.dart';
+class Two {}
+''');
+ addNamedSource("/lib3.dart", r'''
+library lib3;
+export 'lib2.dart';
+class Three {}
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_hide() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+import 'lib1.dart' hide A;
+A a;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_IMPORT]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
+ test_inComment_libraryDirective() async {
+ Source source = addSource(r'''
+/// Use [Future] class.
+library L;
+import 'dart:async';
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ }
+
+ test_metadata() async {
+ Source source = addSource(r'''
+library L;
+@A(x)
+import 'lib1.dart';
+class A {
+ final int value;
+ const A(this.value);
+}
+''');
+ addNamedSource("/lib1.dart", r'''
+library lib1;
+const x = 0;
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_prefix_topLevelFunction() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' hide topLevelFunction;
+import 'lib1.dart' as one show topLevelFunction;
+class A {
+ static void x() {
+ One o;
+ one.topLevelFunction();
+ }
+}
+''');
+ addNamedSource("/lib1.dart", r'''
+library lib1;
+class One {}
+topLevelFunction() {}
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_prefix_topLevelFunction2() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' hide topLevelFunction;
+import 'lib1.dart' as one show topLevelFunction;
+import 'lib1.dart' as two show topLevelFunction;
+class A {
+ static void x() {
+ One o;
+ one.topLevelFunction();
+ two.topLevelFunction();
+ }
+}
+''');
+ addNamedSource("/lib1.dart", r'''
+library lib1;
+class One {}
+topLevelFunction() {}
+''');
+ await computeAnalysisResult(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ test_show() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' show A;
+import 'lib1.dart' show B;
+A a;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_IMPORT]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
+ test_unusedImport() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+''');
+ Source source2 = addNamedSource("/lib1.dart", '''
+library lib1;
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_IMPORT]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+}
+
+@reflectiveTest
+class UnusedImportTest_Driver extends UnusedImportTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_label_test.dart b/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
new file mode 100644
index 0000000..7609554
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
@@ -0,0 +1,70 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UnusedLabelTest);
+ defineReflectiveTests(UnusedLabelTest_Driver);
+ });
+}
+
+@reflectiveTest
+class UnusedLabelTest extends ResolverTestCase {
+ test_unused_inSwitch() async {
+ await assertErrorsInCode(r'''
+f(x) {
+ switch (x) {
+ label: case 0:
+ break;
+ default:
+ break;
+ }
+}
+''', [HintCode.UNUSED_LABEL]);
+ }
+
+ test_unused_onWhile() async {
+ await assertErrorsInCode(r'''
+f(condition()) {
+ label: while (condition()) {
+ break;
+ }
+}
+''', [HintCode.UNUSED_LABEL]);
+ }
+
+ test_used_inSwitch() async {
+ await assertNoErrorsInCode(r'''
+f(x) {
+ switch (x) {
+ label: case 0:
+ break;
+ default:
+ continue label;
+ }
+}
+''');
+ }
+
+ test_used_onWhile() async {
+ await assertNoErrorsInCode(r'''
+f(condition()) {
+ label: while (condition()) {
+ break label;
+ }
+}
+''');
+ }
+}
+
+@reflectiveTest
+class UnusedLabelTest_Driver extends UnusedLabelTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
new file mode 100644
index 0000000..8fba003
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
@@ -0,0 +1,107 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UnusedShownNameTest);
+ defineReflectiveTests(UnusedShownNameTest_Driver);
+ });
+}
+
+@reflectiveTest
+class UnusedShownNameTest extends ResolverTestCase {
+ test_unreferenced() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' show A, B;
+A a;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
+ test_unusedShownName_as() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' as p show A, B;
+p.A a;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
+ test_unusedShownName_duplicates() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' show A, B;
+import 'lib1.dart' show C, D;
+A a;
+C c;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(
+ source, [HintCode.UNUSED_SHOWN_NAME, HintCode.UNUSED_SHOWN_NAME]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+
+ test_unusedShownName_topLevelVariable() async {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' show var1, var2;
+import 'lib1.dart' show var3, var4;
+int a = var1;
+int b = var2;
+int c = var3;
+''');
+ Source source2 = addNamedSource("/lib1.dart", r'''
+library lib1;
+const int var1 = 1;
+const int var2 = 2;
+const int var3 = 3;
+const int var4 = 4;
+''');
+ await computeAnalysisResult(source);
+ await computeAnalysisResult(source2);
+ assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
+ assertNoErrors(source2);
+ verify([source, source2]);
+ }
+}
+
+@reflectiveTest
+class UnusedShownNameTest_Driver extends UnusedShownNameTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+}
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
new file mode 100644
index 0000000..f44a502
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../generated/resolver_test_case.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(UseOfVoidResultTest);
+ defineReflectiveTests(UseOfVoidResultTest_Driver);
+ });
+}
+
+@reflectiveTest
+class UseOfVoidResultTest extends ResolverTestCase {
+ test_implicitReturnValue() async {
+ await assertNoErrorsInCode(r'''
+f() {}
+class A {
+ n() {
+ var a = f();
+ }
+}
+''');
+ }
+
+ test_nonVoidReturnValue() async {
+ await assertNoErrorsInCode(r'''
+int f() => 1;
+g() {
+ var a = f();
+}
+''');
+ }
+}
+
+@reflectiveTest
+class UseOfVoidResultTest_Driver extends UseOfVoidResultTest {
+ @override
+ bool get enableNewAnalysisDriver => true;
+}