Version 2.15.0-230.0.dev
Merge commit '189aeead472ab6981187b0bfa8e8b23b40e57652' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 5d85616..a5aab9e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -365,7 +365,7 @@
return;
}
- var completion = constructor.displayName;
+ var completion = constructor.name;
if (!hasClassName && className.isNotEmpty) {
if (completion.isEmpty) {
completion = className;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
index 092f566..fa1537b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
@@ -72,7 +72,7 @@
List<Object> get fixArguments {
var buffer = StringBuffer();
buffer.write('super');
- var constructorName = _constructor.displayName;
+ var constructorName = _constructor.name;
if (constructorName.isNotEmpty) {
buffer.write('.');
buffer.write(constructorName);
@@ -86,7 +86,7 @@
@override
Future<void> compute(ChangeBuilder builder) async {
- var constructorName = _constructor.displayName;
+ var constructorName = _constructor.name;
await builder.addDartFileEdit(file, (builder) {
builder.addInsertion(_insertOffset, (builder) {
builder.write(_prefix);
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 7fc3b9f..be7ef60 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -210,9 +210,7 @@
/// Returns the name to display in the UI for the given [Element].
String getElementQualifiedName(Element element) {
var kind = element.kind;
- if (kind == ElementKind.CONSTRUCTOR ||
- kind == ElementKind.FIELD ||
- kind == ElementKind.METHOD) {
+ if (kind == ElementKind.FIELD || kind == ElementKind.METHOD) {
return '${element.enclosingElement!.displayName}.${element.displayName}';
} else if (kind == ElementKind.LIBRARY) {
// Libraries may not have names, so use a path relative to the context root.
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
index 4f2271f..3ca9d77 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
@@ -66,7 +66,7 @@
: searchEngine = workspace.searchEngine,
_element = element,
elementKindName = element.kind.displayName,
- oldName = _getDisplayName(element);
+ oldName = _getOldName(element);
Element get element => _element;
@@ -111,8 +111,10 @@
/// Adds individual edits to [change].
Future<void> fillChange();
- static String _getDisplayName(Element element) {
- if (element is ImportElement) {
+ static String _getOldName(Element element) {
+ if (element is ConstructorElement) {
+ return element.name;
+ } else if (element is ImportElement) {
var prefix = element.prefix;
if (prefix != null) {
return prefix.displayName;
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 7189bd6..05d4116 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -12,7 +12,7 @@
List<Element> getChildren(Element parent, [String? name]) {
var children = <Element>[];
visitChildren(parent, (Element element) {
- if (name == null || element.displayName == name) {
+ if (name == null || _getBaseName(element) == name) {
children.add(element);
}
return false;
@@ -205,3 +205,11 @@
}
return element;
}
+
+String? _getBaseName(Element element) {
+ if (element is PropertyAccessorElement && element.isSetter) {
+ var name = element.name;
+ return name.substring(0, name.length - 1);
+ }
+ return element.name;
+}
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 25f7bdb..708a951 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -121,7 +121,7 @@
// create notification Element
var element = convertElement(engineElement, withNullability: true);
expect(element.kind, ElementKind.CONSTRUCTOR);
- expect(element.name, 'myConstructor');
+ expect(element.name, 'A.myConstructor');
expect(element.typeParameters, isNull);
{
var location = element.location!;
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 55a731a..51ab571 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -267,20 +267,19 @@
return cs;
}
- CompletionSuggestion assertSuggestConstructor(String name,
+ CompletionSuggestion assertSuggestConstructor(String suggestion,
{String? elementName,
int? elemOffset,
String defaultArgListString = _UNCHECKED,
List<int>? defaultArgumentListTextRanges}) {
- var cs = assertSuggest(name,
+ elementName ??= suggestion;
+ var cs = assertSuggest(suggestion,
elemKind: ElementKind.CONSTRUCTOR,
elemOffset: elemOffset,
defaultArgListString: defaultArgListString,
defaultArgumentListTextRanges: defaultArgumentListTextRanges);
var element = cs.element!;
expect(element.kind, equals(ElementKind.CONSTRUCTOR));
- var index = name.indexOf('.');
- elementName ??= index >= 0 ? name.substring(index + 1) : '';
expect(element.name, elementName);
return cs;
}
diff --git a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
index 1ff2987..0e35485 100644
--- a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
@@ -19,12 +19,17 @@
@reflectiveTest
class NamedConstructorContributorTest extends DartCompletionContributorTest {
CompletionSuggestion assertSuggestNamedConstructor(
- String name, String returnType,
- [CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION]) {
- var cs = assertSuggest(name, csKind: kind);
+ String completion,
+ String returnType, {
+ required String elementName,
+ }) {
+ var cs = assertSuggest(
+ completion,
+ csKind: CompletionSuggestionKind.INVOCATION,
+ );
var element = cs.element!;
expect(element.kind, equals(ElementKind.CONSTRUCTOR));
- expect(element.name, equals(name));
+ expect(element.name, equals(elementName));
var param = element.parameters!;
expect(param[0], equals('('));
expect(param[param.length - 1], equals(')'));
@@ -54,7 +59,7 @@
await computeSuggestions();
expect(replacementOffset, completionOffset);
expect(replacementLength, 0);
- assertSuggestNamedConstructor('c', 'X');
+ assertSuggestNamedConstructor('c', 'X', elementName: 'X.c');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('_d');
@@ -79,7 +84,7 @@
await computeSuggestions();
expect(replacementOffset, completionOffset);
expect(replacementLength, 0);
- assertSuggestNamedConstructor('c', 'X');
+ assertSuggestNamedConstructor('c', 'X', elementName: 'X.c');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('_d');
@@ -103,7 +108,7 @@
await computeSuggestions();
expect(replacementOffset, completionOffset);
expect(replacementLength, 0);
- assertSuggestNamedConstructor('c', 'X');
+ assertSuggestNamedConstructor('c', 'X', elementName: 'X.c');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('_d');
@@ -119,7 +124,11 @@
await computeSuggestions();
expect(replacementOffset, completionOffset - 2);
expect(replacementLength, 13);
- assertSuggestNamedConstructor('fromCharCodes', 'String');
+ assertSuggestNamedConstructor(
+ 'fromCharCodes',
+ 'String',
+ elementName: 'String.fromCharCodes',
+ );
assertNotSuggested('isEmpty');
assertNotSuggested('isNotEmpty');
assertNotSuggested('length');
@@ -138,8 +147,8 @@
await computeSuggestions();
expect(replacementOffset, completionOffset);
expect(replacementLength, 0);
- assertSuggestNamedConstructor('c', 'X');
- assertSuggestNamedConstructor('_d', 'X');
+ assertSuggestNamedConstructor('c', 'X', elementName: 'X.c');
+ assertSuggestNamedConstructor('_d', 'X', elementName: 'X._d');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('z');
@@ -157,8 +166,8 @@
await computeSuggestions();
expect(replacementOffset, completionOffset);
expect(replacementLength, 0);
- assertSuggestNamedConstructor('c', 'X');
- assertSuggestNamedConstructor('_d', 'X');
+ assertSuggestNamedConstructor('c', 'X', elementName: 'X.c');
+ assertSuggestNamedConstructor('_d', 'X', elementName: 'X._d');
assertNotSuggested('F1');
assertNotSuggested('T1');
assertNotSuggested('z');
diff --git a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
index 7253f49..0cecf86 100644
--- a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
@@ -170,8 +170,8 @@
''');
await computeSuggestions();
- assertSuggestConstructor('foo', elementName: 'foo');
- assertSuggestConstructor('bar', elementName: 'bar');
+ assertSuggestConstructor('foo', elementName: 'A.foo');
+ assertSuggestConstructor('bar', elementName: 'A.bar');
}
Future<void> test_keyword() async {
@@ -399,7 +399,7 @@
assertSuggestSetter('publicSetter');
assertSuggestConstructor(
'publicConstructor',
- elementName: 'publicConstructor',
+ elementName: 'A.publicConstructor',
);
}
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index a067cd4..492681f 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 2.7.0-dev
+* Updated `ConstructorElement.displayName` to either `Class` or `Class.constructor`.
+
## 2.6.0
* Deprecated `AnalysisResult.state`, check for specific valid or invalid subtypes.
* Deprecated `ResultState`.
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index 612db53..27fbe85 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -57,11 +57,7 @@
_writeType(element.returnType);
_write(' ');
- _write(element.enclosingElement.displayName);
- if (element.displayName.isNotEmpty) {
- _write('.');
- _write(element.displayName);
- }
+ _write(element.displayName);
_writeFormalParameters(
element.parameters,
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 541f9db..1678bf8 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1451,12 +1451,13 @@
@override
String get displayName {
- final linkedData = this.linkedData;
- if (linkedData != null) {
- return linkedData.reference.name;
+ var className = enclosingElement.name;
+ var name = this.name;
+ if (name.isNotEmpty) {
+ return '$className.$name';
+ } else {
+ return className;
}
-
- return super.displayName;
}
@override
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index 6ec3f7e..386da13 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -149,19 +149,21 @@
required bool implicitReceiver,
}) {
var enclosingElement = element.enclosingElement;
- if (_resolver.enclosingExtension != null) {
- _resolver.errorReporter.reportErrorForNode(
- CompileTimeErrorCode
- .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
- nameNode,
- [enclosingElement.displayName],
- );
- } else if (implicitReceiver) {
- _resolver.errorReporter.reportErrorForNode(
- CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
- nameNode,
- [enclosingElement.displayName],
- );
+ if (implicitReceiver) {
+ if (_resolver.enclosingExtension != null) {
+ _resolver.errorReporter.reportErrorForNode(
+ CompileTimeErrorCode
+ .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
+ nameNode,
+ [enclosingElement.displayName],
+ );
+ } else {
+ _resolver.errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
+ nameNode,
+ [enclosingElement.displayName],
+ );
+ }
} else {
_resolver.errorReporter.reportErrorForNode(
CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 3d1d725..e75d2be 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -219,19 +219,21 @@
bool nullReceiver,
) {
var enclosingElement = element.enclosingElement;
- if (_resolver.enclosingExtension != null) {
- _resolver.errorReporter.reportErrorForNode(
- CompileTimeErrorCode
- .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
- nameNode,
- [enclosingElement.displayName],
- );
- } else if (nullReceiver) {
- _resolver.errorReporter.reportErrorForNode(
- CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
- nameNode,
- [enclosingElement.displayName],
- );
+ if (nullReceiver) {
+ if (_resolver.enclosingExtension != null) {
+ _resolver.errorReporter.reportErrorForNode(
+ CompileTimeErrorCode
+ .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
+ nameNode,
+ [enclosingElement.displayName],
+ );
+ } else {
+ _resolver.errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER,
+ nameNode,
+ [enclosingElement.displayName],
+ );
+ }
} else {
_resolver.errorReporter.reportErrorForNode(
CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index e8f3c35..787d963 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -248,18 +248,6 @@
);
}
- void _checkExtensionOverrideStaticMember(
- SimpleIdentifier propertyName,
- ExecutableElement? element,
- ) {
- if (element != null && element.isStatic) {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER,
- propertyName,
- );
- }
- }
-
/// If the [element] is not static, report the error on the [identifier].
void _checkForStaticAccessToInstanceMember(
SimpleIdentifier identifier,
@@ -274,6 +262,33 @@
);
}
+ void _checkForStaticMember(
+ Expression target,
+ SimpleIdentifier propertyName,
+ ExecutableElement? element,
+ ) {
+ if (element != null && element.isStatic) {
+ if (target is ExtensionOverride) {
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER,
+ propertyName,
+ );
+ } else {
+ var enclosingElement = element.enclosingElement;
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER,
+ propertyName, [
+ propertyName,
+ element.kind.displayName,
+ enclosingElement.name ?? '<unnamed>',
+ enclosingElement is ClassElement && enclosingElement.isMixin
+ ? 'mixin'
+ : enclosingElement.kind.displayName,
+ ]);
+ }
+ }
+ }
+
DartType? _computeIndexContextType({
required ExecutableElement? readElement,
required ExecutableElement? writeElement,
@@ -417,21 +432,27 @@
result.getter,
result.getter?.returnType ?? _typeSystem.typeProvider.dynamicType);
- if (hasRead && result.needsGetterError) {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.UNDEFINED_GETTER,
- propertyName,
- [propertyName.name, targetType],
- );
+ if (hasRead) {
+ _checkForStaticMember(target, propertyName, result.getter);
+ if (result.needsGetterError) {
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.UNDEFINED_GETTER,
+ propertyName,
+ [propertyName.name, targetType],
+ );
+ }
}
- if (hasWrite && result.needsSetterError) {
- AssignmentVerifier(_definingLibrary, _errorReporter).verify(
- node: propertyName,
- requested: null,
- recovery: result.getter,
- receiverTypeObject: targetType,
- );
+ if (hasWrite) {
+ _checkForStaticMember(target, propertyName, result.setter);
+ if (result.needsSetterError) {
+ AssignmentVerifier(_definingLibrary, _errorReporter).verify(
+ node: propertyName,
+ requested: null,
+ recovery: result.getter,
+ receiverTypeObject: targetType,
+ );
+ }
}
return PropertyElementResolverResult(
@@ -591,7 +612,7 @@
[memberName, element.name],
);
}
- _checkExtensionOverrideStaticMember(propertyName, readElement);
+ _checkForStaticMember(target, propertyName, readElement);
}
ExecutableElement? writeElement;
@@ -604,7 +625,7 @@
[memberName, element.name],
);
}
- _checkExtensionOverrideStaticMember(propertyName, writeElement);
+ _checkForStaticMember(target, propertyName, writeElement);
}
return PropertyElementResolverResult(
@@ -670,6 +691,7 @@
if (readElement != null) {
readElement = _resolver.toLegacyElement(readElement);
+ _checkForStaticMember(target, propertyName, readElement);
} else {
// We were not able to find the concrete dispatch target.
// But we would like to give the user at least some resolution.
@@ -708,6 +730,7 @@
if (writeElement != null) {
writeElement = _resolver.toLegacyElement(writeElement);
+ _checkForStaticMember(target, propertyName, writeElement);
} else {
// We were not able to find the concrete dispatch target.
// But we would like to give the user at least some resolution.
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index a4f8ff7..2b6b30d 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -2658,15 +2658,6 @@
return;
}
}
- errorReporter.reportErrorForNode(
- CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, name, [
- name.name,
- _getKind(element),
- enclosingElement.name ?? '<unnamed>',
- enclosingElement is ClassElement && enclosingElement.isMixin
- ? 'mixin'
- : enclosingElement.kind.displayName
- ]);
}
}
@@ -4856,30 +4847,6 @@
return null;
}
- /// Return a human-readable representation of the kind of the [element].
- String _getKind(ExecutableElement element) {
- if (element is MethodElement) {
- return 'method';
- } else if (element is PropertyAccessorElement) {
- if (element.isSynthetic) {
- PropertyInducingElement variable = element.variable;
- if (variable is FieldElement) {
- return 'field';
- }
- return 'variable';
- } else if (element.isGetter) {
- return 'getter';
- } else {
- return 'setter';
- }
- } else if (element is ConstructorElement) {
- return 'constructor';
- } else if (element is FunctionElement) {
- return 'function';
- }
- return 'member';
- }
-
/// Return the name of the library that defines given [element].
String _getLibraryName(Element? element) {
if (element == null) {
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 8ce05d6..ba8ebe2 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
name: analyzer
-version: 2.6.0
+version: 2.7.0-dev
description: This package provides a library that performs static analysis of Dart code.
homepage: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index 074ada9..a82b0a3 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -59,12 +59,12 @@
expect(name1!.staticElement, isClassElement);
expect(name1.staticElement!.displayName, 'A');
expect(name2!.staticElement, isConstructorElement);
- expect(name2.staticElement!.displayName, 'named');
+ expect(name2.staticElement!.displayName, 'A.named');
expect(name3, isNull);
if (annotationElement is ConstructorElement) {
expect(annotationElement, same(name2.staticElement));
expect(annotationElement.enclosingElement, name1.staticElement);
- expect(annotationElement.displayName, 'named');
+ expect(annotationElement.displayName, 'A.named');
expect(annotationElement.parameters, isEmpty);
} else {
fail('Expected "annotationElement" is ConstructorElement, '
@@ -86,11 +86,11 @@
expect(name2!.staticElement, isClassElement);
expect(name2.staticElement!.displayName, 'A');
expect(name3!.staticElement, isConstructorElement);
- expect(name3.staticElement!.displayName, 'named');
+ expect(name3.staticElement!.displayName, 'A.named');
if (annotationElement is ConstructorElement) {
expect(annotationElement, same(name3.staticElement));
expect(annotationElement.enclosingElement, name2.staticElement);
- expect(annotationElement.displayName, 'named');
+ expect(annotationElement.displayName, 'A.named');
expect(annotationElement.parameters, isEmpty);
} else {
fail('Expected "annotationElement" is ConstructorElement, '
@@ -139,7 +139,7 @@
expect(name3, isNull);
if (annotationElement is ConstructorElement) {
expect(annotationElement.enclosingElement, name2.staticElement);
- expect(annotationElement.displayName, '');
+ expect(annotationElement.displayName, 'A');
expect(annotationElement.parameters, isEmpty);
} else {
fail('Expected "annotationElement" is ConstructorElement, '
@@ -186,7 +186,7 @@
expect(name3, isNull);
if (annotationElement is ConstructorElement) {
expect(annotationElement.enclosingElement, name1.staticElement);
- expect(annotationElement.displayName, '');
+ expect(annotationElement.displayName, 'A');
expect(annotationElement.parameters, isEmpty);
} else {
fail('Expected "annotationElement" is ConstructorElement, '
@@ -259,7 +259,7 @@
validator(name.prefix, name.identifier, annotation.constructorName,
annotationElement);
} else {
- fail('Uknown "name": ${name.runtimeType} $name');
+ fail('Unknown "name": ${name.runtimeType} $name');
}
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
index 470dbc7..1142a36 100644
--- a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
@@ -98,6 +98,25 @@
);
}
+ test_extension_referring_to_class_member() async {
+ await assertErrorsInCode('''
+class C {
+ static void m() {}
+}
+extension on int {
+ foo(C c) {
+ c.m(); // ERROR
+ }
+}
+test(int i) {
+ i.foo(C());
+}
+''', [
+ error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 71, 1,
+ correctionContains: "class 'C'"),
+ ]);
+ }
+
test_extension_setter() async {
await assertErrorsInCode('''
class C {}
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index c8d4d0e..96d9eb1 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -46,12 +46,14 @@
LibraryElement library,
String expected, {
bool withCodeRanges = false,
+ bool withDisplayName = false,
bool withExportScope = false,
bool withNonSynthetic = false,
}) {
var writer = _ElementWriter(
selfUriStr: '${library.source.uri}',
withCodeRanges: withCodeRanges,
+ withDisplayName: withDisplayName,
withExportScope: withExportScope,
withNonSynthetic: withNonSynthetic,
);
@@ -116,6 +118,7 @@
class _ElementWriter {
final String? selfUriStr;
final bool withCodeRanges;
+ final bool withDisplayName;
final bool withExportScope;
final bool withNonSynthetic;
final StringBuffer buffer = StringBuffer();
@@ -125,6 +128,7 @@
_ElementWriter({
this.selfUriStr,
required this.withCodeRanges,
+ required this.withDisplayName,
required this.withExportScope,
required this.withNonSynthetic,
});
@@ -364,6 +368,7 @@
_writeDocumentation(e);
_writeMetadata(e);
_writeCodeRange(e);
+ _writeDisplayName(e);
var periodOffset = e.periodOffset;
var nameEnd = e.nameEnd;
@@ -399,6 +404,12 @@
}
}
+ void _writeDisplayName(Element e) {
+ if (withDisplayName) {
+ _writelnWithIndent('displayName: ${e.displayName}');
+ }
+ }
+
void _writeDocumentation(Element element) {
var documentation = element.documentationComment;
if (documentation != null) {
@@ -571,7 +582,8 @@
}
void _writeName(Element e) {
- var name = e.displayName;
+ // TODO(scheglov) Use 'name' everywhere.
+ var name = e is ConstructorElement ? e.name : e.displayName;
buffer.write(name);
buffer.write(name.isNotEmpty ? ' @' : '@');
buffer.write(e.nameOffset);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index adbe8fc..1a70ed9 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -1470,18 +1470,6 @@
''');
}
- test_class_constructor_implicit() async {
- var library = await checkLibrary('class C {}');
- checkElementText(library, r'''
-library
- definingUnit
- classes
- class C @6
- constructors
- synthetic @-1
-''');
- }
-
test_class_constructor_implicit_type_params() async {
var library = await checkLibrary('class C<T, U> {}');
checkElementText(library, r'''
@@ -1516,21 +1504,84 @@
''');
}
- test_class_constructors() async {
- var library = await checkLibrary('class C { C.foo(); C.bar(); }');
- checkElementText(library, r'''
+ test_class_constructor_unnamed_implicit() async {
+ var library = await checkLibrary('class C {}');
+ checkElementText(
+ library,
+ r'''
library
definingUnit
classes
class C @6
constructors
- foo @12
- periodOffset: 11
- nameEnd: 15
- bar @21
- periodOffset: 20
- nameEnd: 24
+ synthetic @-1
+ displayName: C
+''',
+ withDisplayName: true);
+ }
+
+ test_class_constructors_named() async {
+ var library = await checkLibrary('''
+class C {
+ C.foo();
+}
''');
+ checkElementText(
+ library,
+ r'''
+library
+ definingUnit
+ classes
+ class C @6
+ constructors
+ foo @14
+ displayName: C.foo
+ periodOffset: 13
+ nameEnd: 17
+''',
+ withDisplayName: true);
+ }
+
+ test_class_constructors_unnamed() async {
+ var library = await checkLibrary('''
+class C {
+ C();
+}
+''');
+ checkElementText(
+ library,
+ r'''
+library
+ definingUnit
+ classes
+ class C @6
+ constructors
+ @12
+ displayName: C
+''',
+ withDisplayName: true);
+ }
+
+ test_class_constructors_unnamed_new() async {
+ var library = await checkLibrary('''
+class C {
+ C.new();
+}
+''');
+ checkElementText(
+ library,
+ r'''
+library
+ definingUnit
+ classes
+ class C @6
+ constructors
+ @14
+ displayName: C
+ periodOffset: 13
+ nameEnd: 17
+''',
+ withDisplayName: true);
}
test_class_documented() async {
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 2c17b0a..38487ab 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -238,7 +238,7 @@
// create notification Element
var element = converter.convertElement(engineElement);
expect(element.kind, plugin.ElementKind.CONSTRUCTOR);
- expect(element.name, 'myConstructor');
+ expect(element.name, 'A.myConstructor');
expect(element.typeParameters, isNull);
{
var location = element.location!;
diff --git a/tests/language/getter/no_setter_test.dart b/tests/language/getter/no_setter_test.dart
index 260b5fc..6fa7014 100644
--- a/tests/language/getter/no_setter_test.dart
+++ b/tests/language/getter/no_setter_test.dart
@@ -15,7 +15,6 @@
// [cfe] Setter not found: 'nextVar'.
this.nextVar = 1;
// ^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
// [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
@@ -30,8 +29,6 @@
// [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_THIS
// [cfe] Expected identifier, but got 'this'.
// ^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
-// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
}
diff --git a/tests/language_2/getter/no_setter_test.dart b/tests/language_2/getter/no_setter_test.dart
index 02bc833..9690f56 100644
--- a/tests/language_2/getter/no_setter_test.dart
+++ b/tests/language_2/getter/no_setter_test.dart
@@ -17,7 +17,6 @@
// [cfe] Setter not found: 'nextVar'.
this.nextVar = 1;
// ^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
// [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
@@ -32,8 +31,6 @@
// [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_THIS
// [cfe] Expected identifier, but got 'this'.
// ^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.INSTANCE_ACCESS_TO_STATIC_MEMBER
-// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
}
diff --git a/tools/VERSION b/tools/VERSION
index 67fc35f..3cd4c9b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 229
+PRERELEASE 230
PRERELEASE_PATCH 0
\ No newline at end of file