Skip to content

Commit 7767f32

Browse files
author
Soroosh Sarabadani
committed
handle abstract CustomResource!
1 parent 152c8f6 commit 7767f32

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.squareup.javapoet.TypeName;
1212
import com.squareup.javapoet.TypeSpec;
1313
import io.fabric8.kubernetes.api.builder.Function;
14+
import io.fabric8.kubernetes.client.CustomResource;
1415
import io.fabric8.kubernetes.client.CustomResourceDoneable;
1516
import io.javaoperatorsdk.operator.api.ResourceController;
1617
import java.io.PrintWriter;
@@ -42,6 +43,7 @@ public class ControllerAnnotationProcessor extends AbstractProcessor {
4243
private AccumulativeMappingWriter doneablesResourceWriter;
4344
private TypeParameterResolver typeParameterResolver;
4445
private final Set<String> generatedDoneableClassFiles = new HashSet<>();
46+
private DeclaredType fallbackCustomResourceType;
4547

4648
@Override
4749
public synchronized void init(ProcessingEnvironment processingEnv) {
@@ -53,7 +55,17 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
5355
new AccumulativeMappingWriter(DONEABLES_RESOURCE_PATH, processingEnv)
5456
.loadExistingMappings();
5557

58+
doneablesResourceWriter.add(
59+
CustomResource.class.getCanonicalName(), CustomResourceDoneable.class.getCanonicalName());
60+
5661
typeParameterResolver = initializeResolver(processingEnv);
62+
fallbackCustomResourceType =
63+
processingEnv
64+
.getTypeUtils()
65+
.getDeclaredType(
66+
processingEnv
67+
.getElementUtils()
68+
.getTypeElement(CustomResourceDoneable.class.getCanonicalName()));
5769
}
5870

5971
@Override
@@ -89,13 +101,16 @@ private TypeParameterResolver initializeResolver(ProcessingEnvironment processin
89101

90102
private void generateDoneableClass(TypeElement controllerClassSymbol) {
91103
try {
92-
System.out.println(controllerClassSymbol.toString());
93104
final TypeMirror resourceType = findResourceType(controllerClassSymbol);
94-
System.out.println("the resource type is " + resourceType);
105+
if (resourceType == null) {
106+
controllersResourceWriter.add(
107+
controllerClassSymbol.getQualifiedName().toString(),
108+
CustomResource.class.getCanonicalName());
109+
return;
110+
}
95111

96112
TypeElement customerResourceTypeElement =
97113
processingEnv.getElementUtils().getTypeElement(resourceType.toString());
98-
System.out.println("the customerResourceTypeElement is " + customerResourceTypeElement);
99114

100115
final String doneableClassName = customerResourceTypeElement.getSimpleName() + "Doneable";
101116
final String destinationClassFileName =
@@ -155,6 +170,7 @@ private TypeMirror findResourceType(TypeElement controllerClassSymbol) {
155170
try {
156171
return typeParameterResolver.resolve(
157172
processingEnv.getTypeUtils(), (DeclaredType) controllerClassSymbol.asType());
173+
158174
} catch (Exception e) {
159175
e.printStackTrace();
160176
return null;

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

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,40 +29,47 @@ public TypeParameterResolver(DeclaredType interestedClass, int interestedTypeArg
2929
public TypeMirror resolve(Types typeUtils, DeclaredType declaredType) {
3030
final var chain = findChain(typeUtils, declaredType);
3131
var lastIndex = chain.size() - 1;
32-
String typeName;
32+
String typeName = "";
3333
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) {
34+
if (typeArguments.isEmpty()) {
35+
return null;
36+
}
37+
if (typeArguments.get(interestedTypeArgumentIndex).getKind() == TYPEVAR) {
38+
typeName =
39+
((TypeVariable) typeArguments.get(interestedTypeArgumentIndex))
40+
.asElement()
41+
.getSimpleName()
42+
.toString();
43+
} else if (typeArguments.get(interestedTypeArgumentIndex).getKind() == DECLARED) {
3744
return typeArguments.get(0);
38-
} else {
39-
typeName = "";
4045
}
4146

4247
while (lastIndex > 0) {
4348
lastIndex -= 1;
4449
final List<? extends TypeMirror> tArguments = (chain.get(lastIndex)).getTypeArguments();
4550
final List<? extends TypeParameterElement> typeParameters =
4651
((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();
52+
53+
final var typeIndex = getTypeIndexWithName(typeName, typeParameters);
5354

5455
final TypeMirror matchedType = tArguments.get(typeIndex);
5556
if (matchedType.getKind() == TYPEVAR) {
5657
typeName = ((TypeVariable) matchedType).asElement().getSimpleName().toString();
5758
} else if (matchedType.getKind() == DECLARED) {
5859
return matchedType;
59-
} else {
60-
typeName = "";
6160
}
6261
}
6362
return null;
6463
}
6564

65+
private int getTypeIndexWithName(
66+
String typeName, List<? extends TypeParameterElement> typeParameters) {
67+
return IntStream.range(0, typeParameters.size())
68+
.filter(i -> typeParameters.get(i).getSimpleName().toString().equals(typeName))
69+
.findFirst()
70+
.getAsInt();
71+
}
72+
6673
private List<DeclaredType> findChain(Types typeUtils, DeclaredType declaredType) {
6774

6875
final var result = new ArrayList<DeclaredType>();

0 commit comments

Comments
 (0)