1- package io .javaoperatorsdk .operator .processing ;
1+ package io .javaoperatorsdk .operator .processing . annotation ;
22
33import com .google .auto .service .AutoService ;
44import com .squareup .javapoet .*;
55import io .fabric8 .kubernetes .api .builder .Function ;
66import io .fabric8 .kubernetes .client .CustomResourceDoneable ;
77import io .javaoperatorsdk .operator .api .ResourceController ;
8+
89import javax .annotation .processing .*;
910import javax .lang .model .SourceVersion ;
1011import javax .lang .model .element .*;
1112import javax .lang .model .type .DeclaredType ;
1213import javax .lang .model .type .TypeKind ;
1314import javax .lang .model .type .TypeMirror ;
1415import javax .tools .Diagnostic ;
15- import javax .tools .FileObject ;
1616import javax .tools .JavaFileObject ;
17- import javax .tools .StandardLocation ;
18- import java .io .IOException ;
1917import java .io .PrintWriter ;
2018import java .util .ArrayList ;
2119import java .util .HashSet ;
3028@ SupportedSourceVersion (SourceVersion .RELEASE_8 )
3129@ AutoService (Processor .class )
3230public class ControllerAnnotationProcessor extends AbstractProcessor {
33- private FileObject resource ;
34- PrintWriter printWriter = null ;
31+ private ControllersResourceWriter controllersResourceWriter ;
3532 private Set <String > generatedDoneableClassFiles = new HashSet <>();
3633
3734 @ Override
3835 public synchronized void init (ProcessingEnvironment processingEnv ) {
3936 super .init (processingEnv );
40- try {
41- resource = processingEnv .getFiler ().createResource (StandardLocation .CLASS_OUTPUT , "" , CONTROLLERS_RESOURCE_PATH );
42- } catch (IOException e ) {
43- throw new RuntimeException (e );
44- }
45- try {
46- printWriter = new PrintWriter (resource .openOutputStream ());
47- } catch (IOException e ) {
48- throw new RuntimeException (e );
49- }
37+ controllersResourceWriter = new ControllersResourceWriter (processingEnv );
38+ controllersResourceWriter .loadExistingMappings ();
5039 }
5140
5241 @ Override
@@ -57,15 +46,17 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
5746 = roundEnv .getElementsAnnotatedWith (annotation );
5847 annotatedElements .stream ().filter (element -> element .getKind ().equals (ElementKind .CLASS ))
5948 .map (e -> (TypeElement ) e )
60- .forEach (e -> this .generateDoneableClass (e , printWriter ));
49+ .forEach (e -> this .generateDoneableClass (e ));
6150 }
6251 } finally {
63- printWriter .close ();
52+ if (roundEnv .processingOver ()) {
53+ controllersResourceWriter .flush ();
54+ }
6455 }
6556 return true ;
6657 }
6758
68- private void generateDoneableClass (TypeElement controllerClassSymbol , PrintWriter printWriter ) {
59+ private void generateDoneableClass (TypeElement controllerClassSymbol ) {
6960 try {
7061 final TypeMirror resourceType = findResourceType (controllerClassSymbol );
7162
@@ -84,14 +75,14 @@ private void generateDoneableClass(TypeElement controllerClassSymbol, PrintWrite
8475 destinationClassFileName ,
8576 CONTROLLERS_RESOURCE_PATH )
8677 );
87- printWriter . println (controllerClassSymbol .getQualifiedName () + "," + customResourceType .toString ());
78+ controllersResourceWriter . add (controllerClassSymbol .getQualifiedName (). toString (), customResourceType .toString ());
8879 return ;
8980 }
9081 JavaFileObject builderFile = processingEnv .getFiler ()
9182 .createSourceFile (destinationClassFileName );
9283
9384 try (PrintWriter out = new PrintWriter (builderFile .openWriter ())) {
94- printWriter . println (controllerClassSymbol .getQualifiedName () + "," + customResourceType .toString ());
85+ controllersResourceWriter . add (controllerClassSymbol .getQualifiedName (). toString (), customResourceType .toString ());
9586 final MethodSpec constructor = MethodSpec .constructorBuilder ()
9687 .addModifiers (Modifier .PUBLIC )
9788 .addParameter (customResourceType , "resource" )
@@ -125,7 +116,6 @@ private TypeMirror findResourceType(TypeElement controllerClassSymbol) throws Ex
125116 )
126117 .findFirst ()
127118 .orElseThrow (() -> new Exception ("ResourceController is not implemented by " + controllerClassSymbol .toString ()));
128-
129119 return controllerType .getTypeArguments ().get (0 );
130120 } catch (Exception e ) {
131121 e .printStackTrace ();
0 commit comments