Skip to content

Commit 469d73b

Browse files
bwilkersonpull[bot]
authored andcommitted
Add support for macros in override information
Change-Id: I308fd21becac53a6ad535b508749a119f8816709 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/353781 Reviewed-by: Keerti Parthasarathy <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent b57817f commit 469d73b

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

pkg/analysis_server/lib/src/computer/computer_overrides.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ class _OverriddenElementsFinder {
136136

137137
/// Add the [OverriddenElements] for this element.
138138
OverriddenElements find() {
139+
_class = _class.augmented?.declaration ?? _class;
139140
_visited.clear();
140141
_addSuperOverrides(_class, withThisType: false);
141142
_visited.clear();

pkg/analysis_server/test/analysis/notification_overrides_test.dart

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:async';
77
import 'package:analysis_server/protocol/protocol.dart';
88
import 'package:analysis_server/protocol/protocol_constants.dart';
99
import 'package:analysis_server/protocol/protocol_generated.dart';
10+
import 'package:analyzer/file_system/file_system.dart';
1011
import 'package:test/test.dart';
1112
import 'package:test_reflective_loader/test_reflective_loader.dart';
1213

@@ -60,6 +61,14 @@ class AnalysisNotificationOverridesTest extends PubPackageAnalysisServerTest {
6061
expect(member!.element.location!.offset, offset);
6162
}
6263

64+
/// Asserts that there is an overridden superclass [OverriddenMember] at the
65+
/// offset of [search] in [override].
66+
void assertHasSuperElementInFile(File file, String search) {
67+
var offset = offsetInFile(file, search);
68+
var member = overrideObject.superclassMember;
69+
expect(member!.element.location!.offset, offset);
70+
}
71+
6372
/// Asserts that there are no overridden members from interfaces.
6473
void assertNoInterfaceMembers() {
6574
expect(overrideObject.interfaceMembers, isNull);
@@ -522,6 +531,50 @@ class C extends B {
522531
assertNoInterfaceMembers();
523532
}
524533

534+
Future<void> test_class_super_method_overriddenFromExtension() async {
535+
var augmentation = newFile('$testPackageLibPath/a.dart', '''
536+
library augment 'test.dart';
537+
538+
augment class A {
539+
m() {} // in A
540+
}
541+
''');
542+
addTestFile('''
543+
import augment 'a.dart';
544+
545+
class A {}
546+
class B extends A {
547+
m() {} // in B
548+
}
549+
''');
550+
await prepareOverrides();
551+
assertHasOverride('m() {} // in B');
552+
assertHasSuperElementInFile(augmentation, 'm() {} // in A');
553+
assertNoInterfaceMembers();
554+
}
555+
556+
Future<void> test_class_super_method_overrideFromExtension() async {
557+
var augmented = newFile('$testPackageLibPath/b.dart', '''
558+
import augment 'test.dart';
559+
560+
class A {
561+
m() {} // in A
562+
}
563+
class B extends A {}
564+
''');
565+
addTestFile('''
566+
library augment 'b.dart';
567+
568+
augment class B {
569+
m() {} // in B
570+
}
571+
''');
572+
await prepareOverrides();
573+
assertHasOverride('m() {} // in B');
574+
assertHasSuperElementInFile(augmented, 'm() {} // in A');
575+
assertNoInterfaceMembers();
576+
}
577+
525578
Future<void> test_class_super_method_privateByPrivate() async {
526579
addTestFile('''
527580
class A {

0 commit comments

Comments
 (0)