You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2013/02/11 20:29:46 UTC

svn commit: r1444932 - in /commons/sandbox/weaver/branches/mjb/processor: pom.xml src/main/java/org/apache/commons/weaver/Finder.java src/main/java/org/apache/commons/weaver/utils/Annotations.java

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