Skip to content

Commit 5dc850a

Browse files
committed
trying to fix test bug
1 parent a5b96ac commit 5dc850a

File tree

10 files changed

+97
-33
lines changed

10 files changed

+97
-33
lines changed

aptools/src/main/java/com/mageddo/aptools/ClassUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,8 @@ public static Class<?> forName(String className) {
2929
throw new RuntimeException(e);
3030
}
3131
}
32+
33+
public static boolean doClassOwnPossibleSubClassOrIsTheSame(String expected, String current) {
34+
return current.startsWith(expected); // todo talvez tenha que ser melhor validado
35+
}
3236
}

aptools/src/main/java/com/mageddo/aptools/elements/ElementFinder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,7 @@ private static <T>void find(Element e, Predicate<Element> predicate, List<Elemen
4040
}
4141
}
4242

43+
public static List<Element> findNestedClasses(Element element) {
44+
return find(element, ElementKind.CLASS);
45+
}
4346
}

aptools/src/main/java/com/mageddo/aptools/elements/ElementUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Arrays;
44
import java.util.HashSet;
5+
import java.util.Objects;
56
import java.util.Set;
67

78
import javax.lang.model.element.Element;
@@ -41,4 +42,7 @@ private static boolean isTypeElement(Element e) {
4142
return TYPE_ELEMENTS.contains(e.getKind());
4243
}
4344

45+
public static boolean isEquals(Element element, String className) {
46+
return Objects.equals(ElementUtils.toClassName(element), className);
47+
}
4448
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.acme;
2+
3+
import nativeimage.Reflection;
4+
5+
@Reflection(scanClass = ClassWithNestedClass.class)
6+
public class ClassWithNestedClass {
7+
public static class NestedClass {
8+
9+
}
10+
}

reflection-config-generator/acceptance-tests/src/test/java/com/acme/ReflectionConfigGenerationTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
package com.acme;
22

3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.Comparator;
6+
import java.util.List;
7+
38
import com.fasterxml.jackson.core.JsonProcessingException;
49
import com.fasterxml.jackson.databind.JsonNode;
510
import com.fasterxml.jackson.databind.ObjectMapper;
611
import com.fasterxml.jackson.databind.SerializationFeature;
7-
import org.junit.jupiter.api.Test;
812

9-
import java.util.ArrayList;
10-
import java.util.Collections;
11-
import java.util.Comparator;
12-
import java.util.List;
13+
import org.junit.jupiter.api.Test;
1314

1415
import static com.acme.TestUtils.getResourceAsString;
15-
import static com.acme.TestUtils.sortJson;
1616
import static org.junit.jupiter.api.Assertions.assertEquals;
1717

