From 9c6960940689f72677fb60ed7359592c40ab37ed Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Wed, 3 Jun 2026 18:05:12 -0700 Subject: [PATCH] Augment. Rename ExecutableFragmentImpl.isCompleteDeclaration to isComplete. Change-Id: I47d70e93da6e16e4019d61cf62533aba7818b7c7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/509140 Reviewed-by: Paul Berry --- .../dart/analysis/unlinked_api_signature.dart | 6 +-- pkg/analyzer/lib/src/dart/ast/ast.dart | 6 +-- .../lib/src/dart/element/element.dart | 20 ++++---- .../resolver/element_binding_visitor.dart | 2 +- .../lib/src/generated/error_verifier.dart | 16 +++---- .../lib/src/summary2/element_builder.dart | 16 +++---- .../test/src/summary/elements/class_test.dart | 24 +++++----- .../test/src/summary/elements/enum_test.dart | 2 +- .../summary/elements/extension_type_test.dart | 2 +- pkg/analyzer/tool/element/generate.dart | 47 ++++++++----------- 10 files changed, 65 insertions(+), 76 deletions(-) diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart index b32706fd8ca..0c03259c71b 100644 --- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart +++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart @@ -51,7 +51,7 @@ class _UnitApiSignatureComputer { declaration.beginToken, functionExpression.parameters?.endToken ?? declaration.name, ); - signature.addBool(declaration.isCompleteDeclaration); + signature.addBool(declaration.isComplete); _addFunctionBodyModifiers(functionExpression.body); } else if (declaration is MixinDeclarationImpl) { _addMixin(declaration); @@ -93,7 +93,7 @@ class _UnitApiSignatureComputer { _addTokens(node.beginToken, node.parameters.endToken); _addNodeList(node.initializers); _addNode(node.redirectedConstructor); - signature.addBool(node.isCompleteDeclaration); + signature.addBool(node.isComplete); } void _addEnum(EnumDeclarationImpl node) { @@ -144,7 +144,7 @@ class _UnitApiSignatureComputer { void _addMethodDeclaration(MethodDeclarationImpl node) { signature.addInt(_kindMethodDeclaration); _addTokens(node.beginToken, node.parameters?.endToken ?? node.name); - signature.addBool(node.isCompleteDeclaration); + signature.addBool(node.isComplete); _addFunctionBodyModifiers(node.body); signature.addBool(node.invokesSuperSelf); } diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart index da115ec95dc..8b64fb2e00a 100644 --- a/pkg/analyzer/lib/src/dart/ast/ast.dart +++ b/pkg/analyzer/lib/src/dart/ast/ast.dart @@ -7087,7 +7087,7 @@ final class ConstructorDeclarationImpl extends ClassMemberImpl return parameters.beginToken; } - bool get isCompleteDeclaration { + bool get isComplete { if (externalKeyword != null) return true; if (body is! EmptyFunctionBody) return true; if (redirectedConstructor != null || initializers.isNotEmpty) return true; @@ -15317,7 +15317,7 @@ final class FunctionDeclarationImpl extends CompilationUnitMemberImpl _functionExpression = _becomeParentOf(functionExpression); } - bool get isCompleteDeclaration { + bool get isComplete { return externalKeyword != null || functionExpression.body is! EmptyFunctionBody; } @@ -22073,7 +22073,7 @@ final class MethodDeclarationImpl extends ClassMemberImpl (body is EmptyFunctionBodyImpl && !body.semicolon.isSynthetic); } - bool get isCompleteDeclaration { + bool get isComplete { return externalKeyword != null || body is! EmptyFunctionBody; } diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index cc7254c53c6..6f92dd3bf78 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -4468,13 +4468,11 @@ abstract class FragmentImpl implements Fragment { return current; } + @generated @visibleForTesting @trackedInternal Map get flagsForTesting { - return { - 'isAugmentation': isAugmentation, - 'isComplete': isCompleteDeclaration, - }; + return {'isAugmentation': isAugmentation, 'isComplete': isComplete}; } /// The fragments in the augmentation chain that follow this fragment, @@ -4501,13 +4499,13 @@ abstract class FragmentImpl implements Fragment { } @generated - bool get isCompleteDeclaration { - return hasFlag(_FragmentStorageFlag.fragment_isCompleteDeclaration); + bool get isComplete { + return hasFlag(_FragmentStorageFlag.fragment_isComplete); } @generated - set isCompleteDeclaration(bool value) { - setFlag(_FragmentStorageFlag.fragment_isCompleteDeclaration, value); + set isComplete(bool value) { + setFlag(_FragmentStorageFlag.fragment_isComplete, value); } /// Whether the element is private. @@ -4549,7 +4547,7 @@ abstract class FragmentImpl implements Fragment { /// The nearest preceding fragment in the augmentation chain that is complete. FragmentImpl? get nearestPrecedingCompleteFragment { return precedingFragments.firstWhereOrNull((fragment) { - return fragment.isCompleteDeclaration; + return fragment.isComplete; }); } @@ -12070,7 +12068,7 @@ enum _FormalParameterElementFlags { enum _FragmentFlags { isAugmentation(fragment: true), - isCompleteDeclaration(fragment: true); + isComplete(fragment: true); final bool fragment; final _ElementFlagSource element; @@ -12115,7 +12113,7 @@ enum _FragmentStorageFlag { formalParameterFragment_isOriginMixinApplicationClassConstructor, formalParameterFragment_isOriginOtherFragmentOfEnclosing, fragment_isAugmentation, - fragment_isCompleteDeclaration, + fragment_isComplete, libraryFragment_isOriginNotExistingFile, methodFragment_isOriginDeclaration, methodFragment_isOriginInterface, diff --git a/pkg/analyzer/lib/src/dart/resolver/element_binding_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/element_binding_visitor.dart index bdd51f4b824..767a2307826 100644 --- a/pkg/analyzer/lib/src/dart/resolver/element_binding_visitor.dart +++ b/pkg/analyzer/lib/src/dart/resolver/element_binding_visitor.dart @@ -340,7 +340,7 @@ class ElementBindingVisitor extends RecursiveAstVisitor { fragment.isExternal = true; } - fragment.isCompleteDeclaration = node.isCompleteDeclaration; + fragment.isComplete = node.isComplete; fragment.isAsynchronous = body.isAsynchronous; fragment.isGenerator = body.isGenerator; if (node.returnType == null) { diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart index eef23da151b..81c0fa42210 100644 --- a/pkg/analyzer/lib/src/generated/error_verifier.dart +++ b/pkg/analyzer/lib/src/generated/error_verifier.dart @@ -671,7 +671,7 @@ class ErrorVerifier extends RecursiveAstVisitor _checkAugmentationWithoutDeclaration(node.augmentKeyword, fragment); - if (fragment.isAugmentation && fragment.isCompleteDeclaration) { + if (fragment.isAugmentation && fragment.isComplete) { var precedingComplete = fragment.nearestPrecedingCompleteFragment; if (precedingComplete != null) { diagnosticReporter.report( @@ -2748,7 +2748,7 @@ class ErrorVerifier extends RecursiveAstVisitor required PropertyInducingFragmentImpl fragment, }) { if (fragment.inducedGetter case var inducedGetter?) { - if (inducedGetter.isCompleteDeclaration) { + if (inducedGetter.isComplete) { var precedingComplete = inducedGetter.nearestPrecedingCompleteFragment; if (precedingComplete != null) { diagnosticReporter.report( @@ -2765,7 +2765,7 @@ class ErrorVerifier extends RecursiveAstVisitor } if (fragment.inducedSetter case var inducedSetter?) { - if (inducedSetter.isCompleteDeclaration) { + if (inducedSetter.isComplete) { var precedingComplete = inducedSetter.nearestPrecedingCompleteFragment; if (precedingComplete != null) { diagnosticReporter.report( @@ -4704,7 +4704,7 @@ class ErrorVerifier extends RecursiveAstVisitor } var element = node.declaredFragment!.element; - if (element.fragments.any((f) => f.isCompleteDeclaration)) { + if (element.fragments.any((f) => f.isComplete)) { return; } @@ -4851,7 +4851,7 @@ class ErrorVerifier extends RecursiveAstVisitor required Token? augmentKeyword, required FragmentImpl fragment, }) { - if (augmentKeyword != null && fragment.isCompleteDeclaration) { + if (augmentKeyword != null && fragment.isComplete) { var precedingComplete = fragment.nearestPrecedingCompleteFragment; if (precedingComplete != null) { diagnosticReporter.report( @@ -4898,7 +4898,7 @@ class ErrorVerifier extends RecursiveAstVisitor return; } - if (element.fragments.any((f) => f.isCompleteDeclaration)) { + if (element.fragments.any((f) => f.isComplete)) { return; } @@ -5045,7 +5045,7 @@ class ErrorVerifier extends RecursiveAstVisitor (setter?.element.fragments.length ?? 0) > 1; if (getter != null) { - if (getter.element.fragments.none((f) => f.isCompleteDeclaration)) { + if (getter.element.fragments.none((f) => f.isComplete)) { var diagnostic = hasAugmentations ? diag.inducedGetterNotCompleteAfterAugmentations : diag.inducedGetterWithoutBody; @@ -5056,7 +5056,7 @@ class ErrorVerifier extends RecursiveAstVisitor } if (setter != null) { - if (setter.element.fragments.none((f) => f.isCompleteDeclaration)) { + if (setter.element.fragments.none((f) => f.isComplete)) { var diagnostic = hasAugmentations ? diag.inducedSetterNotCompleteAfterAugmentations : diag.inducedSetterWithoutBody; diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart index b71c0c6cdb0..c1b5665e12b 100644 --- a/pkg/analyzer/lib/src/summary2/element_builder.dart +++ b/pkg/analyzer/lib/src/summary2/element_builder.dart @@ -461,7 +461,7 @@ class ElementBuilder { ..isOriginVariable = true ..isAbstract = fieldFragment.isAbstract ..isAugmentation = fieldFragment.isAugmentation - ..isCompleteDeclaration = !fieldFragment.isAbstract + ..isComplete = !fieldFragment.isAbstract ..isStatic = fieldFragment.isStatic; fieldFragment.inducedGetter = getterFragment; instanceFragment.addGetter(getterFragment); @@ -491,7 +491,7 @@ class ElementBuilder { ..isOriginVariable = true ..isAbstract = fieldFragment.isAbstract ..isAugmentation = fieldFragment.isAugmentation - ..isCompleteDeclaration = !fieldFragment.isAbstract + ..isComplete = !fieldFragment.isAbstract ..isStatic = fieldFragment.isStatic; fieldFragment.inducedSetter = setterFragment; instanceFragment.addSetter(setterFragment); @@ -918,7 +918,7 @@ class ElementBuilder { ..isOriginVariable = true ..isAbstract = variableFragment.isAbstract ..isAugmentation = variableFragment.isAugmentation - ..isCompleteDeclaration = + ..isComplete = variableFragment.isExternal || !variableFragment.isAbstract ..isStatic = true; variableFragment.inducedGetter = getterFragment; @@ -948,7 +948,7 @@ class ElementBuilder { ..isOriginVariable = true ..isAbstract = variableFragment.isAbstract ..isAugmentation = variableFragment.isAugmentation - ..isCompleteDeclaration = + ..isComplete = variableFragment.isExternal || !variableFragment.isAbstract ..isStatic = true; variableFragment.inducedSetter = setterFragment; @@ -1404,7 +1404,7 @@ class FragmentBuilder extends ThrowingAstVisitor { fragment.isConst = node.constKeyword != null; fragment.isExternal = node.externalKeyword != null; fragment.isFactory = node.factoryKeyword != null; - fragment.isCompleteDeclaration = node.isCompleteDeclaration; + fragment.isComplete = node.isComplete; fragment.metadata = _buildMetadata(node.metadata); fragment.typeName = node.typeName?.name; @@ -1813,7 +1813,7 @@ class FragmentBuilder extends ThrowingAstVisitor { executableFragment.isAsynchronous = body.isAsynchronous; executableFragment.isExternal = node.externalKeyword != null; executableFragment.isGenerator = body.isGenerator; - executableFragment.isCompleteDeclaration = node.isCompleteDeclaration; + executableFragment.isComplete = node.isComplete; executableFragment.metadata = _buildMetadata(node.metadata); node.declaredFragment = executableFragment; @@ -1955,7 +1955,7 @@ class FragmentBuilder extends ThrowingAstVisitor { executableFragment.isExternal = node.externalKeyword != null || node.body is NativeFunctionBody; executableFragment.isGenerator = node.body.isGenerator; - executableFragment.isCompleteDeclaration = node.isCompleteDeclaration; + executableFragment.isComplete = node.isComplete; executableFragment.metadata = _buildMetadata(node.metadata); node.declaredFragment = executableFragment; @@ -2048,7 +2048,7 @@ class FragmentBuilder extends ThrowingAstVisitor { fragment.isConst = node.constKeyword != null || parent is EnumDeclarationImpl; fragment.isPrimary = true; - fragment.isCompleteDeclaration = true; + fragment.isComplete = true; fragment.typeName = node.typeName.lexeme; node.declaredFragment = fragment; diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart index cad03b69799..e439bc9a42f 100644 --- a/pkg/analyzer/test/src/summary/elements/class_test.dart +++ b/pkg/analyzer/test/src/summary/elements/class_test.dart @@ -18674,7 +18674,7 @@ library '''); } - test_constructor_secondary_augmentation_chain_isCompleteDeclaration_factory() async { + test_constructor_secondary_augmentation_chain_isComplete_factory() async { var library = await buildLibrary(r''' class A { factory A(); @@ -18738,7 +18738,7 @@ library '''); } - test_constructor_secondary_augmentation_chain_isCompleteDeclaration_generative() async { + test_constructor_secondary_augmentation_chain_isComplete_generative() async { var library = await buildLibrary(r''' class A { A(); @@ -34646,7 +34646,7 @@ library '''); } - test_getter_augmentation_chain_isCompleteDeclaration_instance() async { + test_getter_augmentation_chain_isComplete_instance() async { var library = await buildLibrary(r''' class A { int get foo; @@ -35867,7 +35867,7 @@ library '''); } - test_getter_static_augmentation_chain_isCompleteDeclaration() async { + test_getter_static_augmentation_chain_isComplete() async { var library = await buildLibrary(r''' class A { static int get foo; @@ -36751,7 +36751,7 @@ library '''); } - test_isCompleteDeclaration_constructor_complete() async { + test_isComplete_constructor_complete() async { var library = await buildLibrary(r''' class A { A(); @@ -36761,10 +36761,10 @@ class A { var classA = library.classes.singleWhere((e) => e.name == 'A'); var constructor = classA.constructors.single; - expect(constructor.firstFragment.isCompleteDeclaration, isFalse); + expect(constructor.firstFragment.isComplete, isFalse); } - test_isCompleteDeclaration_method_complete() async { + test_isComplete_method_complete() async { var library = await buildLibrary(r''' class A { static void foo() {} @@ -36774,7 +36774,7 @@ class A { var classA = library.classes.singleWhere((e) => e.name == 'A'); var method = classA.methods.singleWhere((e) => e.name == 'foo'); - expect(method.firstFragment.isCompleteDeclaration, isTrue); + expect(method.firstFragment.isComplete, isTrue); } test_method_abstract() async { @@ -40784,7 +40784,7 @@ library '''); } - test_method_augmentation_chain_isCompleteDeclaration_instance() async { + test_method_augmentation_chain_isComplete_instance() async { var library = await buildLibrary(r''' class A { void foo(); @@ -43235,7 +43235,7 @@ library '''); } - test_method_static_augmentation_chain_isCompleteDeclaration() async { + test_method_static_augmentation_chain_isComplete() async { var library = await buildLibrary(r''' class A { static void foo(); @@ -45289,7 +45289,7 @@ library '''); } - test_setter_augmentation_chain_isCompleteDeclaration_instance() async { + test_setter_augmentation_chain_isComplete_instance() async { var library = await buildLibrary(r''' class A { set foo(int _); @@ -47289,7 +47289,7 @@ library '''); } - test_setter_static_augmentation_chain_isCompleteDeclaration() async { + test_setter_static_augmentation_chain_isComplete() async { var library = await buildLibrary(r''' class A { static set foo(int _); diff --git a/pkg/analyzer/test/src/summary/elements/enum_test.dart b/pkg/analyzer/test/src/summary/elements/enum_test.dart index c394462a459..0e36a911a89 100644 --- a/pkg/analyzer/test/src/summary/elements/enum_test.dart +++ b/pkg/analyzer/test/src/summary/elements/enum_test.dart @@ -7413,7 +7413,7 @@ library '''); } - test_constructor_secondary_augmentation_chain_isCompleteDeclaration_factory() async { + test_constructor_secondary_augmentation_chain_isComplete_factory() async { var library = await buildLibrary(r''' enum A { v; diff --git a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart index e035be95aa1..ecbe3e4bd8d 100644 --- a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart +++ b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart @@ -5321,7 +5321,7 @@ library '''); } - test_constructor_secondary_augmentation_chain_isCompleteDeclaration_factory() async { + test_constructor_secondary_augmentation_chain_isComplete_factory() async { var library = await buildLibrary(r''' extension type A(int it) { factory A(); diff --git a/pkg/analyzer/tool/element/generate.dart b/pkg/analyzer/tool/element/generate.dart index bd64f9df901..d6f79162b9f 100644 --- a/pkg/analyzer/tool/element/generate.dart +++ b/pkg/analyzer/tool/element/generate.dart @@ -155,35 +155,26 @@ class _ElementGenerator { var existingGetters = {}; var body = declaration.body as BlockClassBodyImpl; - var isFlagsForTestingGenerated = true; for (var member in body.members) { - if (member is MethodDeclarationImpl) { - if (member.isGetter && - member.name.lexeme == 'flagsForTesting' && - !member.isGenerated) { - isFlagsForTestingGenerated = false; - } - - if (member.isGenerated) { - replacements.add( - _Replacement(offset: member.offset, end: member.end, text: ''), + if (member is MethodDeclarationImpl && member.isGenerated) { + replacements.add( + _Replacement(offset: member.offset, end: member.end, text: ''), + ); + if (member.isGetter) { + var getterElement = member.declaredFragment!.element; + var getterName = getterElement.name!; + existingGetters[getterName] = _ExistingGeneratedGetter( + documentationComment: getterElement.documentationComment, + annotations: member.metadata + .map((annotation) { + return unitResult.content.substring( + annotation.offset, + annotation.end, + ); + }) + .where((source) => source != '@generated') + .toList(), ); - if (member.isGetter) { - var getterElement = member.declaredFragment!.element; - var getterName = getterElement.name!; - existingGetters[getterName] = _ExistingGeneratedGetter( - documentationComment: getterElement.documentationComment, - annotations: member.metadata - .map((annotation) { - return unitResult.content.substring( - annotation.offset, - annotation.end, - ); - }) - .where((source) => source != '@generated') - .toList(), - ); - } } } } @@ -257,7 +248,7 @@ class _ElementGenerator { : flag.elementSource != _ElementFlagSource.none; }).toList(); - if (flagsForTesting.isNotEmpty && isFlagsForTestingGenerated) { + if (flagsForTesting.isNotEmpty) { buffer.writeln(); buffer.writeln('@generated'); if (className != 'ElementImpl' && className != 'FragmentImpl') {