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;
}
}