diff --git a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart index 489de5428a7..fb0bab395cf 100644 --- a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart @@ -312,7 +312,7 @@ void f() { // We don't have any lints configured, so no errors. var result = await resolveTestFile(); - assertErrorsInTestResult(result, []); + expect(result.diagnostics, isEmpty); // The summary for the library was linked. _assertContainsLinkedCycle({testFile}, andClear: true); diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart index d25f1c81fbe..10630d0daf4 100644 --- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart @@ -131,7 +131,7 @@ class AnalysisDriver_LintTest extends PubPackageResolutionTest var result = await resolveTestFile(); // No errors for a file that doesn't exist. - assertErrorsInTestResult(result, []); + expect(result.diagnostics, isEmpty); } void _assertHasLintReported(List diagnostics, String name) { diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart index 1bd2b7686a8..37c9dde14e7 100644 --- a/pkg/analyzer/test/src/dart/analysis/index_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart @@ -8,7 +8,6 @@ import 'package:analyzer/source/file_source.dart'; import 'package:analyzer/source/source.dart'; import 'package:analyzer/src/dart/analysis/index.dart'; import 'package:analyzer/src/dart/element/element.dart'; -import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag; import 'package:analyzer/src/summary/idl.dart'; import 'package:analyzer/src/test_utilities/find_element2.dart'; import 'package:collection/collection.dart'; @@ -81,8 +80,10 @@ const myDiagnosticCode = 0; import 'diagnostic.dart'; '''); - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'helper.dart'; +// ^^^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'helper.dart'. void f() { '// [diag.myDiagnosticCode] message'; @@ -95,14 +96,13 @@ void f() { } test_ClassElement_emptyBody() async { - var result = await _indexTestUnit(r''' + await _indexTestCode(r''' class C; '''); - assertErrorsInTestResult(result, []); } test_ClassElement_hierarchy_class_extends() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -110,7 +110,6 @@ class A {} class B extends A {} class B_q extends p.A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -123,7 +122,7 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_class_extends_implicitObject() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A {} '''); var element = result.typeProvider.objectType.element; @@ -133,7 +132,7 @@ class A {} } test_ClassElement_hierarchy_class_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -141,7 +140,6 @@ class A {} class B implements A {} class B_q implements p.A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -154,18 +152,18 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_class_with() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} class D extends Object with A {} +// ^ +// [diag.classUsedAsMixin] The class 'A' can't be used as a mixin because it's neither a mixin class nor a mixin. class D_q extends Object with p.A {} +// ^^^ +// [diag.classUsedAsMixin] The class 'A' can't be used as a mixin because it's neither a mixin class nor a mixin. '''); - assertErrorsInTestResult(result, [ - error(diag.classUsedAsMixin, 66, 1), - error(diag.classUsedAsMixin, 101, 3), - ]); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -178,18 +176,18 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_classTypeAlias_with() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} class D2 = Object with A; +// ^ +// [diag.classUsedAsMixin] The class 'A' can't be used as a mixin because it's neither a mixin class nor a mixin. class D2_q = Object with p.A; +// ^^^ +// [diag.classUsedAsMixin] The class 'A' can't be used as a mixin because it's neither a mixin class nor a mixin. '''); - assertErrorsInTestResult(result, [ - error(diag.classUsedAsMixin, 61, 1), - error(diag.classUsedAsMixin, 89, 3), - ]); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -202,7 +200,7 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_enum_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -210,7 +208,6 @@ class A {} enum E implements A { v } enum E_q implements p.A { v } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -223,7 +220,7 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_extensionType_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -231,7 +228,6 @@ class A {} extension type E(A it) implements A {} extension type E_q(A it) implements p.A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -246,7 +242,7 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_mixin_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -254,7 +250,6 @@ class A {} mixin M implements A {} mixin M_q implements p.A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -267,7 +262,7 @@ Prefixes: (unprefixed),p } test_ClassElement_hierarchy_mixin_on() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -275,7 +270,6 @@ class A {} mixin M2 on A {} mixin M2_q on p.A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -288,7 +282,7 @@ Prefixes: (unprefixed),p } test_ClassElement_reference_annotation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A { @@ -305,7 +299,6 @@ class A { @p.A.myConstant void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -322,7 +315,7 @@ Prefixes: (unprefixed),p } test_ClassElement_reference_annotation_typeArgument() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' class A { const A(); } @@ -339,11 +332,15 @@ void f() {} } test_ClassElement_reference_classTypeAlias() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A {} class B = Object with A; +// ^ +// [diag.classUsedAsMixin] The class 'A' can't be used as a mixin because it's neither a mixin class nor a mixin. void f(B p) { B v; +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'v' isn't used. } '''); var element = result.findElement.class_('B'); @@ -354,7 +351,7 @@ void f(B p) { } test_ClassElement_reference_comment() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -371,10 +368,14 @@ Prefixes: (unprefixed),p } test_ClassElement_reference_definedInSdk() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'dart:math'; Random v1; +// ^^ +// [diag.notInitializedNonNullableVariable] The non-nullable variable 'v1' must be initialized. Random v2; +// ^^ +// [diag.notInitializedNonNullableVariable] The non-nullable variable 'v2' must be initialized. '''); var element = result.findElement.importFind('dart:math').class_('Random'); assertElementIndexText(result, element, r''' @@ -387,11 +388,13 @@ Random v2; newFile('$testPackageLibPath/lib.dart', r''' class A {} '''); - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'lib.dart'; void f(A p) { A v = p; +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'v' isn't used. } '''); var element = result.findNode.namedType('A p').element!; @@ -402,7 +405,7 @@ void f(A p) { } test_ClassElement_reference_instanceCreation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -412,7 +415,6 @@ void f() { p.A(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -423,7 +425,7 @@ Prefixes: (unprefixed),p } test_ClassElement_reference_memberAccess() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A { @@ -435,7 +437,6 @@ void f() { p.A.foo(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -446,24 +447,26 @@ Prefixes: (unprefixed),p } test_ClassElement_reference_namedType() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} void f() { A v1; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v1' isn't used. p.A v2; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v2' isn't used. List v3; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v3' isn't used. List v4; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v4' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.unusedLocalVariable, 53, 2), - error(diag.unusedLocalVariable, 63, 2), - error(diag.unusedLocalVariable, 77, 2), - error(diag.unusedLocalVariable, 93, 2), - ]); var element = result.findElement.class_('A'); assertElementIndexText(result, element, r''' @@ -476,7 +479,7 @@ Prefixes: (unprefixed),p } test_ClassElement_reference_recordTypeAnnotation_named() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' class A {} void f(({int foo, A bar}) r) {} @@ -488,7 +491,7 @@ void f(({int foo, A bar}) r) {} } test_ClassElement_reference_recordTypeAnnotation_positional() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' class A {} void f((int, A) r) {} @@ -500,7 +503,7 @@ void f((int, A) r) {} } test_ClassElement_reference_typeLiteral() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -517,7 +520,7 @@ Prefixes: (unprefixed),p } test_ConstructorElement_class_method_sameName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A.foo() { foo(); @@ -539,8 +542,10 @@ class A { } test_ConstructorElement_class_named_newHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A.foo] and [A.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A { new foo() {} new bar() : this.foo(); @@ -553,12 +558,10 @@ void useConstructor() { A.foo(); A.foo; A a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 200, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -573,8 +576,10 @@ void useConstructor() { } test_ConstructorElement_class_named_primary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A.foo] and [A.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A.foo() { new bar() : this.foo(); factory baz() = A.foo; @@ -586,12 +591,10 @@ void useConstructor() { A.foo(); A.foo; A a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 191, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -606,8 +609,10 @@ void useConstructor() { } test_ConstructorElement_class_named_typeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A.foo] and [A.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A { A.foo() {} A.bar() : this.foo(); @@ -620,12 +625,10 @@ void useConstructor() { A.foo(); A.foo; A a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 195, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -640,8 +643,10 @@ void useConstructor() { } test_ConstructorElement_class_named_typeName_viaTypeAlias() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new B.foo] and [B.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A { A.foo() {} A.bar() : this.foo(); @@ -655,12 +660,10 @@ void useConstructor() { B.foo(); B.foo; B b = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'b' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 218, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -675,8 +678,10 @@ void useConstructor() { } test_ConstructorElement_class_unnamed_implicit() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class B { B(); factory B.baz() = A; @@ -689,12 +694,10 @@ void useConstructor() { A(); A.new; A a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 170, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -708,7 +711,7 @@ void useConstructor() { } test_ConstructorElement_class_unnamed_implicitInvocation_fromNewHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A(); } @@ -717,6 +720,11 @@ class B extends A { new (); new bar(); factory new.baz() = A; +// ^^^ +// [diag.expectedIdentifierButGotKeyword] 'new' can't be used as an identifier because it's a keyword. +// [diag.invalidFactoryNameNotAClass] The name of a factory constructor must be the same as the name of the immediately enclosing class. +// ^ +// [diag.redirectToInvalidReturnType] The return type 'A' of the redirected constructor isn't a subtype of 'B'. } '''); @@ -729,7 +737,7 @@ class B extends A { } test_ConstructorElement_class_unnamed_implicitInvocation_fromTypeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A(); } @@ -738,6 +746,8 @@ class B extends A { B(); B.bar(); factory B.baz() = A; +// ^ +// [diag.redirectToInvalidReturnType] The return type 'A' of the redirected constructor isn't a subtype of 'B'. } class C extends A {} @@ -753,8 +763,10 @@ class C extends A {} } test_ConstructorElement_class_unnamed_newHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A { new () {} new bar() : this(); @@ -767,12 +779,10 @@ void useConstructor() { A(); A.new; A a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 177, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -787,36 +797,34 @@ void useConstructor() { } test_ConstructorElement_class_unnamed_otherFile() async { - var other = convertPath('$testPackageLibPath/other.dart'); - var otherFile = newFile(other, ''' -import 'test.dart'; + var otherFile = getFile('$testPackageLibPath/other.dart'); -void f() { - A(); -} -'''); - - var result = await resolveTestCode(''' + var result = await resolveTestCodeWithDiagnostics(''' class A { A() {} } '''); var element = result.findElement.unnamedConstructor('A'); - result = await resolveFile2(otherFile); - index = AnalysisDriverUnitIndex.fromBuffer( - indexUnit(result.unit).toBuffer(), - ); + result = await resolveFileWithDiagnostics(otherFile, ''' +import 'test.dart'; + +void f() { + A(); +} +'''); + _indexResult(result); - assertErrorsInTestResult(result, []); assertElementIndexText(result, element, r''' 35 4:4 || IS_INVOKED_BY qualified '''); } test_ConstructorElement_class_unnamed_primary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A() { new bar() : this(); factory baz() = A; @@ -828,12 +836,10 @@ void useConstructor() { A(); A.new; A a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 167, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -848,8 +854,10 @@ void useConstructor() { } test_ConstructorElement_class_unnamed_typeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A { A() {} A.bar() : this(); @@ -862,12 +870,10 @@ void useConstructor() { A(); A.new; A a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 171, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -882,8 +888,10 @@ void useConstructor() { } test_ConstructorElement_class_unnamed_typeName_explicitNew() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. class A { A.new() {} A.bar() : this.new(); @@ -896,12 +904,10 @@ void useConstructor() { A.new(); A.new; A a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 191, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -916,14 +922,18 @@ void useConstructor() { } test_ConstructorElement_classTypeAlias() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class M {} class A { A() {} A.named() {} } class B = A with M; +// ^ +// [diag.classUsedAsMixin] The class 'M' can't be used as a mixin because it's neither a mixin class nor a mixin. class C = B with M; +// ^ +// [diag.classUsedAsMixin] The class 'M' can't be used as a mixin because it's neither a mixin class nor a mixin. void useConstructor() { B(); B.named(); @@ -931,10 +941,6 @@ void useConstructor() { C.named(); } '''); - assertErrorsInTestResult(result, [ - error(diag.classUsedAsMixin, 64, 1), - error(diag.classUsedAsMixin, 84, 1), - ]); var constructor = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, constructor, r''' 114 9:4 || IS_INVOKED_BY qualified @@ -949,48 +955,55 @@ void useConstructor() { } test_ConstructorElement_classTypeAlias_cycle() async { - var result = await _indexTestUnit(''' + await _indexTestCode(''' class M {} class A = B with M; +// ^ +// [diag.recursiveInterfaceInheritance] 'A' can't be a superinterface of itself: B, A. +// ^ +// [diag.classUsedAsMixin] The class 'M' can't be used as a mixin because it's neither a mixin class nor a mixin. class B = A with M; +// ^ +// [diag.recursiveInterfaceInheritance] 'B' can't be a superinterface of itself: B, A. +// ^ +// [diag.classUsedAsMixin] The class 'M' can't be used as a mixin because it's neither a mixin class nor a mixin. void useConstructor() { A(); B(); } '''); - assertErrorsInTestResult(result, [ - error(diag.recursiveInterfaceInheritance, 17, 1), - error(diag.classUsedAsMixin, 28, 1), - error(diag.recursiveInterfaceInheritance, 37, 1), - error(diag.classUsedAsMixin, 48, 1), - ]); // No additional validation, but it should not fail with stack overflow. } test_ConstructorElement_enum_named_newHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E.foo] and [E.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E { v.foo(); const new foo(); const new bar() : this.foo(); +// ^^^ +// [diag.unusedElement] The declaration 'E.bar' isn't referenced. const factory baz() = E.foo; +// ^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E.foo(); +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.foo; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedElement, 79, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 123, 5), - error(diag.invalidReferenceToGenerativeEnumConstructor, 158, 5), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 169, 5), - error(diag.unusedLocalVariable, 180, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 185, 3), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -1005,28 +1018,33 @@ void useConstructor() { } test_ConstructorElement_enum_named_primary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E.foo] and [E.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E.foo() { v.foo(); const new bar() : this.foo(); +// ^^^ +// [diag.unusedElement] The declaration 'E.bar' isn't referenced. const factory baz() = E.foo; +// ^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E.foo(); +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.foo; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedElement, 66, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 110, 5), - error(diag.invalidReferenceToGenerativeEnumConstructor, 145, 5), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 156, 5), - error(diag.unusedLocalVariable, 167, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 172, 3), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -1041,29 +1059,34 @@ void useConstructor() { } test_ConstructorElement_enum_named_typeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E.foo] and [E.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E { v.foo(); const E.foo(); const E.bar() : this.foo(); +// ^^^ +// [diag.unusedElement] The declaration 'E.bar' isn't referenced. const factory E.baz() = E.foo; +// ^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E.foo(); +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.foo; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedElement, 75, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 121, 5), - error(diag.invalidReferenceToGenerativeEnumConstructor, 156, 5), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 167, 5), - error(diag.unusedLocalVariable, 178, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 183, 3), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -1078,28 +1101,32 @@ void useConstructor() { } test_ConstructorElement_enum_unnamed_implicit() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E] and [E.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E { v1, v2(), v3.new(); const factory E.other() = E; +// ^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E(); +//^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.new; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 87, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 118, 1), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 125, 5), - error(diag.unusedLocalVariable, 136, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 141, 3), - ]); var element = result.findElement.unnamedConstructor('E'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1115,29 +1142,33 @@ void useConstructor() { } test_ConstructorElement_enum_unnamed_newHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E] and [E.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E { v1, v2(), v3.new(); const new (); const factory other() = E.new; +// ^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E(); +//^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.new; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 101, 5), - error(diag.invalidReferenceToGenerativeEnumConstructor, 136, 1), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 143, 5), - error(diag.unusedLocalVariable, 154, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 159, 3), - ]); var element = result.findElement.unnamedConstructor('E'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1153,28 +1184,32 @@ void useConstructor() { } test_ConstructorElement_enum_unnamed_primary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E] and [E.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E() { v1, v2(), v3.new(); const factory other() = E.new; +// ^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E(); +//^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.new; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 87, 5), - error(diag.invalidReferenceToGenerativeEnumConstructor, 122, 1), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 129, 5), - error(diag.unusedLocalVariable, 140, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 145, 3), - ]); var element = result.findElement.unnamedConstructor('E'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1190,29 +1225,33 @@ void useConstructor() { } test_ConstructorElement_enum_unnamed_typeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E] and [E.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E { v1, v2(), v3.new(); const E(); const factory E.other() = E; +// ^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E(); +//^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.new; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 100, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 131, 1), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 138, 5), - error(diag.unusedLocalVariable, 149, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 154, 3), - ]); var element = result.findElement.unnamedConstructor('E'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1228,29 +1267,33 @@ void useConstructor() { } test_ConstructorElement_enum_unnamed_typeName_explicitNew() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new E] and [E.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. enum E { v1, v2(), v3.new(); const E.new(); const factory E.other() = E.new; +// ^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } void useConstructor() { E(); +//^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. E.new; +//^^^^^ +// [diag.invalidReferenceToGenerativeEnumConstructorTearoff] Generative enum constructors can't be torn off. E a = .new(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.invalidReferenceToGenerativeEnumConstructor, 104, 5), - error(diag.invalidReferenceToGenerativeEnumConstructor, 139, 1), - error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 146, 5), - error(diag.unusedLocalVariable, 157, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 162, 3), - ]); var element = result.findElement.unnamedConstructor('E'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1266,8 +1309,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_named_newHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A.foo] and [A.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A(int it) { new foo(this.it); new bar() : this.foo(0); @@ -1277,12 +1322,10 @@ void useConstructor() { A.foo(0); A.foo; A a = .foo(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 184, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -1296,8 +1339,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_named_primary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A.foo] and [A.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A.foo(int it) { new bar() : this.foo(0); factory baz(int it) = A.foo; @@ -1306,12 +1351,10 @@ void useConstructor() { A.foo(0); A.foo; A a = .foo(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 168, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -1325,8 +1368,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_named_typeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A.foo] and [A.foo] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A(int it) { A.foo(this.it); A.bar() : this.foo(0); @@ -1336,12 +1381,10 @@ void useConstructor() { A.foo(0); A.foo; A a = .foo(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 182, 1), - ]); var element = result.findElement.constructor('foo'); assertElementIndexText(result, element, r''' 10 1:11 |.foo| IS_REFERENCED_BY qualified @@ -1355,8 +1398,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_unnamed_newHead() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A.named(int it) { new (this.it); new bar() : this(0); @@ -1366,12 +1411,10 @@ void useConstructor() { A(0); A.new; A a = .new(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 175, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1385,8 +1428,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_unnamed_primary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A(int it) { new bar() : this(0); factory baz(int it) = A.new; @@ -1395,12 +1440,10 @@ void useConstructor() { A(0); A.new; A a = .new(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 152, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1414,8 +1457,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_unnamed_typeName() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A.named(int it) { A(this.it); A.bar() : this(0); @@ -1425,12 +1470,10 @@ void useConstructor() { A(0); A.new; A a = .new(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 172, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1444,8 +1487,10 @@ void useConstructor() { } test_ConstructorElement_extensionType_unnamed_typeName_explicitNew() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [new A] and [A.new] +// ^^^ +// [diag.deprecatedNewInCommentReference] Using the 'new' keyword in a comment reference is deprecated. extension type A.named(int it) { A.new(this.it); A.bar() : this.new(0); @@ -1455,12 +1500,10 @@ void useConstructor() { A.new(0); A.new; A a = .new(0); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.deprecatedNewInCommentReference, 5, 3), - error(diag.unusedLocalVariable, 184, 1), - ]); var element = result.findElement.unnamedConstructor('A'); assertElementIndexText(result, element, r''' 10 1:11 || IS_REFERENCED_BY qualified @@ -1474,21 +1517,22 @@ void useConstructor() { } test_DynamicElement() async { - await _indexTestUnit(''' + await _indexTestCode(''' dynamic f() {} '''); expect(index.usedElementOffsets, isEmpty); } test_EnumElement_emptyBody() async { - var result = await _indexTestUnit(r''' + await _indexTestCode(r''' enum E; +// ^ +// [diag.enumWithoutConstants] The enum must have at least one enum constant. '''); - assertErrorsInTestResult(result, [error(diag.enumWithoutConstants, 5, 1)]); } test_EnumElement_reference_annotation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; enum E { @@ -1506,7 +1550,6 @@ enum E { @p.E.myConstant void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.enum_('E'); assertElementIndexText(result, element, r''' @@ -1523,7 +1566,7 @@ Prefixes: (unprefixed),p } test_EnumElement_reference_comment() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; enum E { v } @@ -1531,7 +1574,6 @@ enum E { v } /// [E] and [p.E]. void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.enum_('E'); assertElementIndexText(result, element, r''' @@ -1542,7 +1584,7 @@ Prefixes: (unprefixed),p } test_EnumElement_reference_instanceCreation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; enum E { @@ -1552,13 +1594,13 @@ enum E { void f() { const E(); +// ^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. const p.E(); +// ^^^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); - assertErrorsInTestResult(result, [ - error(diag.invalidReferenceToGenerativeEnumConstructor, 75, 1), - error(diag.invalidReferenceToGenerativeEnumConstructor, 88, 3), - ]); var element = result.findElement.enum_('E'); assertElementIndexText(result, element, r''' @@ -1570,7 +1612,7 @@ Prefixes: (unprefixed),p } test_EnumElement_reference_memberAccess() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; enum E { @@ -1583,7 +1625,6 @@ void f() { p.E.foo(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.enum_('E'); assertElementIndexText(result, element, r''' @@ -1594,20 +1635,20 @@ Prefixes: (unprefixed),p } test_EnumElement_reference_namedType() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; enum E { v } void f() { E v1; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v1' isn't used. p.E v2; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v2' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.unusedLocalVariable, 55, 2), - error(diag.unusedLocalVariable, 65, 2), - ]); var element = result.findElement.enum_('E'); assertElementIndexText(result, element, r''' @@ -1618,14 +1659,13 @@ Prefixes: (unprefixed),p } test_ExtensionElement_emptyBody() async { - var result = await _indexTestUnit(r''' + await _indexTestCode(r''' extension E on int; '''); - assertErrorsInTestResult(result, []); } test_ExtensionElement_reference_memberAccess() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension E on int { @@ -1637,7 +1677,6 @@ void f() { p.E.foo(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extension_('E'); assertElementIndexText(result, element, r''' @@ -1648,7 +1687,7 @@ Prefixes: (unprefixed),p } test_ExtensionElement_reference_override() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension E on int { @@ -1660,7 +1699,6 @@ void f() { p.E(0).foo(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extension_('E'); assertElementIndexText(result, element, r''' @@ -1671,7 +1709,7 @@ Prefixes: (unprefixed),p } test_ExtensionTypeElement_hierarchy_extensionType_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension type A(int it) {} @@ -1679,7 +1717,6 @@ extension type A(int it) {} extension type B(int it) implements A {} extension type B_q(int it) implements p.A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extensionType('A'); assertElementIndexText(result, element, r''' @@ -1692,7 +1729,7 @@ Prefixes: (unprefixed),p } test_ExtensionTypeElement_reference_annotation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension type const A(int it) {} @@ -1701,7 +1738,6 @@ extension type const A(int it) {} @p.A(0) void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extensionType('A'); assertElementIndexText(result, element, r''' @@ -1712,7 +1748,7 @@ Prefixes: (unprefixed),p } test_ExtensionTypeElement_reference_comment() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension type A(int it) {} @@ -1720,7 +1756,6 @@ extension type A(int it) {} /// [A] and [p.A]. void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extensionType('A'); assertElementIndexText(result, element, r''' @@ -1731,7 +1766,7 @@ Prefixes: (unprefixed),p } test_ExtensionTypeElement_reference_instanceCreation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension type A(int it) {} @@ -1741,7 +1776,6 @@ void f() { p.A(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extensionType('A'); assertElementIndexText(result, element, r''' @@ -1752,7 +1786,7 @@ Prefixes: (unprefixed),p } test_ExtensionTypeElement_reference_memberAccess() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension type A(int it) { @@ -1764,7 +1798,6 @@ void f() { p.A.foo(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.extensionType('A'); assertElementIndexText(result, element, r''' @@ -1775,20 +1808,20 @@ Prefixes: (unprefixed),p } test_ExtensionTypeElement_reference_namedType() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; extension type A(int it) {} void f() { A v1; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v1' isn't used. p.A v2; +// ^^ +// [diag.unusedLocalVariable] The value of the local variable 'v2' isn't used. } '''); - assertErrorsInTestResult(result, [ - error(diag.unusedLocalVariable, 70, 2), - error(diag.unusedLocalVariable, 80, 2), - ]); var element = result.findElement.extensionType('A'); assertElementIndexText(result, element, r''' @@ -1799,11 +1832,13 @@ Prefixes: (unprefixed),p } test_FieldElement_ofClass_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] class A { int foo; A({this.foo}); +// ^^^ +// [diag.missingDefaultValueForParameter] The parameter 'foo' can't have a value of 'null' because of its type, but the implicit default value is 'null'. A.foo() : foo = 0; void useField() { @@ -1843,9 +1878,11 @@ void useField(A a) { } test_FieldElement_ofClass_instance_synthetic_hasGetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A() : foo = 0; +// ^^^^^^^ +// [diag.initializerForNonExistentField] 'foo' isn't a field in the enclosing class. int get foo => 0; } '''); @@ -1856,9 +1893,11 @@ class A { } test_FieldElement_ofClass_instance_synthetic_hasGetterSetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A() : foo = 0; +// ^^^^^^^ +// [diag.initializerForNonExistentField] 'foo' isn't a field in the enclosing class. int get foo => 0; set foo(_) {} } @@ -1870,9 +1909,11 @@ class A { } test_FieldElement_ofClass_instance_synthetic_hasSetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A() : foo = 0; +// ^^^^^^^ +// [diag.initializerForNonExistentField] 'foo' isn't a field in the enclosing class. set foo(_) {} } '''); @@ -1883,7 +1924,7 @@ class A { } test_FieldElement_ofClass_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] class A { static int foo = 0; @@ -1899,6 +1940,10 @@ void useField() { A.foo; A.foo = 0; A a = .foo; +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. +// ^^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'A'. } '''); @@ -1921,11 +1966,13 @@ void useField() { } test_FieldElement_ofEnum_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [E.foo] enum E { v; int? foo; // a compile-time error +// ^^^ +// [diag.nonFinalFieldInEnum] Enums can only declare final fields. E({this.foo}); void useField() { foo; @@ -1936,6 +1983,8 @@ void useField(E e) { e.foo; e.foo = 0; E(foo: 0); +//^ +// [diag.invalidReferenceToGenerativeEnumConstructor] Generative enum constructors can only be used to create an enum constant. } '''); var field = result.findElement.field('foo'); @@ -1960,7 +2009,7 @@ void useField(E e) { } test_FieldElement_ofEnum_instance_index() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' enum MyEnum { v1, v2, v3 } @@ -1979,10 +2028,12 @@ void f() { } test_FieldElement_ofEnum_instance_synthetic_hasGetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' enum E { v; E() : foo = 0; +// ^^^^^^^ +// [diag.initializerForNonExistentField] 'foo' isn't a field in the enclosing class. int get foo => 0; } '''); @@ -1993,10 +2044,12 @@ enum E { } test_FieldElement_ofEnum_instance_synthetic_hasGetterSetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' enum E { v; E() : foo = 0; +// ^^^^^^^ +// [diag.initializerForNonExistentField] 'foo' isn't a field in the enclosing class. int get foo => 0; set foo(_) {} } @@ -2008,10 +2061,12 @@ enum E { } test_FieldElement_ofEnum_instance_synthetic_hasSetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' enum E { v; E() : foo = 0; +// ^^^^^^^ +// [diag.initializerForNonExistentField] 'foo' isn't a field in the enclosing class. set foo(_) {} } '''); @@ -2022,7 +2077,7 @@ enum E { } test_FieldElement_ofEnum_static_constants() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; /// [v1], [MyEnum.v1], and [p.MyEnum.v1] @@ -2059,7 +2114,7 @@ void f() { } test_FieldElement_ofExtensionType_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] extension type A(int it) { static int foo = 0; @@ -2091,9 +2146,11 @@ void useField() { } test_fieldFormalParameter_noSuchField() async { - await _indexTestUnit(''' + await _indexTestCode(''' class B { B({this.x}) {} +// ^^^^^^ +// [diag.initializingFormalForNonExistentField] 'x' isn't a field in the enclosing class. foo() { B(x: 1); @@ -2104,7 +2161,7 @@ class B { } test_FieldFormalParameterElement_ofConstructor_optionalNamed_dotShorthand() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A({this.test}) : assert(test != null); int? test; @@ -2113,7 +2170,6 @@ void foo() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.fieldFormalParameter('test'); assertElementIndexText(result, element, r''' 36 2:27 |test| IS_READ_BY @@ -2128,20 +2184,21 @@ void foo({T? test}) {} newFile('$testPackageLibPath/b.dart', r''' void foo({T? test}) {} '''); - var result = await _indexTestUnit(r""" + await _indexTestCode(r""" import 'a.dart'; import 'b.dart'; void f() { foo(test: 0); +//^^^ +// [diag.ambiguousImport] The name 'foo' is defined in the libraries 'package:test/a.dart' and 'package:test/b.dart'. } """); // No exceptions. - assertErrorsInTestResult(result, [error(diag.ambiguousImport, 48, 3)]); } test_FormalParameterElement_ofConstructor_primary_optionalNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A({int? test}) { /// [test] this : assert(test != null) { @@ -2168,7 +2225,6 @@ void f() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 30 2:8 |test| IS_REFERENCED_BY @@ -2187,7 +2243,7 @@ void f() { } test_FormalParameterElement_ofConstructor_primary_optionalNamed_genericClass() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A({T? test}) { /// [test] this : assert(test != null) { @@ -2213,7 +2269,6 @@ void f() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 31 2:8 |test| IS_REFERENCED_BY @@ -2231,7 +2286,7 @@ void f() { } test_FormalParameterElement_ofConstructor_primary_optionalPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A([int? test]) { /// [test] this : assert(test != null) { @@ -2258,7 +2313,6 @@ void f() { A _ = .new(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 30 2:8 |test| IS_REFERENCED_BY @@ -2273,7 +2327,7 @@ void f() { } test_FormalParameterElement_ofConstructor_primary_requiredNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A({required int test}) { /// [test] this : assert(test != -1) { @@ -2300,7 +2354,6 @@ void f() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 38 2:8 |test| IS_REFERENCED_BY @@ -2319,7 +2372,7 @@ void f() { } test_FormalParameterElement_ofConstructor_primary_requiredPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A(int test) { /// [test] this : assert(test != -1) { @@ -2346,7 +2399,6 @@ void f() { A _ = .new(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 27 2:8 |test| IS_REFERENCED_BY @@ -2361,7 +2413,7 @@ void f() { } test_FormalParameterElement_ofConstructor_typeName_optionalNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] A({int? test}) : assert(test != null) { @@ -2388,7 +2440,6 @@ void f() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2407,7 +2458,7 @@ void f() { } test_FormalParameterElement_ofConstructor_typeName_optionalNamed_genericClass() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] A({T? test}) : assert(test != null) { @@ -2433,7 +2484,6 @@ void f() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 20 2:8 |test| IS_REFERENCED_BY @@ -2451,7 +2501,7 @@ void f() { } test_FormalParameterElement_ofConstructor_typeName_optionalPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] A([int? test]) : assert(test != null) { @@ -2478,7 +2528,6 @@ void f() { A _ = .new(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2493,7 +2542,7 @@ void f() { } test_FormalParameterElement_ofConstructor_typeName_requiredNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] A({required int test}) : assert(test != -1) { @@ -2520,7 +2569,6 @@ void f() { A _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2539,7 +2587,7 @@ void f() { } test_FormalParameterElement_ofConstructor_typeName_requiredPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] A(int test) : assert(test != -1) { @@ -2566,7 +2614,6 @@ void f() { A _ = .new(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('A').parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2581,7 +2628,7 @@ void f() { } test_FormalParameterElement_ofGenericFunctionType_optionalNamed() async { - var result = await _indexTestUnit(''' + await _indexTestCode(''' typedef F = void Function({int? test}); void g(F f) { @@ -2590,11 +2637,10 @@ void g(F f) { '''); // We should not crash because of reference to "test" - a named parameter // of a generic function type. - assertErrorsInTestResult(result, []); } test_FormalParameterElement_ofGenericFunctionType_optionalNamed_call() async { - var result = await _indexTestUnit(''' + await _indexTestCode(''' typedef F = void Function({T? test}); void g(F f) { @@ -2602,11 +2648,10 @@ void g(F f) { } '''); // No exceptions. - assertErrorsInTestResult(result, []); } test_FormalParameterElement_ofLocalFunction_optionalNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' void f() { /// [test] void foo({int? test}) { @@ -2622,14 +2667,13 @@ void f() { (foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' '''); } test_FormalParameterElement_ofLocalFunction_optionalPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' void f() { /// [test] void foo([int? test]) { @@ -2645,14 +2689,13 @@ void f() { (foo)(2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' '''); } test_FormalParameterElement_ofLocalFunction_requiredNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' void f() { /// [test] void foo({required int test}) { @@ -2668,14 +2711,13 @@ void f() { (foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' '''); } test_FormalParameterElement_ofLocalFunction_requiredPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' void f() { /// [test] void foo(int test) { @@ -2691,14 +2733,13 @@ void f() { (foo)(2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' '''); } test_FormalParameterElement_ofMethod_optionalNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] void foo({int? test}) { @@ -2716,7 +2757,6 @@ void f(A a) { (a.foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2732,7 +2772,7 @@ void f(A a) { } test_FormalParameterElement_ofMethod_optionalNamed_genericClass() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] void foo({T? test}) { @@ -2750,7 +2790,6 @@ void f(A a) { (a.foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 20 2:8 |test| IS_REFERENCED_BY @@ -2765,7 +2804,7 @@ void f(A a) { } test_FormalParameterElement_ofMethod_optionalPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] void foo([int? test]) { @@ -2783,7 +2822,6 @@ void f(A a) { (a.foo)(2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2796,7 +2834,7 @@ void f(A a) { } test_FormalParameterElement_ofMethod_requiredNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] void foo({required int test}) { @@ -2814,7 +2852,6 @@ void f(A a) { (a.foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2830,7 +2867,7 @@ void f(A a) { } test_FormalParameterElement_ofMethod_requiredPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { /// [test] void foo(int test) { @@ -2848,7 +2885,6 @@ void f(A a) { (a.foo)(2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 17 2:8 |test| IS_REFERENCED_BY @@ -2861,7 +2897,7 @@ void f(A a) { } test_FormalParameterElement_ofTopLevelFunction_optionalNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [test] void foo({int? test}) { test; @@ -2876,7 +2912,6 @@ void f() { (foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 5 1:6 |test| IS_REFERENCED_BY @@ -2892,7 +2927,7 @@ void f() { } test_FormalParameterElement_ofTopLevelFunction_optionalNamed_argumentAnywhere() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [test] void foo(int a, int b, {int? test}) { test; @@ -2908,7 +2943,6 @@ void f() { (foo)(0, test: 2, 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 5 1:6 |test| IS_REFERENCED_BY @@ -2924,7 +2958,7 @@ void f() { } test_FormalParameterElement_ofTopLevelFunction_optionalPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [test] void foo([int? test]) { test; @@ -2939,7 +2973,6 @@ void f() { (foo)(2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 5 1:6 |test| IS_REFERENCED_BY @@ -2952,7 +2985,7 @@ void f() { } test_FormalParameterElement_ofTopLevelFunction_requiredNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [test] void foo({required int test}) { test; @@ -2968,7 +3001,6 @@ void f() { (foo)(test: 2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 5 1:6 |test| IS_REFERENCED_BY @@ -2984,7 +3016,7 @@ void f() { } test_FormalParameterElement_ofTopLevelFunction_requiredPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [test] void foo(int test) { test; @@ -3000,7 +3032,6 @@ void f() { (foo)(2); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.parameter('test'); assertElementIndexText(result, element, r''' 5 1:6 |test| IS_REFERENCED_BY @@ -3013,7 +3044,7 @@ void f() { } test_FormalParameterElement_synthetic_leastUpperBound() async { - var result = await _indexTestUnit(''' + await _indexTestCode(''' int f1({int? test}) => 0; int f2({int? test}) => 0; void g(bool b) { @@ -3022,11 +3053,10 @@ void g(bool b) { }'''); // We should not crash because of reference to "test" - a named parameter // of a synthetic LUB FunctionElement created for "f". - assertErrorsInTestResult(result, []); } test_GetterElement_ofClass_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] class A { int get foo => 0; @@ -3051,7 +3081,7 @@ void useGetter(A a) { } test_GetterElement_ofClass_invocation() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { get foo => null; void useGetter() { @@ -3067,7 +3097,7 @@ class A { } test_GetterElement_ofClass_objectPattern() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { int get foo => 0; } @@ -3075,6 +3105,8 @@ class A { void useGetter(Object? x) { if (x case A(foo: 0)) {} if (x case A(: var foo)) {} +// ^^^ +// [diag.unusedLocalVariable] The value of the local variable 'foo' isn't used. } '''); var element = result.findElement.getter('foo'); @@ -3085,7 +3117,7 @@ void useGetter(Object? x) { } test_GetterElement_ofClass_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'test.dart' as p; /// [foo], [A.foo], [p.A.foo] @@ -3114,7 +3146,7 @@ void useGetter() { test_LibraryFragment_reference_export() async { newFile('$testPackageLibPath/lib.dart', ''); - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' export 'lib.dart'; '''); var export = result.findElement.export('package:test/lib.dart'); @@ -3126,8 +3158,10 @@ export 'lib.dart'; test_LibraryFragment_reference_import() async { newFile('$testPackageLibPath/lib.dart', ''); - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'lib.dart'; +// ^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'lib.dart'. '''); var import = result.findElement.import('package:test/lib.dart'); var fragment = import.importedLibrary!.firstFragment; @@ -3138,7 +3172,7 @@ import 'lib.dart'; test_LibraryFragment_reference_part() async { newFile('$testPackageLibPath/my_unit.dart', "part of 'test.dart';"); - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' part 'my_unit.dart'; '''); var fragment = result.findElement.part('package:test/my_unit.dart'); @@ -3155,14 +3189,16 @@ part of 'b.dart'; library lib; part 'a.dart'; '''); - await _indexTestUnit(''' + await _indexTestCode(''' part 'b.dart'; +// ^^^^^^^^ +// [diag.partOfNonPart] The included part 'package:test/b.dart' must have a part-of directive. '''); // No exception, even though a.dart is a part of b.dart part. } test_MethodElement_normal_ofClass_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] class A { void foo() {} @@ -3173,6 +3209,8 @@ class A { foo; if (x case A(foo: _)) {} if (x case A(: var foo)) {} +// ^^^ +// [diag.unusedLocalVariable] The value of the local variable 'foo' isn't used. } } void useFoo(A a) { @@ -3196,7 +3234,7 @@ void useFoo(A a) { } test_MethodElement_normal_ofClass_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'test.dart' as p; /// [foo], [A.foo], [p.A.foo] @@ -3212,6 +3250,8 @@ void useFoo() { A.foo(); A.foo; A a = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'a' isn't used. p.A.foo(); p.A.foo; } @@ -3232,7 +3272,7 @@ void useFoo() { } test_MethodElement_normal_ofEnum_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [E.foo] enum E { v; @@ -3263,7 +3303,7 @@ void useFoo(E e) { } test_MethodElement_normal_ofEnum_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [E.foo] enum E { v; @@ -3290,7 +3330,7 @@ void useFoo() { } test_MethodElement_normal_ofExtension_named_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [E.foo] extension E on int { void foo() {} @@ -3311,7 +3351,7 @@ void useFoo() { } test_MethodElement_normal_ofExtension_named_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [E.foo] extension E on int { static void foo() {} @@ -3332,7 +3372,7 @@ void useFoo() { } test_MethodElement_normal_ofExtension_unnamed_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [int.foo] extension on int { void foo() {} // int @@ -3367,7 +3407,7 @@ void useFoo() { } test_MethodElement_normal_ofExtensionType_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] extension type A(int it) { void foo() {} @@ -3398,7 +3438,7 @@ void useFoo() { } test_MethodElement_normal_ofExtensionType_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] extension type A(int it) { static void foo() {} @@ -3424,7 +3464,7 @@ void useFoo() { } test_MethodElement_normal_ofMixin_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [M.foo] mixin M { void foo() {} @@ -3454,7 +3494,7 @@ void useFoo(M m) { } test_MethodElement_normal_ofMixin_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [M.foo] mixin M { static void foo() {} @@ -3467,6 +3507,10 @@ void useFoo() { M.foo(); M.foo; M m = .foo(); +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'm' isn't used. +// ^^^^^^ +// [diag.useOfVoidResult] This expression has a type of 'void' so its value can't be used. } '''); var element = result.findElement.method('foo'); @@ -3482,7 +3526,7 @@ void useFoo() { } test_MethodElement_operator_ofClass_binary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator +] and [A.operator +] class A { operator +(other) => this; @@ -3506,7 +3550,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofClass_index() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []] and [A.operator []] class A { operator [](i) => null; @@ -3522,7 +3566,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofClass_indexEq() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []=] and [A.operator []=] class A { operator []=(i, v) {} @@ -3538,7 +3582,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofClass_prefix() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator ~] and [A.operator ~] class A { A operator ~() => this; @@ -3556,7 +3600,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofEnum_binary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator +] and [E.operator +] enum E { v; @@ -3565,8 +3609,14 @@ enum E { void useOperator(E e) { e + 1; e += 2; +// ^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'E'. ++e; +//^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'E'. e++; +//^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'E'. } '''); var element = result.findElement.method('+'); @@ -3581,7 +3631,7 @@ void useOperator(E e) { } test_MethodElement_operator_ofEnum_index() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []] and [E.operator []] enum E { v; @@ -3598,7 +3648,7 @@ void useOperator(E e) { } test_MethodElement_operator_ofEnum_indexEq() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []=] and [E.operator []=] enum E { v; @@ -3615,7 +3665,7 @@ void useOperator(E e) { } test_MethodElement_operator_ofEnum_prefix() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator ~] and [E.operator ~] enum E { e; @@ -3634,7 +3684,7 @@ void useOperator(E e) { } test_MethodElement_operator_ofExtension_binary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator +] and [E.operator +] extension E on int { int operator +(int other) => 0; @@ -3652,7 +3702,7 @@ void useOperator(int e) { } test_MethodElement_operator_ofExtension_index() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []] and [E.operator []] extension E on int { int operator [](int index) => 0; @@ -3668,7 +3718,7 @@ void useOperator(int e) { } test_MethodElement_operator_ofExtension_indexEq() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []=] and [E.operator []=] extension E on int { operator []=(int index, int value) {} @@ -3684,7 +3734,7 @@ void useOperator(int e) { } test_MethodElement_operator_ofExtension_prefix() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator ~] and [E.operator ~] extension E on int { int operator ~() => 0; @@ -3702,7 +3752,7 @@ void useOperator(int e) { } test_MethodElement_operator_ofExtensionType_binary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator +] and [A.operator +] extension type A(int it) { int operator +(int other) => 0; @@ -3710,8 +3760,14 @@ extension type A(int it) { void useOperator(A a) { a + 1; a += 2; +// ^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'A'. ++a; +//^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'A'. a++; +//^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'A'. } '''); var element = result.findElement.method('+'); @@ -3726,7 +3782,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofExtensionType_index() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []] and [A.operator []] extension type A(int it) { int operator [](int index) => 0; @@ -3742,7 +3798,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofExtensionType_indexEq() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []=] and [A.operator []=] extension type A(int it) { operator []=(int index, int value) {} @@ -3758,7 +3814,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofExtensionType_prefix() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator ~] and [A.operator ~] extension type A(int it) { int operator ~() => 0; @@ -3776,7 +3832,7 @@ void useOperator(A a) { } test_MethodElement_operator_ofMixin_binary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator +] and [M.operator +] mixin M { int operator +(int other) => 0; @@ -3784,8 +3840,14 @@ mixin M { void useOperator(M m) { m + 1; m += 2; +// ^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'M'. ++m; +//^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'M'. m++; +//^^^ +// [diag.invalidAssignment] A value of type 'int' can't be assigned to a variable of type 'M'. } '''); var element = result.findElement.method('+'); @@ -3800,7 +3862,7 @@ void useOperator(M m) { } test_MethodElement_operator_ofMixin_index() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []] and [M.operator []] mixin M { int operator [](int index) => 0; @@ -3816,7 +3878,7 @@ void useOperator(M m) { } test_MethodElement_operator_ofMixin_indexEq() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator []=] and [M.operator []=] mixin M { operator []=(int index, int value) {} @@ -3832,7 +3894,7 @@ void useOperator(M m) { } test_MethodElement_operator_ofMixin_prefix() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [operator ~] and [M.operator ~] mixin M { int operator ~() => 0; @@ -3850,18 +3912,16 @@ void useOperator(M m) { } test_MixinElement_emptyBody() async { - var result = await _indexTestUnit(r''' + await _indexTestCode(r''' mixin M; '''); - assertErrorsInTestResult(result, []); } test_MixinElement_hierarchy_class_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} class B implements A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3871,11 +3931,10 @@ class B implements A {} } test_MixinElement_hierarchy_class_with() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} class B extends Object with A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3885,11 +3944,10 @@ class B extends Object with A {} } test_MixinElement_hierarchy_classTypeAlias_with() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} class B = Object with A; '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3899,13 +3957,12 @@ class B = Object with A; } test_MixinElement_hierarchy_enum_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} enum E implements A { v } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3915,13 +3972,12 @@ enum E implements A { } test_MixinElement_hierarchy_enum_with() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} enum E with A { v } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3931,11 +3987,10 @@ enum E with A { } test_MixinElement_hierarchy_extensionType_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} extension type E(A it) implements A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3946,11 +4001,10 @@ extension type E(A it) implements A {} } test_MixinElement_hierarchy_mixin_implements() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} mixin M implements A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3960,11 +4014,10 @@ mixin M implements A {} } test_MixinElement_hierarchy_mixin_on() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' mixin A {} mixin M on A {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3974,7 +4027,7 @@ mixin M on A {} } test_MixinElement_reference_annotation() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; mixin A { @@ -3985,7 +4038,6 @@ mixin A { @p.A.myConstant void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -3996,7 +4048,7 @@ Prefixes: (unprefixed),p } test_MixinElement_reference_comment() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; mixin A {} @@ -4004,7 +4056,6 @@ mixin A {} /// [A] and [p.A]. void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -4015,7 +4066,7 @@ Prefixes: (unprefixed),p } test_MixinElement_reference_memberAccess() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; mixin A { @@ -4027,7 +4078,6 @@ void f() { p.A.foo(); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -4038,14 +4088,13 @@ Prefixes: (unprefixed),p } test_MixinElement_reference_namedType() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; mixin A {} void f(A v1, p.A v2) {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.mixin('A'); assertElementIndexText(result, element, r''' @@ -4058,22 +4107,25 @@ Prefixes: (unprefixed),p test_MultiplyDefinedElement() async { newFile('$testPackageLibPath/a1.dart', 'class A {}'); newFile('$testPackageLibPath/a2.dart', 'class A {}'); - await _indexTestUnit(''' + await _indexTestCode(''' import 'a1.dart'; import 'a2.dart'; A v = null; +// [diag.ambiguousImport][column 1][length 1] The name 'A' is defined in the libraries 'package:test/a1.dart' and 'package:test/a2.dart'. '''); } test_NeverElement() async { - await _indexTestUnit(''' + await _indexTestCode(''' Never f() {} +// ^ +// [diag.bodyMightCompleteNormally] The body might complete normally, causing 'null' to be returned, but the return type, 'Never', is a potentially non-nullable type. '''); expect(index.usedElementOffsets, isEmpty); } test_SetterElement_ofClass_instance() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' /// [foo] and [A.foo] class A { set foo(int _) {} @@ -4098,7 +4150,7 @@ void useSetter(A a) { } test_SetterElement_ofClass_static() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'test.dart' as p; /// [foo], [A.foo], [p.A.foo] @@ -4134,23 +4186,37 @@ class D {} class E {} '''); String libP = '${libFile.path};${libFile.path}'; - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'lib.dart'; class X extends A { X(); +//^ +// [diag.notInitializedNonNullableInstanceFieldConstructor] Non-nullable instance field 'field1' must be initialized. +// [diag.notInitializedNonNullableInstanceFieldConstructor] Non-nullable instance field 'field2' must be initialized. X.namedConstructor(); +//^^^^^^^^^^^^^^^^^^ +// [diag.notInitializedNonNullableInstanceFieldConstructor] Non-nullable instance field 'field1' must be initialized. +// [diag.notInitializedNonNullableInstanceFieldConstructor] Non-nullable instance field 'field2' must be initialized. int field1, field2; int get getter1 => null; +// ^^^^ +// [diag.returnOfInvalidTypeFromFunction] A value of type 'Null' can't be returned from the function 'getter1' because it has a return type of 'int'. void set setter1(_) {} void method1() {} static int staticField; +// ^^^^^^^^^^^ +// [diag.notInitializedNonNullableVariable] The non-nullable variable 'staticField' must be initialized. static void staticMethod() {} } class Y extends Object with B, C { +// ^ +// [diag.classUsedAsMixin] The class 'B' can't be used as a mixin because it's neither a mixin class nor a mixin. +// ^ +// [diag.classUsedAsMixin] The class 'C' can't be used as a mixin because it's neither a mixin class nor a mixin. void methodY() {} } @@ -4186,11 +4252,17 @@ class C {} class D {} '''); String libP = '${libFile.path};${libFile.path}'; - await _indexTestUnit(''' + await _indexTestCode(''' import 'lib.dart'; class X = A with B, C; +// ^ +// [diag.classUsedAsMixin] The class 'B' can't be used as a mixin because it's neither a mixin class nor a mixin. +// ^ +// [diag.classUsedAsMixin] The class 'C' can't be used as a mixin because it's neither a mixin class nor a mixin. class Y = A with B implements C, D; +// ^ +// [diag.classUsedAsMixin] The class 'B' can't be used as a mixin because it's neither a mixin class nor a mixin. '''); expect(index.supertypes, hasLength(7)); @@ -4206,8 +4278,10 @@ class Y = A with B implements C, D; } test_subtypes_dynamic() async { - await _indexTestUnit(''' + await _indexTestCode(''' class X extends dynamic { +// ^^^^^^^ +// [diag.extendsNonClass] Classes can only extend other classes. void foo() {} } '''); @@ -4218,7 +4292,7 @@ class X extends dynamic { test_subtypes_enum_implements() async { String libP = '${testFile.path};${testFile.path}'; - await _indexTestUnit(''' + await _indexTestCode(''' class A {} enum E implements A { @@ -4233,7 +4307,7 @@ enum E implements A { test_subtypes_enum_with() async { String libP = '${testFile.path};${testFile.path}'; - await _indexTestUnit(''' + await _indexTestCode(''' mixin M {} enum E with M { @@ -4254,7 +4328,7 @@ class A { } '''); String libP = '${libFile.path};${libFile.path}'; - await _indexTestUnit(''' + await _indexTestCode(''' import 'lib.dart'; extension type X(A it) implements A { @@ -4277,7 +4351,7 @@ extension type A(int it) { } '''); String libP = '${libFile.path};${libFile.path}'; - await _indexTestUnit(''' + await _indexTestCode(''' import 'lib.dart'; extension type X(int it) implements A { @@ -4301,7 +4375,7 @@ class D {} class E {} '''); String libP = '${libFile.path};${libFile.path}'; - await _indexTestUnit(''' + await _indexTestCode(''' import 'lib.dart'; mixin X on A implements B, C {} @@ -4320,7 +4394,7 @@ mixin Y on A, B implements C; } test_SuperFormalParameterElement_ofConstructor_optionalNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A({int? test}); } @@ -4335,7 +4409,6 @@ void f() { B _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('B').parameter('test'); assertElementIndexText(result, element, r''' 58 6:8 |test| IS_REFERENCED_BY @@ -4346,7 +4419,7 @@ void f() { } test_SuperFormalParameterElement_ofConstructor_optionalPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A([int? test]); } @@ -4361,7 +4434,6 @@ void f() { B _ = .new(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('B').parameter('test'); assertElementIndexText(result, element, r''' 58 6:8 |test| IS_REFERENCED_BY @@ -4370,7 +4442,7 @@ void f() { } test_SuperFormalParameterElement_ofConstructor_requiredNamed() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A({required int test}); } @@ -4385,7 +4457,6 @@ void f() { B _ = .new(test: 0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('B').parameter('test'); assertElementIndexText(result, element, r''' 66 6:8 |test| IS_REFERENCED_BY @@ -4396,7 +4467,7 @@ void f() { } test_SuperFormalParameterElement_ofConstructor_requiredPositional() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { A(int test); } @@ -4411,7 +4482,6 @@ void f() { B _ = .new(0); } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.unnamedConstructor('B').parameter('test'); assertElementIndexText(result, element, r''' 55 6:8 |test| IS_REFERENCED_BY @@ -4420,7 +4490,7 @@ void f() { } test_TopLevelFunctionElement() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; void foo() {} @@ -4433,7 +4503,6 @@ void f() { p.foo; } '''); - assertErrorsInTestResult(result, []); var element = result.findElement.topFunction('foo'); assertElementIndexText(result, element, r''' @@ -4448,8 +4517,10 @@ Prefixes: (unprefixed),p } test_TopLevelFunctionElement_loadLibrary() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'dart:math' deferred as math; +// ^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'dart:math'. void f() { math.loadLibrary(); @@ -4463,14 +4534,16 @@ void f() { } test_TopLevelVariableElement_reference() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'test.dart' as p; var foo = 0; /// [foo] and [p.foo]. @foo +// [diag.invalidAnnotation][column 1][length 4] Annotation must be either a const variable reference or const constructor invocation. @p.foo +// [diag.invalidAnnotation][column 1][length 6] Annotation must be either a const variable reference or const constructor invocation. void f() { foo; foo = 0; @@ -4500,8 +4573,10 @@ Prefixes: (unprefixed),p } test_TopLevelVariableElement_reference_combinator_show_hasGetterSetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'test.dart' show foo; +// ^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'test.dart'. int get foo => 0; void set foo(_) {} @@ -4513,8 +4588,10 @@ void set foo(_) {} } test_TopLevelVariableElement_reference_combinator_show_hasSetter() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' import 'test.dart' show foo; +// ^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'test.dart'. void set foo(_) {} '''); @@ -4525,7 +4602,7 @@ void set foo(_) {} } test_TypeAliasElement_legacy_reference() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' typedef void A(); /// [A] void f(A p) {} @@ -4538,7 +4615,7 @@ void f(A p) {} } test_TypeAliasElement_modern_hierarchy_class_extends() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A {} typedef B = A; class C extends B {} @@ -4556,7 +4633,7 @@ class C extends B {} } test_TypeAliasElement_modern_hierarchy_class_implements() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A {} typedef B = A; class C implements B {} @@ -4574,10 +4651,12 @@ class C implements B {} } test_TypeAliasElement_modern_hierarchy_class_with() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A {} typedef B = A; class C extends Object with B {} +// ^ +// [diag.classUsedAsMixin] The class 'A' can't be used as a mixin because it's neither a mixin class nor a mixin. '''); var element = result.findElement.typeAlias('B'); assertElementIndexText(result, element, r''' @@ -4592,7 +4671,7 @@ class C extends Object with B {} } test_TypeAliasElement_modern_reference() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class A { static int field = 0; static void method() {} @@ -4603,6 +4682,8 @@ typedef B = A; /// [B] void f(B p) { B v; +// ^ +// [diag.unusedLocalVariable] The value of the local variable 'v' isn't used. B(); B.field; B.field = 0; @@ -4627,7 +4708,7 @@ void f(B p) { } test_TypeAliasElement_modern_reference_comment() async { - var result = await _indexTestUnit(r''' + var result = await _indexTestCode(r''' import 'test.dart' as p; class A {} @@ -4636,7 +4717,6 @@ typedef B = A; /// [B] and [p.B]. void f() {} '''); - assertErrorsInTestResult(result, []); var element = result.findElement.typeAlias('B'); assertElementIndexText(result, element, r''' 66 6:6 |B| IS_REFERENCED_BY @@ -4651,7 +4731,7 @@ Prefixes: (unprefixed),p } test_usedName_inLibraryIdentifier() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' library aaa.bbb.ccc; class C { var bbb; @@ -4666,7 +4746,7 @@ void f(p) { } test_usedName_qualified_resolved() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class C { var x; } @@ -4685,7 +4765,7 @@ void f(C c) { } test_usedName_qualified_unresolved() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' void f(p) { p.x; p.x = 1; @@ -4701,7 +4781,7 @@ void f(p) { } test_usedName_unqualified_resolved() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' class C { var x; m() { @@ -4720,12 +4800,20 @@ class C { } test_usedName_unqualified_unresolved() async { - var result = await _indexTestUnit(''' + var result = await _indexTestCode(''' void f() { x; +//^ +// [diag.undefinedIdentifier] Undefined name 'x'. x = 1; +//^ +// [diag.undefinedIdentifier] Undefined name 'x'. x += 2; +//^ +// [diag.undefinedIdentifier] Undefined name 'x'. x(); +//^ +// [diag.undefinedFunction] The function 'x' isn't defined. } '''); assertThatName(result, 'x') @@ -4966,12 +5054,15 @@ mixin _IndexMixin on PubPackageResolutionTest { return index.getLibraryFragmentId(unitElement); } - Future _indexTestUnit(String code) async { - var result = await resolveTestCode(code); - + void _indexResult(TestResolvedUnitResult result) { var indexBuilder = indexUnit(result.unit); var indexBytes = indexBuilder.toBuffer(); index = AnalysisDriverUnitIndex.fromBuffer(indexBytes); + } + + Future _indexTestCode(String code) async { + var result = await resolveTestCodeWithDiagnostics(code); + _indexResult(result); return result; } diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart index 618610e123b..f6682b4a62c 100644 --- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart @@ -1383,20 +1383,21 @@ extension E on int { } '''); - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; import 'x.dart'; void f() { 0.foo(); } -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, []); +''', + }); + var result = results[b]!; var node = result.findNode.singleMethodInvocation; assertResolvedNodeText(node, r''' diff --git a/pkg/analyzer/test/src/dart/resolution/library_export_test.dart b/pkg/analyzer/test/src/dart/resolution/library_export_test.dart index 2279d052374..68440f0462f 100644 --- a/pkg/analyzer/test/src/dart/resolution/library_export_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/library_export_test.dart @@ -2,7 +2,6 @@ // 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/diagnostic/diagnostic.dart' as diag; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -533,19 +532,20 @@ ExportDirective } test_inPart_library() async { - newFile('$testPackageLibPath/a.dart', r''' -part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' -part of 'a.dart'; -export 'c.dart'; -'''); - + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); newFile('$testPackageLibPath/c.dart', ''); - var result = await resolveFile2(b); - assertErrorsInTestResult(result, const []); + var results = await resolveFilesWithDiagnostics({ + a: r''' +part 'b.dart'; +''', + b: r''' +part of 'a.dart'; +export 'c.dart'; +''', + }); + var result = results[b]!; var node = result.findNode.export('c.dart'); assertResolvedNodeText(node, r''' @@ -561,17 +561,20 @@ ExportDirective } test_inPart_library_fileDoesNotExist() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; export 'c.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 25, 8)]); +// ^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'c.dart'. +''', + }); + var result = results[b]!; var node = result.findNode.export('c.dart'); assertResolvedNodeText(node, r''' @@ -587,17 +590,20 @@ ExportDirective } test_inPart_noRelativeUri() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; export ':net'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.invalidUri, 25, 6)]); +// ^^^^^^ +// [diag.invalidUri] Invalid URI syntax: ':net'. +''', + }); + var result = results[b]!; var node = result.findNode.export('export'); assertResolvedNodeText(node, r''' @@ -613,19 +619,20 @@ ExportDirective } test_inPart_noRelativeUriStr() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; export '${'foo'}.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [ - error(diag.uriWithInterpolation, 25, 15), - ]); +// ^^^^^^^^^^^^^^^ +// [diag.uriWithInterpolation] URIs can't use string interpolation. +''', + }); + var result = results[b]!; var node = result.findNode.export('export'); assertResolvedNodeText(node, r''' @@ -651,17 +658,20 @@ ExportDirective } test_inPart_noSource() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; export 'foo:bar'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 25, 9)]); +// ^^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'foo:bar'. +''', + }); + var result = results[b]!; var node = result.findNode.export('export'); assertResolvedNodeText(node, r''' @@ -677,21 +687,24 @@ ExportDirective } test_inPart_notLibrary_partOfName() async { - newFile('$testPackageLibPath/a.dart', r''' -part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' -part of 'a.dart'; -export 'c.dart'; -'''); - + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); newFile('$testPackageLibPath/c.dart', r''' part of my.lib; '''); - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.exportOfNonLibrary, 25, 8)]); + var results = await resolveFilesWithDiagnostics({ + a: r''' +part 'b.dart'; +''', + b: r''' +part of 'a.dart'; +export 'c.dart'; +// ^^^^^^^^ +// [diag.exportOfNonLibrary] The exported library 'c.dart' can't have a part-of directive. +''', + }); + var result = results[b]!; var node = result.findNode.export('c.dart'); assertResolvedNodeText(node, r''' @@ -707,21 +720,24 @@ ExportDirective } test_inPart_notLibrary_partOfUri() async { - newFile('$testPackageLibPath/a.dart', r''' -part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' -part of 'a.dart'; -export 'c.dart'; -'''); - + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); newFile('$testPackageLibPath/c.dart', r''' part of 'b.dart'; '''); - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.exportOfNonLibrary, 25, 8)]); + var results = await resolveFilesWithDiagnostics({ + a: r''' +part 'b.dart'; +''', + b: r''' +part of 'a.dart'; +export 'c.dart'; +// ^^^^^^^^ +// [diag.exportOfNonLibrary] The exported library 'c.dart' can't have a part-of directive. +''', + }); + var result = results[b]!; var node = result.findNode.export('c.dart'); assertResolvedNodeText(node, r''' diff --git a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart index dd5a3481d2f..7500c845aeb 100644 --- a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart @@ -2,7 +2,6 @@ // 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/diagnostic/diagnostic.dart' as diag; import 'package:test_reflective_loader/test_reflective_loader.dart'; import 'context_collection_resolution.dart'; @@ -716,22 +715,23 @@ ImportDirective } test_inPart_library() async { - newFile('$testPackageLibPath/a.dart', r''' -part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' -part of 'a.dart'; -import 'c.dart'; -'''); - + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); newFile('$testPackageLibPath/c.dart', ''); - var result = await resolveFile2(b); - // TODO(scheglov): update the hint. - // assertErrorsInTestResult(result, [ - // error(WarningCode.UNUSED_IMPORT, 33, 8), - // ]); + var results = await resolveFilesWithDiagnostics({ + a: r''' +part 'b.dart'; +''', + b: r''' +part of 'a.dart'; +import 'c.dart'; +// ^^^^^^^^ +// [diag.unusedImport] Unused import: 'c.dart'. +''', + }); + + var result = results[b]!; var node = result.findNode.import('c.dart'); assertResolvedNodeText(node, r''' @@ -747,17 +747,20 @@ ImportDirective } test_inPart_library_fileDoesNotExist() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; import 'c.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 25, 8)]); +// ^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'c.dart'. +''', + }); + var result = results[b]!; var node = result.findNode.import('c.dart'); assertResolvedNodeText(node, r''' @@ -773,17 +776,20 @@ ImportDirective } test_inPart_noRelativeUri() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; import ':net'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.invalidUri, 25, 6)]); +// ^^^^^^ +// [diag.invalidUri] Invalid URI syntax: ':net'. +''', + }); + var result = results[b]!; var node = result.findNode.import('import'); assertResolvedNodeText(node, r''' @@ -799,19 +805,20 @@ ImportDirective } test_inPart_noRelativeUriStr() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; import '${'foo'}.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [ - error(diag.uriWithInterpolation, 25, 15), - ]); +// ^^^^^^^^^^^^^^^ +// [diag.uriWithInterpolation] URIs can't use string interpolation. +''', + }); + var result = results[b]!; var node = result.findNode.import('import'); assertResolvedNodeText(node, r''' @@ -837,17 +844,20 @@ ImportDirective } test_inPart_noSource() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; import 'foo:bar'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 25, 9)]); +// ^^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'foo:bar'. +''', + }); + var result = results[b]!; var node = result.findNode.import('import'); assertResolvedNodeText(node, r''' @@ -863,21 +873,25 @@ ImportDirective } test_inPart_notLibrary_partOfName() async { - newFile('$testPackageLibPath/a.dart', r''' -part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' -part of 'a.dart'; -import 'c.dart'; -'''); - + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); newFile('$testPackageLibPath/c.dart', r''' part of my.lib; '''); - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.importOfNonLibrary, 25, 8)]); + var results = await resolveFilesWithDiagnostics({ + a: r''' +part 'b.dart'; +''', + b: r''' +part of 'a.dart'; +import 'c.dart'; +// ^^^^^^^^ +// [diag.importOfNonLibrary] The imported library 'c.dart' can't have a part-of directive. +''', + }); + + var result = results[b]!; var node = result.findNode.import('c.dart'); assertResolvedNodeText(node, r''' @@ -893,21 +907,25 @@ ImportDirective } test_inPart_notLibrary_partOfUri() async { - newFile('$testPackageLibPath/a.dart', r''' -part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' -part of 'a.dart'; -import 'c.dart'; -'''); - + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); newFile('$testPackageLibPath/c.dart', r''' part of 'b.dart'; '''); - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.importOfNonLibrary, 25, 8)]); + var results = await resolveFilesWithDiagnostics({ + a: r''' +part 'b.dart'; +''', + b: r''' +part of 'a.dart'; +import 'c.dart'; +// ^^^^^^^^ +// [diag.importOfNonLibrary] The imported library 'c.dart' can't have a part-of directive. +''', + }); + + var result = results[b]!; var node = result.findNode.import('c.dart'); assertResolvedNodeText(node, r''' diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart index 0703fb2e439..a160682271b 100644 --- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart @@ -344,18 +344,18 @@ const foo = 42; } test_location_partOfDirective() async { - newFile('$testPackageLibPath/test.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var results = await resolveFilesWithDiagnostics({ + testFile: r''' part 'a.dart'; const foo = 42; -'''); - - var a = newFile('$testPackageLibPath/a.dart', r''' +''', + a: r''' @foo part of 'test.dart'; -'''); - - var result = await resolveFile2(a); - assertErrorsInTestResult(result, const []); +''', + }); + var result = results[a]!; _assertAtFoo42(result); } diff --git a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart index 51da3fc4dab..757e8ea2997 100644 --- a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart +++ b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart @@ -206,6 +206,11 @@ class NodeTextExpectationsCollector { methodName: 'resolveFilesWithDiagnostics', argument: _ArgumentMapEntryValue(mapArgument: _ArgumentIndex(0)), ), + _AssertMethod( + className: '_IndexMixin', + methodName: '_indexTestCode', + argument: _ArgumentIndex(0), + ), _AssertMethod( className: 'ResolutionTest', methodName: 'resolveTestCodeWithDiagnostics', diff --git a/pkg/analyzer/test/src/dart/resolution/part_test.dart b/pkg/analyzer/test/src/dart/resolution/part_test.dart index 96cd065d36d..f07be1c17c8 100644 --- a/pkg/analyzer/test/src/dart/resolution/part_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/part_test.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. import 'package:analyzer/src/dart/element/element.dart'; -import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -133,22 +132,20 @@ PartDirective } test_inLibrary_withPart_partOfName() async { - var a = newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' // @dart = 3.4 library my.lib; part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' // @dart = 3.4 part of my.lib; -'''); - - var bResult = await resolveFile2(b); - assertErrorsInTestResult(bResult, const []); - - var result = await resolveFile2(a); - assertErrorsInTestResult(result, const []); +''', + }); + var result = results[a]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -164,22 +161,20 @@ PartDirective } test_inLibrary_withPart_partOfName_preEnhancedParts() async { - var a = newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' // @dart = 3.4 library my.lib; part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' // @dart = 3.4 part of my.lib; -'''); - - var bResult = await resolveFile2(b); - assertErrorsInTestResult(bResult, const []); - - var result = await resolveFile2(a); - assertErrorsInTestResult(result, const []); +''', + }); + var result = results[a]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -195,24 +190,22 @@ PartDirective } test_inLibrary_withPart_partOfName_preEnhancedParts_different() async { - var a = newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' // @dart = 3.4 library foo; part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +// ^^^^^^^^ +// [diag.partOfDifferentLibrary] Expected this library to be part of 'foo', not 'bar'. +''', + b: r''' // @dart = 3.4 part of bar; -'''); - - var bResult = await resolveFile2(b); - assertErrorsInTestResult(bResult, const []); - - var result = await resolveFile2(a); - assertErrorsInTestResult(result, [ - error(diag.partOfDifferentLibrary, 33, 8), - ]); +''', + }); + var result = results[a]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -324,17 +317,20 @@ PartDirective } test_inPart_fileDoesNotExist() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part 'c.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 23, 8)]); +// ^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'package:test/c.dart'. +''', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -350,17 +346,20 @@ PartDirective } test_inPart_noRelativeUri() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part ':net'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.invalidUri, 23, 6)]); +// ^^^^^^ +// [diag.invalidUri] Invalid URI syntax: ':net'. +''', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -376,19 +375,20 @@ PartDirective } test_inPart_noRelativeUriStr() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part '${'foo'}.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [ - error(diag.uriWithInterpolation, 23, 15), - ]); +// ^^^^^^^^^^^^^^^ +// [diag.uriWithInterpolation] URIs can't use string interpolation. +''', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -414,17 +414,20 @@ PartDirective } test_inPart_noSource() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part 'foo:bar'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 23, 9)]); +// ^^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'foo:bar'. +''', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -440,25 +443,26 @@ PartDirective } test_inPart_withPart_partOfName() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var c = getFile('$testPackageLibPath/c.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part 'c.dart'; -'''); - - var c = newFile('$testPackageLibPath/c.dart', r''' +''', + c: r''' part of my.lib; -'''); - - var cResult = await resolveFile2(c); - assertErrorsInTestResult(cResult, [error(diag.partOfName, 8, 6)]); +// ^^^^^^ +// [diag.partOfName] The 'part of' directive can't use a name with the enhanced-parts feature. +''', + }); // We already reported an error above. - var result = await resolveFile2(b); - assertErrorsInTestResult(result, const []); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -474,21 +478,22 @@ PartDirective } test_inPart_withPart_partOfUri() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var c = getFile('$testPackageLibPath/c.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part 'c.dart'; -'''); - - newFile('$testPackageLibPath/c.dart', r''' +''', + c: r''' part of 'b.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, const []); +''', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -504,23 +509,24 @@ PartDirective } test_inPart_withPart_partOfUri_different() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var c = getFile('$testPackageLibPath/c.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part 'c.dart'; -'''); - - newFile('$testPackageLibPath/c.dart', r''' +// ^^^^^^^^ +// [diag.partOfDifferentLibrary] Expected this library to be part of 'package:test/b.dart', not 'package:test/c.dart'. +''', + c: r''' part of 'a.dart'; -'''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [ - error(diag.partOfDifferentLibrary, 23, 8), - ]); +''', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' @@ -536,19 +542,22 @@ PartDirective } test_inPart_withSource_notPart_library() async { - newFile('$testPackageLibPath/a.dart', r''' + var a = getFile('$testPackageLibPath/a.dart'); + var b = getFile('$testPackageLibPath/b.dart'); + var c = getFile('$testPackageLibPath/c.dart'); + var results = await resolveFilesWithDiagnostics({ + a: r''' part 'b.dart'; -'''); - - var b = newFile('$testPackageLibPath/b.dart', r''' +''', + b: r''' part of 'a.dart'; part 'c.dart'; -'''); - - newFile('$testPackageLibPath/c.dart', ''); - - var result = await resolveFile2(b); - assertErrorsInTestResult(result, [error(diag.partOfNonPart, 23, 8)]); +// ^^^^^^^^ +// [diag.partOfNonPart] The included part 'package:test/c.dart' must have a part-of directive. +''', + c: '', + }); + var result = results[b]!; var node = result.findNode.singlePartDirective; assertResolvedNodeText(node, r''' diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart index 33cface2422..8458d8c736e 100644 --- a/pkg/analyzer/test/src/dart/resolution/resolution.dart +++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart @@ -140,13 +140,6 @@ mixin ResolutionTest implements ResourceProviderMixin { diagnosticListener.assertErrors(expectedDiagnostics); } - void assertErrorsInTestResult( - TestResolvedUnitResult result, - List expectedDiagnostics, - ) { - assertErrorsInList(result.diagnostics, expectedDiagnostics); - } - void assertHasTestErrors(TestResolvedUnitResult result) { expect(result.diagnostics, isNotEmpty); } diff --git a/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart index 20b57795ca2..864e22e4f4f 100644 --- a/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart +++ b/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart @@ -2,7 +2,6 @@ // 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/diagnostic/diagnostic.dart' as diag; import 'package:analyzer_testing/package_config_file_builder.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -32,11 +31,12 @@ import 'dart:_internal'; test_wasm_fromJs() async { var packageRootPath = _newPackage('js'); - var file = newFile('$packageRootPath/lib/js.dart', ''' + var file = getFile('$packageRootPath/lib/js.dart'); + await resolveFileWithDiagnostics(file, ''' import 'dart:_wasm'; +// ^^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'dart:_wasm'. '''); - var result = await resolveFile2(file); - assertErrorsInTestResult(result, [error(diag.unusedImport, 7, 12)]); } test_wasm_fromTest() async { @@ -50,11 +50,12 @@ import 'dart:_wasm'; test_wasm_fromUi() async { var packageRootPath = _newPackage('ui'); - var file = newFile('$packageRootPath/lib/ui.dart', ''' + var file = getFile('$packageRootPath/lib/ui.dart'); + await resolveFileWithDiagnostics(file, ''' import 'dart:_wasm'; +// ^^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'dart:_wasm'. '''); - var result = await resolveFile2(file); - assertErrorsInTestResult(result, [error(diag.unusedImport, 7, 12)]); } String _newPackage(String packageName) { diff --git a/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart index 6b3c5111fe6..2fedde7b4d4 100644 --- a/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart +++ b/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart @@ -2,7 +2,6 @@ // 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/diagnostic/diagnostic.dart' as diag; import 'package:analyzer_testing/mock_packages/mock_packages.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -47,16 +46,11 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - var result = await resolveFileCode( - '$testPackageBlazeBinPath/lib/bar.dart', - r''' + var file = getFile('$testPackageBlazeBinPath/lib/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'src/foo.dart'; -''', - ); - - assertErrorsInTestResult(result, [ - error(diag.invalidExportOfInternalElement, 0, 22), - ]); +// [diag.invalidExportOfInternalElement][column 1][length 22] The member 'One' can't be exported as a part of a package's public API. +'''); } void test_exporterIsInBlazeBinLibSrc() async { @@ -65,12 +59,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageBlazeBinPath/lib/src/bar.dart'), - r''' + var file = getFile('$testPackageBlazeBinPath/lib/src/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'foo.dart'; -''', - ); +'''); } void test_exporterIsInGenfilesLib() async { @@ -79,16 +71,11 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - var result = await resolveFileCode( - '$testPackageGenfilesPath/lib/bar.dart', - r''' + var file = getFile('$testPackageGenfilesPath/lib/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'src/foo.dart'; -''', - ); - - assertErrorsInTestResult(result, [ - error(diag.invalidExportOfInternalElement, 0, 22), - ]); +// [diag.invalidExportOfInternalElement][column 1][length 22] The member 'One' can't be exported as a part of a package's public API. +'''); } void test_exporterIsInGenfilesLibSrc() async { @@ -97,12 +84,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageGenfilesPath/lib/src/bar.dart'), - r''' + var file = getFile('$testPackageGenfilesPath/lib/src/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'foo.dart'; -''', - ); +'''); } void test_exporterIsInLib() async { @@ -111,13 +96,11 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - var result = await resolveFileCode('$testPackageLibPath/bar.dart', r''' + var file = getFile('$testPackageLibPath/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'src/foo.dart'; +// [diag.invalidExportOfInternalElement][column 1][length 22] The member 'One' can't be exported as a part of a package's public API. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidExportOfInternalElement, 0, 22), - ]); } void test_exporterIsInLibSrc() async { @@ -126,12 +109,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageLibPath/src/bar.dart'), - r''' + var file = getFile('$testPackageLibPath/src/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'foo.dart'; -''', - ); +'''); } void test_exporterIsInTest() async { @@ -140,12 +121,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$myPackageRootPath/test/foo_test.dart'), - r''' + var file = getFile('$myPackageRootPath/test/foo_test.dart'); + await resolveFileWithDiagnostics(file, r''' export 'package:dart.my/src/foo.dart'; -''', - ); +'''); } void test_internalIsInBlazeBin() async { @@ -203,16 +182,11 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - var result = await resolveFileCode( - '$testPackageDartToolPath/lib/bar.dart', - r''' + var file = getFile('$testPackageDartToolPath/lib/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'package:test/src/foo.dart'; -''', - ); - - assertErrorsInTestResult(result, [ - error(diag.invalidExportOfInternalElement, 0, 35), - ]); +// [diag.invalidExportOfInternalElement][column 1][length 35] The member 'One' can't be exported as a part of a package's public API. +'''); } @FailingTest( @@ -227,12 +201,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageDartToolPath/lib/src/bar.dart'), - r''' + var file = getFile('$testPackageDartToolPath/lib/src/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'package:test/src/foo.dart'; -''', - ); +'''); } void test_exporterInLib() async { @@ -241,13 +213,11 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - var result = await resolveFileCode('$testPackageRootPath/lib/bar.dart', r''' + var file = getFile('$testPackageRootPath/lib/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'package:test/src/foo.dart'; +// [diag.invalidExportOfInternalElement][column 1][length 35] The member 'One' can't be exported as a part of a package's public API. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidExportOfInternalElement, 0, 35), - ]); } void test_exporterInLibSrc() async { @@ -256,12 +226,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageRootPath/lib/src/bar.dart'), - r''' + var file = getFile('$testPackageRootPath/lib/src/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'package:test/src/foo.dart'; -''', - ); +'''); } void test_internalIsInGeneratedLibSrc() async { @@ -310,13 +278,11 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - var result = await resolveFileCode('$testPackageLibPath/bar.dart', r''' + var file = getFile('$testPackageLibPath/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'src/foo.dart'; +// [diag.invalidExportOfInternalElement][column 1][length 22] The member 'One' can't be exported as a part of a package's public API. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidExportOfInternalElement, 0, 22), - ]); } void test_exporterIsInLibSrc() async { @@ -325,12 +291,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageLibPath/src/bar.dart'), - r''' + var file = getFile('$testPackageLibPath/src/bar.dart'); + await resolveFileWithDiagnostics(file, r''' export 'foo.dart'; -''', - ); +'''); } void test_exporterIsInTest() async { @@ -339,12 +303,10 @@ import 'package:meta/meta.dart'; @internal class One {} '''); - await resolveFileWithDiagnostics( - getFile('$testPackageRootPath/test/foo_test.dart'), - r''' + var file = getFile('$testPackageRootPath/test/foo_test.dart'); + await resolveFileWithDiagnostics(file, r''' export 'package:test/src/foo.dart'; -''', - ); +'''); } void test_internalIsLibSrc() async { diff --git a/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart index fa3220b75f6..058a653e76f 100644 --- a/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart +++ b/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart @@ -2,20 +2,22 @@ // 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/diagnostic/diagnostic.dart' as diag; +import 'package:analyzer/file_system/file_system.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; import '../dart/resolution/context_collection_resolution.dart'; +import '../dart/resolution/node_text_expectations.dart'; main() { defineReflectiveSuite(() { defineReflectiveTests(InvalidInternalAnnotationTest); + defineReflectiveTests(UpdateNodeTextExpectations); }); } @reflectiveTest class InvalidInternalAnnotationTest extends PubPackageResolutionTest { - String get testPackageLibSrcFilePath => '$testPackageLibPath/src/foo.dart'; + File get testPackageLibSrcFile => getFile('$testPackageLibPath/src/foo.dart'); @override void setUp() { @@ -28,354 +30,312 @@ version: 0.0.1 } void test_annotationInLib() async { - var result = await resolveFileCode('$testPackageLibPath/foo.dart', r''' + var file = getFile('$testPackageLibPath/foo.dart'); + await resolveFileWithDiagnostics(file, r''' import 'package:meta/meta.dart'; @internal class One {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - ]); } void test_annotationInLib_onLibrary() async { - var result = await resolveFileCode('$testPackageLibPath/foo.dart', r''' + var file = getFile('$testPackageLibPath/foo.dart'); + await resolveFileWithDiagnostics(file, r''' @internal +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. library foo; import 'package:meta/meta.dart'; '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 1, 8), - ]); } void test_annotationInLibSrc() async { - await resolveFileWithDiagnostics(getFile(testPackageLibSrcFilePath), r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal class One {} '''); } void test_annotationInLibSrcSubdirectory() async { - await resolveFileWithDiagnostics( - getFile('$testPackageLibPath/src/foo/foo.dart'), - r''' + var file = getFile('$testPackageLibPath/src/foo/foo.dart'); + await resolveFileWithDiagnostics(file, r''' import 'package:meta/meta.dart'; @internal class One {} -''', - ); +'''); } void test_annotationInLibSubdirectory() async { - var result = await resolveFileCode('$testPackageLibPath/foo/foo.dart', r''' + var file = getFile('$testPackageLibPath/foo/foo.dart'); + await resolveFileWithDiagnostics(file, r''' import 'package:meta/meta.dart'; @internal class One {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - ]); } void test_annotationInTest() async { - await resolveFileWithDiagnostics( - getFile('$testPackageRootPath/test/foo_test.dart'), - r''' + var file = getFile('$testPackageRootPath/test/foo_test.dart'); + await resolveFileWithDiagnostics(file, r''' import 'package:meta/meta.dart'; @internal class One {} -''', - ); +'''); } void test_annotationInTest_extensionType() async { - await resolveFileWithDiagnostics( - getFile('$testPackageRootPath/test/foo_test.dart'), - r''' + var file = getFile('$testPackageRootPath/test/foo_test.dart'); + await resolveFileWithDiagnostics(file, r''' import 'package:meta/meta.dart'; @internal extension type E(int i) {} -''', - ); +'''); } void test_privateClass() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal class _One {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. +// ^^^^ +// [diag.unusedElement] The declaration '_One' isn't referenced. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - error(diag.unusedElement, 49, 4), - ]); } void test_privateConstructor() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class C { @internal C._f(); +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. } '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 46, 8), - ]); } void test_privateEnum() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal enum _E {one} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_E' isn't referenced. +// ^^^ +// [diag.unusedField] The value of the field 'one' isn't used. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - error(diag.unusedElement, 48, 2), - error(diag.unusedField, 52, 3), - ]); } void test_privateEnumValue() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; enum E {@internal _one} +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^^^ +// [diag.unusedField] The value of the field '_one' isn't used. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 42, 8), - error(diag.unusedField, 51, 4), - ]); } void test_privateExtension() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal extension _One on String {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - ]); } void test_privateExtension_unnamed() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal extension on String {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - ]); } void test_privateExtensionType() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal extension type _E(int i) {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_E' isn't referenced. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - error(diag.unusedElement, 58, 2), - ]); } void test_privateField_instance() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class C { @internal int _i = 0; +// ^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedField] The value of the field '_i' isn't used. } '''); - - assertErrorsInTestResult(result, [ - error(diag.unusedField, 59, 2), - error(diag.invalidInternalAnnotation, 59, 6), - ]); } void test_privateField_static() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class C { @internal static int _i = 0; +// ^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedField] The value of the field '_i' isn't used. } '''); - - assertErrorsInTestResult(result, [ - error(diag.unusedField, 66, 2), - error(diag.invalidInternalAnnotation, 66, 6), - ]); } void test_privateGetter() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class C { @internal int get _i => 0; +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_i' isn't referenced. } '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 46, 8), - error(diag.unusedElement, 63, 2), - ]); } void test_privateMethod_instance() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class C { @internal void _f() {} +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_f' isn't referenced. } '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 46, 8), - error(diag.unusedElement, 60, 2), - ]); } void test_privateMethod_static() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class C { @internal static void _f() {} +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_f' isn't referenced. } '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 46, 8), - error(diag.unusedElement, 67, 2), - ]); } void test_privateMixin() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal mixin _One {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. +// ^^^^ +// [diag.unusedElement] The declaration '_One' isn't referenced. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - error(diag.unusedElement, 49, 4), - ]); } void test_privateTopLevelFunction() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal void _f() {} +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_f' isn't referenced. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - error(diag.unusedElement, 48, 2), - ]); } void test_privateTopLevelVariable() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal int _i = 1; +// ^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_i' isn't referenced. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 47, 6), - error(diag.unusedElement, 47, 2), - ]); } void test_privateTypedef() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; @internal typedef _T = void Function(); +// [diag.invalidInternalAnnotation][column 2][length 8] Only public elements in a package's private API can be annotated as being internal. +// ^^ +// [diag.unusedElement] The declaration '_T' isn't referenced. '''); - - assertErrorsInTestResult(result, [ - error(diag.invalidInternalAnnotation, 34, 8), - error(diag.unusedElement, 51, 2), - ]); } void test_publicConstructor_named_privateClass() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class _C { +// ^^ +// [diag.unusedElement] The declaration '_C' isn't referenced. @internal _C.named(); +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. } '''); - - assertErrorsInTestResult(result, [ - error(diag.unusedElement, 39, 2), - error(diag.invalidInternalAnnotation, 47, 8), - ]); } void test_publicConstructor_primary_privateClass() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class _C() { +// ^^ +// [diag.unusedElement] The declaration '_C' isn't referenced. @internal +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. this; } '''); - - assertErrorsInTestResult(result, [ - error(diag.unusedElement, 39, 2), - error(diag.invalidInternalAnnotation, 49, 8), - ]); } void test_publicConstructor_unnamed_privateClass() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class _C { +// ^^ +// [diag.unusedElement] The declaration '_C' isn't referenced. @internal _C(); +// ^^^^^^^^ +// [diag.invalidInternalAnnotation] Only public elements in a package's private API can be annotated as being internal. } '''); - - assertErrorsInTestResult(result, [ - error(diag.unusedElement, 39, 2), - error(diag.invalidInternalAnnotation, 47, 8), - ]); } void test_publicMethod_privateClass() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class _C { +// ^^ +// [diag.unusedElement] The declaration '_C' isn't referenced. @internal void f() {} } '''); - - assertErrorsInTestResult(result, [error(diag.unusedElement, 39, 2)]); } void test_publicMethod_privateClass_static() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; class _C { +// ^^ +// [diag.unusedElement] The declaration '_C' isn't referenced. @internal static void f() {} +// ^ +// [diag.unusedElement] The declaration 'f' isn't referenced. } '''); - - assertErrorsInTestResult(result, [ - error(diag.unusedElement, 39, 2), - error(diag.unusedElement, 68, 1), - ]); } void test_publicMethod_privateExtensionType() async { - var result = await resolveFileCode(testPackageLibSrcFilePath, r''' + await resolveFileWithDiagnostics(testPackageLibSrcFile, r''' import 'package:meta/meta.dart'; extension type _E(int i) { +// ^^ +// [diag.unusedElement] The declaration '_E' isn't referenced. @internal void f() {} } '''); - - assertErrorsInTestResult(result, [error(diag.unusedElement, 48, 2)]); } } diff --git a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart index 3085dff9248..3e8a0398906 100644 --- a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart +++ b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart @@ -2,7 +2,6 @@ // 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/diagnostic/diagnostic.dart' as diag; import 'package:test_reflective_loader/test_reflective_loader.dart'; import '../dart/resolution/context_collection_resolution.dart'; @@ -85,8 +84,11 @@ import 'target.dart'; analysisDriver.removeFile(filePath); await analysisDriver.applyPendingFileChanges(); - var result = await resolveTestFile(); - assertErrorsInTestResult(result, [error(diag.uriDoesNotExist, 7, 13)]); + await resolveFileWithDiagnostics(testFile, ''' +import 'target.dart'; +// ^^^^^^^^^^^^^ +// [diag.uriDoesNotExist] Target of URI doesn't exist: 'target.dart'. +'''); } test_libraryImport_cannotResolve() async { @@ -116,7 +118,6 @@ main() { '''); } - @failingTest test_libraryImport_disappears_when_fixed() async { await resolveTestCodeWithDiagnostics(''' import 'target.dart'; @@ -124,13 +125,17 @@ import 'target.dart'; // [diag.uriDoesNotExist] Target of URI doesn't exist: 'target.dart'. '''); - newFile('$testPackageLibPath/target.dart', ''); + var targetFile = newFile('$testPackageLibPath/target.dart', ''); - // Make sure the error goes away. - // TODO(brianwilkerson): The error does not go away, possibly because the - // file is not being reanalyzed. - var result = await resolveTestFile(); - assertErrorsInTestResult(result, [error(diag.unusedImport, 0, 0)]); + var analysisDriver = driverFor(testFile); + analysisDriver.changeFile2(targetFile); + await analysisDriver.applyPendingFileChanges(); + + await resolveFileWithDiagnostics(testFile, ''' +import 'target.dart'; +// ^^^^^^^^^^^^^ +// [diag.unusedImport] Unused import: 'target.dart'. +'''); } test_part() async {