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

Reply via email to