Skip to content

Commit 897d801

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Extract duplicate code into _getInterface()
Change-Id: I365c7a1d7b7603d639d6648d84a315643db07d39 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/423881 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 1d8f02e commit 897d801

File tree

1 file changed

+38
-44
lines changed

1 file changed

+38
-44
lines changed

pkg/analyzer/lib/src/fine/requirements.dart

Lines changed: 38 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -363,31 +363,15 @@ class RequirementsManifest {
363363
required InterfaceElementImpl2 element,
364364
required String name,
365365
}) {
366-
var libraryElement = element.library2;
367-
var manifest = libraryElement.manifest;
368-
369-
// If we are linking the library, its manifest is not set yet.
370-
// But then we also don't care about this dependency.
371-
if (manifest == null) {
366+
var interfacePair = _getInterface(element);
367+
if (interfacePair == null) {
372368
return;
373369
}
374370

375-
var interfaceName = element.lookupName?.asLookupName;
376-
377-
// SAFETY: we don't export elements without name.
378-
interfaceName!;
379-
380-
var interfacesMap = interfaces[libraryElement.uri] ??= {};
381-
var interfaceItem = manifest.items[interfaceName];
382-
383-
// SAFETY: every interface element must be in the manifest.
384-
interfaceItem as InterfaceItem;
385-
386-
var memberName = name.asLookupName;
387-
var memberId = interfaceItem.getMemberId(memberName);
388-
var interface =
389-
interfacesMap[interfaceName] ??= InterfaceRequirements.empty();
390-
interface.constructors[memberName] = memberId;
371+
var (interfaceItem, interface) = interfacePair;
372+
var constructorName = name.asLookupName;
373+
var constructorId = interfaceItem.getMemberId(constructorName);
374+
interface.constructors[constructorName] = constructorId;
391375
}
392376

393377
/// This method is invoked by [InheritanceManager3] to notify the collector
@@ -401,31 +385,15 @@ class RequirementsManifest {
401385
return;
402386
}
403387

404-
var libraryElement = element.library2;
405-
var manifest = libraryElement.manifest;
406-
407-
// If we are linking the library, its manifest is not set yet.
408-
// But then we also don't care about this dependency.
409-
if (manifest == null) {
388+
var interfacePair = _getInterface(element);
389+
if (interfacePair == null) {
410390
return;
411391
}
412392

413-
var interfaceName = element.lookupName?.asLookupName;
414-
415-
// SAFETY: we don't export elements without name.
416-
interfaceName!;
417-
418-
var interfacesMap = interfaces[libraryElement.uri] ??= {};
419-
var interfaceItem = manifest.items[interfaceName];
420-
421-
// SAFETY: every interface element must be in the manifest.
422-
interfaceItem as InterfaceItem;
423-
424-
var memberName = nameObj.name.asLookupName;
425-
var memberId = interfaceItem.getMemberId(memberName);
426-
var interface =
427-
interfacesMap[interfaceName] ??= InterfaceRequirements.empty();
428-
interface.methods[memberName] = memberId;
393+
var (interfaceItem, interface) = interfacePair;
394+
var methodName = nameObj.name.asLookupName;
395+
var methodId = interfaceItem.getMemberId(methodName);
396+
interface.methods[methodName] = methodId;
429397
}
430398

431399
/// This method is invoked by an import scope to notify the collector that
@@ -537,6 +505,32 @@ class RequirementsManifest {
537505
}
538506
}
539507
}
508+
509+
(InterfaceItem, InterfaceRequirements)? _getInterface(
510+
InterfaceElementImpl2 element,
511+
) {
512+
var libraryElement = element.library2;
513+
var manifest = libraryElement.manifest;
514+
515+
// If we are linking the library, its manifest is not set yet.
516+
// But then we also don't care about this dependency.
517+
if (manifest == null) {
518+
return null;
519+
}
520+
521+
// SAFETY: we don't export elements without name.
522+
var interfaceName = element.lookupName!.asLookupName;
523+
524+
var interfacesMap = interfaces[libraryElement.uri] ??= {};
525+
var interfaceItem = manifest.items[interfaceName];
526+
527+
// SAFETY: every interface element must be in the manifest.
528+
interfaceItem as InterfaceItem;
529+
530+
var interfaceRequirements =
531+
interfacesMap[interfaceName] ??= InterfaceRequirements.empty();
532+
return (interfaceItem, interfaceRequirements);
533+
}
540534
}
541535

542536
enum _ExportRequirementCombinatorKind { hide, show }

0 commit comments

Comments
 (0)