Skip to content

Commit af76b95

Browse files
committed
Remove reflection and replace it with static Doneable class, thanks @adam-sandor
1 parent 2ed7144 commit af76b95

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

operator-framework/src/main/java/io/javaoperatorsdk/operator/ControllerUtils.java

+8-19
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,15 @@ static String getCrdName(ResourceController controller) {
5151
return (Class<? extends CustomResourceDoneable<T>>) doneableClassCache.get(customResourceClass);
5252
}
5353

54-
ClassPool pool = ClassPool.getDefault();
55-
pool.appendClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));
56-
57-
CtClass superClass = pool.get(CustomResourceDoneable.class.getName());
58-
CtClass function = pool.get(Function.class.getName());
59-
CtClass customResource = pool.get(customResourceClass.getName());
60-
CtClass[] argTypes = {customResource, function};
61-
CtClass customDoneable = pool.makeClass(className, superClass);
62-
CtConstructor ctConstructor = CtNewConstructor.make(argTypes, null, "super($1, $2);", customDoneable);
63-
customDoneable.addConstructor(ctConstructor);
64-
65-
Class<? extends CustomResourceDoneable<T>> doneableClass;
66-
if (JAVA_VERSION >= 9) {
67-
doneableClass = (Class<? extends CustomResourceDoneable<T>>) customDoneable.toClass(customResourceClass);
68-
} else {
69-
doneableClass = (Class<? extends CustomResourceDoneable<T>>) customDoneable.toClass();
54+
if (!getAnnotation(controller).customResourceDoneableClass().equals(Controller.EMPTY_DONEABLE.class)) {
55+
Class<? extends CustomResourceDoneable<T>> doneableClass = (Class<? extends CustomResourceDoneable<T>>) getAnnotation(controller).customResourceDoneableClass();
56+
doneableClassCache.put(customResourceClass, doneableClass);
57+
return doneableClass;
7058
}
71-
doneableClassCache.put(customResourceClass, doneableClass);
72-
return doneableClass;
73-
} catch (CannotCompileException | NotFoundException e) {
59+
60+
throw new RuntimeException("Cannot initialize Donealbe class");
61+
62+
} catch (RuntimeException e) {
7463
throw new IllegalStateException(e);
7564
}
7665
}

operator-framework/src/main/java/io/javaoperatorsdk/operator/api/Controller.java

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.javaoperatorsdk.operator.api;
22

3+
import io.fabric8.kubernetes.api.builder.Function;
34
import io.fabric8.kubernetes.client.CustomResource;
5+
import io.fabric8.kubernetes.client.CustomResourceDoneable;
46

57
import java.lang.annotation.ElementType;
68
import java.lang.annotation.Retention;
@@ -17,6 +19,8 @@
1719

1820
Class<? extends CustomResource> customResourceClass();
1921

22+
Class<? extends CustomResourceDoneable<? extends CustomResource>> customResourceDoneableClass() default EMPTY_DONEABLE.class;
23+
2024
String finalizerName() default DEFAULT_FINALIZER;
2125

2226
/**
@@ -26,4 +30,10 @@
2630
* <a href="https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#status-subresource">here</a>
2731
*/
2832
boolean generationAwareEventProcessing() default true;
33+
34+
static final class EMPTY_DONEABLE extends CustomResourceDoneable<CustomResource> {
35+
public EMPTY_DONEABLE(CustomResource resource, Function function) {
36+
super(resource, function);
37+
}
38+
}
2939
}

0 commit comments

Comments
 (0)