Macro. Issue 46392. Use the same Identifier for all augmentations.

Bug: https://github.com/dart-lang/sdk/issues/46392
Change-Id: Ib175cb3f0be6108c4f8b180526dd04e3ef3b2670
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/367280
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2024-05-21 21:01:58 +00:00 committed by Commit Queue
parent c888e760f6
commit 263820ad70
2 changed files with 34 additions and 5 deletions

View file

@ -1616,23 +1616,23 @@ class DeclarationBuilderFromNode {
switch (parentNode) {
case ast.ClassDeclaration():
var parentElement = parentNode.declaredElement!;
var typeElement = parentElement.augmentationTarget ?? parentElement;
var typeElement = parentElement.augmented.declaration;
return _declaredIdentifier(parentNode.name, typeElement);
case ast.EnumDeclaration():
var parentElement = parentNode.declaredElement!;
var typeElement = parentElement.augmentationTarget ?? parentElement;
var typeElement = parentElement.augmented.declaration;
return _declaredIdentifier(parentNode.name, typeElement);
case ast.ExtensionDeclaration():
var parentElement = parentNode.declaredElement!;
var typeElement = parentElement.augmentationTarget ?? parentElement;
var typeElement = parentElement.augmented.declaration;
return _declaredIdentifier2(parentNode.name?.lexeme ?? '', typeElement);
case ast.ExtensionTypeDeclaration():
var parentElement = parentNode.declaredElement!;
var typeElement = parentElement.augmentationTarget ?? parentElement;
var typeElement = parentElement.augmented.declaration;
return _declaredIdentifier(parentNode.name, typeElement);
case ast.MixinDeclaration():
var parentElement = parentNode.declaredElement!;
var typeElement = parentElement.augmentationTarget ?? parentElement;
var typeElement = parentElement.augmented.declaration;
return _declaredIdentifier(parentNode.name, typeElement);
default:
// TODO(scheglov): other parents

View file

@ -1302,6 +1302,35 @@ class MacroCodeGenerationTest extends MacroElementsBaseTest {
);
}
test_class_addMethod2_augmentMethod2() async {
var library = await buildLibrary(r'''
import 'append.dart';
@DeclareInType("""
@{{package:test/append.dart@AugmentDefinition}}('{}')
void foo();""")
@DeclareInType("""
@{{package:test/append.dart@AugmentDefinition}}('{}')
void bar();""")
class A {}
''');
_assertMacroCode(library, r'''
augment library 'package:test/test.dart';
import 'package:test/append.dart' as prefix0;
augment class A {
@prefix0.AugmentDefinition('{}')
void bar();
@prefix0.AugmentDefinition('{}')
void foo();
augment void foo() {}
augment void bar() {}
}
''');
}
test_declarationsPhase_metadata_class_type() async {
var library = await buildLibrary(r'''
import 'code_generation.dart';