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/12 20:16:20 UTC
svn commit: r1445319 - in /commons/sandbox/weaver/branches/mjb/processor/src:
main/java/org/apache/commons/weaver/ test/java/org/apache/commons/weaver/
test/java/org/apache/commons/weaver/test/
test/java/org/apache/commons/weaver/test/beans/
Author: mbenson
Date: Tue Feb 12 19:16:20 2013
New Revision: 1445319
URL: http://svn.apache.org/r1445319
Log:
clean up and test annotation inflation
Added:
commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/FinderTest.java (with props)
commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/beans/ComplexAnnotations.java (with props)
Modified:
commons/sandbox/weaver/branches/mjb/processor/src/main/java/org/apache/commons/weaver/Finder.java
commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java
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=1445319&r1=1445318&r2=1445319&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 Tue Feb 12 19:16:20 2013
@@ -9,6 +9,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.IdentityHashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -36,11 +37,7 @@ class Finder extends AnnotationFinder {
AnnotationInflater(String desc) {
super();
- try {
- this.annotationType = Class.forName(Type.getType(desc).getClassName()).asSubclass(Annotation.class);
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
+ this.annotationType = toClass(Type.getType(desc)).asSubclass(Annotation.class);
}
Annotation inflate() {
@@ -51,17 +48,26 @@ class Finder extends AnnotationFinder {
protected void storeValue(String name, Object value) {
Validate.notNull(value, "null annotation element");
if (value.getClass().isArray()) {
- final int len = Array.getLength(value);
- final Object typedArray;
+ final Class<?> requiredType;
try {
- typedArray =
- Array.newInstance(annotationType.getDeclaredMethod(name).getReturnType().getComponentType(),
- len);
+ requiredType = annotationType.getDeclaredMethod(name).getReturnType();
} catch (Exception e) {
throw new RuntimeException(e);
}
- System.arraycopy(value, 0, typedArray, 0, len);
- value = typedArray;
+ if (!requiredType.isInstance(value)) {
+ final int len = Array.getLength(value);
+ final Object typedArray = Array.newInstance(requiredType.getComponentType(), len);
+ for (int i = 0; i < len; i++) {
+ Object o = Array.get(value, i);
+ if (o instanceof Type) {
+ o = toClass((Type) o);
+ }
+ Array.set(typedArray, i, o);
+ }
+ value = typedArray;
+ }
+ } else if (value instanceof Type) {
+ value = toClass((Type) value);
}
elements.put(name, value);
}
@@ -460,6 +466,21 @@ class Finder extends AnnotationFinder {
}
};
+ private static Class<?> toClass(Type type) {
+ Class<?> result;
+ try {
+ result = Class.forName((type.getSort() == Type.ARRAY ? type.getElementType() : type).getClassName());
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ if (type.getSort() == Type.ARRAY) {
+ int[] dims = new int[type.getDimensions()];
+ Arrays.fill(dims, 0);
+ result = Array.newInstance(result, dims).getClass();
+ }
+ return result;
+ }
+
private final Map<Info, List<Annotation>> classfileAnnotations;
public Finder(Archive archive) {
Added: commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/FinderTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/FinderTest.java?rev=1445319&view=auto
==============================================================================
--- commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/FinderTest.java (added)
+++ commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/FinderTest.java Tue Feb 12 19:16:20 2013
@@ -0,0 +1,238 @@
+package org.apache.commons.weaver;
+
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.CURLY;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.LARRY;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.MOE;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.SHEMP;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URLClassLoader;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.weaver.test.WeaverTestBase;
+import org.apache.commons.weaver.test.beans.ComplexAnnotations;
+import org.apache.commons.weaver.test.beans.ComplexAnnotations.NestAnnotation;
+import org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge;
+import org.apache.commons.weaver.test.beans.ComplexAnnotations.TestAnnotation;
+import org.apache.commons.weaver.utils.URLArray;
+import org.apache.xbean.finder.Annotated;
+import org.apache.xbean.finder.archive.FileArchive;
+import org.junit.Test;
+
+public class FinderTest extends WeaverTestBase {
+
+ private Finder finder() {
+ final ClassLoader classLoader = new URLClassLoader(URLArray.fromPaths(getClassPathEntries()));
+ return new Finder(new FileArchive(classLoader, getTargetFolder()));
+ }
+
+ /**
+ * The point of this is to prove that we can correctly hydate instances of
+ * annotations with class retention.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testElements() throws IOException {
+ addClassForScanning(ComplexAnnotations.class);
+ Map<String, Annotated<Field>> fields = new HashMap<String, Annotated<Field>>();
+ for (Annotated<Field> annotated : finder().withAnnotations().findAnnotatedFields(
+ ComplexAnnotations.TestAnnotation.class)) {
+ fields.put(annotated.get().getName(), annotated);
+ }
+ assertEquals(2, fields.size());
+
+ TestAnnotation anno1 = fields.get("dummy1").getAnnotation(TestAnnotation.class);
+
+ assertFalse(anno1.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, anno1.booleanValues()));
+ assertEquals((byte) 0, anno1.byteValue());
+ assertArrayEquals(new byte[] { 0 }, anno1.byteValues());
+ assertEquals((char) 0, anno1.charValue());
+ assertArrayEquals(new char[] { 0 }, anno1.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(anno1.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, anno1.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(anno1.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, anno1.floatValues()));
+ assertEquals(0, anno1.intValue());
+ assertArrayEquals(new int[] { 0 }, anno1.intValues());
+ assertEquals(0L, anno1.longValue());
+ assertArrayEquals(new long[] { 0L }, anno1.longValues());
+
+ NestAnnotation nest1 = anno1.nest();
+ assertFalse(nest1.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, nest1.booleanValues()));
+ assertEquals((byte) 0, nest1.byteValue());
+ assertArrayEquals(new byte[] { 0 }, nest1.byteValues());
+ assertEquals((char) 0, nest1.charValue());
+ assertArrayEquals(new char[] { 0 }, nest1.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(nest1.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, nest1.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(nest1.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, nest1.floatValues()));
+ assertEquals(0, nest1.intValue());
+ assertArrayEquals(new int[] { 0 }, nest1.intValues());
+ assertEquals(0L, nest1.longValue());
+ assertArrayEquals(new long[] { 0L }, nest1.longValues());
+ assertEquals((short) 0, nest1.shortValue());
+ assertArrayEquals(new short[] { 0 }, nest1.shortValues());
+ assertSame(CURLY, nest1.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, SHEMP }, nest1.stooges());
+ assertEquals("", nest1.string());
+ assertArrayEquals(new String[] { "" }, nest1.strings());
+ assertEquals(Object.class, nest1.type());
+ assertArrayEquals(new Class[] { Object.class }, nest1.types());
+
+ assertEquals(1, anno1.nests().length);
+ NestAnnotation nest1_0 = anno1.nests()[0];
+ assertFalse(nest1_0.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, nest1_0.booleanValues()));
+ assertEquals((byte) 0, nest1_0.byteValue());
+ assertArrayEquals(new byte[] { 0 }, nest1_0.byteValues());
+ assertEquals((char) 0, nest1_0.charValue());
+ assertArrayEquals(new char[] { 0 }, nest1_0.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(nest1_0.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, nest1_0.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(nest1_0.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, nest1_0.floatValues()));
+ assertEquals(0, nest1_0.intValue());
+ assertArrayEquals(new int[] { 0 }, nest1_0.intValues());
+ assertEquals(0L, nest1_0.longValue());
+ assertArrayEquals(new long[] { 0L }, nest1_0.longValues());
+ assertEquals((short) 0, nest1_0.shortValue());
+ assertArrayEquals(new short[] { 0 }, nest1_0.shortValues());
+ assertSame(CURLY, nest1_0.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, SHEMP }, nest1_0.stooges());
+ assertEquals("", nest1_0.string());
+ assertArrayEquals(new String[] { "" }, nest1_0.strings());
+ assertEquals(Object[].class, nest1_0.type());
+ assertArrayEquals(new Class[] { Object[].class }, nest1_0.types());
+
+ assertEquals((short) 0, anno1.shortValue());
+ assertArrayEquals(new short[] { 0 }, anno1.shortValues());
+ assertSame(SHEMP, anno1.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, CURLY }, anno1.stooges());
+ assertEquals("", anno1.string());
+ assertArrayEquals(new String[] { "" }, anno1.strings());
+ assertEquals(Object.class, anno1.type());
+ assertArrayEquals(new Class[] { Object.class }, anno1.types());
+
+ TestAnnotation anno2 = fields.get("dummy2").getAnnotation(TestAnnotation.class);
+ assertFalse(anno2.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, anno2.booleanValues()));
+ assertEquals((byte) 0, anno2.byteValue());
+ assertArrayEquals(new byte[] { 0 }, anno2.byteValues());
+ assertEquals((char) 0, anno2.charValue());
+ assertArrayEquals(new char[] { 0 }, anno2.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(anno2.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, anno2.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(anno2.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, anno2.floatValues()));
+ assertEquals(0, anno2.intValue());
+ assertArrayEquals(new int[] { 0 }, anno2.intValues());
+ assertEquals(0L, anno2.longValue());
+ assertArrayEquals(new long[] { 0L }, anno2.longValues());
+
+ NestAnnotation nest2 = anno2.nest();
+ assertFalse(nest2.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, nest2.booleanValues()));
+ assertEquals((byte) 0, nest2.byteValue());
+ assertArrayEquals(new byte[] { 0 }, nest2.byteValues());
+ assertEquals((char) 0, nest2.charValue());
+ assertArrayEquals(new char[] { 0 }, nest2.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(nest2.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, nest2.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(nest2.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, nest2.floatValues()));
+ assertEquals(0, nest2.intValue());
+ assertArrayEquals(new int[] { 0 }, nest2.intValues());
+ assertEquals(0L, nest2.longValue());
+ assertArrayEquals(new long[] { 0L }, nest2.longValues());
+ assertEquals((short) 0, nest2.shortValue());
+ assertArrayEquals(new short[] { 0 }, nest2.shortValues());
+ assertSame(CURLY, nest2.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, SHEMP }, nest2.stooges());
+ assertEquals("", nest2.string());
+ assertArrayEquals(new String[] { "" }, nest2.strings());
+ assertEquals(Object.class, nest2.type());
+ assertArrayEquals(new Class[] { Object.class }, nest2.types());
+
+ assertEquals(2, anno2.nests().length);
+ NestAnnotation nest2_0 = anno2.nests()[0];
+ assertFalse(nest2_0.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, nest2_0.booleanValues()));
+ assertEquals((byte) 0, nest2_0.byteValue());
+ assertArrayEquals(new byte[] { 0 }, nest2_0.byteValues());
+ assertEquals((char) 0, nest2_0.charValue());
+ assertArrayEquals(new char[] { 0 }, nest2_0.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(nest2_0.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, nest2_0.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(nest2_0.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, nest2_0.floatValues()));
+ assertEquals(0, nest2_0.intValue());
+ assertArrayEquals(new int[] { 0 }, nest2_0.intValues());
+ assertEquals(0L, nest2_0.longValue());
+ assertArrayEquals(new long[] { 0L }, nest2_0.longValues());
+ assertEquals((short) 0, nest2_0.shortValue());
+ assertArrayEquals(new short[] { 0 }, nest2_0.shortValues());
+ assertSame(CURLY, nest2_0.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, SHEMP }, nest2_0.stooges());
+ assertEquals("", nest2_0.string());
+ assertArrayEquals(new String[] { "" }, nest2_0.strings());
+ assertEquals(Object[].class, nest2_0.type());
+ assertArrayEquals(new Class[] { Object[].class }, nest2_0.types());
+
+ NestAnnotation nest2_1 = anno2.nests()[1];
+ assertFalse(nest2_1.booleanValue());
+ assertTrue(Arrays.equals(new boolean[] { false }, nest2_1.booleanValues()));
+ assertEquals((byte) 0, nest2_1.byteValue());
+ assertArrayEquals(new byte[] { 0 }, nest2_1.byteValues());
+ assertEquals((char) 0, nest2_1.charValue());
+ assertArrayEquals(new char[] { 0 }, nest2_1.charValues());
+ assertEquals(Double.valueOf(0.0), Double.valueOf(nest2_1.doubleValue()));
+ assertTrue(Arrays.equals(new double[] { 0.0 }, nest2_1.doubleValues()));
+ assertEquals(Float.valueOf(0.0f), Float.valueOf(nest2_1.floatValue()));
+ assertTrue(Arrays.equals(new float[] { 0.0f }, nest2_1.floatValues()));
+ assertEquals(0, nest2_1.intValue());
+ assertArrayEquals(new int[] { 0 }, nest2_1.intValues());
+ assertEquals(0L, nest2_1.longValue());
+ assertArrayEquals(new long[] { 0L }, nest2_1.longValues());
+ assertEquals((short) 0, nest2_1.shortValue());
+ assertArrayEquals(new short[] { 0 }, nest2_1.shortValues());
+ assertSame(CURLY, nest2_1.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, SHEMP }, nest2_1.stooges());
+ assertEquals("", nest2_1.string());
+ assertArrayEquals(new String[] { "" }, nest2_1.strings());
+ assertEquals(Object[].class, nest2_1.type());
+ assertArrayEquals(new Class[] { Object[].class }, nest2_1.types());
+
+ assertEquals((short) 0, anno2.shortValue());
+ assertArrayEquals(new short[] { 0 }, anno2.shortValues());
+ assertSame(SHEMP, anno2.stooge());
+ assertArrayEquals(new Stooge[] { MOE, LARRY, CURLY }, anno2.stooges());
+ assertEquals("", anno2.string());
+ assertArrayEquals(new String[] { "" }, anno2.strings());
+ assertEquals(Object.class, anno2.type());
+ assertArrayEquals(new Class[] { Object.class }, anno2.types());
+ }
+
+ @Test
+ public void testObjectMethods() throws IOException {
+ addClassForScanning(ComplexAnnotations.class);
+ for (Annotated<Field> annotated : finder().withAnnotations().findAnnotatedFields(
+ ComplexAnnotations.TestAnnotation.class)) {
+ TestAnnotation anno = annotated.getAnnotation(TestAnnotation.class);
+ assertFalse(anno.toString().isEmpty());
+ assertFalse(anno.hashCode() == 0);
+ assertTrue(anno.equals(anno));
+ }
+ }
+}
Propchange: commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/FinderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java
URL: http://svn.apache.org/viewvc/commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java?rev=1445319&r1=1445318&r2=1445319&view=diff
==============================================================================
--- commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java (original)
+++ commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java Tue Feb 12 19:16:20 2013
@@ -48,17 +48,18 @@ public abstract class WeaverTestBase {
}
/**
- * Add a class to the temporary folder.
+ * Add a class (and its inner classes) to the temporary folder.
* @param clazz
*/
- protected void addClassForScanning(Class clazz) throws IOException{
+ protected void addClassForScanning(Class<?> clazz) throws IOException {
String clazzDirName = clazz.getPackage().getName().replace(".", "/");
File targetDirFile = new File(getTargetFolder(), clazzDirName);
targetDirFile.mkdirs();
- String clazzFileName = clazzDirName + "/" + clazz.getSimpleName() + ".class";
+ String fileName = baseName(clazz) + ".class";
+ String clazzFileName = clazzDirName + "/" + fileName;
URL clazzUrl = getClass().getClassLoader().getResource(clazzFileName);
- File targetClazzFile = new File(targetDirFile, clazz.getSimpleName() + ".class");
+ File targetClazzFile = new File(targetDirFile, fileName);
byte[] buffer = new byte[0xFFFF];
@@ -71,6 +72,26 @@ public abstract class WeaverTestBase {
}
fos.flush();
fos.close();
+
+ for (Class<?> inner : clazz.getClasses()) {
+ addClassForScanning(inner);
+ }
+ }
+
+ private String baseName(Class<?> clazz) {
+ if (clazz.getDeclaringClass() == null) {
+ return clazz.getSimpleName();
+ }
+ final StringBuilder result = new StringBuilder();
+ Class<?> current = clazz;
+ while (current != null) {
+ if (result.length() > 0) {
+ result.insert(0, '$');
+ }
+ result.insert(0, current.getSimpleName());
+ current = current.getDeclaringClass();
+ }
+ return result.toString();
}
/**
Added: commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/beans/ComplexAnnotations.java
URL: http://svn.apache.org/viewvc/commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/beans/ComplexAnnotations.java?rev=1445319&view=auto
==============================================================================
--- commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/beans/ComplexAnnotations.java (added)
+++ commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/beans/ComplexAnnotations.java Tue Feb 12 19:16:20 2013
@@ -0,0 +1,262 @@
+/*
+ * 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.test.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.CURLY;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.LARRY;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.MOE;
+import static org.apache.commons.weaver.test.beans.ComplexAnnotations.Stooge.SHEMP;
+
+import java.lang.annotation.Target;
+
+public class ComplexAnnotations {
+ @TestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ nest = @NestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = CURLY,
+ stooges = { MOE, LARRY, SHEMP },
+ string = "",
+ strings = { "" },
+ type = Object.class,
+ types = { Object.class }
+ ),
+ nests = {
+ @NestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = CURLY,
+ stooges = { MOE, LARRY, SHEMP },
+ string = "",
+ strings = { "" },
+ type = Object[].class,
+ types = { Object[].class }
+ )
+ },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = SHEMP,
+ stooges = { MOE, LARRY, CURLY },
+ string = "",
+ strings = { "" },
+ type = Object.class,
+ types = { Object.class }
+ )
+ public Object dummy1;
+
+ @TestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ nest = @NestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = CURLY,
+ stooges = { MOE, LARRY, SHEMP },
+ string = "",
+ strings = { "" },
+ type = Object.class,
+ types = { Object.class }
+ ),
+ nests = {
+ @NestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = CURLY,
+ stooges = { MOE, LARRY, SHEMP },
+ string = "",
+ strings = { "" },
+ type = Object[].class,
+ types = { Object[].class }
+ ),
+ //add a second NestAnnotation:
+ @NestAnnotation(
+ booleanValue = false,
+ booleanValues = { false },
+ byteValue = 0,
+ byteValues = { 0 },
+ charValue = 0,
+ charValues = { 0 },
+ doubleValue = 0,
+ doubleValues = { 0 },
+ floatValue = 0,
+ floatValues = { 0 },
+ intValue = 0,
+ intValues = { 0 },
+ longValue = 0,
+ longValues = { 0 },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = CURLY,
+ stooges = { MOE, LARRY, SHEMP },
+ string = "",
+ strings = { "" },
+ type = Object[].class,
+ types = { Object[].class }
+ )
+ },
+ shortValue = 0,
+ shortValues = { 0 },
+ stooge = SHEMP,
+ stooges = { MOE, LARRY, CURLY },
+ string = "",
+ strings = { "" },
+ type = Object.class,
+ types = { Object.class }
+ )
+ public Object dummy2;
+
+ @Target(FIELD)
+ public @interface TestAnnotation {
+ String string();
+ String[] strings();
+ Class<?> type();
+ Class<?>[] types();
+ byte byteValue();
+ byte[] byteValues();
+ short shortValue();
+ short[] shortValues();
+ int intValue();
+ int[] intValues();
+ char charValue();
+ char[] charValues();
+ long longValue();
+ long[] longValues();
+ float floatValue();
+ float[] floatValues();
+ double doubleValue();
+ double[] doubleValues();
+ boolean booleanValue();
+ boolean[] booleanValues();
+ Stooge stooge();
+ Stooge[] stooges();
+ NestAnnotation nest();
+ NestAnnotation[] nests();
+ }
+
+ public @interface NestAnnotation {
+ String string();
+ String[] strings();
+ Class<?> type();
+ Class<?>[] types();
+ byte byteValue();
+ byte[] byteValues();
+ short shortValue();
+ short[] shortValues();
+ int intValue();
+ int[] intValues();
+ char charValue();
+ char[] charValues();
+ long longValue();
+ long[] longValues();
+ float floatValue();
+ float[] floatValues();
+ double doubleValue();
+ double[] doubleValues();
+ boolean booleanValue();
+ boolean[] booleanValues();
+ Stooge stooge();
+ Stooge[] stooges();
+ }
+
+ public static enum Stooge {
+ MOE, LARRY, CURLY, SHEMP, JOE;
+ }
+
+}
Propchange: commons/sandbox/weaver/branches/mjb/processor/src/test/java/org/apache/commons/weaver/test/beans/ComplexAnnotations.java
------------------------------------------------------------------------------
svn:eol-style = native