Will do :)

On 27 May 2014 15:27, Gary Gregory <[email protected]> wrote:

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



-- 
Matt Sicker <[email protected]>

Reply via email to