22
33import com .google .auto .service .AutoService ;
44import com .squareup .javapoet .*;
5- import com .sun .tools .javac .code .Symbol ;
6- import com .sun .tools .javac .code .Type ;
5+
76import io .fabric8 .kubernetes .api .builder .Function ;
87import io .fabric8 .kubernetes .client .CustomResourceDoneable ;
98import io .javaoperatorsdk .operator .api .ResourceController ;
109import io .quarkus .runtime .annotations .RegisterForReflection ;
1110
1211import javax .annotation .processing .*;
1312import javax .lang .model .SourceVersion ;
14- import javax .lang .model .element .Element ;
15- import javax .lang .model .element . Modifier ;
16- import javax .lang .model .element . TypeElement ;
13+ import javax .lang .model .element .* ;
14+ import javax .lang .model .type . DeclaredType ;
15+ import javax .lang .model .type . TypeKind ;
1716import javax .lang .model .type .TypeMirror ;
1817import javax .tools .JavaFileObject ;
19- import java .io .IOException ;
2018import java .io .PrintWriter ;
2119import java .util .ArrayList ;
2220import java .util .List ;
2321import java .util .Set ;
22+ import java .util .stream .Collectors ;
2423
2524@ SupportedAnnotationTypes (
2625 "io.javaoperatorsdk.operator.api.Controller" )
@@ -32,22 +31,22 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
3231 for (TypeElement annotation : annotations ) {
3332 Set <? extends Element > annotatedElements
3433 = roundEnv .getElementsAnnotatedWith (annotation );
35- annotatedElements .stream ().filter (element -> element instanceof Symbol . ClassSymbol )
36- .map (e -> (Symbol . ClassSymbol ) e )
34+ annotatedElements .stream ().filter (element -> element . getKind (). equals ( ElementKind . CLASS ) )
35+ .map (e -> (TypeElement ) e )
3736 .forEach (this ::generateDoneableClass );
3837 }
3938 return false ;
4039 }
4140
42- private void generateDoneableClass (Symbol . ClassSymbol controllerClassSymbol ) {
41+ private void generateDoneableClass (TypeElement controllerClassSymbol ) {
4342 try {
4443 final TypeMirror resourceType = findResourceType (controllerClassSymbol );
45- Symbol . ClassSymbol customerResourceSymbol = ( Symbol . ClassSymbol ) processingEnv
44+ TypeElement customerResourceTypeElement = processingEnv
4645 .getElementUtils ()
4746 .getTypeElement (resourceType .toString ());
4847
4948 JavaFileObject builderFile = processingEnv .getFiler ()
50- .createSourceFile (customerResourceSymbol . className () + "Doneable" );
49+ .createSourceFile (customerResourceTypeElement . getSimpleName () + "Doneable" );
5150
5251 try (PrintWriter out = new PrintWriter (builderFile .openWriter ())) {
5352 final MethodSpec constructor = MethodSpec .constructorBuilder ()
@@ -57,46 +56,42 @@ private void generateDoneableClass(Symbol.ClassSymbol controllerClassSymbol) {
5756 .addStatement ("super(resource,function)" )
5857 .build ();
5958
60- final TypeSpec typeSpec = TypeSpec .classBuilder (customerResourceSymbol . name + "Doneable" )
59+ final TypeSpec typeSpec = TypeSpec .classBuilder (customerResourceTypeElement . getSimpleName () + "Doneable" )
6160 .addAnnotation (RegisterForReflection .class )
6261 .superclass (ParameterizedTypeName .get (ClassName .get (CustomResourceDoneable .class ), TypeName .get (resourceType )))
6362 .addModifiers (Modifier .PUBLIC )
6463 .addMethod (constructor )
6564 .build ();
6665
67- JavaFile file = JavaFile .builder (customerResourceSymbol .packge ().fullname .toString (), typeSpec )
66+ final PackageElement packageElement = processingEnv .getElementUtils ().getPackageOf (customerResourceTypeElement );
67+ JavaFile file = JavaFile .builder (packageElement .getQualifiedName ().toString (), typeSpec )
6868 .build ();
6969 file .writeTo (out );
7070 }
71- } catch (IOException ioException ) {
71+ } catch (Exception ioException ) {
7272 ioException .printStackTrace ();
73- } catch (Exception ex ) {
74- ex .printStackTrace ();
7573 }
7674 }
7775
78- private TypeMirror findResourceType (Symbol . ClassSymbol controllerClassSymbol ) throws Exception {
79- final Type controllerType = collectAllInterfaces (controllerClassSymbol )
76+ private TypeMirror findResourceType (TypeElement controllerClassSymbol ) throws Exception {
77+ final DeclaredType controllerType = collectAllInterfaces (controllerClassSymbol )
8078 .stream ()
8179 .filter (i -> i .toString ()
8280 .startsWith (ResourceController .class .getCanonicalName ())
8381 )
8482 .findFirst ()
8583 .orElseThrow (() -> new Exception ("ResourceController is not implemented by " + controllerClassSymbol .toString ()));
8684
87- final TypeMirror resourceType = controllerType .getTypeArguments ().get (0 );
88- return resourceType ;
85+ return controllerType .getTypeArguments ().get (0 );
8986 }
9087
91- private List <Type > collectAllInterfaces (Symbol .ClassSymbol classSymbol ) {
92- List <Type > interfaces = new ArrayList <>(classSymbol .getInterfaces ());
93- Symbol .ClassSymbol superclass = (Symbol .ClassSymbol ) processingEnv .getTypeUtils ().asElement (classSymbol .getSuperclass ());
94-
95- while (superclass != null ) {
96- interfaces .addAll (superclass .getInterfaces ());
97- superclass = (Symbol .ClassSymbol ) processingEnv .getTypeUtils ().asElement (superclass .getSuperclass ());
88+ private List <DeclaredType > collectAllInterfaces (TypeElement element ) {
89+ List <DeclaredType > interfaces = new ArrayList <>(element .getInterfaces ()).stream ().map (t -> (DeclaredType ) t ).collect (Collectors .toList ());
90+ TypeElement superclass = ((TypeElement ) ((DeclaredType ) element .getSuperclass ()).asElement ());
91+ while (superclass .getSuperclass ().getKind () != TypeKind .NONE ) {
92+ interfaces .addAll (superclass .getInterfaces ().stream ().map (t -> (DeclaredType ) t ).collect (Collectors .toList ()));
93+ superclass = ((TypeElement ) ((DeclaredType ) superclass .getSuperclass ()).asElement ());
9894 }
99-
10095 return interfaces ;
10196 }
10297}
0 commit comments