You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2012/12/21 10:53:50 UTC
svn commit: r1424830 - in /commons/sandbox/privilizer/trunk:
maven-plugin/src/main/java/org/apache/commons/weaver/maven/
modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/
processor/src/main/java/org/apache/commons/weaver/ pr...
Author: struberg
Date: Fri Dec 21 09:53:50 2012
New Revision: 1424830
URL: http://svn.apache.org/viewvc?rev=1424830&view=rev
Log:
re-add classpath and target configuration
Modified:
commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java
commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaveProcessorTest.java
commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java
commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java
Modified: commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java (original)
+++ commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/AbstractWeaveMojo.java Fri Dec 21 09:53:50 2012
@@ -18,8 +18,12 @@ package org.apache.commons.weaver.maven;
import java.io.File;
import java.net.URLClassLoader;
import java.util.List;
+import java.util.Properties;
+import org.apache.commons.weaver.WeaveProcessor;
+import org.apache.commons.weaver.utils.URLArray;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Parameter;
@@ -27,21 +31,17 @@ import org.apache.maven.plugins.annotati
* Defines common properties.
*/
public abstract class AbstractWeaveMojo extends AbstractMojo {
- /**
- * Weaving policy to use.
- */
- @Parameter(property = "privilizer.policy", required = true, defaultValue = "DYNAMIC")
- protected Policy policy;
@Parameter(defaultValue = "false")
protected boolean verbose;
+ @Parameter(property = "weaver.properties", required = false)
+ protected Properties properties;
+
protected abstract List<String> getClasspath();
protected abstract File getTarget();
- protected abstract AccessLevel getAccessLevel();
-
protected FilesystemPrivilizer createWeaver() {
return new FilesystemPrivilizer(policy, new URLClassLoader(URLArray.fromPaths(getClasspath())), getTarget()) {
@Override
@@ -81,4 +81,19 @@ public abstract class AbstractWeaveMojo
});
}
+
+ @Override
+ public void execute() throws MojoFailureException {
+ try {
+ WeaveProcessor wp = WeaveProcessor.getInstance();
+ configure(wp);
+ wp.weave();
+ } catch (Exception e) {
+ throw new MojoFailureException("weaving failed", e);
+ }
+ }
+
+ protected void configure(WeaveProcessor wp) {
+
+ }
}
Modified: commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java (original)
+++ commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/TestWeaveMojo.java Fri Dec 21 09:53:50 2012
@@ -18,8 +18,6 @@ package org.apache.commons.weaver.maven;
import java.io.File;
import java.util.List;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@@ -38,8 +36,6 @@ public class TestWeaveMojo extends Abstr
@Parameter(readonly = true, required = true, defaultValue = "${project.build.testOutputDirectory}")
protected File target;
- @Parameter(readonly = false, required = true, defaultValue = "PUBLIC")
- protected AccessLevel accessLevel;
@Override
protected List<String> getClasspath() {
@@ -51,18 +47,4 @@ public class TestWeaveMojo extends Abstr
return target;
}
- @Override
- protected AccessLevel getAccessLevel() {
- return accessLevel;
- }
-
- @Override
- public void execute() throws MojoExecutionException
- {
- try {
- createWeaver().weaveAll();
- } catch (Exception e) {
- throw new MojoFailureException("failed", e);
- }
- }
}
Modified: commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java (original)
+++ commons/sandbox/privilizer/trunk/maven-plugin/src/main/java/org/apache/commons/weaver/maven/WeaveMojo.java Fri Dec 21 09:53:50 2012
@@ -18,8 +18,6 @@ package org.apache.commons.weaver.maven;
import java.io.File;
import java.util.List;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@@ -38,9 +36,6 @@ public class WeaveMojo extends AbstractW
@Parameter(readonly = true, required = true, defaultValue = "${project.build.outputDirectory}")
protected File target;
- @Parameter(readonly = false, required = true, defaultValue = "PACKAGE")
- protected AccessLevel accessLevel;
-
@Override
protected List<String> getClasspath() {
return classpath;
@@ -51,17 +46,6 @@ public class WeaveMojo extends AbstractW
return target;
}
- @Override
- protected AccessLevel getAccessLevel() {
- return accessLevel;
- }
- @Override
- public void execute() throws MojoExecutionException
- {
- try {
- createWeaver().weaveAll();
- } catch (Exception e) {
- throw new MojoFailureException("failed", e);
- }
- }
+
+
}
Modified: commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java (original)
+++ commons/sandbox/privilizer/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerWeaver.java Fri Dec 21 09:53:50 2012
@@ -13,10 +13,14 @@ import java.util.logging.Logger;
import javassist.CannotCompileException;
import javassist.NotFoundException;
import org.apache.commons.weaver.spi.Weaver;
+import org.apache.commons.weaver.utils.URLArray;
/**
* Weaver which adds doPrivileged blocks for each method annotated with
- * {@link Privileged}
+ * {@link Privileged}.
+ * An instance of this class will automatically get picked up by the
+ * {@link org.apache.commons.weaver.WeaveProcessor} via the
+ * {@link java.util.ServiceLoader}.
*/
public class PrivilizerWeaver implements Weaver
{
@@ -28,10 +32,6 @@ public class PrivilizerWeaver implements
private AccessLevel targetAccessLevel;
- private URLClassLoader urlClassLoader;
-
- private File target;
-
@Override
public void setLogger(Logger customLogger)
{
@@ -39,9 +39,9 @@ public class PrivilizerWeaver implements
}
@Override
- public void configure(Map<String, Object> config)
+ public void configure(List<String> classPath, File target, Map<String, Object> config)
{
- privilizer = new FilesystemPrivilizer(policy, urlClassLoader, target) {
+ privilizer = new FilesystemPrivilizer(policy, new URLClassLoader(URLArray.fromPaths(classPath)), target) {
@Override
protected boolean permitMethodWeaving(final AccessLevel accessLevel) {
return targetAccessLevel.compareTo(accessLevel) <= 0;
Modified: commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/WeaveProcessor.java Fri Dec 21 09:53:50 2012
@@ -40,11 +40,20 @@ public class WeaveProcessor {
private static WeaveProcessor instance;
+ /**
+ * The classpath which will be used to look up cross references during weaving.
+ */
+ private List<String> classPath;
+
+ /**
+ * The actual path which gets weaved. All the classes in this path
+ * will get weaved. The weaved classes will replace the original classes.
+ */
+ private File target;
+
/** List of picked up weaver plugins */
private List<Weaver> weavers = new ArrayList<Weaver>();
- /** List of classpath entries to perform weaving on*/
- private List<File> classPathsToWeave = new ArrayList<File>();
public static synchronized WeaveProcessor getInstance() {
if (instance == null) {
@@ -65,19 +74,18 @@ public class WeaveProcessor {
}
/**
- * All the class paths which should get weaved.
- * This e.g. contains target/classes in a typical maven installation.
+ * Configure all Weavers.
+ * @param classPath the classpath to look up cross-references in during weaving
+ * @param target the File path where the classes to weave reside
+ * @param config additional configuration for all plugins.
+ *
*/
- public void addClassPath(File classPath) {
- classPathsToWeave.add(classPath);
- }
+ public void configure(List<String> classPath, File target, Map<String, Object> config) {
+ this.classPath = classPath;
+ this.target = target;
- /**
- * configure all Weavers.
- */
- public void configure(Map<String, Object> config) {
for (Weaver weaver : weavers) {
- weaver.configure(config);
+ weaver.configure(classPath, target, config);
}
}
@@ -101,11 +109,9 @@ public class WeaveProcessor {
private void weave(Weaver weaver) {
List<Class<? extends Annotation>> interest = weaver.getInterest();
- ClassLoader classLoader = new URLClassLoader(URLArray.fromFiles(classPathsToWeave));
+ ClassLoader classLoader = new URLClassLoader(URLArray.fromPaths(classPath));
- //X ORIGINAL AnnotationFinder annotationFinder = new AnnotationFinder(new FileArchive(classLoader, target), false);
- //X TODO this is a hack for now!
- AnnotationFinder annotationFinder = new AnnotationFinder(new FileArchive(classLoader, classPathsToWeave.get(0)), false);
+ AnnotationFinder annotationFinder = new AnnotationFinder(new FileArchive(classLoader, target), false);
for (Class<? extends Annotation> annotation : interest) {
List<Class<?>> annotatedClasses = annotationFinder.findAnnotatedClasses(annotation);
Modified: commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/main/java/org/apache/commons/weaver/spi/Weaver.java Fri Dec 21 09:53:50 2012
@@ -18,6 +18,7 @@
*/
package org.apache.commons.weaver.spi;
+import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.List;
@@ -37,8 +38,11 @@ public interface Weaver
* This is for now a simple way to configure any weaver.
* Any configuration property of a weaver should start with it's 'name'
* e.g. 'privilizer'
+ * @param classPath the classpath to look up cross-references in during weaving
+ * @param target the File path where the classes to weave reside
+ * @param config additional configuration for all plugins.
*/
- void configure(Map<String, Object> config);
+ void configure(List<String> classPath, File target, Map<String, Object> config);
/**
* This method can be used to set a custom logger
@@ -72,9 +76,9 @@ public interface Weaver
*/
boolean weave(Method methodToWeave, Class<? extends Annotation> processingAnnotation);
-
/**
- * This method will get invoked after all {@link #weave(Class)} methods got invoked
+ * This method will get invoked after all {@link #weave(Class, Class)} and
+ * {@link #weave(java.lang.reflect.Method, Class)} methods got invoked
* for all classes on every weaver.
*/
void postWeave();
Modified: commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaveProcessorTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaveProcessorTest.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaveProcessorTest.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaveProcessorTest.java Fri Dec 21 09:53:50 2012
@@ -44,9 +44,11 @@ public class WeaveProcessorTest extends
Map<String, Object> config = new HashMap<String, Object>();
config.put("configKey", "configValue");
- wp.configure(config);
- wp.addClassPath(getTargetFolder());
+ getTargetFolder();
+
+ wp.configure(getClassPathEntries(), getTargetFolder(), config);
+
TestWeaver.postWeaveExecuted = false;
TestWeaver.preWeaveExecuted = false;
Modified: commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/WeaverTestBase.java Fri Dec 21 09:53:50 2012
@@ -23,6 +23,8 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
@@ -35,7 +37,16 @@ public abstract class WeaverTestBase {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
+ private File targetFolder;
+
+ private List<String> classPathEntries;
+
private static final String TARGET_FOLDER = "target";
+
+ public void cleanup() {
+ targetFolder = null;
+ }
+
/**
* Add a class to the temporary folder.
* @param clazz
@@ -66,6 +77,27 @@ public abstract class WeaverTestBase {
* Resolves the 'target' folder where the classes should get placed
*/
protected File getTargetFolder() {
- return new File(temporaryFolder.getRoot(), TARGET_FOLDER);
+ if (targetFolder == null) {
+ targetFolder = new File(temporaryFolder.getRoot(), TARGET_FOLDER);
+ }
+ return targetFolder;
}
+
+ protected List<String> getClassPathEntries() {
+ if (classPathEntries == null) {
+ classPathEntries = new ArrayList<String>(1);
+ try
+ {
+ classPathEntries.add(getTargetFolder().getCanonicalPath());
+ }
+ catch (IOException ioe)
+ {
+ throw new RuntimeException(ioe);
+ }
+ }
+
+ return classPathEntries;
+ }
+
+
}
Modified: commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java
URL: http://svn.apache.org/viewvc/commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java?rev=1424830&r1=1424829&r2=1424830&view=diff
==============================================================================
--- commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java (original)
+++ commons/sandbox/privilizer/trunk/processor/src/test/java/org/apache/commons/weaver/test/weaver/TestWeaver.java Fri Dec 21 09:53:50 2012
@@ -18,6 +18,7 @@
*/
package org.apache.commons.weaver.test.weaver;
+import java.io.File;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -45,7 +46,7 @@ public class TestWeaver implements Weave
}
@Override
- public void configure(Map<String, Object> config)
+ public void configure(List<String> classPath, File target, Map<String, Object> config)
{
Assert.assertNotNull(config);
Assert.assertEquals(1, config.size());