@@ -331,18 +331,48 @@ class RequirementsManifest {
331331 return null ;
332332 }
333333
334+ void notify_interfaceElement_getNamedConstructor ({
335+ required InterfaceElementImpl2 element,
336+ required String name,
337+ }) {
338+ var libraryElement = element.library2;
339+ var manifest = libraryElement.manifest;
340+
341+ // If we are linking the library, its manifest is not set yet.
342+ // But then we also don't care about this dependency.
343+ if (manifest == null ) {
344+ return ;
345+ }
346+
347+ var interfaceName = element.lookupName? .asLookupName;
348+
349+ // SAFETY: we don't export elements without name.
350+ interfaceName! ;
351+
352+ var interfacesMap = interfaceMembers[libraryElement.uri] ?? = {};
353+ var interfaceItem = manifest.items[interfaceName];
354+
355+ // SAFETY: every interface element must be in the manifest.
356+ interfaceItem as InterfaceItem ;
357+
358+ var memberName = name.asLookupName;
359+ var memberId = interfaceItem.getMemberId (memberName);
360+ var interfaceMap = interfacesMap[interfaceName] ?? = {};
361+ interfaceMap[memberName] = memberId;
362+ }
363+
334364 /// This method is invoked by [InheritanceManager3] to notify the collector
335365 /// that a member with [nameObj] was requested from the [element] .
336366 void notifyInterfaceRequest ({
337- required InterfaceElement2 element,
367+ required InterfaceElementImpl2 element,
338368 required Name nameObj,
339369 }) {
340370 // Skip private names, cannot be used outside this library.
341371 if (! nameObj.isPublic) {
342372 return ;
343373 }
344374
345- var libraryElement = element.library2 as LibraryElementImpl ;
375+ var libraryElement = element.library2;
346376 var manifest = libraryElement.manifest;
347377
348378 // If we are linking the library, its manifest is not set yet.
@@ -351,20 +381,21 @@ class RequirementsManifest {
351381 return ;
352382 }
353383
354- var interfacesMap = interfaceMembers[libraryElement.uri] ?? = {} ;
384+ var interfaceName = element.lookupName ? .asLookupName ;
355385
356- var interfaceName = element.lookupName ! .asLookupName;
357- var interfaceMap = interfacesMap[ interfaceName] ?? = {} ;
386+ // SAFETY: we don't export elements without name.
387+ interfaceName! ;
358388
359- var classItem = manifest.items[interfaceName] as InterfaceItem ? ;
360- // TODO(scheglov): can this happen?
361- if (classItem == null ) {
362- return ;
363- }
389+ var interfacesMap = interfaceMembers[libraryElement.uri] ?? = {} ;
390+ var interfaceItem = manifest.items[interfaceName];
391+
392+ // SAFETY: every interface element must be in the manifest.
393+ interfaceItem as InterfaceItem ;
364394
365- var name = nameObj.name.asLookupName;
366- var memberId = classItem.getMemberId (name);
367- interfaceMap[name] = memberId;
395+ var memberName = nameObj.name.asLookupName;
396+ var memberId = interfaceItem.getMemberId (memberName);
397+ var interfaceMap = interfacesMap[interfaceName] ?? = {};
398+ interfaceMap[memberName] = memberId;
368399 }
369400
370401 /// This method is invoked by an import scope to notify the collector that
0 commit comments