mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 16:37:43 +00:00
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:
parent
c888e760f6
commit
263820ad70
|
@ -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
|
||||
|
|
|
@ -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';
|
||||
|
|
Loading…
Reference in a new issue