This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j-tools.git

commit 5fafddf785abeebb2f10f5d5597f7500d3eef50b
Author: Volkan Yazıcı <[email protected]>
AuthorDate: Wed Mar 13 11:33:54 2024 +0100

    Ignore deprecated factory methods in `log4j-docgen`
---
 .../logging/log4j/docgen/processor/Annotations.java   | 12 ++++++++++++
 .../log4j/docgen/processor/DescriptorGenerator.java   |  4 +++-
 .../java-of-log4j2/MyAppender.java                    | 18 ++++++++++++++++++
 .../java-of-log4j3/MyAppender.java                    | 19 +++++++++++++++++++
 4 files changed, 52 insertions(+), 1 deletion(-)

diff --git 
a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/Annotations.java
 
b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/Annotations.java
index 13efceb..cae6559 100644
--- 
a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/Annotations.java
+++ 
b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/Annotations.java
@@ -69,6 +69,8 @@ final class Annotations {
     private final Name name;
     private final Name value;
 
+    private final DeclaredType deprecatedAnnotation;
+
     private final TypeElement[] pluginAnnotationElements;
     // Contain the namespace of the plugin
     private final DeclaredType namespaceAnnotation;
@@ -89,6 +91,9 @@ final class Annotations {
         this.name = elements.getName("name");
         this.value = elements.getName("value");
 
+        this.deprecatedAnnotation =
+                (DeclaredType) 
elements.getTypeElement("java.lang.Deprecated").asType();
+
         final Collection<TypeElement> pluginAnnotations = new ArrayList<>();
         final TypeElement pluginV2Annotation = 
elements.getTypeElement(PLUGIN_V2_ANNOTATION_NAME);
         this.pluginV2Annotation = pluginV2Annotation != null ? (DeclaredType) 
pluginV2Annotation.asType() : null;
@@ -130,6 +135,13 @@ final class Annotations {
         return getAnnotationValue(element, pluginV2Annotation, category, 
namespaceAnnotation, value);
     }
 
+    public boolean hasDeprecatedAnnotation(final Element element) {
+        return 
elements.getAllAnnotationMirrors(element).stream().anyMatch(annotationMirror -> 
{
+            final DeclaredType annotationType = 
annotationMirror.getAnnotationType();
+            return types.isSameType(annotationType, deprecatedAnnotation);
+        });
+    }
+
     public boolean hasFactoryAnnotation(final Element element) {
         return hasAnyDirectAnnotation(element, factoryAnnotations);
     }
diff --git 
a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DescriptorGenerator.java
 
b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DescriptorGenerator.java
index 49e6014..12ad734 100644
--- 
a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DescriptorGenerator.java
+++ 
b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DescriptorGenerator.java
@@ -355,7 +355,9 @@ public class DescriptorGenerator extends AbstractProcessor {
         registerSupertypes(element).forEach(pluginType::addSupertype);
         // Plugin factory
         for (final Element member : element.getEnclosedElements()) {
-            if (annotations.hasFactoryAnnotation(member) && member instanceof 
ExecutableElement) {
+            if (member instanceof ExecutableElement
+                    && !annotations.hasDeprecatedAnnotation(member)
+                    && annotations.hasFactoryAnnotation(member)) {
                 final ExecutableElement executable = (ExecutableElement) 
member;
                 final Map<String, String> descriptions =
                         getParameterDescriptions(executable, imports, 
qualifiedClassName);
diff --git 
a/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j2/MyAppender.java
 
b/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j2/MyAppender.java
index acc4ccc..493ff00 100644
--- 
a/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j2/MyAppender.java
+++ 
b/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j2/MyAppender.java
@@ -20,9 +20,11 @@ import java.util.List;
 import java.util.Set;
 import javax.lang.model.element.TypeElement;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import 
org.apache.logging.log4j.core.config.plugins.validation.constraints.Required;
 
 /**
@@ -180,6 +182,22 @@ public final class MyAppender extends AbstractAppender 
implements Appender {
         return new Builder();
     }
 
+    /**
+     * This method is only here to test that this <em>deprecated</em> factory 
will be ignored.
+     *
+     * @param boolAttr A {@code boolean} attribute.
+     * @param byteAttr A {@code byte} attribute.
+     * @param charAttr A {@code char} attribute.
+     */
+    @Deprecated
+    @PluginFactory
+    public static MyOldLayout newLayout(
+            final @PluginAttribute(value = "boolAttr", defaultBoolean = false) 
boolean boolAttr,
+            final @PluginAttribute(value = "byteAttr", defaultByte = 'L') byte 
byteAttr,
+            final @PluginAttribute(value = "charAttr", defaultChar = 'L') char 
charAttr) {
+        return null;
+    }
+
     public static interface Appender2 {}
 
     public static interface Layout2 {}
diff --git 
a/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j3/MyAppender.java
 
b/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j3/MyAppender.java
index 70c45d1..1318ed2 100644
--- 
a/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j3/MyAppender.java
+++ 
b/log4j-docgen/src/test/resources/DescriptorGeneratorTest/java-of-log4j3/MyAppender.java
@@ -19,8 +19,11 @@ package example;
 import java.util.List;
 import java.util.Set;
 import javax.lang.model.element.TypeElement;
+
+import org.apache.logging.log4j.plugins.Factory;
 import org.apache.logging.log4j.plugins.Namespace;
 import org.apache.logging.log4j.plugins.Plugin;
+import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.plugins.PluginBuilderAttribute;
 import org.apache.logging.log4j.plugins.PluginElement;
 import org.apache.logging.log4j.plugins.PluginFactory;
@@ -183,6 +186,22 @@ public final class MyAppender extends AbstractAppender 
implements Appender {
         return new Builder();
     }
 
+    /**
+     * This method is only here to test that this <em>deprecated</em> factory 
will be ignored.
+     *
+     * @param boolAttr A {@code boolean} attribute.
+     * @param byteAttr A {@code byte} attribute.
+     * @param charAttr A {@code char} attribute.
+     */
+    @Factory
+    @Deprecated
+    public static MyOldLayout newAppender(
+            final @PluginAttribute(defaultBoolean = false) boolean boolAttr,
+            final @PluginAttribute(defaultByte = 'L') byte byteAttr,
+            final @PluginAttribute(defaultChar = 'L') char charAttr) {
+        return null;
+    }
+
     public static interface Appender2 {}
 
     public static interface Layout2 {}

Reply via email to