@@ -856,147 +856,171 @@ class _LibraryMatch {
856856 _addMatchingElementItem (element, item, matchContext);
857857
858858 _matchInterfaceElementConstructors (
859- matchContext: matchContext,
860859 interfaceElement: element,
861860 item: item,
862- );
863-
864- _matchInstanceElementStaticExecutables (
865861 matchContext: matchContext,
866- element: element,
867- item: item,
868862 );
869863
870- _matchInterfaceElementInstanceExecutables (
871- matchContext: matchContext,
864+ _matchInstanceElementExecutables (
872865 element: element,
873866 item: item,
867+ matchContext: matchContext,
874868 );
875869
876870 return true ;
877871 }
878872
879- bool _matchInstanceElementExecutable ({
880- required MatchContext interfaceMatchContext ,
881- required Map < BaseName , BaseNameMembers > members ,
882- required ExecutableElementImpl2 executable ,
873+ void _matchInstanceElementExecutables ({
874+ required InstanceElementImpl2 element ,
875+ required InstanceItem item ,
876+ required MatchContext matchContext ,
883877 }) {
884- var lookupName = executable.lookupName? .asLookupName;
878+ for (var field in element.fields2) {
879+ if (! _matchInstanceElementField (
880+ instanceItem: item,
881+ instanceMatchContext: matchContext,
882+ element: field,
883+ )) {
884+ structureMismatched.add (field);
885+ }
886+ }
887+
888+ for (var method in element.methods2) {
889+ if (! _matchInstanceElementMethod (
890+ instanceItem: item,
891+ instanceMatchContext: matchContext,
892+ element: method,
893+ )) {
894+ structureMismatched.add (method);
895+ }
896+ }
897+
898+ for (var getter in element.getters2) {
899+ if (! _matchInstanceElementGetter (
900+ instanceItem: item,
901+ instanceMatchContext: matchContext,
902+ element: getter,
903+ )) {
904+ structureMismatched.add (getter);
905+ }
906+ }
907+
908+ for (var setter in element.setters2) {
909+ if (! _matchInstanceElementSetter (
910+ instanceItem: item,
911+ instanceMatchContext: matchContext,
912+ element: setter,
913+ )) {
914+ structureMismatched.add (setter);
915+ }
916+ }
917+ }
918+
919+ bool _matchInstanceElementField ({
920+ required InstanceItem instanceItem,
921+ required MatchContext instanceMatchContext,
922+ required FieldElementImpl2 element,
923+ }) {
924+ var lookupName = element.lookupName? .asLookupName;
885925 if (lookupName == null ) {
886926 return true ;
887927 }
888- var baseName = lookupName.asBaseName;
889-
890- switch (executable) {
891- case GetterElementImpl ():
892- var item = members[baseName]? .declaredGetter;
893- if (item is ! InstanceItemGetterItem ) {
894- return false ;
895- }
896928
897- var matchContext = MatchContext (parent : interfaceMatchContext) ;
898- if (! item. match (matchContext, executable) ) {
899- return false ;
900- }
929+ var item = instanceItem.declaredFields[lookupName] ;
930+ if (item == null ) {
931+ return false ;
932+ }
901933
902- _addMatchingElementItem (executable, item, matchContext);
903- return true ;
904- case MethodElementImpl2 ():
905- var item =
906- lookupName.isIndexEq
907- ? members[baseName]? .declaredIndexEq
908- : members[baseName]? .declaredMethod;
909- if (item is ! InstanceItemMethodItem ) {
910- return false ;
911- }
934+ var matchContext = MatchContext (parent: instanceMatchContext);
935+ if (! item.match (matchContext, element)) {
936+ return false ;
937+ }
912938
913- var matchContext = MatchContext (parent: interfaceMatchContext);
914- if (! item.match (matchContext, executable)) {
915- return false ;
916- }
939+ _addMatchingElementItem (element, item, matchContext);
940+ return true ;
941+ }
917942
918- _addMatchingElementItem (executable, item, matchContext);
919- return true ;
920- case SetterElementImpl ():
921- var item = members[baseName]? .declaredSetter;
922- if (item is ! InstanceItemSetterItem ) {
923- return false ;
924- }
943+ bool _matchInstanceElementGetter ({
944+ required InstanceItem instanceItem,
945+ required MatchContext instanceMatchContext,
946+ required GetterElementImpl element,
947+ }) {
948+ var lookupName = element.lookupName? .asLookupName;
949+ if (lookupName == null ) {
950+ return false ;
951+ }
925952
926- var matchContext = MatchContext (parent: interfaceMatchContext);
927- if (! item.match (matchContext, executable)) {
928- return false ;
929- }
953+ var baseName = lookupName.asBaseName;
954+ var item = instanceItem.declaredMembers[baseName]? .declaredGetter;
955+ if (item is ! InstanceItemGetterItem ) {
956+ return false ;
957+ }
930958
931- _addMatchingElementItem (executable, item, matchContext);
932- return true ;
933- default :
934- // SAFETY: the cases above handle all expected executables.
935- throw StateError ('(${executable .runtimeType }) $executable ' );
959+ var matchContext = MatchContext (parent: instanceMatchContext);
960+ if (! item.match (matchContext, element)) {
961+ return false ;
936962 }
963+
964+ _addMatchingElementItem (element, item, matchContext);
965+ return true ;
937966 }
938967
939- bool _matchInstanceElementField ({
968+ bool _matchInstanceElementMethod ({
940969 required InstanceItem instanceItem,
941970 required MatchContext instanceMatchContext,
942- required FieldElementImpl2 field ,
971+ required MethodElementImpl2 element ,
943972 }) {
944- var lookupName = field .lookupName? .asLookupName;
973+ var lookupName = element .lookupName? .asLookupName;
945974 if (lookupName == null ) {
946- return true ;
975+ return false ;
947976 }
948977
949- var item = instanceItem.declaredFields[lookupName];
950- if (item == null ) {
978+ var baseName = lookupName.asBaseName;
979+ var item =
980+ lookupName.isIndexEq
981+ ? instanceItem.declaredMembers[baseName]? .declaredIndexEq
982+ : instanceItem.declaredMembers[baseName]? .declaredMethod;
983+ if (item is ! InstanceItemMethodItem ) {
951984 return false ;
952985 }
953986
954987 var matchContext = MatchContext (parent: instanceMatchContext);
955- if (! item.match (matchContext, field )) {
988+ if (! item.match (matchContext, element )) {
956989 return false ;
957990 }
958991
959- _addMatchingElementItem (field , item, matchContext);
992+ _addMatchingElementItem (element , item, matchContext);
960993 return true ;
961994 }
962995
963- void _matchInstanceElementStaticExecutables ({
964- required MatchContext matchContext ,
965- required InstanceElementImpl2 element ,
966- required InstanceItem item ,
996+ bool _matchInstanceElementSetter ({
997+ required InstanceItem instanceItem ,
998+ required MatchContext instanceMatchContext ,
999+ required SetterElementImpl element ,
9671000 }) {
968- for (var field in element.fields2) {
969- if (! _matchInstanceElementField (
970- instanceItem: item,
971- instanceMatchContext: matchContext,
972- field: field,
973- )) {
974- structureMismatched.add (field);
975- }
1001+ var lookupName = element.lookupName? .asLookupName;
1002+ if (lookupName == null ) {
1003+ return true ;
9761004 }
9771005
978- var executables = [
979- ...element.getters2,
980- ...element.methods2,
981- ...element.setters2,
982- ];
983-
984- for (var executable in executables) {
985- if (executable.isStatic) {
986- if (! _matchInstanceElementExecutable (
987- interfaceMatchContext: matchContext,
988- members: item.declaredMembers,
989- executable: executable,
990- )) {
991- structureMismatched.add (executable);
992- }
993- }
1006+ var baseName = lookupName.asBaseName;
1007+ var item = instanceItem.declaredMembers[baseName]? .declaredSetter;
1008+ if (item is ! InstanceItemSetterItem ) {
1009+ return false ;
1010+ }
1011+
1012+ var matchContext = MatchContext (parent: instanceMatchContext);
1013+ if (! item.match (matchContext, element)) {
1014+ return false ;
9941015 }
1016+
1017+ _addMatchingElementItem (element, item, matchContext);
1018+ return true ;
9951019 }
9961020
9971021 bool _matchInterfaceElementConstructor ({
1022+ required InterfaceItem interfaceItem,
9981023 required MatchContext interfaceMatchContext,
999- required Map <BaseName , BaseNameMembers > members,
10001024 required ConstructorElementImpl2 element,
10011025 }) {
10021026 var lookupName = element.lookupName? .asLookupName;
@@ -1005,7 +1029,7 @@ class _LibraryMatch {
10051029 }
10061030
10071031 var baseName = lookupName.asBaseName;
1008- var item = members [baseName]? .declaredConstructor;
1032+ var item = interfaceItem.declaredMembers [baseName]? .declaredConstructor;
10091033 if (item is ! InterfaceItemConstructorItem ) {
10101034 return false ;
10111035 }
@@ -1026,36 +1050,15 @@ class _LibraryMatch {
10261050 }) {
10271051 for (var constructor in interfaceElement.constructors2) {
10281052 if (! _matchInterfaceElementConstructor (
1053+ interfaceItem: item,
10291054 interfaceMatchContext: matchContext,
1030- members: item.declaredMembers,
10311055 element: constructor,
10321056 )) {
10331057 structureMismatched.add (constructor);
10341058 }
10351059 }
10361060 }
10371061
1038- void _matchInterfaceElementInstanceExecutables ({
1039- required MatchContext matchContext,
1040- required InterfaceElementImpl2 element,
1041- required InterfaceItem item,
1042- }) {
1043- var map = element.inheritanceManager.getInterface2 (element).map2;
1044- for (var executable in map.values) {
1045- if (executable.enclosingElement2 == element) {
1046- // SAFETY: declared in the element are always impl.
1047- executable as ExecutableElementImpl2 ;
1048- if (! _matchInstanceElementExecutable (
1049- interfaceMatchContext: matchContext,
1050- members: item.declaredMembers,
1051- executable: executable,
1052- )) {
1053- structureMismatched.add (executable);
1054- }
1055- }
1056- }
1057- }
1058-
10591062 bool _matchMixin ({
10601063 required LookupName ? name,
10611064 required MixinElementImpl2 element,
@@ -1072,16 +1075,10 @@ class _LibraryMatch {
10721075
10731076 _addMatchingElementItem (element, item, matchContext);
10741077
1075- _matchInstanceElementStaticExecutables (
1076- matchContext: matchContext,
1078+ _matchInstanceElementExecutables (
10771079 element: element,
10781080 item: item,
1079- );
1080-
1081- _matchInterfaceElementInstanceExecutables (
10821081 matchContext: matchContext,
1083- element: element,
1084- item: item,
10851082 );
10861083
10871084 return true ;
0 commit comments