You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/04/06 07:36:30 UTC
svn commit: r1585249 - in
/logging/log4j/log4j2/trunk/log4j-plugin-processor/src:
main/java/org/apache/logging/log4j/core/config/plugins/processor/
test/java/org/apache/logging/log4j/core/config/plugins/processor/
Author: mattsicker
Date: Sun Apr 6 05:36:30 2014
New Revision: 1585249
URL: http://svn.apache.org/r1585249
Log:
Fix problem with nested plugin classes.
Modified:
logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java
logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java
logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java
Modified: logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java?rev=1585249&r1=1585248&r2=1585249&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java (original)
+++ logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java Sun Apr 6 05:36:30 2014
@@ -35,6 +35,7 @@ import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementVisitor;
import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.Elements;
import javax.lang.model.util.SimpleElementVisitor6;
import javax.tools.FileObject;
import org.apache.logging.log4j.core.config.plugins.Plugin;
@@ -62,10 +63,6 @@ public class PluginProcessor extends Abs
private final ConcurrentMap<String, ConcurrentMap<String, PluginEntry>> pluginCategories =
new ConcurrentHashMap<String, ConcurrentMap<String, PluginEntry>>();
- private final ElementVisitor<PluginEntry, Plugin> pluginVisitor =
- new PluginElementVisitor();
- private final ElementVisitor<Collection<PluginEntry>, Plugin> pluginAliasesVisitor =
- new PluginAliasesElementVisitor();
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
@@ -88,6 +85,11 @@ public class PluginProcessor extends Abs
}
private void collectPlugins(final Iterable<? extends Element> elements) {
+ final Elements elementUtils = processingEnv.getElementUtils();
+ final ElementVisitor<PluginEntry, Plugin> pluginVisitor =
+ new PluginElementVisitor(elementUtils);
+ final ElementVisitor<Collection<PluginEntry>, Plugin> pluginAliasesVisitor =
+ new PluginAliasesElementVisitor(elementUtils);
for (final Element element : elements) {
final Plugin plugin = element.getAnnotation(Plugin.class);
final PluginEntry entry = element.accept(pluginVisitor, plugin);
@@ -128,6 +130,13 @@ public class PluginProcessor extends Abs
* ElementVisitor to scan the Plugin annotation.
*/
private static class PluginElementVisitor extends SimpleElementVisitor6<PluginEntry, Plugin> {
+
+ private final Elements elements;
+
+ private PluginElementVisitor(final Elements elements) {
+ this.elements = elements;
+ }
+
@Override
public PluginEntry visitType(final TypeElement e, final Plugin plugin) {
if (plugin == null) {
@@ -135,7 +144,7 @@ public class PluginProcessor extends Abs
}
final PluginEntry entry = new PluginEntry();
entry.setKey(plugin.name().toLowerCase());
- entry.setClassName(e.getQualifiedName().toString());
+ entry.setClassName(elements.getBinaryName(e).toString());
entry.setName(Plugin.EMPTY.equals(plugin.elementType()) ? plugin.name() : plugin.elementType());
entry.setPrintable(plugin.printObject());
entry.setDefer(plugin.deferChildren());
@@ -148,8 +157,12 @@ public class PluginProcessor extends Abs
* ElementVisitor to scan the PluginAliases annotation.
*/
private static class PluginAliasesElementVisitor extends SimpleElementVisitor6<Collection<PluginEntry>, Plugin> {
- protected PluginAliasesElementVisitor() {
+
+ private final Elements elements;
+
+ private PluginAliasesElementVisitor(final Elements elements) {
super(Collections.<PluginEntry>emptyList());
+ this.elements = elements;
}
@Override
@@ -162,7 +175,7 @@ public class PluginProcessor extends Abs
for (final String alias : aliases.value()) {
final PluginEntry entry = new PluginEntry();
entry.setKey(alias.toLowerCase());
- entry.setClassName(e.getQualifiedName().toString());
+ entry.setClassName(elements.getBinaryName(e).toString());
entry.setName(Plugin.EMPTY.equals(plugin.elementType()) ? alias : plugin.elementType());
entry.setPrintable(plugin.printObject());
entry.setDefer(plugin.deferChildren());
Modified: logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java?rev=1585249&r1=1585248&r2=1585249&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java (original)
+++ logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java Sun Apr 6 05:36:30 2014
@@ -26,4 +26,8 @@ import org.apache.logging.log4j.core.con
@Plugin(name = "Fake", category = "Test")
@PluginAliases({"AnotherFake", "StillFake"})
public class FakePlugin {
+
+ @Plugin(name = "Nested", category = "Test")
+ public static class Nested {
+ }
}
Modified: logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java?rev=1585249&r1=1585248&r2=1585249&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java (original)
+++ logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java Sun Apr 6 05:36:30 2014
@@ -103,9 +103,22 @@ public class PluginProcessorTest {
assertNotNull("The plugin '" + name.toLowerCase() + "' was not found.", fake);
assertEquals(FakePlugin.class.getName(), fake.getClassName());
assertEquals(name.toLowerCase(), fake.getKey());
- assertEquals("", p.elementType());
+ assertEquals(Plugin.EMPTY, p.elementType());
assertEquals(name, fake.getName());
assertEquals(p.printObject(), fake.isPrintable());
assertEquals(p.deferChildren(), fake.isDefer());
}
+
+ @Test
+ public void testNestedPlugin() throws Exception {
+ final Plugin p = FakePlugin.Nested.class.getAnnotation(Plugin.class);
+ final PluginEntry nested = pluginCategories.get(p.category()).get(p.name().toLowerCase());
+ assertNotNull(nested);
+ assertEquals(p.name().toLowerCase(), nested.getKey());
+ assertEquals(FakePlugin.Nested.class.getName(), nested.getClassName());
+ assertEquals(p.name(), nested.getName());
+ assertEquals(Plugin.EMPTY, p.elementType());
+ assertEquals(p.printObject(), nested.isPrintable());
+ assertEquals(p.deferChildren(), nested.isDefer());
+ }
}
Re: svn commit: r1585249 - in /logging/log4j/log4j2/trunk/log4j-plugin-processor/src:
main/java/org/apache/logging/log4j/core/config/plugins/processor/ test/java/org/apache/logging/log4j/core/config/plugins/processor/
Posted by Matt Sicker <ma...@apache.org>.
This solved the issue it looks like. Can't use a canonical name for
Class.forName() et al it seems.
On 6 April 2014 00:36, <ma...@apache.org> wrote:
> Author: mattsicker
> Date: Sun Apr 6 05:36:30 2014
> New Revision: 1585249
>
> URL: http://svn.apache.org/r1585249
> Log:
> Fix problem with nested plugin classes.
>
> Modified:
>
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java
>
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java
>
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java
>
> Modified:
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java
> URL:
> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java?rev=1585249&r1=1585248&r2=1585249&view=diff
>
> ==============================================================================
> ---
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java
> (original)
> +++
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java
> Sun Apr 6 05:36:30 2014
> @@ -35,6 +35,7 @@ import javax.lang.model.SourceVersion;
> import javax.lang.model.element.Element;
> import javax.lang.model.element.ElementVisitor;
> import javax.lang.model.element.TypeElement;
> +import javax.lang.model.util.Elements;
> import javax.lang.model.util.SimpleElementVisitor6;
> import javax.tools.FileObject;
> import org.apache.logging.log4j.core.config.plugins.Plugin;
> @@ -62,10 +63,6 @@ public class PluginProcessor extends Abs
>
> private final ConcurrentMap<String, ConcurrentMap<String,
> PluginEntry>> pluginCategories =
> new ConcurrentHashMap<String, ConcurrentMap<String,
> PluginEntry>>();
> - private final ElementVisitor<PluginEntry, Plugin> pluginVisitor =
> - new PluginElementVisitor();
> - private final ElementVisitor<Collection<PluginEntry>, Plugin>
> pluginAliasesVisitor =
> - new PluginAliasesElementVisitor();
>
> @Override
> public boolean process(final Set<? extends TypeElement> annotations,
> final RoundEnvironment roundEnv) {
> @@ -88,6 +85,11 @@ public class PluginProcessor extends Abs
> }
>
> private void collectPlugins(final Iterable<? extends Element>
> elements) {
> + final Elements elementUtils = processingEnv.getElementUtils();
> + final ElementVisitor<PluginEntry, Plugin> pluginVisitor =
> + new PluginElementVisitor(elementUtils);
> + final ElementVisitor<Collection<PluginEntry>, Plugin>
> pluginAliasesVisitor =
> + new PluginAliasesElementVisitor(elementUtils);
> for (final Element element : elements) {
> final Plugin plugin = element.getAnnotation(Plugin.class);
> final PluginEntry entry = element.accept(pluginVisitor,
> plugin);
> @@ -128,6 +130,13 @@ public class PluginProcessor extends Abs
> * ElementVisitor to scan the Plugin annotation.
> */
> private static class PluginElementVisitor extends
> SimpleElementVisitor6<PluginEntry, Plugin> {
> +
> + private final Elements elements;
> +
> + private PluginElementVisitor(final Elements elements) {
> + this.elements = elements;
> + }
> +
> @Override
> public PluginEntry visitType(final TypeElement e, final Plugin
> plugin) {
> if (plugin == null) {
> @@ -135,7 +144,7 @@ public class PluginProcessor extends Abs
> }
> final PluginEntry entry = new PluginEntry();
> entry.setKey(plugin.name().toLowerCase());
> - entry.setClassName(e.getQualifiedName().toString());
> + entry.setClassName(elements.getBinaryName(e).toString());
> entry.setName(Plugin.EMPTY.equals(plugin.elementType()) ?
> plugin.name() : plugin.elementType());
> entry.setPrintable(plugin.printObject());
> entry.setDefer(plugin.deferChildren());
> @@ -148,8 +157,12 @@ public class PluginProcessor extends Abs
> * ElementVisitor to scan the PluginAliases annotation.
> */
> private static class PluginAliasesElementVisitor extends
> SimpleElementVisitor6<Collection<PluginEntry>, Plugin> {
> - protected PluginAliasesElementVisitor() {
> +
> + private final Elements elements;
> +
> + private PluginAliasesElementVisitor(final Elements elements) {
> super(Collections.<PluginEntry>emptyList());
> + this.elements = elements;
> }
>
> @Override
> @@ -162,7 +175,7 @@ public class PluginProcessor extends Abs
> for (final String alias : aliases.value()) {
> final PluginEntry entry = new PluginEntry();
> entry.setKey(alias.toLowerCase());
> - entry.setClassName(e.getQualifiedName().toString());
> + entry.setClassName(elements.getBinaryName(e).toString());
> entry.setName(Plugin.EMPTY.equals(plugin.elementType()) ?
> alias : plugin.elementType());
> entry.setPrintable(plugin.printObject());
> entry.setDefer(plugin.deferChildren());
>
> Modified:
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java
> URL:
> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java?rev=1585249&r1=1585248&r2=1585249&view=diff
>
> ==============================================================================
> ---
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java
> (original)
> +++
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/FakePlugin.java
> Sun Apr 6 05:36:30 2014
> @@ -26,4 +26,8 @@ import org.apache.logging.log4j.core.con
> @Plugin(name = "Fake", category = "Test")
> @PluginAliases({"AnotherFake", "StillFake"})
> public class FakePlugin {
> +
> + @Plugin(name = "Nested", category = "Test")
> + public static class Nested {
> + }
> }
>
> Modified:
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java
> URL:
> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java?rev=1585249&r1=1585248&r2=1585249&view=diff
>
> ==============================================================================
> ---
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java
> (original)
> +++
> logging/log4j/log4j2/trunk/log4j-plugin-processor/src/test/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessorTest.java
> Sun Apr 6 05:36:30 2014
> @@ -103,9 +103,22 @@ public class PluginProcessorTest {
> assertNotNull("The plugin '" + name.toLowerCase() + "' was not
> found.", fake);
> assertEquals(FakePlugin.class.getName(), fake.getClassName());
> assertEquals(name.toLowerCase(), fake.getKey());
> - assertEquals("", p.elementType());
> + assertEquals(Plugin.EMPTY, p.elementType());
> assertEquals(name, fake.getName());
> assertEquals(p.printObject(), fake.isPrintable());
> assertEquals(p.deferChildren(), fake.isDefer());
> }
> +
> + @Test
> + public void testNestedPlugin() throws Exception {
> + final Plugin p =
> FakePlugin.Nested.class.getAnnotation(Plugin.class);
> + final PluginEntry nested = pluginCategories.get(p.category()).get(
> p.name().toLowerCase());
> + assertNotNull(nested);
> + assertEquals(p.name().toLowerCase(), nested.getKey());
> + assertEquals(FakePlugin.Nested.class.getName(),
> nested.getClassName());
> + assertEquals(p.name(), nested.getName());
> + assertEquals(Plugin.EMPTY, p.elementType());
> + assertEquals(p.printObject(), nested.isPrintable());
> + assertEquals(p.deferChildren(), nested.isDefer());
> + }
> }
>
>
>