Skip to content

Commit df2d2ed

Browse files
scheglovCommit Queue
authored andcommitted
DeCo. Resolve ExtensionTypeDeclaration when useDeclaringConstructorsAst is true.
Bug: #61701 Change-Id: Iaa13c26787eeba0e1b87a2283a526345d7bac1ba Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/461184 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 29fa988 commit df2d2ed

File tree

7 files changed

+385
-28
lines changed

7 files changed

+385
-28
lines changed

pkg/analyzer/lib/src/dart/analysis/index.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -988,11 +988,18 @@ class _IndexContributor extends GeneralizingAstVisitor {
988988
}
989989

990990
@override
991-
void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
991+
void visitExtensionTypeDeclaration(
992+
covariant ExtensionTypeDeclarationImpl node,
993+
) {
992994
_addSubtype(
993-
node.name.lexeme,
995+
(useDeclaringConstructorsAst
996+
? node.primaryConstructor.typeName
997+
: node.name)
998+
.lexeme,
994999
implementsClause: node.implementsClause,
995-
memberNodes: node.members,
1000+
memberNodes: useDeclaringConstructorsAst
1001+
? node.body.members
1002+
: node.members,
9961003
);
9971004

9981005
var declaredElement = node.declaredFragment!.element;

pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -624,18 +624,34 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
624624
_setOrCreateMetadataElements(fragment, node.metadata);
625625

626626
if (identical(element.firstFragment, fragment)) {
627-
_setOrCreateMetadataElements(
628-
element.representation.firstFragment,
629-
node.representation.fieldMetadata,
630-
);
627+
if (useDeclaringConstructorsAst) {
628+
var formalParameters = node.primaryConstructor.formalParameters;
629+
_setOrCreateMetadataElements(
630+
element.representation.firstFragment,
631+
formalParameters.parameters.first.metadata,
632+
);
633+
} else {
634+
_setOrCreateMetadataElements(
635+
element.representation.firstFragment,
636+
node.representation.fieldMetadata,
637+
);
638+
}
631639
}
632640

633641
_withElementWalker(ElementWalker.forExtensionType(fragment), () {
634642
_withNameScope(() {
635-
_buildTypeParameterElements(node.typeParameters);
636-
node.typeParameters?.accept(this);
643+
var typeParameters = useDeclaringConstructorsAst
644+
? node.primaryConstructor.typeParameters
645+
: node.typeParameters;
646+
_buildTypeParameterElements(typeParameters);
647+
typeParameters?.accept(this);
648+
649+
if (useDeclaringConstructorsAst) {
650+
node.primaryConstructor.accept(this);
651+
} else {
652+
node.representation.accept(this);
653+
}
637654

638-
node.representation.accept(this);
639655
_resolveImplementsClause(
640656
declaration: node,
641657
clause: node.implementsClause,
@@ -644,7 +660,11 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
644660
_defineElements(element.getters);
645661
_defineElements(element.setters);
646662
_defineElements(element.methods);
647-
node.members.accept(this);
663+
if (useDeclaringConstructorsAst) {
664+
node.body.accept(this);
665+
} else {
666+
node.members.accept(this);
667+
}
648668
});
649669
});
650670

pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,16 @@ class DuplicateDefinitionVerifier {
252252
fragment: declaredFragment,
253253
setterScope: definedSetters,
254254
);
255+
} else if (member is ExtensionTypeDeclarationImpl) {
256+
var declaredFragment = member.declaredFragment!;
257+
_checkDuplicateIdentifier(
258+
definedGetters,
259+
useDeclaringConstructorsAst
260+
? member.primaryConstructor.typeName
261+
: member.name,
262+
fragment: declaredFragment,
263+
setterScope: definedSetters,
264+
);
255265
} else if (member is NamedCompilationUnitMemberImpl) {
256266
var declaredFragment = member.declaredFragment!;
257267
_checkDuplicateIdentifier(
@@ -838,7 +848,10 @@ class MemberDuplicateDefinitionVerifier {
838848
);
839849
}
840850

841-
_checkClassMembers(firstFragment, node.members);
851+
_checkClassMembers(
852+
firstFragment,
853+
useDeclaringConstructorsAst ? node.body.members : node.members,
854+
);
842855
}
843856

844857
void _checkMixin(MixinDeclarationImpl node) {
@@ -885,7 +898,12 @@ class MemberDuplicateDefinitionVerifier {
885898
_checkExtensionStatic(declaration);
886899
case ExtensionTypeDeclarationImpl():
887900
var fragment = declaration.declaredFragment!;
888-
_checkClassStatic(fragment, declaration.members);
901+
_checkClassStatic(
902+
fragment,
903+
useDeclaringConstructorsAst
904+
? declaration.body.members
905+
: declaration.members,
906+
);
889907
case MixinDeclarationImpl():
890908
var fragment = declaration.declaredFragment!;
891909
_checkClassStatic(fragment, declaration.members);

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -859,12 +859,16 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
859859
_enclosingClass = firstFragment.asElement2;
860860

861861
_checkForBuiltInIdentifierAsName(
862-
node.name,
862+
useDeclaringConstructorsAst
863+
? node.primaryConstructor.typeName
864+
: node.name,
863865
CompileTimeErrorCode.builtInIdentifierAsExtensionTypeName,
864866
);
865867
_checkForConflictingExtensionTypeTypeVariableErrorCodes(declaredFragment);
866868

867-
var members = node.members;
869+
var members = useDeclaringConstructorsAst
870+
? node.body.members
871+
: node.members;
868872
_checkForRepeatedType(
869873
libraryContext.setOfImplements(firstFragment.asElement2),
870874
node.implementsClause?.interfaces,
@@ -3414,7 +3418,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
34143418
void _checkForExtensionTypeWithAbstractMember(
34153419
ExtensionTypeDeclarationImpl node,
34163420
) {
3417-
for (var member in node.members) {
3421+
for (var member
3422+
in useDeclaringConstructorsAst ? node.body.members : node.members) {
34183423
if (member is MethodDeclarationImpl && !member.isStatic) {
34193424
if (member.isAbstract) {
34203425
diagnosticReporter.atNode(
@@ -4712,7 +4717,11 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
47124717
ExtensionTypeDeclaration node,
47134718
ExtensionTypeFragmentImpl fragment,
47144719
) {
4715-
var typeParameters = node.typeParameters?.typeParameters;
4720+
var typeParameters =
4721+
(useDeclaringConstructorsAst
4722+
? node.primaryConstructor.typeParameters
4723+
: node.typeParameters)
4724+
?.typeParameters;
47164725
if (typeParameters == null) {
47174726
return;
47184727
}

pkg/analyzer/lib/src/generated/resolver.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5095,13 +5095,21 @@ class ScopeResolverVisitor extends UnifyingAstVisitor<void> {
50955095

50965096
nameScope = TypeParameterScope(nameScope, element.typeParameters);
50975097
node.nameScope = nameScope;
5098-
node.typeParameters?.accept(this);
5099-
node.representation.accept(this);
5098+
if (useDeclaringConstructorsAst) {
5099+
node.primaryConstructor.accept(this);
5100+
} else {
5101+
node.typeParameters?.accept(this);
5102+
node.representation.accept(this);
5103+
}
51005104
node.implementsClause?.accept(this);
51015105

51025106
nameScope = InstanceScope(nameScope, element);
51035107
_visitDocumentationComment(node.documentationComment);
5104-
node.members.accept(this);
5108+
if (useDeclaringConstructorsAst) {
5109+
node.body.accept(this);
5110+
} else {
5111+
node.members.accept(this);
5112+
}
51055113
} finally {
51065114
nameScope = outerScope;
51075115
}

pkg/analyzer/lib/src/utilities/extensions/ast.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ extension AstNodeNullableExtension on AstNode? {
123123
List<ClassMember> get classMembers {
124124
var self = this;
125125
return switch (self) {
126+
BlockClassBody() => self.members,
126127
ClassDeclaration() => self.members,
127128
EnumDeclaration() => self.members,
128129
ExtensionDeclaration() => self.members,

0 commit comments

Comments
 (0)