aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDecebal Suiu <decebal.suiu@gmail.com>2020-04-21 15:30:35 +0300
committerDecebal Suiu <decebal.suiu@gmail.com>2020-04-21 15:30:35 +0300
commitec03fd022f032abc1669d0ff485c60db5ad1b5c3 (patch)
treec93c22ed5a7d06f173dc8be79c666f608a70433a
parent42bb7976de80ac8711f62d2278c234c240987b85 (diff)
downloadpf4j-ec03fd022f032abc1669d0ff485c60db5ad1b5c3.tar.gz
pf4j-ec03fd022f032abc1669d0ff485c60db5ad1b5c3.zip
Fix #363
-rw-r--r--pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java8
-rw-r--r--pf4j/src/test/java/org/pf4j/AbstractExtensionFinderTest.java17
-rw-r--r--pf4j/src/test/java/org/pf4j/ExtensionAnnotationProcessorTest.java21
3 files changed, 43 insertions, 3 deletions
diff --git a/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java b/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java
index e2bd327..a156fab 100644
--- a/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java
+++ b/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java
@@ -356,9 +356,11 @@ public abstract class AbstractExtensionFinder implements ExtensionFinder, Plugin
// search recursively through all annotations
for (Annotation annotation : clazz.getAnnotations()) {
Class<? extends Annotation> annotationClass = annotation.annotationType();
- Extension extensionAnnotation = findExtensionAnnotation(annotationClass);
- if (extensionAnnotation != null) {
- return extensionAnnotation;
+ if (!annotationClass.getName().startsWith("java.lang.annotation")) {
+ Extension extensionAnnotation = findExtensionAnnotation(annotationClass);
+ if (extensionAnnotation != null) {
+ return extensionAnnotation;
+ }
}
}
diff --git a/pf4j/src/test/java/org/pf4j/AbstractExtensionFinderTest.java b/pf4j/src/test/java/org/pf4j/AbstractExtensionFinderTest.java
index 74ccadb..bcf1535 100644
--- a/pf4j/src/test/java/org/pf4j/AbstractExtensionFinderTest.java
+++ b/pf4j/src/test/java/org/pf4j/AbstractExtensionFinderTest.java
@@ -37,6 +37,7 @@ import java.util.Set;
import static com.google.testing.compile.CompilationSubject.assertThat;
import static com.google.testing.compile.Compiler.javac;
+import static org.junit.Assert.assertNull;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.eq;
@@ -217,6 +218,22 @@ public class AbstractExtensionFinderTest {
assertNotNull(extension);
}
+ @Test
+ public void findExtensionAnnotationThatMissing() throws Exception {
+ Compilation compilation = javac().compile(ExtensionAnnotationProcessorTest.Greeting,
+ ExtensionAnnotationProcessorTest.SpinnakerExtension_NoExtension,
+ ExtensionAnnotationProcessorTest.WhazzupGreeting_SpinnakerExtension);
+ assertThat(compilation).succeededWithoutWarnings();
+ ImmutableList<JavaFileObject> generatedFiles = compilation.generatedFiles();
+ assertEquals(3, generatedFiles.size());
+
+ JavaFileObjectClassLoader classLoader = new JavaFileObjectClassLoader();
+ Map<String, Class<?>> loadedClasses = classLoader.loadClasses(new ArrayList<>(generatedFiles));
+ Class<?> clazz = loadedClasses.get("test.WhazzupGreeting");
+ Extension extension = AbstractExtensionFinder.findExtensionAnnotation(clazz);
+ assertNull(extension);
+ }
+
static class JavaFileObjectClassLoader extends ClassLoader {
public Map<String, Class<?>> loadClasses(List<JavaFileObject> classes) throws IOException {
diff --git a/pf4j/src/test/java/org/pf4j/ExtensionAnnotationProcessorTest.java b/pf4j/src/test/java/org/pf4j/ExtensionAnnotationProcessorTest.java
index 652c754..f966523 100644
--- a/pf4j/src/test/java/org/pf4j/ExtensionAnnotationProcessorTest.java
+++ b/pf4j/src/test/java/org/pf4j/ExtensionAnnotationProcessorTest.java
@@ -103,6 +103,27 @@ public class ExtensionAnnotationProcessorTest {
" }",
"}");
+ /**
+ * The same like {@link #SpinnakerExtension} but without {@code Extension} annotation.
+ */
+ public static final JavaFileObject SpinnakerExtension_NoExtension = JavaFileObjects.forSourceLines(
+ "SpinnakerExtension",
+ "package test;",
+ "",
+ "import org.pf4j.Extension;",
+ "import java.lang.annotation.Documented;",
+ "import java.lang.annotation.ElementType;",
+ "import java.lang.annotation.Retention;",
+ "import java.lang.annotation.RetentionPolicy;",
+ "import java.lang.annotation.Target;",
+ "",
+// "@Extension",
+ "@Retention(RetentionPolicy.RUNTIME)",
+ "@Target(ElementType.TYPE)",
+ "@Documented",
+ "public @interface SpinnakerExtension {",
+ "}");
+
@Test
public void getSupportedAnnotationTypes() {
ExtensionAnnotationProcessor instance = new ExtensionAnnotationProcessor();