Author: mattsicker
Date: Tue May 27 23:48:47 2014
New Revision: 1597904

URL: http://svn.apache.org/r1597904
Log:
Change @PluginVisitorStrategy to use a Class instead of a String.

  - I can't believe I forgot about this feature!
  - Also added some type-safety checking using wildcard bounds.

Modified:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginAttribute.java
 Tue May 27 23:48:47 2014
@@ -22,6 +22,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import 
org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor;
+
 /**
  * Identifies a Plugin Attribute and its default value. Note that only one of 
the defaultFooValue attributes will be
  * used based on the type this annotation is attached to. Thus, for primitive 
types, the default<i>Type</i>Value
@@ -32,7 +34,7 @@ import java.lang.annotation.Target;
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.PARAMETER, ElementType.FIELD})
-@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor")
+@PluginVisitorStrategy(PluginAttributeVisitor.class)
 public @interface PluginAttribute {
 
     // TODO: could we allow a blank value and infer the attribute name through 
reflection?

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginConfiguration.java
 Tue May 27 23:48:47 2014
@@ -22,6 +22,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import 
org.apache.logging.log4j.core.config.plugins.visitors.PluginConfigurationVisitor;
+
 /**
  * Identifies a parameter or field as a Configuration.
  * @see org.apache.logging.log4j.core.config.Configuration
@@ -29,6 +31,6 @@ import java.lang.annotation.Target;
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.PARAMETER, ElementType.FIELD})
-@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginConfigurationVisitor")
+@PluginVisitorStrategy(PluginConfigurationVisitor.class)
 public @interface PluginConfiguration {
 }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginElement.java
 Tue May 27 23:48:47 2014
@@ -22,13 +22,15 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import 
org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor;
+
 /**
  * Identifies a parameter as a Plugin and corresponds with an XML element (or 
equivalent) in configuration files.
  */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.PARAMETER, ElementType.FIELD})
-@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor")
+@PluginVisitorStrategy(PluginElementVisitor.class)
 public @interface PluginElement {
 
     /**

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginNode.java
 Tue May 27 23:48:47 2014
@@ -22,12 +22,14 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.logging.log4j.core.config.plugins.visitors.PluginNodeVisitor;
+
 /**
  * Identifies a Plugin configuration Node.
  */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ElementType.PARAMETER, ElementType.FIELD})
-@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginNodeVisitor")
+@PluginVisitorStrategy(PluginNodeVisitor.class)
 public @interface PluginNode {
 }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginValue.java
 Tue May 27 23:48:47 2014
@@ -22,6 +22,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import 
org.apache.logging.log4j.core.config.plugins.visitors.PluginValueVisitor;
+
 /**
  * Identifies a parameter as a value. These correspond with property values 
generally, but are meant as values to be
  * used as a placeholder value somewhere.
@@ -31,7 +33,7 @@ import java.lang.annotation.Target;
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.PARAMETER)
-@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginValueVisitor")
+@PluginVisitorStrategy(PluginValueVisitor.class)
 public @interface PluginValue {
 
     String value();

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java
 Tue May 27 23:48:47 2014
@@ -17,12 +17,15 @@
 
 package org.apache.logging.log4j.core.config.plugins;
 
+import java.lang.annotation.Annotation;
 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;
 
+import org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor;
+
 /**
  * Meta-annotation to denote the class name to use that implements
  * {@link org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor} 
for the annotated annotation.
@@ -33,8 +36,9 @@ import java.lang.annotation.Target;
 public @interface PluginVisitorStrategy {
 
     /**
-     * The class name to use that implements {@link 
org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor}
-     * for the given annotation.
+     * The class to use that implements {@link 
org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor}
+     * for the given annotation. The generic type in {@code PluginVisitor} 
should match the annotation this annotation
+     * is applied to.
      */
-    String value();
+    Class<? extends PluginVisitor<? extends Annotation>> value();
 }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/SensitivePluginAttribute.java
 Tue May 27 23:48:47 2014
@@ -23,6 +23,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import 
org.apache.logging.log4j.core.config.plugins.visitors.SensitivePluginAttributeVisitor;
+
 // TODO: add this to @PluginAttribute instead? or make this an additional 
annotation instead of a replacement
 /**
  * Identifies a sensitive PluginAttribute. This means that the value should 
NOT be displayed in log messages anywhere
@@ -34,7 +36,7 @@ import java.lang.annotation.Target;
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.PARAMETER)
-@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.SensitivePluginAttributeVisitor")
+@PluginVisitorStrategy(SensitivePluginAttributeVisitor.class)
 public @interface SensitivePluginAttribute {
     String value();
 

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java?rev=1597904&r1=1597903&r2=1597904&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
 Tue May 27 23:48:47 2014
@@ -49,16 +49,11 @@ public final class PluginVisitors {
             LOGGER.debug("No PluginVisitorStrategy found on annotation [{}]. 
Ignoring.", annotation);
             return null;
         }
-        final String visitorClassName = strategy.value();
+        final Class<? extends PluginVisitor<A>> visitorClass = (Class<? 
extends PluginVisitor<A>>) strategy.value();
         try {
-            // if a PluginVisitor is in a different JAR than log4j-core, it 
can be safely assumed that the
-            // corresponding annotation is in the same JAR as the 
PluginVisitor implementation. thus, we use that
-            // ClassLoader instead of any default one
-            final Class<? extends PluginVisitor<A>> visitorClass =
-                (Class<? extends PluginVisitor<A>>) 
annotation.getClassLoader().loadClass(visitorClassName);
             return visitorClass.newInstance();
         } catch (final Exception e) {
-            LOGGER.error("Error loading PluginVisitor [{}] for annotation 
[{}].", visitorClassName, annotation, e);
+            LOGGER.error("Error loading PluginVisitor [{}] for annotation 
[{}].", visitorClass, annotation, e);
             return null;
         }
     }


Reply via email to