1
- package io .javaoperatorsdk .operator .processing ;
1
+ package io .javaoperatorsdk .operator .processing . annotation ;
2
2
3
3
import com .google .auto .service .AutoService ;
4
4
import com .squareup .javapoet .*;
5
5
import io .fabric8 .kubernetes .api .builder .Function ;
6
6
import io .fabric8 .kubernetes .client .CustomResourceDoneable ;
7
7
import io .javaoperatorsdk .operator .api .ResourceController ;
8
+
8
9
import javax .annotation .processing .*;
9
10
import javax .lang .model .SourceVersion ;
10
11
import javax .lang .model .element .*;
11
12
import javax .lang .model .type .DeclaredType ;
12
13
import javax .lang .model .type .TypeKind ;
13
14
import javax .lang .model .type .TypeMirror ;
14
15
import javax .tools .Diagnostic ;
15
- import javax .tools .FileObject ;
16
16
import javax .tools .JavaFileObject ;
17
- import javax .tools .StandardLocation ;
18
- import java .io .IOException ;
19
17
import java .io .PrintWriter ;
20
18
import java .util .ArrayList ;
21
19
import java .util .HashSet ;
30
28
@ SupportedSourceVersion (SourceVersion .RELEASE_8 )
31
29
@ AutoService (Processor .class )
32
30
public class ControllerAnnotationProcessor extends AbstractProcessor {
33
- private FileObject resource ;
34
- PrintWriter printWriter = null ;
31
+ private ControllersResourceWriter controllersResourceWriter ;
35
32
private Set <String > generatedDoneableClassFiles = new HashSet <>();
36
33
37
34
@ Override
38
35
public synchronized void init (ProcessingEnvironment processingEnv ) {
39
36
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 ();
50
39
}
51
40
52
41
@ Override
@@ -57,15 +46,17 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
57
46
= roundEnv .getElementsAnnotatedWith (annotation );
58
47
annotatedElements .stream ().filter (element -> element .getKind ().equals (ElementKind .CLASS ))
59
48
.map (e -> (TypeElement ) e )
60
- .forEach (e -> this .generateDoneableClass (e , printWriter ));
49
+ .forEach (e -> this .generateDoneableClass (e ));
61
50
}
62
51
} finally {
63
- printWriter .close ();
52
+ if (roundEnv .processingOver ()) {
53
+ controllersResourceWriter .flush ();
54
+ }
64
55
}
65
56
return true ;
66
57
}
67
58
68
- private void generateDoneableClass (TypeElement controllerClassSymbol , PrintWriter printWriter ) {
59
+ private void generateDoneableClass (TypeElement controllerClassSymbol ) {
69
60
try {
70
61
final TypeMirror resourceType = findResourceType (controllerClassSymbol );
71
62
@@ -84,14 +75,14 @@ private void generateDoneableClass(TypeElement controllerClassSymbol, PrintWrite
84
75
destinationClassFileName ,
85
76
CONTROLLERS_RESOURCE_PATH )
86
77
);
87
- printWriter . println (controllerClassSymbol .getQualifiedName () + "," + customResourceType .toString ());
78
+ controllersResourceWriter . add (controllerClassSymbol .getQualifiedName (). toString (), customResourceType .toString ());
88
79
return ;
89
80
}
90
81
JavaFileObject builderFile = processingEnv .getFiler ()
91
82
.createSourceFile (destinationClassFileName );
92
83
93
84
try (PrintWriter out = new PrintWriter (builderFile .openWriter ())) {
94
- printWriter . println (controllerClassSymbol .getQualifiedName () + "," + customResourceType .toString ());
85
+ controllersResourceWriter . add (controllerClassSymbol .getQualifiedName (). toString (), customResourceType .toString ());
95
86
final MethodSpec constructor = MethodSpec .constructorBuilder ()
96
87
.addModifiers (Modifier .PUBLIC )
97
88
.addParameter (customResourceType , "resource" )
@@ -125,7 +116,6 @@ private TypeMirror findResourceType(TypeElement controllerClassSymbol) throws Ex
125
116
)
126
117
.findFirst ()
127
118
.orElseThrow (() -> new Exception ("ResourceController is not implemented by " + controllerClassSymbol .toString ()));
128
-
129
119
return controllerType .getTypeArguments ().get (0 );
130
120
} catch (Exception e ) {
131
121
e .printStackTrace ();
0 commit comments