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")); + } }