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 2014/01/10 21:14:42 UTC
svn commit: r1557247 [2/2] - in /commons/proper/weaver/trunk: ./
ant/lib/src/main/java/org/apache/commons/weaver/ant/ build-tools/
build-tools/src/main/resources/org/apache/commons/proxy2/
build-tools/src/main/resources/org/apache/commons/weaver/ examp...
Modified: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java (original)
+++ commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Policy.java Fri Jan 10 20:14:41 2014
@@ -50,7 +50,6 @@ public enum Policy {
/**
* Get the {@link Policy} value that should be used as a default.
- *
* @return {@link Policy#DYNAMIC}
*/
public static Policy defaultValue() {
@@ -59,8 +58,7 @@ public enum Policy {
/**
* Parse from a {@link String} returning {@link #defaultValue()} for blank/null input.
- *
- * @param s
+ * @param s to parse
* @return {@link Policy}
*/
public static Policy parse(String s) {
@@ -70,6 +68,10 @@ public enum Policy {
return valueOf(s.trim().toUpperCase(Locale.US));
}
+ /**
+ * Learn whether this is a conditional {@link Policy}.
+ * @return {@code this == ON_INIT || this == DYNAMIC}
+ */
public boolean isConditional() {
return this == ON_INIT || this == DYNAMIC;
}
Modified: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilized.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilized.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilized.java (original)
+++ commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilized.java Fri Jan 10 20:14:41 2014
@@ -26,5 +26,8 @@ import java.lang.annotation.Target;
*/
@Target(ElementType.TYPE)
public @interface Privilized {
+ /**
+ * Name of {@link Policy} with which privilized weaving was performed.
+ */
String value();
}
\ No newline at end of file
Modified: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java (original)
+++ commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java Fri Jan 10 20:14:41 2014
@@ -18,7 +18,6 @@
*/
package org.apache.commons.weaver.privilizer;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -42,7 +41,13 @@ import org.objectweb.asm.Type;
import org.objectweb.asm.util.CheckClassAdapter;
import org.objectweb.asm.util.TraceClassVisitor;
+/**
+ * Coordinates privilization activities.
+ */
public class Privilizer {
+ /**
+ * An ASM {@link ClassVisitor} for privilization.
+ */
abstract class PrivilizerClassVisitor extends ClassVisitor {
String className;
Type target;
@@ -60,13 +65,17 @@ public class Privilizer {
}
@Override
- public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
+ public void visit(int version, int access, String name, String signature, String superName,
+ String[] interfaces) {
super.visit(version, access, name, signature, superName, interfaces);
className = name;
target = Type.getObjectType(name);
}
}
+ /**
+ * Convenient {@link ClassVisitor} layer to write classfiles into the {@link WeaveEnvironment}.
+ */
class WriteClass extends PrivilizerClassVisitor {
WriteClass(ClassWriter cw) {
super(cw);
@@ -81,9 +90,8 @@ public class Privilizer {
verify(className, bytecode);
}
- final String resourceName = className.replace('.', File.separatorChar) + ".class";
- final DataSource classfile = env.getResource(resourceName);
- env.debug("Writing class %s to resource %s", className, resourceName);
+ final DataSource classfile = env.getClassfile(className);
+ env.debug("Writing class %s to resource %s", className, classfile.getName());
OutputStream outputStream = null;
try {
outputStream = classfile.getOutputStream();
@@ -96,12 +104,27 @@ public class Privilizer {
}
}
+ /**
+ * Privilizer weaver configuration prefix.
+ */
public static final String CONFIG_WEAVER = "privilizer.";
+ /**
+ * {@link AccessLevel} configuration key.
+ * @see AccessLevel#parse(String)
+ */
public static final String CONFIG_ACCESS_LEVEL = CONFIG_WEAVER + "accessLevel";
+ /**
+ * Weave {@link Policy} configuration key.
+ * @see Policy#parse(String)
+ */
public static final String CONFIG_POLICY = CONFIG_WEAVER + "policy";
+ /**
+ * Verification configuration key.
+ * @see BooleanUtils#toBoolean(String)
+ */
public static final String CONFIG_VERIFY = CONFIG_WEAVER + "verify";
private static final String GENERATE_NAME = "__privileged_%s";
@@ -113,6 +136,10 @@ public class Privilizer {
final Policy policy;
final boolean verify;
+ /**
+ * Create a new {@link Privilizer}.
+ * @param env to use
+ */
public Privilizer(WeaveEnvironment env) {
super();
this.env = env;
Modified: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java (original)
+++ commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java Fri Jan 10 20:14:41 2014
@@ -28,12 +28,11 @@ import org.apache.commons.weaver.model.S
import org.apache.commons.weaver.model.WeavableClass;
import org.apache.commons.weaver.model.WeaveEnvironment;
import org.apache.commons.weaver.model.WeaveInterest;
-import org.apache.commons.weaver.privilizer.Policy;
-import org.apache.commons.weaver.privilizer.Privileged;
-import org.apache.commons.weaver.privilizer.Privilized;
-import org.apache.commons.weaver.privilizer.Privilizing;
import org.apache.commons.weaver.spi.Weaver;
+/**
+ * Privilizer {@link Weaver} implementation.
+ */
public class PrivilizerWeaver implements Weaver {
@Override
public boolean process(WeaveEnvironment weaveEnvironment, Scanner scanner) {
@@ -65,10 +64,8 @@ public class PrivilizerWeaver implements
/**
* Validate a weaving request for a given target type.
- *
- * @param privilizer
- * @param type
- *
+ * @param privilizer whose configuration to consult
+ * @param type target
* @return whether weaving should proceed
* @throws IllegalStateException if class has already been woven with some other policy
*/
Modified: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java (original)
+++ commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java Fri Jan 10 20:14:41 2014
@@ -38,12 +38,20 @@ import org.objectweb.asm.commons.Generat
import org.objectweb.asm.commons.Method;
import org.objectweb.asm.commons.StaticInitMerger;
+/**
+ * ASM {@link ClassVisitor} to privilize {@link Privileged} methods.
+ */
class PrivilizingVisitor extends Privilizer.PrivilizerClassVisitor {
final Map<Method, String> privilegedMethods = new LinkedHashMap<Method, String>();
boolean annotated;
final Policy policy;
final AccessLevel accessLevel;
+ /**
+ * Create a new {@link PrivilizingVisitor}.
+ * @param privilizer owner
+ * @param cv next
+ */
PrivilizingVisitor(Privilizer privilizer, ClassVisitor cv) {
privilizer.super();
this.policy = privilizer.policy;
@@ -212,9 +220,9 @@ class PrivilizingVisitor extends Privili
}
/**
- * Generates the instructions to push onto the stack whether there is a security manager available
- *
- * @param mg
+ * Generates the instructions to push onto the stack whether there is a
+ * security manager available.
+ * @param mg to control
*/
private static void checkSecurityManager(GeneratorAdapter mg) {
final Label setFalse = new Label();
Added: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/package-info.java?rev=1557247&view=auto
==============================================================================
--- commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/package-info.java (added)
+++ commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/package-info.java Fri Jan 10 20:14:41 2014
@@ -0,0 +1,4 @@
+/**
+ * Defines the Privilizer Weaver.
+ */
+package org.apache.commons.weaver.privilizer;
\ No newline at end of file
Propchange: commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/package-info.java
------------------------------------------------------------------------------
svn:executable = *
Modified: commons/proper/weaver/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/pom.xml?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/pom.xml (original)
+++ commons/proper/weaver/trunk/pom.xml Fri Jan 10 20:14:41 2014
@@ -56,6 +56,8 @@ under the License.
<asm.version>4.1</asm.version>
<commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/${commons.site.path}</commons.scmPubUrl>
<commons.project-info.version>2.6</commons.project-info.version>
+
+ <checkstyle.skip>false</checkstyle.skip>
</properties>
<developers>
@@ -203,6 +205,18 @@ under the License.
<content>${project.build.directory}/staging</content>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.11</version>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>commons-weaver-build-tools</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
</plugins>
</build>
@@ -219,10 +233,21 @@ under the License.
<aggregate>true</aggregate>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.11</version>
+ <configuration>
+ <configLocation>org/apache/commons/weaver/checkstyle.xml</configLocation>
+ <headerLocation>org/apache/commons/weaver/license-header.txt</headerLocation>
+ <skip>${checkstyle.skip}</skip>
+ </configuration>
+ </plugin>
</plugins>
</reporting>
<modules>
+ <module>build-tools</module>
<module>processor</module>
<module>modules</module>
<module>maven-plugin</module>
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/CleanProcessor.java Fri Jan 10 20:14:41 2014
@@ -38,8 +38,11 @@ import org.apache.xbean.finder.archive.F
*/
public class CleanProcessor {
- /** List of picked up cleaner plugins */
+ /**
+ * List of picked up cleaner plugins.
+ */
private static final List<Cleaner> CLEANERS;
+
static {
List<Cleaner> cleaners = new ArrayList<Cleaner>();
for (Cleaner c : ServiceLoader.load(Cleaner.class)) {
@@ -65,7 +68,7 @@ public class CleanProcessor {
/**
* Create a new {@link CleanProcessor} instance.
- *
+ *
* @param classpath not {@code null}
* @param target not {@code null}
* @param configuration not {@code null}
@@ -86,7 +89,8 @@ public class CleanProcessor {
final Finder finder = new Finder(new FileArchive(classLoader, target));
for (Cleaner cleaner : CLEANERS) {
final WeaveEnvironment env =
- new LocalWeaveEnvironment(target, classLoader, configuration, Logger.getLogger(cleaner.getClass().getName()));
+ new LocalWeaveEnvironment(target, classLoader, configuration, Logger.getLogger(cleaner.getClass()
+ .getName()));
cleaner.clean(env, finder);
}
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java Fri Jan 10 20:14:41 2014
@@ -72,30 +72,31 @@ class Finder extends AnnotationFinder im
@Override
protected void storeValue(String name, Object value) {
- Validate.notNull(value, "null annotation element");
- if (value.getClass().isArray()) {
+ Object toStore = value;
+ Validate.notNull(toStore, "null annotation element");
+ if (toStore.getClass().isArray()) {
final Class<?> requiredType;
try {
requiredType = annotationType.getDeclaredMethod(name).getReturnType();
} catch (Exception e) {
throw new RuntimeException(e);
}
- if (!requiredType.isInstance(value)) {
- final int len = Array.getLength(value);
+ if (!requiredType.isInstance(toStore)) {
+ final int len = Array.getLength(toStore);
final Object typedArray = Array.newInstance(requiredType.getComponentType(), len);
for (int i = 0; i < len; i++) {
- Object o = Array.get(value, i);
+ Object o = Array.get(toStore, i);
if (o instanceof Type) {
o = toClass((Type) o);
}
Array.set(typedArray, i, o);
}
- value = typedArray;
+ toStore = typedArray;
}
- } else if (value instanceof Type) {
- value = toClass((Type) value);
+ } else if (toStore instanceof Type) {
+ toStore = toClass((Type) toStore);
}
- elements.put(name, value);
+ elements.put(name, toStore);
}
}
@@ -104,6 +105,11 @@ class Finder extends AnnotationFinder im
super(Opcodes.ASM4, wrapped);
}
+ /**
+ * Template method for storing an annotation value.
+ * @param name
+ * @param value
+ */
protected abstract void storeValue(String name, Object value);
@Override
@@ -185,6 +191,10 @@ class Finder extends AnnotationFinder im
}
}
+ /**
+ * Specialized {@link ClassVisitor} to inflate annotations for the info
+ * objects built by a wrapped {@link InfoBuildingVisitor}.
+ */
public class Visitor extends ClassVisitor {
private final InfoBuildingVisitor wrapped;
@@ -243,6 +253,7 @@ class Finder extends AnnotationFinder im
}
}
} catch (ClassNotFoundException e) {
+ //ignore
}
if (testMethodInfo == null) {
return toWrap;
@@ -272,7 +283,7 @@ class Finder extends AnnotationFinder im
break;
}
} catch (ClassNotFoundException e) {
-
+ //ignore
}
}
return parameterInfo == null ? toWrap : new TopLevelAnnotationInflater(desc, toWrap, parameterInfo);
@@ -362,7 +373,7 @@ class Finder extends AnnotationFinder im
/**
* Helper class for finding elements with annotations (including those with classfile-level retention).
*/
- public class WithAnnotations {
+ public final class WithAnnotations {
private WithAnnotations() {
}
@@ -379,6 +390,7 @@ class Finder extends AnnotationFinder im
result.add(annotated);
}
} catch (ClassNotFoundException e) {
+ //ignore
}
}
}
@@ -455,10 +467,11 @@ class Finder extends AnnotationFinder im
}
- public List<Annotated<Parameter<Method>>> findAnnotatedMethodParameters(Class<? extends Annotation> annotation) {
- Finder.this.findAnnotatedMethodParameters(annotation);
+ public List<Annotated<Parameter<Method>>> findAnnotatedMethodParameters(
+ Class<? extends Annotation> annotationType) {
+ Finder.this.findAnnotatedMethodParameters(annotationType);
final List<Annotated<Parameter<Method>>> result = new ArrayList<Annotated<Parameter<Method>>>();
- for (Info info : getAnnotationInfos(annotation.getName())) {
+ for (Info info : getAnnotationInfos(annotationType.getName())) {
if (info instanceof ParameterInfo) {
ParameterInfo parameterInfo = (ParameterInfo) info;
if ("<init>".equals(parameterInfo.getDeclaringMethod().getName())) {
@@ -474,7 +487,7 @@ class Finder extends AnnotationFinder im
}
IncludesClassfile<Parameter<Method>> annotated =
new IncludesClassfile<Parameter<Method>>(parameter, classfileAnnotationsFor(parameterInfo));
- if (annotated.isAnnotationPresent(annotation)) {
+ if (annotated.isAnnotationPresent(annotationType)) {
result.add(annotated);
}
}
@@ -590,7 +603,6 @@ class Finder extends AnnotationFinder im
/**
* Create a new {@link Finder} instance.
- *
* @param archive
*/
public Finder(Archive archive) {
@@ -602,10 +614,17 @@ class Finder extends AnnotationFinder im
enableFindSubclasses();
}
+ /**
+ * Fluent "finder with annotations".
+ * @return {@link WithAnnotations}
+ */
public WithAnnotations withAnnotations() {
return withAnnotations;
}
+ /**
+ * {@inheritDoc}
+ */
protected void readClassDef(InputStream in) throws IOException {
try {
ClassReader classReader = new ClassReader(in);
@@ -615,71 +634,79 @@ class Finder extends AnnotationFinder im
}
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public AnnotationFinder select(Class<?>... arg0) {
throw new UnsupportedOperationException();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public AnnotationFinder select(Iterable<String> clazz) {
throw new UnsupportedOperationException();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public AnnotationFinder select(String... clazz) {
throw new UnsupportedOperationException();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public ScanResult scan(ScanRequest request) {
final ScanResult result = new ScanResult();
for (WeaveInterest interest : request.getInterests()) {
switch (interest.target) {
- case PACKAGE:
- for (Annotated<Package> pkg : this.withAnnotations().findAnnotatedPackages(interest.annotationType)) {
- result.getWeavable(pkg.get()).addAnnotations(pkg.getAnnotations());
- }
- case TYPE:
- for (Annotated<Class<?>> type : this.withAnnotations()
- .findAnnotatedClasses(interest.annotationType)) {
- result.getWeavable(type.get()).addAnnotations(type.getAnnotations());
- }
- break;
- case METHOD:
- for (Annotated<Method> method : this.withAnnotations()
- .findAnnotatedMethods(interest.annotationType)) {
- result.getWeavable(method.get()).addAnnotations(method.getAnnotations());
- }
- break;
- case CONSTRUCTOR:
- for (Annotated<Constructor<?>> cs : this.withAnnotations().findAnnotatedConstructors(
- interest.annotationType)) {
- result.getWeavable(cs.get()).addAnnotations(cs.getAnnotations());
- }
- break;
- case FIELD:
- for (Annotated<Field> fld : this.withAnnotations().findAnnotatedFields(interest.annotationType)) {
- result.getWeavable(fld.get()).addAnnotations(fld.getAnnotations());
- }
- break;
- case PARAMETER:
- for (Annotated<Parameter<Method>> parameter : this.withAnnotations().findAnnotatedMethodParameters(
- interest.annotationType)) {
- result.getWeavable(parameter.get().getDeclaringExecutable())
- .getWeavableParameter(parameter.get().getIndex())
- .addAnnotations(parameter.getAnnotations());
- }
- for (Annotated<Parameter<Constructor<?>>> parameter : this.withAnnotations()
- .findAnnotatedConstructorParameters(interest.annotationType)) {
- result.getWeavable(parameter.get().getDeclaringExecutable())
- .getWeavableParameter(parameter.get().getIndex())
- .addAnnotations(parameter.getAnnotations());
- }
- break;
- default:
- // should we log something?
- break;
+ case PACKAGE:
+ for (Annotated<Package> pkg : this.withAnnotations().findAnnotatedPackages(interest.annotationType)) {
+ result.getWeavable(pkg.get()).addAnnotations(pkg.getAnnotations());
+ }
+ case TYPE:
+ for (Annotated<Class<?>> type : this.withAnnotations().findAnnotatedClasses(interest.annotationType)) {
+ result.getWeavable(type.get()).addAnnotations(type.getAnnotations());
+ }
+ break;
+ case METHOD:
+ for (Annotated<Method> method : this.withAnnotations().findAnnotatedMethods(interest.annotationType)) {
+ result.getWeavable(method.get()).addAnnotations(method.getAnnotations());
+ }
+ break;
+ case CONSTRUCTOR:
+ for (Annotated<Constructor<?>> cs : this.withAnnotations().findAnnotatedConstructors(
+ interest.annotationType)) {
+ result.getWeavable(cs.get()).addAnnotations(cs.getAnnotations());
+ }
+ break;
+ case FIELD:
+ for (Annotated<Field> fld : this.withAnnotations().findAnnotatedFields(interest.annotationType)) {
+ result.getWeavable(fld.get()).addAnnotations(fld.getAnnotations());
+ }
+ break;
+ case PARAMETER:
+ for (Annotated<Parameter<Method>> parameter : this.withAnnotations().findAnnotatedMethodParameters(
+ interest.annotationType)) {
+ result.getWeavable(parameter.get().getDeclaringExecutable())
+ .getWeavableParameter(parameter.get().getIndex()).addAnnotations(parameter.getAnnotations());
+ }
+ for (Annotated<Parameter<Constructor<?>>> parameter : this.withAnnotations()
+ .findAnnotatedConstructorParameters(interest.annotationType)) {
+ result.getWeavable(parameter.get().getDeclaringExecutable())
+ .getWeavableParameter(parameter.get().getIndex()).addAnnotations(parameter.getAnnotations());
+ }
+ break;
+ default:
+ // should we log something?
+ break;
}
}
for (Class<?> supertype : request.getSupertypes()) {
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Inflater.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Inflater.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Inflater.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Inflater.java Fri Jan 10 20:14:41 2014
@@ -88,9 +88,9 @@ class Inflater {
final Map<PackageInfo, List<Annotation>> packageAnnotations;
final Map<ClassInfo, List<Annotation>> classAnnotations;
final Map<FieldInfo, List<Annotation>> fieldAnnotations;
- final Map<MethodInfo, List<Annotation>> constructorAnnotations;
+ final Map<MethodInfo, List<Annotation>> ctorAnnotations;
final Map<MethodInfo, List<Annotation>> methodAnnotations;
- final Map<ParameterInfo, List<Annotation>> constructorParameterAnnotations;
+ final Map<ParameterInfo, List<Annotation>> ctorParameterAnnotations;
final Map<ParameterInfo, List<Annotation>> methodParameterAnnotations;
Inflater(Map<Info, List<Annotation>> m) {
@@ -99,9 +99,9 @@ class Inflater {
this.packageAnnotations = subMap(m, new InfoMatcher(PackageInfo.class));
this.classAnnotations = subMap(m, new InfoMatcher(ClassInfo.class));
this.fieldAnnotations = subMap(m, new InfoMatcher(FieldInfo.class));
- this.constructorAnnotations = subMap(m, new MethodMatcher(true));
+ this.ctorAnnotations = subMap(m, new MethodMatcher(true));
this.methodAnnotations = subMap(m, new MethodMatcher(false));
- this.constructorParameterAnnotations = subMap(m, new ParameterMatcher(true));
+ this.ctorParameterAnnotations = subMap(m, new ParameterMatcher(true));
this.methodParameterAnnotations = subMap(m, new ParameterMatcher(false));
}
@@ -142,7 +142,7 @@ class Inflater {
}
}
for (WeavableConstructor<?> cs : cls.getConstructors()) {
- for (Map.Entry<MethodInfo, List<Annotation>> e : constructorAnnotations.entrySet()) {
+ for (Map.Entry<MethodInfo, List<Annotation>> e : ctorAnnotations.entrySet()) {
try {
if (e.getKey().get().equals(cs.getTarget())) {
cs.addAnnotations(e.getValue());
@@ -152,7 +152,7 @@ class Inflater {
}
}
for (WeavableConstructorParameter<?> p : cs.getParameters()) {
- for (Map.Entry<ParameterInfo, List<Annotation>> e : constructorParameterAnnotations.entrySet()) {
+ for (Map.Entry<ParameterInfo, List<Annotation>> e : ctorParameterAnnotations.entrySet()) {
try {
final Parameter<?> parameter = e.getKey().get();
if (parameter.getDeclaringExecutable().equals(cs.getTarget())
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java Fri Jan 10 20:14:41 2014
@@ -38,7 +38,9 @@ import org.apache.xbean.finder.archive.F
*/
public class WeaveProcessor {
- /** List of picked up weaver plugins */
+ /**
+ * List of picked up weaver plugins.
+ */
private static final List<Weaver> WEAVERS;
static {
@@ -66,7 +68,7 @@ public class WeaveProcessor {
/**
* Create a new {@link WeaveProcessor} instance.
- *
+ *
* @param classpath not {@code null}
* @param target not {@code null}
* @param configuration not {@code null}
@@ -87,7 +89,8 @@ public class WeaveProcessor {
final Finder finder = new Finder(new FileArchive(classLoader, target));
for (Weaver weaver : WEAVERS) {
final WeaveEnvironment env =
- new LocalWeaveEnvironment(target, classLoader, configuration, Logger.getLogger(weaver.getClass().getName()));
+ new LocalWeaveEnvironment(target, classLoader, configuration, Logger.getLogger(weaver.getClass()
+ .getName()));
weaver.process(env, finder);
}
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/AnnotatedElements.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/AnnotatedElements.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/AnnotatedElements.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/AnnotatedElements.java Fri Jan 10 20:14:41 2014
@@ -23,17 +23,16 @@ import java.lang.annotation.RetentionPol
import java.lang.reflect.AnnotatedElement;
/**
- * Interface defining a means of iterating over a particular type of {@link AnnotatedElement} as well as filtering by
- * annotation type (including annotations with {@link RetentionPolicy#CLASS} retention in addition to those with
- * {@link RetentionPolicy#RUNTIME} retention.
- *
- * @param <T>
+ * Interface defining a means of iterating over a particular type of
+ * {@link AnnotatedElement} as well as filtering by annotation type (including
+ * annotations with {@link RetentionPolicy#CLASS} retention in addition to those
+ * with {@link RetentionPolicy#RUNTIME} retention.
+ * @param <T> element type
*/
public interface AnnotatedElements<T extends AnnotatedElement> extends Iterable<T> {
/**
* Filter by annotation type.
- *
- * @param annotationType
+ * @param annotationType filter
* @return {@link AnnotatedElements}, narrowed
*/
AnnotatedElements<T> with(Class<? extends Annotation> annotationType);
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/NestedWeavable.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/NestedWeavable.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/NestedWeavable.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/NestedWeavable.java Fri Jan 10 20:14:41 2014
@@ -18,25 +18,55 @@
*/
package org.apache.commons.weaver.model;
-public abstract class NestedWeavable<SELF extends NestedWeavable<SELF, TARGET, PARENT, PARENT_TARGET>, TARGET, PARENT extends Weavable<PARENT, PARENT_TARGET>, PARENT_TARGET>
+/**
+ * Describes a {@link Weavable} that lives inside some other {@link Weavable}.
+ * @param <SELF> own type
+ * @param <TARGET> weavable target type
+ * @param <PARENT> enclosing weavable type
+ * @param <PARENT_TARGET> parent target type
+ */
+public abstract class NestedWeavable
+ <SELF extends NestedWeavable<SELF, TARGET, PARENT, PARENT_TARGET>,
+ TARGET,
+ PARENT extends Weavable<PARENT, PARENT_TARGET>,
+ PARENT_TARGET>
extends Weavable<SELF, TARGET> {
private final PARENT parent;
+ /**
+ * Create a new {@link NestedWeavable} instance.
+ * @param target element
+ * @param parent enclosing
+ */
protected NestedWeavable(TARGET target, PARENT parent) {
super(target);
this.parent = parent;
}
+ /**
+ * Get the parent.
+ * @return {@code PARENT}
+ */
public PARENT getParent() {
return parent;
}
+ /**
+ * Implement {@link Comparable}.
+ * @param o {@code SELF}
+ * @return int per {@link Comparable#compareTo(Object)} contract
+ */
@Override
public final int compareTo(SELF o) {
int result = getParent().compareTo(o.getParent());
return result == 0 ? localCompareTo(o) : result;
}
+ /**
+ * Compare against {@code o} without respect to {@link #getParent()}.
+ * @param o SELF{@code SELF}
+ * @return int per {@link Comparable#compareTo(Object)} contract
+ */
protected abstract int localCompareTo(SELF o);
-}
\ No newline at end of file
+}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanRequest.java Fri Jan 10 20:14:41 2014
@@ -38,6 +38,11 @@ public class ScanRequest {
private final List<WeaveInterest> interests = new ArrayList<WeaveInterest>();
private final Set<Class<?>> supertypes = new LinkedHashSet<Class<?>>();
+ /**
+ * Register a {@link WeaveInterest}.
+ * @param interest {@link WeaveInterest} to add
+ * @return {@code this}, fluently
+ */
public ScanRequest add(WeaveInterest interest) {
if (interest == null) {
throw new NullPointerException();
@@ -46,15 +51,28 @@ public class ScanRequest {
return this;
}
+ /**
+ * Register one or more types whose subtypes you are looking for.
+ * @param types {@link Class}es to add
+ * @return {@code this}, fluently
+ */
public ScanRequest addSupertypes(Class<?>... types) {
Collections.addAll(supertypes, Validate.noNullElements(types, "null element at [%s]"));
return this;
}
+ /**
+ * Get registered {@link WeaveInterest}s.
+ * @return {@link Iterable}
+ */
public Iterable<WeaveInterest> getInterests() {
return Collections.unmodifiableList(interests);
}
+ /**
+ * Get registered {@link Class}es whose subtypes will be returned.
+ * @return {@link Set}
+ */
public Set<Class<?>> getSupertypes() {
return Collections.unmodifiableSet(supertypes);
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/ScanResult.java Fri Jan 10 20:14:41 2014
@@ -34,9 +34,9 @@ import org.apache.commons.weaver.WeavePr
import org.apache.commons.weaver.spi.Weaver;
/**
- * Encapsulates the result of scanning based on a {@link ScanRequest}. The scan results are available in a structure
- * corresponding to the Java class hierarchy; i.e.:
- *
+ * <p>Encapsulates the result of scanning based on a {@link ScanRequest}. The
+ * scan results are available in a structure corresponding to the Java class
+ * hierarchy; i.e.:
* <pre>
* package
* |_class
@@ -46,13 +46,16 @@ import org.apache.commons.weaver.spi.Wea
* |_constructor
* |_constructor parameter
* </pre>
- *
- * The tree of results can be iterated in this manner using {@link #getPackages()}. However, if a given {@link Weaver}
- * is known not to handle packages but some other element, convenience methods are provided here giving direct access to
- * the various elements that may have been discovered.
+ * </p><p>
+ * The tree of results can be iterated in this manner using
+ * {@link #getPackages()}. However, if a given {@link Weaver} is known not to
+ * handle packages but some other element, convenience methods are provided
+ * here giving direct access to the various elements that may have been
+ * discovered.
+ * </p>
*/
public class ScanResult {
- private static abstract class Projection<PARENT, CHILD extends AnnotatedElement> implements
+ private abstract static class Projection<PARENT, CHILD extends AnnotatedElement> implements
AnnotatedElements<CHILD> {
private final Iterable<PARENT> parents;
@@ -173,8 +176,7 @@ public class ScanResult {
/**
* Public for use by {@link WeaveProcessor}.
- *
- * @param pkg
+ * @param pkg to wrap
* @return {@link WeavablePackage}
*/
public WeavablePackage getWeavable(Package pkg) {
@@ -189,8 +191,8 @@ public class ScanResult {
/**
* Public for use by {@link WeaveProcessor}.
- *
- * @param cls
+ * @param cls to wrap
+ * @param <T> type
* @return {@link WeavableClass}
*/
public <T> WeavableClass<T> getWeavable(Class<T> cls) {
@@ -199,8 +201,7 @@ public class ScanResult {
/**
* Public for use by {@link WeaveProcessor}.
- *
- * @param fld
+ * @param fld to wrap
* @return {@link WeavableField}
*/
public WeavableField<?> getWeavable(Field fld) {
@@ -209,8 +210,7 @@ public class ScanResult {
/**
* Public for use by {@link WeaveProcessor}.
- *
- * @param mt
+ * @param mt to wrap
* @return {@link WeavableMethod}
*/
public WeavableMethod<?> getWeavable(Method mt) {
@@ -219,14 +219,18 @@ public class ScanResult {
/**
* Public for use by {@link WeaveProcessor}.
- *
- * @param ctor
+ * @param ctor to wrap
+ * @param <T> type
* @return {@link WeavableConstructor}
*/
public <T> WeavableConstructor<T> getWeavable(Constructor<T> ctor) {
return getWeavable(ctor.getDeclaringClass()).getWeavable(ctor);
}
+ /**
+ * Iterate or filter {@link WeavablePackage}s.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavablePackage> getPackages() {
return new AnnotatedElements<WeavablePackage>() {
@@ -242,6 +246,10 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableClass}es.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableClass<?>> getClasses() {
return new Projection<WeavablePackage, WeavableClass<?>>(getPackages()) {
@@ -252,6 +260,11 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableClass}es assignable to {@code supertype}.
+ * @param supertype {@link Class} whose subtypes are sought
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableClass<?>> getClassesAssignableTo(final Class<?> supertype) {
Validate.notNull(supertype, "supertype");
@@ -306,6 +319,10 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableField}s.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableField<?>> getFields() {
return new Projection<WeavableClass<?>, WeavableField<?>>(getClasses()) {
@@ -318,6 +335,10 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableConstructor}s.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableConstructor<?>> getConstructors() {
return new Projection<WeavableClass<?>, WeavableConstructor<?>>(getClasses()) {
@@ -330,6 +351,10 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableMethod}s.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableMethod<?>> getMethods() {
return new Projection<WeavableClass<?>, WeavableMethod<?>>(getClasses()) {
@@ -342,6 +367,10 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableMethodParameter}s.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableMethodParameter<?>> getMethodParameters() {
return new Projection<WeavableMethod<?>, WeavableMethodParameter<?>>(getMethods()) {
@@ -354,6 +383,10 @@ public class ScanResult {
};
}
+ /**
+ * Iterate or filter {@link WeavableConstructorParameter}s.
+ * @return {@link AnnotatedElements}
+ */
public AnnotatedElements<WeavableConstructorParameter<?>> getConstructorParameters() {
return new Projection<WeavableConstructor<?>, WeavableConstructorParameter<?>>(getConstructors()) {
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Scanner.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Scanner.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Scanner.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Scanner.java Fri Jan 10 20:14:41 2014
@@ -25,9 +25,9 @@ public interface Scanner {
/**
* Perform the requested scan.
- *
- * @param request
- * @return ScanResult
+ *
+ * @param request to process
+ * @return {@link ScanResult}
*/
ScanResult scan(ScanRequest request);
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/Weavable.java Fri Jan 10 20:14:41 2014
@@ -19,6 +19,7 @@
package org.apache.commons.weaver.model;
import java.lang.annotation.Annotation;
+import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.AnnotatedElement;
import java.util.Arrays;
import java.util.LinkedHashSet;
@@ -26,6 +27,13 @@ import java.util.Set;
import org.apache.commons.lang3.Validate;
+/**
+ * {@link Weavable} extends {@link AnnotatedElement} to include
+ * {@link RetentionPolicy#CLASS} annotations.
+ *
+ * @param <SELF> own type
+ * @param <TARGET> target type
+ */
public abstract class Weavable<SELF extends Weavable<SELF, TARGET>, TARGET> implements Comparable<SELF>,
AnnotatedElement {
private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
@@ -33,6 +41,10 @@ public abstract class Weavable<SELF exte
private final TARGET target;
private Set<Annotation> annotations;
+ /**
+ * Create a new {@link Weavable} instance.
+ * @param target {@code TARGET}
+ */
protected Weavable(TARGET target) {
this.target = target;
if (target instanceof AnnotatedElement) {
@@ -40,11 +52,21 @@ public abstract class Weavable<SELF exte
}
}
+ /**
+ * Add one or more annotations.
+ * @param toAdd {@link Annotation}[]
+ * @return whether any change was made
+ */
public boolean addAnnotations(Annotation... toAdd) {
Validate.noNullElements(toAdd);
return addAnnotations(Arrays.asList(toAdd));
}
+ /**
+ * Add annotations from an {@link Iterable}.
+ * @param toAdd {@link Iterable} of {@link Annotation}
+ * @return whether any change was made
+ */
public boolean addAnnotations(Iterable<Annotation> toAdd) {
if (toAdd == null) {
return false;
@@ -61,11 +83,20 @@ public abstract class Weavable<SELF exte
return result;
}
+ /**
+ * Get the target of this {@link Weavable}.
+ * @return {@code TARGET}
+ */
public TARGET getTarget() {
return target;
}
- public Annotation[] getAnnotations() {
+ /**
+ * Get all {@link Annotation}s associated with this element.
+ * @return {@link Annotation}[]
+ */
+ @Override
+ public final Annotation[] getAnnotations() {
synchronized (this) {
if (annotations == null) {
return EMPTY_ANNOTATION_ARRAY;
@@ -74,6 +105,12 @@ public abstract class Weavable<SELF exte
return annotations.toArray(EMPTY_ANNOTATION_ARRAY);
}
+ /**
+ * Get any instance of {@code annotationClass} attached to {@link #getTarget()}.
+ * @param annotationClass {@link Class} annotation type
+ * @param <T> annotation type
+ * @return {@code T} instance if available, else {@code null}
+ */
@Override
public synchronized <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
if (annotations == null) {
@@ -89,16 +126,29 @@ public abstract class Weavable<SELF exte
return null;
}
+ /**
+ * Overridden to return {@link #getAnnotations()}.
+ * @return {@link Annotation}[]
+ */
@Override
- public Annotation[] getDeclaredAnnotations() {
+ public final Annotation[] getDeclaredAnnotations() {
return getAnnotations();
}
+ /**
+ * Learn whether an annotation of type {@code annotationClass} is present.
+ * @param annotationClass to find
+ * @return {@code boolean}
+ */
@Override
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {
return getAnnotation(annotationClass) != null;
}
+ /**
+ * Return a {@link String} representation of this {@link Weavable}.
+ * @return {@link String}
+ */
@Override
public String toString() {
return "Weavable " + getTarget().toString();
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableClass.java Fri Jan 10 20:14:41 2014
@@ -28,9 +28,15 @@ import java.util.concurrent.ConcurrentSk
import org.apache.commons.weaver.utils.Args;
+/**
+ * {@link Weavable} {@link Class}.
+ *
+ * @param <T> type
+ */
public class WeavableClass<T> extends NestedWeavable<WeavableClass<T>, Class<T>, WeavablePackage, Package> {
private final ConcurrentNavigableMap<String, WeavableField<T>> fields =
new ConcurrentSkipListMap<String, WeavableField<T>>();
+
private final ConcurrentNavigableMap<Constructor<T>, WeavableConstructor<T>> ctors =
new ConcurrentSkipListMap<Constructor<T>, WeavableConstructor<T>>(new Comparator<Constructor<?>>() {
@@ -39,6 +45,7 @@ public class WeavableClass<T> extends Ne
return Args.compare(o1.getParameterTypes(), o2.getParameterTypes());
}
});
+
private final ConcurrentNavigableMap<Method, WeavableMethod<T>> methods =
new ConcurrentSkipListMap<Method, WeavableMethod<T>>(new Comparator<Method>() {
@@ -49,10 +56,20 @@ public class WeavableClass<T> extends Ne
}
});
+ /**
+ * Create a new {@link WeavableClass} instance.
+ * @param target {@link Class}
+ * @param parent {@link WeavablePackage} enclosing
+ */
public WeavableClass(Class<T> target, WeavablePackage parent) {
super(target, parent);
}
+ /**
+ * Get a {@link WeavableField} representing {@code fld}.
+ * @param fld to wrap
+ * @return {@link WeavableField}
+ */
public WeavableField<T> getWeavable(Field fld) {
final String key = fld.getName();
if (fields.containsKey(key)) {
@@ -64,6 +81,11 @@ public class WeavableClass<T> extends Ne
return faster == null ? result : faster;
}
+ /**
+ * Get a {@link WeavableMethod} representing {@code mt}.
+ * @param mt to wrap
+ * @return {@link WeavableMethod}
+ */
public WeavableMethod<T> getWeavable(Method mt) {
if (methods.containsKey(mt)) {
final WeavableMethod<T> result = (WeavableMethod<T>) methods.get(mt);
@@ -74,6 +96,11 @@ public class WeavableClass<T> extends Ne
return faster == null ? result : faster;
}
+ /**
+ * Get a {@link WeavableConstructor} representing {@code ctor}.
+ * @param ctor to wrap
+ * @return {@link WeavableConstructor}
+ */
public WeavableConstructor<T> getWeavable(Constructor<T> ctor) {
if (ctors.containsKey(ctor)) {
final WeavableConstructor<T> result = (WeavableConstructor<T>) ctors.get(ctor);
@@ -84,18 +111,33 @@ public class WeavableClass<T> extends Ne
return faster == null ? result : faster;
}
+ /**
+ * Get {@link WeavableField}s of this {@link WeavableClass}.
+ * @return {@link Iterable}
+ */
public Iterable<WeavableField<T>> getFields() {
return Collections.unmodifiableCollection(fields.values());
}
+ /**
+ * Get {@link WeavableConstructor}s of this {@link WeavableClass}.
+ * @return {@link Iterable}
+ */
public Iterable<WeavableConstructor<T>> getConstructors() {
return Collections.unmodifiableCollection(ctors.values());
}
+ /**
+ * Get {@link WeavableMethod}s of this {@link WeavableClass}.
+ * @return {@link Iterable}
+ */
public Iterable<WeavableMethod<T>> getMethods() {
return Collections.unmodifiableCollection(methods.values());
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected int localCompareTo(WeavableClass<T> o) {
return getTarget().getName().compareTo(o.getTarget().getName());
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructor.java Fri Jan 10 20:14:41 2014
@@ -20,18 +20,34 @@ package org.apache.commons.weaver.model;
import java.lang.reflect.Constructor;
+/**
+ * {@link Weavable} {@link Constructor}.
+ *
+ * @param <T> type constructed
+ */
public class WeavableConstructor<T> extends
WeavableExecutable<WeavableConstructor<T>, Constructor<T>, T, WeavableConstructorParameter<T>> {
+ /**
+ * Create a new {@link WeavableConstructor} instance.
+ * @param target {@link Constructor}
+ * @param parent enclosing {@link WeavableClass}
+ */
public WeavableConstructor(Constructor<T> target, WeavableClass<T> parent) {
super(target, parent);
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected Class<?>[] getParameterTypes() {
return getTarget().getParameterTypes();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected WeavableConstructorParameter<T> createParameter(int index) {
return new WeavableConstructorParameter<T>(Integer.valueOf(index), this);
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableConstructorParameter.java Fri Jan 10 20:14:41 2014
@@ -20,9 +20,19 @@ package org.apache.commons.weaver.model;
import java.lang.reflect.Constructor;
+/**
+ * {@link Weavable} {@link Constructor} parameter.
+ *
+ * @param <T> constructed type
+ */
public class WeavableConstructorParameter<T> extends
WeavableParameter<WeavableConstructorParameter<T>, WeavableConstructor<T>, Constructor<T>, T> {
+ /**
+ * Create a new {@link WeavableConstructorParameter} instance.
+ * @param target parameter index
+ * @param parent declaring {@link WeavableConstructor}
+ */
public WeavableConstructorParameter(Integer target, WeavableConstructor<T> parent) {
super(target, parent);
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableExecutable.java Fri Jan 10 20:14:41 2014
@@ -25,11 +25,28 @@ import java.util.List;
import org.apache.commons.weaver.utils.Args;
-public abstract class WeavableExecutable<SELF extends WeavableExecutable<SELF, TARGET, T, P>, TARGET extends Member, T, P extends WeavableParameter<P, SELF, TARGET, T>>
+/**
+ * Represents a {@link Weavable} "executable".
+ *
+ * @param <SELF> own type
+ * @param <TARGET> target executable type
+ * @param <T> owning type
+ * @param <P> parameter type
+ */
+public abstract class WeavableExecutable
+ <SELF extends WeavableExecutable<SELF, TARGET, T, P>,
+ TARGET extends Member,
+ T,
+ P extends WeavableParameter<P, SELF, TARGET, T>>
extends NestedWeavable<SELF, TARGET, WeavableClass<T>, Class<T>> {
private final List<P> parameters;
+ /**
+ * Create a new {@link WeavableExecutable} instance.
+ * @param target executable
+ * @param parent enclosing {@link WeavableClass}
+ */
protected WeavableExecutable(TARGET target, WeavableClass<T> parent) {
super(target, parent);
final List<P> params = new ArrayList<P>();
@@ -39,19 +56,40 @@ public abstract class WeavableExecutable
parameters = Collections.unmodifiableList(params);
}
+ /**
+ * Create an appropriate {@link WeavableParameter} object.
+ * @param index of parameter
+ * @return {@code P}
+ */
protected abstract P createParameter(int index);
+ /**
+ * Get the parameter types of {@link #getTarget()}.
+ * @return {@link Class}[]
+ */
protected abstract Class<?>[] getParameterTypes();
+ /**
+ * {@inheritDoc}
+ */
@Override
protected int localCompareTo(SELF o) {
return Args.compare(getParameterTypes(), o.getParameterTypes());
}
+ /**
+ * Get the parameter at the specified index.
+ * @param index {@code int}
+ * @return {@code P}
+ */
public P getWeavableParameter(int index) {
return parameters.get(index);
}
+ /**
+ * Get the parameters declared by this {@link WeavableExecutable}.
+ * @return {@link Iterable} of {@code P}
+ */
public Iterable<P> getParameters() {
return parameters;
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableField.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableField.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableField.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableField.java Fri Jan 10 20:14:41 2014
@@ -20,12 +20,25 @@ package org.apache.commons.weaver.model;
import java.lang.reflect.Field;
+/**
+ * Represents a {@link Weavable} {@link Field}.
+ *
+ * @param <T> enclosing type
+ */
public class WeavableField<T> extends NestedWeavable<WeavableField<T>, Field, WeavableClass<T>, Class<T>> {
+ /**
+ * Create a new {@link WeavableField} instance.
+ * @param target field
+ * @param parent enclosing {@link WeavableClass}
+ */
public WeavableField(Field target, WeavableClass<T> parent) {
super(target, parent);
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected int localCompareTo(WeavableField<T> o) {
return getTarget().getName().compareTo(o.getTarget().getName());
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethod.java Fri Jan 10 20:14:41 2014
@@ -20,23 +20,42 @@ package org.apache.commons.weaver.model;
import java.lang.reflect.Method;
+/**
+ * Represents a {@link Weavable} {@link Method}.
+ *
+ * @param <T> enclosing type
+ */
public class WeavableMethod<T> extends WeavableExecutable<WeavableMethod<T>, Method, T, WeavableMethodParameter<T>> {
+ /**
+ * Create a new {@link WeavableMethod} instance.
+ * @param target method
+ * @param parent enclosing {@link WeavableClass}
+ */
public WeavableMethod(Method target, WeavableClass<T> parent) {
super(target, parent);
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected Class<?>[] getParameterTypes() {
return getTarget().getParameterTypes();
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected int localCompareTo(WeavableMethod<T> o) {
int result = getTarget().getName().compareTo(o.getTarget().getName());
return result == 0 ? super.localCompareTo(o) : result;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected WeavableMethodParameter<T> createParameter(int index) {
return new WeavableMethodParameter<T>(Integer.valueOf(index), this);
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableMethodParameter.java Fri Jan 10 20:14:41 2014
@@ -20,9 +20,19 @@ package org.apache.commons.weaver.model;
import java.lang.reflect.Method;
+/**
+ * {@link Weavable} {@link Method} parameter.
+ *
+ * @param <T> type of enclosing class
+ */
public class WeavableMethodParameter<T> extends
WeavableParameter<WeavableMethodParameter<T>, WeavableMethod<T>, Method, T> {
+ /**
+ * Create a new {@link WeavableMethodParameter} instance.
+ * @param target index
+ * @param parent declaring {@link WeavableMethod}
+ */
public WeavableMethodParameter(Integer target, WeavableMethod<T> parent) {
super(target, parent);
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavablePackage.java Fri Jan 10 20:14:41 2014
@@ -22,15 +22,28 @@ import java.util.Collections;
import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;
+/**
+ * {@link Weavable} {@link Package}.
+ */
public class WeavablePackage extends Weavable<WeavablePackage, Package> {
private final ConcurrentNavigableMap<String, WeavableClass<?>> clazzes =
new ConcurrentSkipListMap<String, WeavableClass<?>>();
+ /**
+ * Create a new {@link WeavablePackage} instance.
+ * @param target package
+ */
public WeavablePackage(Package target) {
super(target);
}
+ /**
+ * Get a {@link WeavableClass} representing {@code cls}.
+ * @param cls to wrap
+ * @param <T> generic type of {@code cls}
+ * @return {@link WeavableClass}
+ */
public synchronized <T> WeavableClass<T> getWeavable(Class<T> cls) {
final String key = cls.getName();
if (clazzes.containsKey(key)) {
@@ -44,10 +57,19 @@ public class WeavablePackage extends Wea
return faster == null ? result : faster;
}
+ /**
+ * Get enclosed {@link WeavableClass}es.
+ * @return {@link Iterable}
+ */
public Iterable<WeavableClass<?>> getClasses() {
return Collections.unmodifiableCollection(clazzes.values());
}
+ /**
+ * Implement {@link Comparable}.
+ * @param arg0 {@link WeavablePackage} to compare against
+ * @return int per {@link Comparable#compareTo(Object)} contract
+ */
@Override
public int compareTo(WeavablePackage arg0) {
return getTarget().getName().compareTo(arg0.getTarget().getName());
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeavableParameter.java Fri Jan 10 20:14:41 2014
@@ -20,13 +20,33 @@ package org.apache.commons.weaver.model;
import java.lang.reflect.Member;
-public abstract class WeavableParameter<SELF extends WeavableParameter<SELF, PARENT, PARENT_TARGET, T>, PARENT extends WeavableExecutable<PARENT, PARENT_TARGET, T, SELF>, PARENT_TARGET extends Member, T>
+/**
+ * Represents the parameter of an executable.
+ *
+ * @param <SELF> own type
+ * @param <PARENT> {@link WeavableExecutable} type
+ * @param <PARENT_TARGET> target executable of parent
+ * @param <T> executable's owning type
+ */
+public abstract class WeavableParameter
+ <SELF extends WeavableParameter<SELF, PARENT, PARENT_TARGET, T>,
+ PARENT extends WeavableExecutable<PARENT, PARENT_TARGET, T, SELF>,
+ PARENT_TARGET extends Member,
+ T>
extends NestedWeavable<SELF, Integer, PARENT, PARENT_TARGET> {
+ /**
+ * Create a new {@link WeavableParameter} instance.
+ * @param target index
+ * @param parent executable
+ */
protected WeavableParameter(Integer target, PARENT parent) {
super(target, parent);
}
+ /**
+ * {@inheritDoc}
+ */
@Override
protected int localCompareTo(SELF o) {
return getTarget().compareTo(getTarget());
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveEnvironment.java Fri Jan 10 20:14:41 2014
@@ -43,26 +43,40 @@ public abstract class WeaveEnvironment {
this.name = name;
}
+ /**
+ * Get the content type, always "application/octet-stream".
+ * @return {@link String}
+ */
@Override
public String getContentType() {
return CONTENT_TYPE;
}
+ /**
+ * Get an {@link InputStream} for reading this {@link Resource}.
+ */
@Override
public InputStream getInputStream() throws IOException {
return classLoader.getResourceAsStream(name);
}
+ /**
+ * Get the name of this {@link Resource}.
+ * @return {@link String}
+ */
@Override
public String getName() {
return name;
}
+ /**
+ * Get an {@link OutputStream} for writing to this {@link Resource}.
+ * @return {@link OutputStream}
+ */
@Override
public OutputStream getOutputStream() throws IOException {
return WeaveEnvironment.this.getOutputStream(name);
}
-
}
/**
@@ -80,10 +94,9 @@ public abstract class WeaveEnvironment {
/**
* Create a new {@link WeaveEnvironment}.
- *
- * @param classLoader
- * @param config
- * @param log
+ * @param classLoader property
+ * @param config property
+ * @param log property
*/
protected WeaveEnvironment(ClassLoader classLoader, Properties config, Logger log) {
super();
@@ -92,50 +105,121 @@ public abstract class WeaveEnvironment {
this.log = log;
}
+ /**
+ * Handle a debug message.
+ * @param message text
+ * @param args format
+ * @see String#format(String, Object...)
+ */
public void debug(String message, Object... args) {
log.fine(String.format(message, args));
}
+ /**
+ * Handle a verbose message.
+ * @param message text
+ * @param args format
+ * @see String#format(String, Object...)
+ */
public void verbose(String message, Object... args) {
log.fine(String.format(message, args));
}
+ /**
+ * Handle a warning message.
+ * @param message text
+ * @param args format
+ * @see String#format(String, Object...)
+ */
public void warn(String message, Object... args) {
log.warning(String.format(message, args));
}
+ /**
+ * Handle an info message.
+ * @param message text
+ * @param args format
+ * @see String#format(String, Object...)
+ */
public void info(String message, Object... args) {
log.info(String.format(message, args));
}
+ /**
+ * Handle an error message.
+ * @param message text
+ * @param args format
+ * @see String#format(String, Object...)
+ */
public void error(String message, Object... args) {
log.severe(String.format(message, args));
}
+ /**
+ * Get a {@link DataSource} representing {@code cls}.
+ * @param cls type
+ * @return {@link DataSource}
+ */
public final DataSource getClassfile(Class<?> cls) {
return getClassfile(cls.getName());
}
+ /**
+ * Get a {@link DataSource} for the specified class.
+ * @param classname of type
+ * @return {@link DataSource}
+ */
public final DataSource getClassfile(String classname) {
return getResource(getResourceName(classname));
}
+ /**
+ * Get a {@link DataSource} for the specified resource.
+ * @param name of resource
+ * @return {@link DataSource}
+ */
public final DataSource getResource(String name) {
return new Resource(name);
}
+ /**
+ * Delete the classfile for {@code cls}.
+ * @param cls type
+ * @return whether successful
+ */
public final boolean deleteClassfile(Class<?> cls) {
return deleteClassfile(cls.getName());
}
+ /**
+ * Delete the classfile for the specified class.
+ * @param classname of type
+ * @return whether successful
+ */
public final boolean deleteClassfile(String classname) {
return deleteResource(getResourceName(classname));
}
+ /**
+ * Delete the specified resource.
+ * @param name to delete
+ * @return whether successful
+ */
public abstract boolean deleteResource(String name);
+ /**
+ * Open an {@link OutputStream} for the specified resource.
+ * @param resourceName to open
+ * @return {@link OutputStream}
+ * @throws IOException on error
+ */
protected abstract OutputStream getOutputStream(String resourceName) throws IOException;
+ /**
+ * Convert a classname into a resource name.
+ * @param classname to convert
+ * @return String
+ */
protected static String getResourceName(String classname) {
return classname.replace('.', '/') + ".class";
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/WeaveInterest.java Fri Jan 10 20:14:41 2014
@@ -25,8 +25,16 @@ import java.lang.annotation.ElementType;
/**
* Weave interest composed of annotation type and target element type.
*/
-public class WeaveInterest {
+public final class WeaveInterest {
+
+ /**
+ * Observed annotation type.
+ */
public final Class<? extends Annotation> annotationType;
+
+ /**
+ * Attached element type.
+ */
public final ElementType target;
private WeaveInterest(Class<? extends Annotation> annotationType, ElementType target) {
@@ -35,6 +43,12 @@ public class WeaveInterest {
this.target = target;
}
+ /**
+ * Get a {@link WeaveInterest}.
+ * @param annotationType observed annotation type
+ * @param target attached element type
+ * @return {@link WeaveInterest}
+ */
public static WeaveInterest of(Class<? extends Annotation> annotationType, ElementType target) {
return new WeaveInterest(annotationType, target);
}
Added: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/package-info.java?rev=1557247&view=auto
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/package-info.java (added)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/package-info.java Fri Jan 10 20:14:41 2014
@@ -0,0 +1,4 @@
+/**
+ * Defines a domain model for weaving operations.
+ */
+package org.apache.commons.weaver.model;
\ No newline at end of file
Propchange: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/model/package-info.java
------------------------------------------------------------------------------
svn:executable = *
Added: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/package-info.java?rev=1557247&view=auto
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/package-info.java (added)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/package-info.java Fri Jan 10 20:14:41 2014
@@ -0,0 +1,4 @@
+/**
+ * Defines the objects needed to perform filesystem-based weaving.
+ */
+package org.apache.commons.weaver;
\ No newline at end of file
Propchange: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/package-info.java
------------------------------------------------------------------------------
svn:executable = *
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Cleaner.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Cleaner.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Cleaner.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Cleaner.java Fri Jan 10 20:14:41 2014
@@ -22,16 +22,15 @@ import org.apache.commons.weaver.model.S
import org.apache.commons.weaver.model.WeaveEnvironment;
/**
- * SPI to provide a means for a weaver module to remove woven classes during incremental builds, if necessary.
+ * SPI to provide a means for a weaver module to remove woven classes during
+ * incremental builds, if necessary.
*/
public interface Cleaner {
/**
* Using the supplied {@link Scanner}, clean a {@link WeaveEnvironment}.
- *
- * @param environment
- * @param scanner
+ * @param environment to use
+ * @param scanner to use
* @return whether any work was done.
*/
boolean clean(WeaveEnvironment environment, Scanner scanner);
-
}
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java Fri Jan 10 20:14:41 2014
@@ -22,16 +22,15 @@ import org.apache.commons.weaver.model.S
import org.apache.commons.weaver.model.WeaveEnvironment;
/**
- * A {@link Weaver} implementation performs the byte code enhancement in the classes.
+ * A {@link Weaver} implementation performs the byte code enhancement in the
+ * classes.
*/
public interface Weaver {
/**
* Using the supplied {@link Scanner}, process a {@link WeaveEnvironment}.
- *
- * @param environment
- * @param scanner
+ * @param environment to use
+ * @param scanner to use
* @return whether any work was done.
*/
boolean process(WeaveEnvironment environment, Scanner scanner);
-
}
Added: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/package-info.java?rev=1557247&view=auto
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/package-info.java (added)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/package-info.java Fri Jan 10 20:14:41 2014
@@ -0,0 +1,4 @@
+/**
+ * Defines the weaver module service provider interface (SPI).
+ */
+package org.apache.commons.weaver.spi;
\ No newline at end of file
Propchange: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/spi/package-info.java
------------------------------------------------------------------------------
svn:executable = *
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Annotations.java Fri Jan 10 20:14:41 2014
@@ -31,10 +31,17 @@ import org.apache.commons.lang3.Validate
/**
* Provide annotation-related utility methods.
*/
-public class Annotations {
+public final class Annotations {
private Annotations() {
}
+ /**
+ * Create an annotation instance.
+ * @param annotationType type
+ * @param elements values
+ * @param <A> generic annotation type
+ * @return {@code A}
+ */
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() {
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Args.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Args.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Args.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Args.java Fri Jan 10 20:14:41 2014
@@ -21,13 +21,17 @@ package org.apache.commons.weaver.utils;
/**
* Argument/Parameter-related utilities.
*/
-public class Args {
+public final class Args {
+
+ private Args() {
+ }
/**
* Compare two parameter type arrays.
- * @param paramTypes1
- * @param paramTypes2
- * @return int
+ * @param paramTypes1 lhs
+ * @param paramTypes2 rhs
+ * @return {@code int} as specified by
+ * {@link java.util.Comparator#compare(Object, Object)}
*/
public static int compare(Class<?>[] paramTypes1, Class<?>[] paramTypes2) {
int i = 0;
Modified: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java (original)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/URLArray.java Fri Jan 10 20:14:41 2014
@@ -27,14 +27,13 @@ import java.util.Iterator;
/**
* {@link URL} Array utilities.
*/
-public abstract class URLArray {
+public final class URLArray {
private URLArray() {
}
/**
* Convert an {@link Iterable} of filesystem paths.
- *
- * @param files
+ * @param files to convert
* @return URL[]
*/
public static URL[] fromPaths(final Iterable<String> files) {
@@ -63,8 +62,7 @@ public abstract class URLArray {
/**
* Convert an {@link Iterable} of {@link File}s.
- *
- * @param files
+ * @param files to convert
* @return URL[]
*/
public static URL[] fromFiles(Iterable<File> files) {
Added: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/package-info.java
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/package-info.java?rev=1557247&view=auto
==============================================================================
--- commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/package-info.java (added)
+++ commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/package-info.java Fri Jan 10 20:14:41 2014
@@ -0,0 +1,4 @@
+/**
+ * Provides helpful utility classes.
+ */
+package org.apache.commons.weaver.utils;
\ No newline at end of file
Propchange: commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/package-info.java
------------------------------------------------------------------------------
svn:executable = *
Modified: commons/proper/weaver/trunk/src/site/markdown/index.md
URL: http://svn.apache.org/viewvc/commons/proper/weaver/trunk/src/site/markdown/index.md?rev=1557247&r1=1557246&r2=1557247&view=diff
==============================================================================
--- commons/proper/weaver/trunk/src/site/markdown/index.md (original)
+++ commons/proper/weaver/trunk/src/site/markdown/index.md Fri Jan 10 20:14:41 2014
@@ -34,6 +34,9 @@ are provided by the Commons Weaver proje
Typically a weaver module may respect a set of configuration
properties which should be documented along with that module.
+### What can these do for me?
+The canonical example is the [privilizer module](commons-weaver-modules-parent/commons-weaver-privilizer-parent/index.html).
+
## Integration
The weaver module(s) applicable to your codebase should be available
on the classpath of whatever Java-based processing mechanism you select.