I'll leave it to you to fix that up then ;-) Gary
On Tue, May 27, 2014 at 4:19 PM, Matt Sicker <[email protected]> wrote: > 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]> > -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
