Skip to content

Commit b879a97

Browse files
committed
Merge branch 'master' into event-sources
2 parents 5162f4d + f28a8cd commit b879a97

File tree

5 files changed

+83
-25
lines changed

5 files changed

+83
-25
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ class ControllerToCustomResourceMappingsProvider {
2020
static Map<Class<? extends ResourceController>, Class<? extends CustomResource>> provide(final String resourcePath) {
2121
Map<Class<? extends ResourceController>, Class<? extends CustomResource>> controllerToCustomResourceMappings = new HashMap();
2222
try {
23-
final Enumeration<URL> customResourcesMetadataList = ControllerUtils.class.getClassLoader().getResources(resourcePath);
23+
final var classLoader = Thread.currentThread().getContextClassLoader();
24+
final Enumeration<URL> customResourcesMetadataList = classLoader.getResources(resourcePath);
2425
for (Iterator<URL> it = customResourcesMetadataList.asIterator(); it.hasNext(); ) {
2526
URL url = it.next();
2627

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.fabric8.kubernetes.client.CustomResourceDoneable;
55
import io.javaoperatorsdk.operator.api.Controller;
66
import io.javaoperatorsdk.operator.api.ResourceController;
7+
import org.apache.commons.lang3.ClassUtils;
78

89
import java.util.Map;
910

@@ -54,7 +55,7 @@ static String getCrdName(ResourceController controller) {
5455
getCustomResourceDoneableClass(ResourceController<T> controller) {
5556
try {
5657
final Class<T> customResourceClass = getCustomResourceClass(controller);
57-
return (Class<? extends CustomResourceDoneable<T>>) Class.forName(customResourceClass.getCanonicalName() + "Doneable");
58+
return (Class<? extends CustomResourceDoneable<T>>) ClassUtils.getClass(customResourceClass.getCanonicalName() + "Doneable");
5859
} catch (ClassNotFoundException e) {
5960
e.printStackTrace();
6061
return null;

operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/ControllerAnnotationProcessor.java renamed to operator-framework/src/main/java/io/javaoperatorsdk/operator/processing/annotation/ControllerAnnotationProcessor.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1-
package io.javaoperatorsdk.operator.processing;
1+
package io.javaoperatorsdk.operator.processing.annotation;
22

33
import com.google.auto.service.AutoService;
44
import com.squareup.javapoet.*;
55
import io.fabric8.kubernetes.api.builder.Function;
66
import io.fabric8.kubernetes.client.CustomResourceDoneable;
77
import io.javaoperatorsdk.operator.api.ResourceController;
8+
89
import javax.annotation.processing.*;
910
import javax.lang.model.SourceVersion;
1011
import javax.lang.model.element.*;
1112
import javax.lang.model.type.DeclaredType;
1213
import javax.lang.model.type.TypeKind;
1314
import javax.lang.model.type.TypeMirror;
1415
import javax.tools.Diagnostic;
15-
import javax.tools.FileObject;
1616
import javax.tools.JavaFileObject;
17-
import javax.tools.StandardLocation;
18-
import java.io.IOException;
1917
import java.io.PrintWriter;
2018
import java.util.ArrayList;
2119
import java.util.HashSet;
@@ -30,23 +28,14 @@
3028
@SupportedSourceVersion(SourceVersion.RELEASE_8)
3129
@AutoService(Processor.class)
3230
public 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();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.javaoperatorsdk.operator.processing.annotation;
2+
3+
import javax.annotation.processing.ProcessingEnvironment;
4+
import javax.tools.StandardLocation;
5+
import java.io.BufferedReader;
6+
import java.io.IOException;
7+
import java.io.InputStreamReader;
8+
import java.io.PrintWriter;
9+
import java.util.Map;
10+
import java.util.concurrent.ConcurrentHashMap;
11+
import java.util.stream.Collectors;
12+
13+
import static io.javaoperatorsdk.operator.ControllerUtils.CONTROLLERS_RESOURCE_PATH;
14+
15+
class ControllersResourceWriter {
16+
private Map<String, String> mappings = new ConcurrentHashMap<>();
17+
private final ProcessingEnvironment processingEnvironment;
18+
19+
public ControllersResourceWriter(ProcessingEnvironment processingEnvironment) {
20+
this.processingEnvironment = processingEnvironment;
21+
}
22+
23+
public ControllersResourceWriter loadExistingMappings() {
24+
try {
25+
final var readonlyResource = processingEnvironment
26+
.getFiler()
27+
.getResource(StandardLocation.CLASS_OUTPUT, "", CONTROLLERS_RESOURCE_PATH);
28+
29+
final var bufferedReader = new BufferedReader(new InputStreamReader(readonlyResource.openInputStream()));
30+
final var existingLines = bufferedReader
31+
.lines()
32+
.map(l -> l.split(","))
33+
.collect(Collectors.toMap(parts -> parts[0], parts -> parts[1]));
34+
mappings.putAll(existingLines);
35+
} catch (IOException e) {
36+
}
37+
return this;
38+
}
39+
40+
public ControllersResourceWriter add(String controllerClassName, String customResourceTypeName) {
41+
this.mappings.put(controllerClassName, customResourceTypeName);
42+
return this;
43+
}
44+
45+
public void flush() {
46+
PrintWriter printWriter = null;
47+
try {
48+
final var resource = processingEnvironment
49+
.getFiler()
50+
.createResource(StandardLocation.CLASS_OUTPUT, "", CONTROLLERS_RESOURCE_PATH);
51+
printWriter = new PrintWriter(resource.openOutputStream());
52+
53+
54+
for (Map.Entry<String, String> entry : mappings.entrySet()) {
55+
printWriter.println(entry.getKey() + "," + entry.getValue());
56+
}
57+
} catch (IOException e) {
58+
e.printStackTrace();
59+
throw new RuntimeException(e);
60+
} finally {
61+
if (printWriter != null) {
62+
printWriter.close();
63+
}
64+
}
65+
}
66+
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/processing/ControllerAnnotationProcessorTest.java renamed to operator-framework/src/test/java/io/javaoperatorsdk/operator/processing/annotation/ControllerAnnotationProcessorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.operator.processing;
1+
package io.javaoperatorsdk.operator.processing.annotation;
22

33
import com.google.testing.compile.*;
44
import com.google.testing.compile.Compiler;

0 commit comments

Comments
 (0)