Author: mbenson
Date: Mon Feb 11 19:29:46 2013
New Revision: 1444932

URL: http://svn.apache.org/r1444932
Log:
use own code for annotation instances instead of full-blown proxy-stub

Added:
    
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java
   (with props)
Modified:
    commons/sandbox/weaver/branches/mjb/processor/pom.xml
    
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/Finder.java

Modified: commons/sandbox/weaver/branches/mjb/processor/pom.xml
URL: 
http://svn.apache.org/viewvc/commons/sandbox/weaver/branches/mjb/processor/pom.xml?rev=1444932&r1=1444931&r2=1444932&view=diff
==============================================================================
--- commons/sandbox/weaver/branches/mjb/processor/pom.xml (original)
+++ commons/sandbox/weaver/branches/mjb/processor/pom.xml Mon Feb 11 19:29:46 
2013
@@ -41,8 +41,8 @@ under the License.
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
-      <artifactId>commons-proxy2-stub</artifactId>
-      <version>2.0-SNAPSHOT</version>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.1</version>
     </dependency>
 
   </dependencies>

Modified: 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/Finder.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/Finder.java?rev=1444932&r1=1444931&r2=1444932&view=diff
==============================================================================
--- 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/Finder.java
 (original)
+++ 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/Finder.java
 Mon Feb 11 19:29:46 2013
@@ -15,7 +15,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang3.Validate;
-import org.apache.commons.proxy.stub.AnnotationFactory;
+import org.apache.commons.weaver.utils.Annotations;
 import org.apache.xbean.asm.AnnotationVisitor;
 import org.apache.xbean.asm.Attribute;
 import org.apache.xbean.asm.ClassReader;
@@ -44,7 +44,7 @@ class Finder extends AnnotationFinder {
         }
 
         Annotation inflate() {
-            return AnnotationFactory.INSTANCE.create(annotationType, elements);
+            return Annotations.instanceOf(annotationType, elements);
         }
 
         @Override

Added: 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java?rev=1444932&view=auto
==============================================================================
--- 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java
 (added)
+++ 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java
 Mon Feb 11 19:29:46 2013
@@ -0,0 +1,71 @@
+/*
+ * 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.commons.weaver.utils;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Arrays;
+import java.util.Map;
+
+import org.apache.commons.lang3.AnnotationUtils;
+import org.apache.commons.lang3.Validate;
+
+/**
+ * Provide annotation-related utility methods.
+ */
+public class Annotations {
+    private Annotations() {
+    }
+
+    public static <A extends Annotation> A instanceOf(final Class<A> 
annotationType, final Map<String, ?> elements) {
+        final ClassLoader proxyClassLoader = Validate.notNull(annotationType, 
"annotationType").getClassLoader();
+        final InvocationHandler invocationHandler = new InvocationHandler() {
+
+            @Override
+            public Object invoke(Object proxy, Method method, Object[] args) 
throws Throwable {
+                if (method.getDeclaringClass().equals(annotationType)) {
+                    if (elements.containsKey(method.getName())) {
+                        return elements.get(method.getName());
+                    }
+                    return method.getDefaultValue();
+                }
+                if ("annotationType".equals(method.getName()) && 
method.getParameterTypes().length == 0) {
+                    return annotationType;
+                }
+                if ("equals".equals(method.getName())
+                    && Arrays.equals(method.getParameterTypes(), new Class[] { 
Object.class })) {
+                    return AnnotationUtils.equals((Annotation) proxy, 
(Annotation) args[0]);
+                }
+                if ("hashCode".equals(method.getName()) && 
method.getParameterTypes().length == 0) {
+                    return AnnotationUtils.hashCode((Annotation) proxy);
+                }
+                if ("toString".equals(method.getName()) && 
method.getParameterTypes().length == 0) {
+                    return AnnotationUtils.toString((Annotation) proxy);
+                }
+                throw new UnsupportedOperationException();
+            }
+        };
+        @SuppressWarnings("unchecked")
+        final A result =
+            (A) Proxy.newProxyInstance(proxyClassLoader, new Class[] { 
annotationType }, invocationHandler);
+        return result;
+    }
+}

Propchange: 
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to