Oh wow, I can't believe I missed that. It would work better to just use the class instead anyhow!
On 27 May 2014 13:15, Gary Gregory <[email protected]> wrote: > Sure, @Test (expected=SomeException.class) > > Gary > > > -------- Original message -------- > From: Matt Sicker > Date:05/27/2014 13:03 (GMT-05:00) > To: Log4J Developers List > Subject: Re: svn commit: r1597790 - in > /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins: > ./ util/ visitors/ > > You can put a class in an annotation? > > > On 27 May 2014 10:49, Remko Popma <[email protected]> wrote: > >> You may want to document that you use String FQCNs on purpose even though >> annotations let you use Classes, to make it OSGi-friendly. Otherwise the >> next person may refactor this... >> >> >> On Tue, May 27, 2014 at 10:57 PM, <[email protected]> wrote: >> >>> Author: mattsicker >>> Date: Tue May 27 13:57:31 2014 >>> New Revision: 1597790 >>> >>> URL: http://svn.apache.org/r1597790 >>> Log: >>> Switch from a registry-based strategy to a meta-annotation-based >>> strategy for associating visitors to annotations. >>> >>> - More easily extensible as there is no registry or special file to >>> maintain. >>> - Still maintains OSGi compatibility with correct ClassLoader usage. >>> - Updated PluginVisitor(Builder|s) accordingly to use new algorithm. >>> >>> Added: >>> >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>> (with props) >>> >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java >>> - copied, changed from r1597667, >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java >>> Removed: >>> >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java >>> 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/SensitivePluginAttribute.java >>> >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>> >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/package-info.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=1597790&r1=1597789&r2=1597790&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 13:57:31 2014 >>> @@ -32,6 +32,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") >>> 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=1597790&r1=1597789&r2=1597790&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 13:57:31 2014 >>> @@ -29,5 +29,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") >>> 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=1597790&r1=1597789&r2=1597790&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 13:57:31 2014 >>> @@ -28,6 +28,7 @@ import java.lang.annotation.Target; >>> @Documented >>> @Retention(RetentionPolicy.RUNTIME) >>> @Target({ElementType.PARAMETER, ElementType.FIELD}) >>> >>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor") >>> 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=1597790&r1=1597789&r2=1597790&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 13:57:31 2014 >>> @@ -28,5 +28,6 @@ import java.lang.annotation.Target; >>> @Documented >>> @Retention(RetentionPolicy.RUNTIME) >>> @Target({ElementType.PARAMETER, ElementType.FIELD}) >>> >>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginNodeVisitor") >>> 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=1597790&r1=1597789&r2=1597790&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 13:57:31 2014 >>> @@ -31,6 +31,7 @@ import java.lang.annotation.Target; >>> @Documented >>> @Retention(RetentionPolicy.RUNTIME) >>> @Target(ElementType.PARAMETER) >>> >>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.PluginValueVisitor") >>> public @interface PluginValue { >>> >>> String value(); >>> >>> Added: >>> 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=1597790&view=auto >>> >>> ============================================================================== >>> --- >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>> (added) >>> +++ >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>> Tue May 27 13:57:31 2014 >>> @@ -0,0 +1,40 @@ >>> +/* >>> + * Licensed to the Apache Software Foundation (ASF) under one or more >>> + * contributor license agreements. See the NOTICE file distributed with >>> + * this work for additional information regarding copyright ownership. >>> + * The ASF licenses this file to You under the Apache License, Version >>> 2.0 >>> + * (the "License"); you may not use this file except in compliance with >>> + * the License. You may obtain a copy of the License at >>> + * >>> + * http://www.apache.org/licenses/LICENSE-2.0 >>> + * >>> + * Unless required by applicable law or agreed to in writing, software >>> + * distributed under the License is distributed on an "AS IS" BASIS, >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>> implied. >>> + * See the License for the specific language governing permissions and >>> + * limitations under the License. >>> + */ >>> + >>> +package org.apache.logging.log4j.core.config.plugins; >>> + >>> +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; >>> + >>> +/** >>> + * 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. >>> + */ >>> +@Documented >>> +@Retention(RetentionPolicy.RUNTIME) >>> +@Target(ElementType.ANNOTATION_TYPE) >>> +public @interface PluginVisitorStrategy { >>> + >>> + /** >>> + * The class name to use that implements {@link >>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor} >>> + * for the given annotation. >>> + */ >>> + String value(); >>> +} >>> >>> Propchange: >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.java >>> >>> ------------------------------------------------------------------------------ >>> svn:eol-style = native >>> >>> 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=1597790&r1=1597789&r2=1597790&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 13:57:31 2014 >>> @@ -34,6 +34,7 @@ import java.lang.annotation.Target; >>> @Documented >>> @Retention(RetentionPolicy.RUNTIME) >>> @Target(ElementType.PARAMETER) >>> >>> +@PluginVisitorStrategy("org.apache.logging.log4j.core.config.plugins.visitors.SensitivePluginAttributeVisitor") >>> public @interface SensitivePluginAttribute { >>> String value(); >>> >>> >>> Modified: >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>> URL: >>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java?rev=1597790&r1=1597789&r2=1597790&view=diff >>> >>> ============================================================================== >>> --- >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>> (original) >>> +++ >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java >>> Tue May 27 13:57:31 2014 >>> @@ -34,7 +34,7 @@ import org.apache.logging.log4j.core.con >>> import >>> org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; >>> import org.apache.logging.log4j.core.config.plugins.PluginFactory; >>> import >>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor; >>> -import >>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitorRegistry; >>> +import >>> org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitors; >>> import org.apache.logging.log4j.core.util.Assert; >>> import org.apache.logging.log4j.core.util.Builder; >>> import org.apache.logging.log4j.status.StatusLogger; >>> @@ -164,7 +164,7 @@ public class PluginBuilder<T> implements >>> continue; // already processed >>> } >>> final PluginVisitor<? extends Annotation> visitor = >>> - >>> PluginVisitorRegistry.findVisitor(a.annotationType()); >>> + PluginVisitors.findVisitor(a.annotationType()); >>> if (visitor != null) { >>> final Object value = visitor.setAliases(aliases) >>> .setAnnotation(a) >>> @@ -200,7 +200,7 @@ public class PluginBuilder<T> implements >>> if (a instanceof PluginAliases) { >>> continue; // already processed >>> } >>> - final PluginVisitor<? extends Annotation> visitor = >>> PluginVisitorRegistry.findVisitor( >>> + final PluginVisitor<? extends Annotation> visitor = >>> PluginVisitors.findVisitor( >>> a.annotationType()); >>> if (visitor != null) { >>> args[i] = visitor.setAliases(aliases) >>> >>> Copied: >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java >>> (from r1597667, >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.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?p2=logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java&p1=logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java&r1=1597667&r2=1597790&rev=1597790&view=diff >>> >>> ============================================================================== >>> --- >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitorRegistry.java >>> (original) >>> +++ >>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java >>> Tue May 27 13:57:31 2014 >>> @@ -18,58 +18,24 @@ >>> package org.apache.logging.log4j.core.config.plugins.visitors; >>> >>> import java.lang.annotation.Annotation; >>> -import java.util.Map; >>> -import java.util.concurrent.ConcurrentHashMap; >>> >>> import org.apache.logging.log4j.Logger; >>> -import org.apache.logging.log4j.core.config.plugins.PluginAttribute; >>> -import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; >>> -import org.apache.logging.log4j.core.config.plugins.PluginElement; >>> -import org.apache.logging.log4j.core.config.plugins.PluginNode; >>> -import org.apache.logging.log4j.core.config.plugins.PluginValue; >>> -import >>> org.apache.logging.log4j.core.config.plugins.SensitivePluginAttribute; >>> +import >>> org.apache.logging.log4j.core.config.plugins.PluginVisitorStrategy; >>> import org.apache.logging.log4j.status.StatusLogger; >>> >>> /** >>> - * Registry for associating Plugin annotations with PluginVisitor >>> implementations. >>> + * Utility class to locate an appropriate PluginVisitor implementation >>> for an annotation. >>> */ >>> -public final class PluginVisitorRegistry { >>> +public final class PluginVisitors { >>> >>> private static final Logger LOGGER = StatusLogger.getLogger(); >>> >>> - // map of annotation classes to their corresponding PluginVisitor >>> classes >>> - // generics are fun! >>> - private static final Map<Class<? extends Annotation>, Class<? >>> extends PluginVisitor<? extends Annotation>>> REGISTRY; >>> - >>> - static { >>> - // register the default PluginVisitor classes >>> - // TODO: this could probably be combined with the usual plugin >>> architecture instead >>> - REGISTRY = new ConcurrentHashMap<Class<? extends Annotation>, >>> Class<? extends PluginVisitor<? extends Annotation>>>(); >>> - registerVisitor(PluginAttribute.class, >>> PluginAttributeVisitor.class); >>> - registerVisitor(SensitivePluginAttribute.class, >>> SensitivePluginAttributeVisitor.class); >>> - registerVisitor(PluginConfiguration.class, >>> PluginConfigurationVisitor.class); >>> - registerVisitor(PluginNode.class, PluginNodeVisitor.class); >>> - � >> >> -- Matt Sicker <[email protected]>
