Skip to content

Commit 1fee07c

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Fix RangeError (-1) when using InheritanceManager3.getMember(forMixinIndex) on extension type.
Change-Id: If4d01b86de94a5789d5fa12b85c429f1284d1e20 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/453600 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]>
1 parent 3fa73a3 commit 1fee07c

File tree

2 files changed

+113
-22
lines changed

2 files changed

+113
-22
lines changed

pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ class InheritanceManager3 {
207207
InternalExecutableElement? result;
208208
if (forSuper) {
209209
if (element is ExtensionTypeElementImpl) {
210-
result = null;
210+
return null;
211211
} else {
212212
var superImplemented = interface.superImplemented;
213213
if (forMixinIndex >= 0) {
@@ -216,7 +216,7 @@ class InheritanceManager3 {
216216
result = superImplemented.last[name];
217217
} else {
218218
assert(element.name == 'Object');
219-
result = null;
219+
return null;
220220
}
221221
}
222222
} else if (concrete) {
@@ -225,26 +225,6 @@ class InheritanceManager3 {
225225
result = interface.map[name];
226226
}
227227

228-
// if (forSuper) {
229-
// if (element is ExtensionTypeElementImpl) {
230-
// return null;
231-
// }
232-
// var superImplemented = interface.superImplemented;
233-
// if (forMixinIndex >= 0) {
234-
// return superImplemented[forMixinIndex][name];
235-
// }
236-
// if (superImplemented.isNotEmpty) {
237-
// return superImplemented.last[name];
238-
// } else {
239-
// assert(element.name == 'Object');
240-
// return null;
241-
// }
242-
// }
243-
// if (concrete) {
244-
// return interface.implemented[name];
245-
// }
246-
// var result = interface.map[name];
247-
248228
globalResultRequirements?.record_interface_getMember(
249229
element: element,
250230
nameObj: name,

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29290,6 +29290,117 @@ extension type A(int it) {
2929029290
);
2929129291
}
2929229292

29293+
test_dependency_extensionType_instanceMethod_change_lookUpMethod_inherited() async {
29294+
configuration
29295+
..withGetErrorsEvents = false
29296+
..withStreamResolvedUnitResults = false;
29297+
29298+
_ManualRequirements.install((state) {
29299+
var A = state.singleUnit.scopeInterfaceElement('A');
29300+
A.thisType.lookUpMethod(
29301+
'foo',
29302+
A.library,
29303+
concrete: true,
29304+
inherited: true,
29305+
);
29306+
});
29307+
29308+
await _runChangeScenarioTA(
29309+
initialA: r'''
29310+
extension type A(int it) {
29311+
int foo() {}
29312+
}
29313+
''',
29314+
testCode: r'''
29315+
import 'a.dart';
29316+
''',
29317+
operation: _FineOperationTestFileGetErrors(),
29318+
expectedInitialEvents: r'''
29319+
[status] working
29320+
[operation] linkLibraryCycle SDK
29321+
[operation] linkLibraryCycle
29322+
package:test/a.dart
29323+
hashForRequirements: #H0
29324+
declaredExtensionTypes
29325+
A: #M0
29326+
declaredFields
29327+
it: #M1
29328+
declaredGetters
29329+
it: #M2
29330+
declaredMethods
29331+
foo: #M3
29332+
interface: #M4
29333+
map
29334+
foo: #M3
29335+
it: #M2
29336+
implemented
29337+
foo: #M3
29338+
it: #M2
29339+
exportMapId: #M5
29340+
exportMap
29341+
A: #M0
29342+
requirements
29343+
[operation] linkLibraryCycle
29344+
package:test/test.dart
29345+
hashForRequirements: #H1
29346+
exportMapId: #M6
29347+
requirements
29348+
[operation] analyzeFile
29349+
file: /home/test/lib/test.dart
29350+
library: /home/test/lib/test.dart
29351+
[operation] analyzedLibrary
29352+
file: /home/test/lib/test.dart
29353+
requirements
29354+
libraries
29355+
package:test/a.dart
29356+
libraryMetadataId: #M7
29357+
exportMapId: #M5
29358+
exportMap
29359+
A: #M0
29360+
A=: <null>
29361+
reExportDeprecatedOnly
29362+
A: false
29363+
[status] idle
29364+
''',
29365+
updatedA: r'''
29366+
extension type A(int it) {
29367+
double foo() {}
29368+
}
29369+
''',
29370+
expectedUpdatedEvents: r'''
29371+
[status] working
29372+
[operation] linkLibraryCycle
29373+
package:test/a.dart
29374+
hashForRequirements: #H2
29375+
declaredExtensionTypes
29376+
A: #M0
29377+
declaredFields
29378+
it: #M1
29379+
declaredGetters
29380+
it: #M2
29381+
declaredMethods
29382+
foo: #M8
29383+
interface: #M9
29384+
map
29385+
foo: #M8
29386+
it: #M2
29387+
implemented
29388+
foo: #M8
29389+
it: #M2
29390+
exportMapId: #M5
29391+
exportMap
29392+
A: #M0
29393+
requirements
29394+
[operation] reuseLinkedBundle
29395+
package:test/test.dart
29396+
[operation] getErrorsFromBytes
29397+
file: /home/test/lib/test.dart
29398+
library: /home/test/lib/test.dart
29399+
[status] idle
29400+
''',
29401+
);
29402+
}
29403+
2929329404
test_dependency_extensionType_instanceMethod_change_notUsed() async {
2929429405
await _runChangeScenarioTA(
2929529406
initialA: r'''

0 commit comments

Comments
 (0)