diff --git a/ebean-agent/src/main/java/io/ebean/enhance/ant/AntEnhanceTask.java b/ebean-agent/src/main/java/io/ebean/enhance/ant/AntEnhanceTask.java
index 35db49d0..329866a2 100644
--- a/ebean-agent/src/main/java/io/ebean/enhance/ant/AntEnhanceTask.java
+++ b/ebean-agent/src/main/java/io/ebean/enhance/ant/AntEnhanceTask.java
@@ -4,8 +4,6 @@
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
-import java.io.File;
-
/**
* An ANT task that can enhance entity beans etc for use by Ebean.
*
@@ -25,18 +23,16 @@
*
*
*
- *
- *
- * <taskdef name="ebeanEnhance" classname="AntEnhanceTask" classpath="bin" />
+ * {@code
*
- * <target name="enhance" depends="compile">
- * <ebeanEnhance
- * classSource="${bin.dir}"
- * packages="com.avaje.ebean.meta.**, com.acme.myapp.entity.**"
- * transformArgs="debug=1" />
- * </target>
- *
- *
+ *
+ *
+ *
+ *
+ * }
*/
public class AntEnhanceTask extends Task {
@@ -47,24 +43,26 @@ public class AntEnhanceTask extends Task {
@Override
public void execute() throws BuildException {
-
-// StringBuilder extraClassPath = new StringBuilder();
-// extraClassPath.append(classSource);
-// if (classpath != null)
-// {
-// if (!extraClassPath.toString().endsWith(";"))
-// {
-// extraClassPath.append(";");
-// }
-// extraClassPath.append(classpath);
-// }
- Transformer t = new Transformer(null, transformArgs);//extraClassPath.toString(),
+ String agentArgs = combine(packages, transformArgs);
+ Transformer t = new Transformer(null, agentArgs);
ClassLoader cl = AntEnhanceTask.class.getClassLoader();
OfflineFileTransform ft = new OfflineFileTransform(t, cl, classSource);
ft.process(packages);
}
+ /**
+ * Combine the packages into the transformArgs to filter enhanced classes via PackageFilter.
+ */
+ static String combine(String packages, String transformArgs) {
+ StringBuilder args = new StringBuilder();
+ args.append("packages=").append(packages.replace("**", ""));
+ if (transformArgs != null && !transformArgs.isEmpty()) {
+ args.append(',').append(transformArgs);
+ }
+ return args.toString();
+ }
+
/**
* the classpath used to search for e.g. inerited classes
*/
diff --git a/ebean-agent/src/main/java/io/ebean/enhance/common/PackageFilter.java b/ebean-agent/src/main/java/io/ebean/enhance/common/PackageFilter.java
index 3b3d7266..c1c2b6c8 100644
--- a/ebean-agent/src/main/java/io/ebean/enhance/common/PackageFilter.java
+++ b/ebean-agent/src/main/java/io/ebean/enhance/common/PackageFilter.java
@@ -10,10 +10,11 @@ final class PackageFilter {
PackageFilter(String packages) {
List prefixes = new ArrayList<>();
for (String pkg : packages.split(",")) {
- String replace = pkg.replace('.', '/').trim() + '/';
- if (!replace.isEmpty()) {
- prefixes.add(replace);
+ String replace = pkg.replace('.', '/').trim();
+ if (!replace.endsWith("/")) {
+ replace += '/';
}
+ prefixes.add(replace);
}
packagePrefixes = prefixes.toArray(new String[]{});
}
diff --git a/ebean-agent/src/test/java/io/ebean/enhance/ant/AntEnhanceTaskTest.java b/ebean-agent/src/test/java/io/ebean/enhance/ant/AntEnhanceTaskTest.java
new file mode 100644
index 00000000..5feaeed0
--- /dev/null
+++ b/ebean-agent/src/test/java/io/ebean/enhance/ant/AntEnhanceTaskTest.java
@@ -0,0 +1,28 @@
+package io.ebean.enhance.ant;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+class AntEnhanceTaskTest {
+
+ @Test
+ void combine() {
+ String result = AntEnhanceTask.combine("com/one/**, com/two/**", "debug=1");
+ assertThat(result).isEqualTo("packages=com/one/, com/two/,debug=1");
+ }
+
+ @Test
+ void combine_when_NoTransformArgs() {
+ String result = AntEnhanceTask.combine("com/one/**", "");
+ assertThat(result).isEqualTo("packages=com/one/");
+ }
+
+ @Test
+ void combine_when_NullTransformArgs() {
+ String result = AntEnhanceTask.combine("com/one/**", null);
+ assertThat(result).isEqualTo("packages=com/one/");
+ }
+
+}
diff --git a/ebean-agent/src/test/java/io/ebean/enhance/common/ArgParserTest.java b/ebean-agent/src/test/java/io/ebean/enhance/common/ArgParserTest.java
new file mode 100644
index 00000000..c9d33e73
--- /dev/null
+++ b/ebean-agent/src/test/java/io/ebean/enhance/common/ArgParserTest.java
@@ -0,0 +1,18 @@
+package io.ebean.enhance.common;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+class ArgParserTest {
+
+ @Test
+ void parse() {
+ Map map = ArgParser.parse("packages=com/google/foo");
+ assertThat(map).containsKey("packages");
+ assertThat(map.get("packages")).isEqualTo("com/google/foo");
+ }
+}
diff --git a/ebean-agent/src/test/java/io/ebean/enhance/common/PackageFilterTest.java b/ebean-agent/src/test/java/io/ebean/enhance/common/PackageFilterTest.java
index efabc9be..32e8c909 100644
--- a/ebean-agent/src/test/java/io/ebean/enhance/common/PackageFilterTest.java
+++ b/ebean-agent/src/test/java/io/ebean/enhance/common/PackageFilterTest.java
@@ -21,4 +21,18 @@ void ignore() {
assertTrue(filter.ignore("org/baz/Some"));
assertTrue(filter.ignore("org/foo"));
}
+
+ @Test
+ void endingSlash() {
+ PackageFilter filter = new PackageFilter("org/foo/,com/bar");
+
+ assertFalse(filter.ignore("org/foo/A"));
+ assertFalse(filter.ignore("org/foo/B"));
+ assertFalse(filter.ignore("org/foo/some/A"));
+ assertFalse(filter.ignore("com/bar/A"));
+ assertFalse(filter.ignore("com/bar/some/A"));
+
+ assertTrue(filter.ignore("org/baz/Some"));
+ assertTrue(filter.ignore("org/foo"));
+ }
}