]> source.dussan.org Git - pf4j.git/commitdiff
Fix #363
authorDecebal Suiu <decebal.suiu@gmail.com>
Tue, 21 Apr 2020 12:30:35 +0000 (15:30 +0300)
committerDecebal Suiu <decebal.suiu@gmail.com>
Tue, 21 Apr 2020 12:30:35 +0000 (15:30 +0300)
pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java
pf4j/src/test/java/org/pf4j/AbstractExtensionFinderTest.java
pf4j/src/test/java/org/pf4j/ExtensionAnnotationProcessorTest.java

index e2bd32748d5144fcf51956c6dbfb74113b16086a..a156fab02872d9383373667c7ecaf6ed7a5d0e26 100644 (file)
@@ -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;
+                }
             }
         }
 
index 74ccadb4447ffcfc75bdaed58a6429aba1a6db2e..bcf153512e1727d3a60196c3a6a1f556ba02d1b0 100644 (file)
@@ -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 {
index 652c754a0b2dfdc3cbda4140b310edf48d20e1b4..f966523fa4f782137bdd213759c2c2f09c07f9af 100644 (file)
@@ -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();