You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by le...@apache.org on 2003/08/21 01:13:55 UTC
cvs commit: jakarta-commons-sandbox/attributes/src/java/org/apache/commons/attributes/impl DefaultAttribute.java DefaultAttributeFinder.java
leosutic 2003/08/20 16:13:55
Added: attributes/unittest/src/test/org/apache/commons/attributes/test
AttributesTestCase.java
attributes/api/src/java/org/apache/commons/attributes
CachedRepository.java CircularDependencyError.java
Removed: attributes/src/java/org/apache/commons/attributes/task
AttributesBuilder.java AttributesCompiler.java
attributes/src/test/org/apache/commons/attributes/task
AttributesBuilderTest.java
attributes/src/java/org/apache/commons/attributes
AttributesException.java
attributes/src/test/org/apache/commons/attributes
AttributesTest.java AttributesTestClass.java
attributes/src/java/org/apache/commons/attributes/impl
DefaultAttribute.java DefaultAttributeFinder.java
Log:
Moving in, from Avalon Sandbox.
Revision Changes Path
1.1 jakarta-commons-sandbox/attributes/unittest/src/test/org/apache/commons/attributes/test/AttributesTestCase.java
Index: AttributesTestCase.java
===================================================================
package org.apache.commons.attributes.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collection;
import org.apache.commons.attributes.Attributes;
import org.apache.commons.attributes.AttributeIndex;
import junit.framework.TestCase;
public class AttributesTestCase extends TestCase {
public void testClassAttributes () throws Exception {
/**
* @Dependency ( SampleService.class, "super-sample" )
*/
Class c = SuperSample.class;
assertEquals (1, Attributes.getAttributes (c).size ());
assertEquals (1, Attributes.getAttributes (c, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (c, Dependency.class));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "super-sample" )));
}
public void testMethodAttributes () throws Exception {
/**
* @Dependency ( SampleService.class, "super-some-method-sample" )
* @ThreadSafe ()
*/
Method m = SuperSample.class.getMethod ("someMethod", new Class[]{ Integer.TYPE });
assertEquals (2, Attributes.getAttributes (m).size ());
assertEquals (1, Attributes.getAttributes (m, Dependency.class).size ());
assertEquals (1, Attributes.getAttributes (m, ThreadSafe.class).size ());
assertTrue (Attributes.hasAttributeType (m, Dependency.class));
assertTrue (Attributes.hasAttributeType (m, ThreadSafe.class));
assertTrue (Attributes.hasAttribute (m, new Dependency ( SampleService.class, "super-some-method-sample" )));
assertTrue (Attributes.hasAttribute (m, new ThreadSafe ()));
}
public void testFieldAttributes () throws Exception {
/**
* @ThreadSafe ()
* @Dependency ( SampleService.class, "super-field" )
*/
Field f = SuperSample.class.getField ("field");
assertEquals (2, Attributes.getAttributes (f).size ());
assertEquals (1, Attributes.getAttributes (f, ThreadSafe.class).size ());
assertEquals (1, Attributes.getAttributes (f, Dependency.class).size ());
assertTrue (Attributes.hasAttribute (f, new ThreadSafe ()));
assertTrue (Attributes.hasAttribute (f, new Dependency ( SampleService.class, "super-field" ) ));
assertTrue (Attributes.hasAttributeType (f, ThreadSafe.class));
assertTrue (Attributes.hasAttributeType (f, Dependency.class));
}
public void testDefaultConstructorAttributes () throws Exception {
/**
* @Dependency ( SampleService.class, "sample-ctor1" )
*/
Constructor c = SuperSample.class.getDeclaredConstructor (new Class[0]);
assertEquals (1, Attributes.getAttributes (c).size ());
assertEquals (1, Attributes.getAttributes (c, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (c, Dependency.class));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "sample-ctor1" )));
}
public void testConstructorAttributes () throws Exception {
/**
* @Dependency ( SampleService.class, "sample-ctor2" )
*/
Constructor c = SuperSample.class.getDeclaredConstructor (new Class[]{ String.class, (new String[0][0]).getClass () } );
assertEquals (1, Attributes.getAttributes (c).size ());
assertEquals (1, Attributes.getAttributes (c, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (c, Dependency.class));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "sample-ctor2" )));
}
public void testClassInheritance () throws Exception {
Class c = Sample.class;
assertEquals (5, Attributes.getAttributes (c).size ());
assertEquals (4, Attributes.getAttributes (c, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (c, Dependency.class));
assertTrue (Attributes.hasAttributeType (c, ThreadSafe.class));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "sample" )));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "super-sample" )));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "sample-if-1-c" )));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "sample-if-2-c" )));
assertTrue (Attributes.hasAttribute (c, new ThreadSafe ()));
}
public void testMethodInheritance () throws Exception {
Method m = Sample.class.getMethod ("someMethod", new Class[]{ Integer.TYPE });
assertEquals (4, Attributes.getAttributes (m).size ());
assertEquals (4, Attributes.getAttributes (m, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (m, Dependency.class));
assertTrue (Attributes.hasAttribute (m, new Dependency ( SampleService.class, "super-some-method-sample" )));
assertTrue (Attributes.hasAttribute (m, new Dependency ( SampleService.class, "sample-some-method2" ) ));
assertTrue (Attributes.hasAttribute (m, new Dependency ( SampleService.class, "sample-if-1" ) ));
assertTrue (Attributes.hasAttribute (m, new Dependency ( SampleService.class, "sample-if-2" ) ));
}
public void testFieldNonInheritance () throws Exception {
Field f = SuperSample.class.getField ("field");
assertEquals (2, Attributes.getAttributes (f).size ());
assertEquals (1, Attributes.getAttributes (f, ThreadSafe.class).size ());
assertEquals (1, Attributes.getAttributes (f, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (f, ThreadSafe.class));
assertTrue (Attributes.hasAttributeType (f, Dependency.class));
assertTrue (Attributes.hasAttribute (f, new ThreadSafe ()));
assertTrue (Attributes.hasAttribute (f, new Dependency ( SampleService.class, "super-field" )));
f = Sample.class.getField ("field");
assertEquals (1, Attributes.getAttributes (f).size ());
assertEquals (1, Attributes.getAttributes (f, ThreadSafe.class).size ());
assertTrue (Attributes.hasAttributeType (f, ThreadSafe.class));
assertTrue (Attributes.hasAttribute (f, new ThreadSafe ()));
f = SuperSample.class.getField ("noAttributesInSubClass");
assertEquals (1, Attributes.getAttributes (f).size ());
assertEquals (1, Attributes.getAttributes (f, Dependency.class).size ());
assertTrue (Attributes.hasAttribute (f, new Dependency ( SampleService.class, "super-noattrs" )));
assertTrue (Attributes.hasAttributeType (f, Dependency.class));
f = Sample.class.getField ("noAttributesInSubClass");
assertEquals (0, Attributes.getAttributes (f).size ());
assertEquals (0, Attributes.getAttributes (f, Dependency.class).size ());
assertTrue (!Attributes.hasAttribute (f, new Dependency ( SampleService.class, "super-noattrs" )));
assertTrue (!Attributes.hasAttributeType (f, Dependency.class));
}
public void testNoAttributes () throws Exception {
Method m = Sample.class.getMethod ("methodWithNoAttributes", new Class[0]);
assertEquals (0, Attributes.getAttributes (m).size ());
}
/**
* Ensure that loading a class with the same name from two different class loaders
* won't mess up the attribute cache.
*/
public void testClassLoaderKeying () throws Exception {
URLClassLoader cl1 = new URLClassLoader (new URL[]{new File ("unittest/target/cl1/").toURL ()}, getClass().getClassLoader ());
URLClassLoader cl2 = new URLClassLoader (new URL[]{new File ("unittest/target/cl2/").toURL ()}, getClass().getClassLoader ());
Class cl1Class = cl1.loadClass ("TestClass");
Class cl2Class = cl2.loadClass ("TestClass");
assertEquals ("[[TestAttribute 1]]", Attributes.getAttributes (cl1Class).toString ());
assertEquals ("[[TestAttribute 2]]", Attributes.getAttributes (cl2Class).toString ());
}
public void testAttributeIndex () throws Exception {
URLClassLoader cl2 = new URLClassLoader (new URL[]{new File ("unittest/target/cl2/cl2.jar").toURL ()}, getClass().getClassLoader ());
AttributeIndex index = Attributes.getAttributeIndex (cl2);
Collection classes = index.getClassesWithAttribute ("TestAttribute");
System.out.println (classes);
assertEquals (2, classes.size ());
assertTrue (classes.contains ("TestClass"));
assertTrue (classes.contains ("TestClass.Inner"));
}
public void testInnerClasses () throws Exception {
Class c = Sample.InnerSample.class;
assertEquals (1, Attributes.getAttributes (c).size ());
assertEquals (1, Attributes.getAttributes (c, Dependency.class).size ());
assertTrue (Attributes.hasAttributeType (c, Dependency.class));
assertTrue (Attributes.hasAttribute (c, new Dependency ( SampleService.class, "inner-sample" )));
}
}
1.1 jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/CachedRepository.java
Index: CachedRepository.java
===================================================================
package org.apache.commons.attributes;
import java.lang.reflect.Field;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Collection;
/**
* An attribute repository cache. Used internally to speed up operation.
*/
interface CachedRepository {
public static final CachedRepository EMPTY = new EmptyCachedRepository ();
public Collection getAttributes ();
public Collection getAttributes (Field f);
public Collection getAttributes (Method m);
public Collection getAttributes (Constructor c);
}
1.1 jakarta-commons-sandbox/attributes/api/src/java/org/apache/commons/attributes/CircularDependencyError.java
Index: CircularDependencyError.java
===================================================================
package org.apache.commons.attributes;
import java.util.Iterator;
import java.util.List;
/**
* Thrown when an attribute repository class can't be
* loaded because it resulted in a circular dependency.
*/
public class CircularDependencyError extends RepositoryError {
/**
* Create a new CircularDependencyError.
*
* @param className the name of the class that started it all.
* @param dependencyList a list of the classes that the original
* class depended on, the classes they
* depended on, and so on. The list should
* show the chain of dependencies that resulted
* in the exception being thrown.
*/
public CircularDependencyError (String className, List dependencyList) {
super (className + ":" + listDeps (dependencyList), null);
}
/**
* Joins together the elements of a list with <code>-></code>
* delimiters. Used to show the sequence that resulted in the circular
* dependency.
*/
private static String listDeps (List dependencyList) {
StringBuffer sb = new StringBuffer ();
Iterator iter = dependencyList.iterator ();
while (iter.hasNext ()) {
sb.append (iter.next ());
if (iter.hasNext ()) {
sb.append (" -> ");
}
}
return sb.toString ();
}
}