Skip to content

Commit a66a42b

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Test for default value referencing extension static method.
Plus implementation for summary2. And couple other fixes around extensions. [email protected], [email protected] Change-Id: Ibb90a6f2fc32ac4ef71023db1f51cdf8d3265022 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110363 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 5713caa commit a66a42b

File tree

7 files changed

+57
-9
lines changed

7 files changed

+57
-9
lines changed

pkg/analyzer/lib/src/summary2/default_value_resolver.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class DefaultValueResolver {
2828

2929
void resolve() {
3030
for (CompilationUnitElementImpl unit in _libraryElement.units) {
31+
for (var extensionElement in unit.extensions) {
32+
_extension(extensionElement);
33+
}
34+
3135
for (var classElement in unit.mixins) {
3236
_class(classElement);
3337
}
@@ -67,6 +71,13 @@ class DefaultValueResolver {
6771
_parameters(element.parameters);
6872
}
6973

74+
void _extension(ExtensionElement extensionElement) {
75+
for (var element in extensionElement.methods) {
76+
_setScopeFromElement(element);
77+
_method(element);
78+
}
79+
}
80+
7081
void _function(FunctionElementImpl element) {
7182
_astResolver = null;
7283
_executableElement = element;

pkg/analyzer/lib/src/summary2/informative_data.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class _SetInformativeId extends SimpleAstVisitor<void> {
153153
codeOffset: node.offset,
154154
codeLength: node.length,
155155
documentationComment_tokens: _nodeCommentTokens(node),
156-
nameOffset: node.name.offset,
156+
nameOffset: node.name?.offset ?? 0,
157157
),
158158
);
159159

pkg/analyzer/lib/src/summary2/lazy_ast.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ class LazyExtensionDeclaration {
707707
ExtensionDeclaration node,
708708
) {
709709
var lazy = get(node);
710-
if (lazy != null) {
710+
if (lazy?.data != null) {
711711
return context.getInformativeData(lazy.data)?.codeLength ?? 0;
712712
}
713713
return node.length;
@@ -718,7 +718,7 @@ class LazyExtensionDeclaration {
718718
ExtensionDeclaration node,
719719
) {
720720
var lazy = get(node);
721-
if (lazy != null) {
721+
if (lazy?.data != null) {
722722
return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
723723
}
724724
return node.offset;
@@ -729,7 +729,7 @@ class LazyExtensionDeclaration {
729729
ExtensionDeclaration node,
730730
) {
731731
var lazy = get(node);
732-
if (lazy != null && !lazy._hasDocumentationComment) {
732+
if (lazy?.data != null && !lazy._hasDocumentationComment) {
733733
node.documentationComment = context.createComment(lazy.data);
734734
lazy._hasDocumentationComment = true;
735735
}
@@ -740,7 +740,7 @@ class LazyExtensionDeclaration {
740740
ExtensionDeclaration node,
741741
) {
742742
var lazy = get(node);
743-
if (lazy != null && !lazy._hasExtendedType) {
743+
if (lazy?.data != null && !lazy._hasExtendedType) {
744744
(node as ExtensionDeclarationImpl).extendedType = reader.readNode(
745745
lazy.data.extensionDeclaration_extendedType,
746746
);
@@ -753,7 +753,7 @@ class LazyExtensionDeclaration {
753753
ExtensionDeclaration node,
754754
) {
755755
var lazy = get(node);
756-
if (lazy != null && !lazy._hasMembers) {
756+
if (lazy?.data != null && !lazy._hasMembers) {
757757
var dataList = lazy.data.extensionDeclaration_members;
758758
for (var i = 0; i < dataList.length; ++i) {
759759
var data = dataList[i];
@@ -768,7 +768,7 @@ class LazyExtensionDeclaration {
768768
ExtensionDeclaration node,
769769
) {
770770
var lazy = get(node);
771-
if (lazy != null && !lazy._hasMetadata) {
771+
if (lazy?.data != null && !lazy._hasMetadata) {
772772
var dataList = lazy.data.annotatedNode_metadata;
773773
for (var i = 0; i < dataList.length; ++i) {
774774
var data = dataList[i];

pkg/analyzer/lib/src/summary2/reference_resolver.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,7 @@ class ReferenceResolver extends ThrowingAstVisitor<void> {
181181
node.typeParameters?.accept(this);
182182
node.extendedType.accept(this);
183183

184-
// TODO(scheglov) do we need a scope?
185-
// scope = new ClassScope(scope, element);
184+
scope = new ExtensionScope(scope, element);
186185
LinkingNodeContext(node, scope);
187186

188187
node.members.accept(this);

pkg/analyzer/lib/src/test_utilities/find_element.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,15 @@ class FindElement {
344344
findIn(function.parameters);
345345
}
346346

347+
for (var extension_ in unitElement.extensions) {
348+
for (var method in extension_.methods) {
349+
findIn(method.parameters);
350+
}
351+
for (var accessor in extension_.accessors) {
352+
findIn(accessor.parameters);
353+
}
354+
}
355+
347356
for (var class_ in unitElement.types) {
348357
for (var constructor in class_.constructors) {
349358
findIn(constructor.parameters);

pkg/analyzer/test/src/summary/resynthesize_ast_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class ResynthesizeAstStrongTest extends ResynthesizeTestStrategyTwoPhase
3838
@failingTest // See dartbug.com/33441
3939
test_const_set_inferredType() => super.test_const_set_inferredType();
4040

41+
@override
42+
@failingTest
43+
test_defaultValue_refersToExtension_method() async {
44+
await super.test_defaultValue_refersToExtension_method();
45+
}
46+
4147
@override
4248
@failingTest
4349
test_defaultValue_refersToGenericClass() async {

pkg/analyzer/test/src/summary/resynthesize_common.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5124,6 +5124,29 @@ void defaultF<T>(T v) {}
51245124
''');
51255125
}
51265126

5127+
test_defaultValue_refersToExtension_method() async {
5128+
featureSet = enableExtensionMethods;
5129+
var library = await checkLibrary('''
5130+
class A {}
5131+
extension E on A {
5132+
static void f() {}
5133+
static void g([Object p = f]) {}
5134+
}
5135+
''');
5136+
checkElementText(
5137+
library,
5138+
r'''
5139+
class A {
5140+
}
5141+
extension E on A {
5142+
static void f() {}
5143+
static void g([Object p =
5144+
f/*location: test.dart;E;f*/]) {}
5145+
}
5146+
''',
5147+
withTypes: true);
5148+
}
5149+
51275150
test_defaultValue_refersToGenericClass() async {
51285151
var library = await checkLibrary('''
51295152
class B<T1, T2> {

0 commit comments

Comments
 (0)