Skip to content

Commit 2a832ec

Browse files
author
Soroosh Sarabadani
committed
extract resolve method
1 parent 6c63d08 commit 2a832ec

File tree

2 files changed

+49
-54
lines changed

2 files changed

+49
-54
lines changed

operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/annotation/ControllerAnnotationProcessor.java

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import static io.javaoperatorsdk.operator.ControllerUtils.CONTROLLERS_RESOURCE_PATH;
44
import static io.javaoperatorsdk.operator.ControllerUtils.DONEABLES_RESOURCE_PATH;
5-
import static javax.lang.model.type.TypeKind.DECLARED;
6-
import static javax.lang.model.type.TypeKind.TYPEVAR;
75

86
import com.google.auto.service.AutoService;
97
import com.squareup.javapoet.ClassName;
@@ -17,9 +15,7 @@
1715
import io.javaoperatorsdk.operator.api.ResourceController;
1816
import java.io.PrintWriter;
1917
import java.util.HashSet;
20-
import java.util.List;
2118
import java.util.Set;
22-
import java.util.stream.IntStream;
2319
import javax.annotation.processing.AbstractProcessor;
2420
import javax.annotation.processing.ProcessingEnvironment;
2521
import javax.annotation.processing.Processor;
@@ -32,10 +28,8 @@
3228
import javax.lang.model.element.Modifier;
3329
import javax.lang.model.element.PackageElement;
3430
import javax.lang.model.element.TypeElement;
35-
import javax.lang.model.element.TypeParameterElement;
3631
import javax.lang.model.type.DeclaredType;
3732
import javax.lang.model.type.TypeMirror;
38-
import javax.lang.model.type.TypeVariable;
3933
import javax.tools.Diagnostic;
4034
import javax.tools.JavaFileObject;
4135

