Skip to content

Commit 3e82b74

Browse files
committed
Moved back to Marc's implementation instead of precaching
1 parent e08fc0a commit 3e82b74

2 files changed

Lines changed: 13 additions & 59 deletions

File tree

src/main/java/graphql/schema/idl/ImmutableTypeDefinitionRegistry.java

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@
3939
@NullMarked
4040
public class ImmutableTypeDefinitionRegistry extends TypeDefinitionRegistry {
4141

42-
private final Map<InterfaceTypeDefinition, List<ImplementingTypeDefinition>> allImplementationsOf;
43-
private final Map<InterfaceTypeDefinition, List<ObjectTypeDefinition>> implementationsOf;
44-
4542
ImmutableTypeDefinitionRegistry(TypeDefinitionRegistry registry) {
4643
super(
4744
copyOf(registry.objectTypeExtensions),
@@ -57,50 +54,9 @@ public class ImmutableTypeDefinitionRegistry extends TypeDefinitionRegistry {
5754
registry.schema,
5855
registry.schemaParseOrder
5956
);
60-
allImplementationsOf = calculateAllImplementsOf();
61-
implementationsOf = calculateImplementationsOf(allImplementationsOf);
62-
}
63-
64-
private Map<InterfaceTypeDefinition, List<ImplementingTypeDefinition>> calculateAllImplementsOf() {
65-
ImmutableMap.Builder<InterfaceTypeDefinition, List<ImplementingTypeDefinition>> mapBuilder = ImmutableMap.builder();
66-
List<ImplementingTypeDefinition> implementingTypeDefinitions = getTypes(ImplementingTypeDefinition.class);
67-
for (TypeDefinition typeDef : types.values()) {
68-
if (typeDef instanceof InterfaceTypeDefinition) {
69-
InterfaceTypeDefinition interfaceTypeDef = (InterfaceTypeDefinition) typeDef;
70-
ImmutableList.Builder<ImplementingTypeDefinition> listBuilder = ImmutableList.builder();
71-
for (ImplementingTypeDefinition<?> implementingTypeDefinition : implementingTypeDefinitions) {
72-
List<Type> implementsList = implementingTypeDefinition.getImplements();
73-
for (Type iFace : implementsList) {
74-
Optional<InterfaceTypeDefinition> implementsAnInterface = getType(iFace, InterfaceTypeDefinition.class);
75-
if (implementsAnInterface.isPresent()) {
76-
boolean equals = implementsAnInterface.get().getName().equals(interfaceTypeDef.getName());
77-
if (equals) {
78-
listBuilder.add(implementingTypeDefinition);
79-
break;
80-
}
81-
}
82-
}
83-
}
84-
mapBuilder.put(interfaceTypeDef, listBuilder.build());
85-
}
86-
}
87-
return mapBuilder.build();
88-
}
89-
90-
private Map<InterfaceTypeDefinition, List<ObjectTypeDefinition>> calculateImplementationsOf(Map<InterfaceTypeDefinition, List<ImplementingTypeDefinition>> allImplementationsOf1) {
91-
ImmutableMap.Builder<InterfaceTypeDefinition, List<ObjectTypeDefinition>> mapBuilder = ImmutableMap.builder();
92-
for (Map.Entry<InterfaceTypeDefinition, List<ImplementingTypeDefinition>> entry : allImplementationsOf1.entrySet()) {
93-
ImmutableList.Builder<ObjectTypeDefinition> listBuilder = ImmutableList.builder();
94-
for (ImplementingTypeDefinition implementingTypeDefinition : entry.getValue()) {
95-
if (implementingTypeDefinition instanceof ObjectTypeDefinition) {
96-
listBuilder.add((ObjectTypeDefinition) implementingTypeDefinition);
97-
}
98-
}
99-
mapBuilder.put(entry.getKey(), listBuilder.build());
100-
}
101-
return mapBuilder.build();
10257
}
10358

59+
10460
private UnsupportedOperationException unsupportedOperationException() {
10561
return new UnsupportedOperationException("The TypeDefinitionRegistry is in read only mode");
10662
}
@@ -179,14 +135,4 @@ public List<SchemaExtensionDefinition> getSchemaExtensionDefinitions() {
179135
public Map<String, DirectiveDefinition> getDirectiveDefinitions() {
180136
return directiveDefinitions;
181137
}
182-
183-
@Override
184-
public List<ImplementingTypeDefinition> getAllImplementationsOf(InterfaceTypeDefinition targetInterface) {
185-
return allImplementationsOf.getOrDefault(targetInterface, ImmutableList.of());
186-
}
187-
188-
@Override
189-
public List<ObjectTypeDefinition> getImplementationsOf(InterfaceTypeDefinition targetInterface) {
190-
return implementationsOf.getOrDefault(targetInterface, ImmutableList.of());
191-
}
192138
}

src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -768,10 +768,18 @@ public boolean isPossibleType(Type abstractType, Type possibleType) {
768768
return false;
769769
} else {
770770
InterfaceTypeDefinition iFace = (InterfaceTypeDefinition) abstractTypeDef;
771-
List<ImplementingTypeDefinition> implementingTypeDefinitions = getAllImplementationsOf(iFace);
772-
for (ImplementingTypeDefinition implementingTypeDefinition : implementingTypeDefinitions) {
773-
if (implementingTypeDefinition.getName().equals(targetObjectTypeDef.getName())) {
774-
return true;
771+
for (TypeDefinition<?> t : types.values()) {
772+
if (t instanceof ImplementingTypeDefinition) {
773+
if (t.getName().equals(targetObjectTypeDef.getName())) {
774+
ImplementingTypeDefinition<?> itd = (ImplementingTypeDefinition<?>) t;
775+
776+
for (Type implementsType : itd.getImplements()) {
777+
TypeDefinition<?> matchingInterface = types.get(typeName(implementsType));
778+
if (matchingInterface != null && matchingInterface.getName().equals(iFace.getName())) {
779+
return true;
780+
}
781+
}
782+
}
775783
}
776784
}
777785
return false;

0 commit comments

Comments
 (0)