Skip to content

Commit 532e6a9

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Use single _matchInstanceElementExecutables(), for static and instance.
With the current implementation for building the interface, and merging executables, we don't care about the distinction. Also, separate individual _matchInstanceElementXyz, it seems more direct to iterate over specific types, and not re-swtich by type. Change-Id: I79776db5661ebe655bccc96b3c7abc32344a6654 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/428421 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 8642ff0 commit 532e6a9

File tree

1 file changed

+119
-122
lines changed

1 file changed

+119
-122
lines changed

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

Lines changed: 119 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)