mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 02:07:06 +00:00
Add support for macros in override information
Change-Id: I308fd21becac53a6ad535b508749a119f8816709 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/353781 Reviewed-by: Keerti Parthasarathy <keertip@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
26e8244c2a
commit
5eeaf42939
|
@ -136,6 +136,7 @@ class _OverriddenElementsFinder {
|
|||
|
||||
/// Add the [OverriddenElements] for this element.
|
||||
OverriddenElements find() {
|
||||
_class = _class.augmented?.declaration ?? _class;
|
||||
_visited.clear();
|
||||
_addSuperOverrides(_class, withThisType: false);
|
||||
_visited.clear();
|
||||
|
|
|
@ -7,6 +7,7 @@ import 'dart:async';
|
|||
import 'package:analysis_server/protocol/protocol.dart';
|
||||
import 'package:analysis_server/protocol/protocol_constants.dart';
|
||||
import 'package:analysis_server/protocol/protocol_generated.dart';
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
|
@ -60,6 +61,14 @@ class AnalysisNotificationOverridesTest extends PubPackageAnalysisServerTest {
|
|||
expect(member!.element.location!.offset, offset);
|
||||
}
|
||||
|
||||
/// Asserts that there is an overridden superclass [OverriddenMember] at the
|
||||
/// offset of [search] in [override].
|
||||
void assertHasSuperElementInFile(File file, String search) {
|
||||
var offset = offsetInFile(file, search);
|
||||
var member = overrideObject.superclassMember;
|
||||
expect(member!.element.location!.offset, offset);
|
||||
}
|
||||
|
||||
/// Asserts that there are no overridden members from interfaces.
|
||||
void assertNoInterfaceMembers() {
|
||||
expect(overrideObject.interfaceMembers, isNull);
|
||||
|
@ -522,6 +531,50 @@ class C extends B {
|
|||
assertNoInterfaceMembers();
|
||||
}
|
||||
|
||||
Future<void> test_class_super_method_overriddenFromExtension() async {
|
||||
var augmentation = newFile('$testPackageLibPath/a.dart', '''
|
||||
library augment 'test.dart';
|
||||
|
||||
augment class A {
|
||||
m() {} // in A
|
||||
}
|
||||
''');
|
||||
addTestFile('''
|
||||
import augment 'a.dart';
|
||||
|
||||
class A {}
|
||||
class B extends A {
|
||||
m() {} // in B
|
||||
}
|
||||
''');
|
||||
await prepareOverrides();
|
||||
assertHasOverride('m() {} // in B');
|
||||
assertHasSuperElementInFile(augmentation, 'm() {} // in A');
|
||||
assertNoInterfaceMembers();
|
||||
}
|
||||
|
||||
Future<void> test_class_super_method_overrideFromExtension() async {
|
||||
var augmented = newFile('$testPackageLibPath/b.dart', '''
|
||||
import augment 'test.dart';
|
||||
|
||||
class A {
|
||||
m() {} // in A
|
||||
}
|
||||
class B extends A {}
|
||||
''');
|
||||
addTestFile('''
|
||||
library augment 'b.dart';
|
||||
|
||||
augment class B {
|
||||
m() {} // in B
|
||||
}
|
||||
''');
|
||||
await prepareOverrides();
|
||||
assertHasOverride('m() {} // in B');
|
||||
assertHasSuperElementInFile(augmented, 'm() {} // in A');
|
||||
assertNoInterfaceMembers();
|
||||
}
|
||||
|
||||
Future<void> test_class_super_method_privateByPrivate() async {
|
||||
addTestFile('''
|
||||
class A {
|
||||
|
|
Loading…
Reference in a new issue