@@ -78,7 +72,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
7872
annotatedElements.stream()
7973
.filter(element -> element.getKind().equals(ElementKind.CLASS))
8074
.map(e -> (TypeElement) e)
81-
.forEach(e -> this.generateDoneableClass(e));
75+
.forEach(this::generateDoneableClass);
8276
}
8377
} finally {
8478
if (roundEnv.processingOver()) {
@@ -153,15 +147,10 @@ private void generateDoneableClass(TypeElement controllerClassSymbol) {
153147
}
154148
}
155149

156-
private TypeMirror findResourceType(TypeElement controllerClassSymbol) throws Exception {
150+
private TypeMirror findResourceType(TypeElement controllerClassSymbol) {
157151
try {
158-
final var chain =
159-
typeParameterResolver.findChain(
160-
processingEnv.getTypeUtils(),
161-
processingEnv.getElementUtils(),
162-
(DeclaredType) controllerClassSymbol.asType());
163-
final var customResourceClass = getCustomResourceClass(chain);
164-
return customResourceClass;
152+
return typeParameterResolver.resolve(
153+
processingEnv.getTypeUtils(), (DeclaredType) controllerClassSymbol.asType());
165154
} catch (Exception e) {
166155
e.printStackTrace();
167156
return null;
@@ -174,40 +163,4 @@ private String makeQualifiedClassName(String packageName, String className) {
174163
}
175164
return packageName + "." + className;
176165
}
177-
178-
private TypeMirror getCustomResourceClass(List<DeclaredType> chain) {
179-
var lastIndex = chain.size() - 1;
180-
String typeName;
181-
final List<? extends TypeMirror> typeArguments = (chain.get(lastIndex)).getTypeArguments();
182-
if (typeArguments.get(0).getKind() == TYPEVAR) {
183-
typeName = ((TypeVariable) typeArguments.get(0)).asElement().getSimpleName().toString();
184-
} else if (typeArguments.get(0).getKind() == DECLARED) {
185-
return typeArguments.get(0);
186-
} else {
187-
typeName = "";
188-
}
189-
190-
while (lastIndex > 0) {
191-
lastIndex -= 1;
192-
final List<? extends TypeMirror> tArguments = (chain.get(lastIndex)).getTypeArguments();
193-
final List<? extends TypeParameterElement> typeParameters =
194-
((TypeElement) ((chain.get(lastIndex)).asElement())).getTypeParameters();
195-
final String tName = typeName;
196-
final var typeIndex =
197-
IntStream.range(0, typeParameters.size())
198-
.filter(i -> typeParameters.get(i).getSimpleName().toString().equals(tName))
199-
.findFirst()
200-
.getAsInt();
201-
202-
final TypeMirror matchedType = tArguments.get(typeIndex);
203-
if (matchedType.getKind() == TYPEVAR) {
204-
typeName = ((TypeVariable) matchedType).asElement().getSimpleName().toString();
205-
} else if (matchedType.getKind() == DECLARED) {
206-
return matchedType;
207-
} else {
208-
typeName = "";
209-
}
210-
}
211-
return null;
212-
}
213166
}

operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/annotation/TypeParameterResolver.java

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package io.javaoperatorsdk.operator.processing.annotation;
22

3+
import static javax.lang.model.type.TypeKind.DECLARED;
4+
import static javax.lang.model.type.TypeKind.TYPEVAR;
5+
36
import java.util.ArrayList;
47
import java.util.List;
58
import java.util.stream.Collectors;
9+
import java.util.stream.IntStream;
610
import javax.lang.model.element.TypeElement;
11+
import javax.lang.model.element.TypeParameterElement;
712
import javax.lang.model.type.DeclaredType;
813
import javax.lang.model.type.TypeKind;
9-
import javax.lang.model.util.Elements;
14+
import javax.lang.model.type.TypeMirror;
15+
import javax.lang.model.type.TypeVariable;
1016
import javax.lang.model.util.Types;
1117

1218
class TypeParameterResolver {
@@ -20,8 +26,44 @@ public TypeParameterResolver(DeclaredType interestedClass, int interestedTypeArg
2026
this.interestedTypeArgumentIndex = interestedTypeArgumentIndex;
2127
}
2228

23-
public List<DeclaredType> findChain(
24-
Types typeUtils, Elements elementUtils, DeclaredType declaredType) {
29+
public TypeMirror resolve(Types typeUtils, DeclaredType declaredType) {
30+
final var chain = findChain(typeUtils, declaredType);
31+
var lastIndex = chain.size() - 1;
32+
String typeName;
33+
final List<? extends TypeMirror> typeArguments = (chain.get(lastIndex)).getTypeArguments();
34+
if (typeArguments.get(0).getKind() == TYPEVAR) {
35+
typeName = ((TypeVariable) typeArguments.get(0)).asElement().getSimpleName().toString();
36+
} else if (typeArguments.get(0).getKind() == DECLARED) {
37+
return typeArguments.get(0);
38+
} else {
39+
typeName = "";
40+
}
41+
42+
while (lastIndex > 0) {
43+
lastIndex -= 1;
44+
final List<? extends TypeMirror> tArguments = (chain.get(lastIndex)).getTypeArguments();
45+
final List<? extends TypeParameterElement> typeParameters =
46+
((TypeElement) ((chain.get(lastIndex)).asElement())).getTypeParameters();
47+
final String tName = typeName;
48+
final var typeIndex =
49+
IntStream.range(0, typeParameters.size())
50+
.filter(i -> typeParameters.get(i).getSimpleName().toString().equals(tName))
51+
.findFirst()
52+
.getAsInt();
53+
54+
final TypeMirror matchedType = tArguments.get(typeIndex);
55+
if (matchedType.getKind() == TYPEVAR) {
56+
typeName = ((TypeVariable) matchedType).asElement().getSimpleName().toString();
57+
} else if (matchedType.getKind() == DECLARED) {
58+
return matchedType;
59+
} else {
60+
typeName = "";
61+
}
62+
}
63+
return null;
64+
}
65+
66+
private List<DeclaredType> findChain(Types typeUtils, DeclaredType declaredType) {
2567

2668
final var result = new ArrayList<DeclaredType>();
2769
result.add(declaredType);

0 commit comments

Comments
 (0)