1
1
package io .javaoperatorsdk .operator ;
2
2
3
- import io .javaoperatorsdk .operator .api .Controller ;
4
- import io .javaoperatorsdk .operator .api .ResourceController ;
5
- import io .fabric8 .kubernetes .api .builder .Function ;
6
3
import io .fabric8 .kubernetes .client .CustomResource ;
7
4
import io .fabric8 .kubernetes .client .CustomResourceDoneable ;
8
- import javassist .* ;
9
- import org . slf4j . Logger ;
10
- import org . slf4j . LoggerFactory ;
5
+ import io . javaoperatorsdk . operator . api . Controller ;
6
+ import io . javaoperatorsdk . operator . api . ResourceController ;
7
+ import sun . reflect . generics . reflectiveObjects . ParameterizedTypeImpl ;
11
8
9
+ import java .lang .reflect .ParameterizedType ;
10
+ import java .util .Arrays ;
12
11
import java .util .HashMap ;
13
12
import java .util .Map ;
14
13
@@ -37,7 +36,8 @@ static boolean getGenerationEventProcessing(ResourceController controller) {
37
36
}
38
37
39
38
static <R extends CustomResource > Class <R > getCustomResourceClass (ResourceController <R > controller ) {
40
- return (Class <R >) getAnnotation (controller ).customResourceClass ();
39
+ final Class <R > type = Arrays .stream (controller .getClass ().getGenericInterfaces ()).filter (i -> i instanceof ParameterizedType ).map (i -> (ParameterizedTypeImpl ) i ).findFirst ().map (i -> (Class <R >) i .getActualTypeArguments ()[0 ]).get ();
40
+ return type ;
41
41
}
42
42
43
43
static String getCrdName (ResourceController controller ) {
@@ -48,34 +48,11 @@ static String getCrdName(ResourceController controller) {
48
48
public static <T extends CustomResource > Class <? extends CustomResourceDoneable <T >>
49
49
getCustomResourceDoneableClass (ResourceController <T > controller ) {
50
50
try {
51
- Class <? extends CustomResource > customResourceClass = getAnnotation (controller ).customResourceClass ();
52
- String className = customResourceClass .getPackage ().getName () + "." + customResourceClass .getSimpleName () + "CustomResourceDoneable" ;
53
-
54
- if (doneableClassCache .containsKey (customResourceClass )) {
55
- return (Class <? extends CustomResourceDoneable <T >>) doneableClassCache .get (customResourceClass );
56
- }
57
-
58
- ClassPool pool = ClassPool .getDefault ();
59
- pool .appendClassPath (new LoaderClassPath (Thread .currentThread ().getContextClassLoader ()));
60
-
61
- CtClass superClass = pool .get (CustomResourceDoneable .class .getName ());
62
- CtClass function = pool .get (Function .class .getName ());
63
- CtClass customResource = pool .get (customResourceClass .getName ());
64
- CtClass [] argTypes = {customResource , function };
65
- CtClass customDoneable = pool .makeClass (className , superClass );
66
- CtConstructor ctConstructor = CtNewConstructor .make (argTypes , null , "super($1, $2);" , customDoneable );
67
- customDoneable .addConstructor (ctConstructor );
68
-
69
- Class <? extends CustomResourceDoneable <T >> doneableClass ;
70
- if (JAVA_VERSION >= 9 ) {
71
- doneableClass = (Class <? extends CustomResourceDoneable <T >>) customDoneable .toClass (customResourceClass );
72
- } else {
73
- doneableClass = (Class <? extends CustomResourceDoneable <T >>) customDoneable .toClass ();
74
- }
75
- doneableClassCache .put (customResourceClass , doneableClass );
76
- return doneableClass ;
77
- } catch (CannotCompileException | NotFoundException e ) {
78
- throw new IllegalStateException (e );
51
+ final Class <T > customResourceClass = getCustomResourceClass (controller );
52
+ return (Class <? extends CustomResourceDoneable <T >>) Class .forName (customResourceClass .getCanonicalName () + "Doneable" );
53
+ } catch (ClassNotFoundException e ) {
54
+ e .printStackTrace ();
55
+ return null ;
79
56
}
80
57
}
81
58
0 commit comments