@@ -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
542536enum _ExportRequirementCombinatorKind { hide, show }
0 commit comments