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]>

Reply via email to