1818
class ReflectionConfigGenerationTest {
@@ -29,7 +29,7 @@ void mustConfigureReflectJson() throws JsonProcessingException {
2929
final List<JsonNode> items = readReflectConfig();
3030

3131
// assert
32-
assertEquals(10, items.size());
32+
assertEquals(11, items.size());
3333
assertEquals(getResourceAsString("/reflection-config-generation-test/001.json"), objectMapper.writeValueAsString(items));
3434
}
3535

reflection-config-generator/src/main/java/nativeimage/core/NativeImageReflectionConfigGenerator.java

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import javax.annotation.processing.ProcessingEnvironment;
99
import javax.annotation.processing.RoundEnvironment;
1010
import javax.lang.model.element.Element;
11-
import javax.lang.model.element.ElementKind;
1211
import javax.lang.model.element.TypeElement;
1312

1413
import com.mageddo.aptools.ClassUtils;
@@ -20,8 +19,11 @@
2019

2120
import nativeimage.Reflection;
2221
import nativeimage.Reflections;
23-
import nativeimage.core.domain.ReflectionConfig;
22+
import static com.mageddo.aptools.elements.ElementUtils.toClassName;
2423
import static nativeimage.core.NativeImages.solvePath;
24+
import nativeimage.core.domain.ReflectionConfig;
25+
import nativeimage.core.io.NativeImagePropertiesWriter;
26+
import nativeimage.core.io.ReflectionConfigWriter;
2527
import static nativeimage.thirdparty.ThirdPartyPackageScanner.findPackageClasses;
2628

2729
/**
@@ -115,20 +117,53 @@ void addClass(Class<?> clazz, Reflection reflection) {
115117
}
116118
}
117119

118-
void addMatchingProjectSourceElements(RoundEnvironment roundEnv, Element element,
119-
Reflection reflection) {
120+
void addMatchingProjectSourceElements(
121+
RoundEnvironment roundEnv, Element element, Reflection reflection
122+
) {
120123
if (reflection.scanPackage().isEmpty()) {
121-
this.addElement(element, reflection);
122-
// todo must add nested classes too
124+
final Element found = this.chooseElement(element, reflection, roundEnv);
125+
if (found != null) {
126+
this.addToElementAndNested(reflection, found);
127+
}
123128
} else {
124129
for (final Element nestedElement : roundEnv.getRootElements()) {
125-
this.addElement(nestedElement, reflection);
126-
for (final Element innerClass : ElementFinder.find(nestedElement, ElementKind.CLASS)) {
127-
this.addElement(innerClass, reflection);
128-
logger.debug("m=addMatchingProjectSourceElements, innerClass=%s", innerClass);
130+
this.addToElementAndNested(reflection, nestedElement);
131+
}
132+
}
133+
}
134+
135+
private Element chooseElement(
136+
Element element, Reflection reflection, RoundEnvironment roundEnv
137+
) {
138+
if (reflection.scanClass() != Void.class) {
139+
return this.findElementAndNested(reflection.scanClass().getName(), roundEnv);
140+
} else if (!reflection.scanClassName().isEmpty()) {
141+
return this.findElementAndNested(reflection.scanClassName(), roundEnv);
142+
}
143+
return element;
144+
}
145+
146+
private Element findElementAndNested(String className, RoundEnvironment roundEnv) {
147+
for (Element element : roundEnv.getRootElements()) {
148+
if (ElementUtils.isEquals(element, className)) {
149+
return element;
150+
}
151+
for (Element nestedClass : ElementFinder.findNestedClasses(element)) {
152+
if (ElementUtils.isEquals(element, className)) {
153+
return nestedClass;
129154
}
130155
}
131156
}
157+
logger.info("status=classNotFound, class={}", className);
158+
return null;
159+
}
160+
161+
private void addToElementAndNested(Reflection reflection, Element element) {
162+
this.addElement(element, reflection);
163+
for (final Element innerClass : ElementFinder.findNestedClasses(element)) {
164+
this.addElement(innerClass, reflection);
165+
logger.debug("m=addMatchingProjectSourceElements, innerClass=%s", innerClass);
166+
}
132167
}
133168

134169
private void addElement(Element element, Reflection annotation) {
@@ -141,8 +176,7 @@ private void addElement(Element element, Reflection annotation) {
141176
);
142177
this.classPackage = this.classPackage == null ?
143178
ClassUtils.getClassPackage(element.toString()) : this.classPackage;
144-
for (ReflectionConfig config : ReflectionConfigBuilder.of(annotation,
145-
ElementUtils.toClassName(element))) {
179+
for (ReflectionConfig config : ReflectionConfigBuilder.of(annotation, toClassName(element))) {
146180
this.classes.remove(config);
147181
this.classes.add(config);
148182
}

reflection-config-generator/src/main/java/nativeimage/core/TypeBuilder.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import com.mageddo.aptools.ClassUtils;
99

10+
import org.apache.commons.lang3.StringUtils;
11+
1012
import nativeimage.Reflection;
1113

1214
public final class TypeBuilder {
@@ -16,15 +18,16 @@ private TypeBuilder() {
1618
}
1719

1820
public static Set<String> of(Reflection reflectionAnn, String clazzName) {
19-
if(!reflectionAnn.scanClassName().equals("")){
20-
return toSet(reflectionAnn.scanClassName());
21-
}
22-
final String scanClass = getScanClass(reflectionAnn);
23-
if(!scanClass.equals(Void.class.getName())){
24-
return toSet(scanClass);
21+
final String expectedClassName = StringUtils.firstNonBlank(
22+
getScanClass(reflectionAnn), reflectionAnn.scanClassName()
23+
);
24+
if(StringUtils.isNotBlank(expectedClassName)){
25+
if(ClassUtils.doClassOwnPossibleSubClassOrIsTheSame(expectedClassName, clazzName)){
26+
return toSet(clazzName);
27+
}
2528
}
26-
if(!reflectionAnn.scanPackage().equals("")){
27-
if(ClassUtils.doPackageOwnClass(reflectionAnn.scanPackage(), clazzName)){
29+
if (StringUtils.isNotEmpty(reflectionAnn.scanPackage())) {
30+
if (ClassUtils.doPackageOwnClass(reflectionAnn.scanPackage(), clazzName)) {
2831
return toSet(clazzName);
2932
}
3033
return Collections.emptySet();
@@ -33,9 +36,12 @@ public static Set<String> of(Reflection reflectionAnn, String clazzName) {
3336
}
3437

3538
private static String getScanClass(Reflection reflectionAnn) {
39+
if (reflectionAnn.scanClass() == Void.class) {
40+
return null;
41+
}
3642
try {
3743
return reflectionAnn.scanClass().getName();
38-
} catch (MirroredTypeException e){
44+
} catch (MirroredTypeException e) {
3945
return e.getTypeMirror().toString();
4046
}
4147
}

reflection-config-generator/src/main/java/nativeimage/core/NativeImagePropertiesWriter.java renamed to reflection-config-generator/src/main/java/nativeimage/core/io/NativeImagePropertiesWriter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package nativeimage.core;
1+
package nativeimage.core.io;
22

33
import java.io.IOException;
44
import java.io.Writer;
@@ -10,6 +10,8 @@
1010

1111
import com.mageddo.aptools.IoUtils;
1212

13+
import nativeimage.core.NativeImages;
14+
1315
public class NativeImagePropertiesWriter {
1416
public static URI write(
1517
ProcessingEnvironment processingEnv, String packageName, String... reflectionResources

reflection-config-generator/src/main/java/nativeimage/core/ReflectionConfigFileCreator.java renamed to reflection-config-generator/src/main/java/nativeimage/core/io/ReflectionConfigFileCreator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package nativeimage.core;
1+
package nativeimage.core.io;
22

33
import java.io.IOException;
44

reflection-config-generator/src/main/java/nativeimage/core/ReflectionConfigWriter.java renamed to reflection-config-generator/src/main/java/nativeimage/core/io/ReflectionConfigWriter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package nativeimage.core;
1+
package nativeimage.core.io;
22

33
import java.io.Closeable;
44
import java.io.IOException;
@@ -10,8 +10,9 @@
1010

1111
import com.fasterxml.jackson.databind.SequenceWriter;
1212

13-
import static nativeimage.core.ReflectionConfigFileCreator.buildFileObject;
14-
import static nativeimage.core.ReflectionConfigFileCreator.createReflectionConfigWriter;
13+
import static nativeimage.core.io.ReflectionConfigFileCreator.buildFileObject;
14+
import static nativeimage.core.io.ReflectionConfigFileCreator.createReflectionConfigWriter;
15+
import nativeimage.core.ReflectionConfigAppender;
1516
import nativeimage.core.domain.ReflectionConfig;
1617

1718
public class ReflectionConfigWriter implements ReflectionConfigAppender, Closeable {

0 commit comments

Comments
 (0)