Skip to content

Commit 7997e8f

Browse files
committed
#229 AntEnhanceTask to honor packages specified
This means that packages specified will be honored over any filtering that would otherwise occur via IgnoreClassHelper. The fix is to combine the Ant task packages parameter with the transform args and pass that in ultimately to the EnhanceContext (which parses that out and will then use the PackageFilter rather than IgnoreClassHelper).
1 parent 3d0ce63 commit 7997e8f

File tree

5 files changed

+87
-28
lines changed

5 files changed

+87
-28
lines changed

ebean-agent/src/main/java/io/ebean/enhance/ant/AntEnhanceTask.java

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import org.apache.tools.ant.BuildException;
55
import org.apache.tools.ant.Task;
66

7-
import java.io.File;
8-
97
/**
108
* An ANT task that can enhance entity beans etc for use by Ebean.
119
* <p>
@@ -25,18 +23,16 @@
2523
* </ul>
2624
* </p>
2725
*
28-
* <pre class="code">
29-
*
30-
* &lt;taskdef name=&quot;ebeanEnhance&quot; classname=&quot;AntEnhanceTask&quot; classpath=&quot;bin&quot; /&gt;
26+
* <pre class="code">{@code
3127
*
32-
* &lt;target name=&quot;enhance&quot; depends=&quot;compile&quot;&gt;
33-
* &lt;ebeanEnhance
34-
* classSource=&quot;${bin.dir}&quot;
35-
* packages=&quot;com.avaje.ebean.meta.**, com.acme.myapp.entity.**&quot;
36-
* transformArgs=&quot;debug=1&quot; /&gt;
37-
* &lt;/target&gt;
38-
*
39-
* </pre>
28+
* <taskdef name="ebeanEnhance" classname="AntEnhanceTask" classpath="bin" />
29+
* <target name="enhance" depends="compile">
30+
* <ebeanEnhance
31+
* classSource="${bin.dir}"
32+
* packages="com.avaje.ebean.meta.**, com.acme.myapp.entity.**"
33+
* transformArgs="debug=1" />
34+
* </target>
35+
* }</pre>
4036
*/
4137
public class AntEnhanceTask extends Task {
4238

@@ -47,24 +43,26 @@ public class AntEnhanceTask extends Task {
4743

4844
@Override
4945
public void execute() throws BuildException {
50-
51-
// StringBuilder extraClassPath = new StringBuilder();
52-
// extraClassPath.append(classSource);
53-
// if (classpath != null)
54-
// {
55-
// if (!extraClassPath.toString().endsWith(";"))
56-
// {
57-
// extraClassPath.append(";");
58-
// }
59-
// extraClassPath.append(classpath);
60-
// }
61-
Transformer t = new Transformer(null, transformArgs);//extraClassPath.toString(),
46+
String agentArgs = combine(packages, transformArgs);
47+
Transformer t = new Transformer(null, agentArgs);
6248

6349
ClassLoader cl = AntEnhanceTask.class.getClassLoader();
6450
OfflineFileTransform ft = new OfflineFileTransform(t, cl, classSource);
6551
ft.process(packages);
6652
}
6753

54+
/**
55+
* Combine the packages into the transformArgs to filter enhanced classes via PackageFilter.
56+
*/
57+
static String combine(String packages, String transformArgs) {
58+
StringBuilder args = new StringBuilder();
59+
args.append("packages=").append(packages.replace("**", ""));
60+
if (transformArgs != null && !transformArgs.isEmpty()) {
61+
args.append(',').append(transformArgs);
62+
}
63+
return args.toString();
64+
}
65+
6866
/**
6967
* the classpath used to search for e.g. inerited classes
7068
*/

ebean-agent/src/main/java/io/ebean/enhance/common/PackageFilter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ final class PackageFilter {
1010
PackageFilter(String packages) {
1111
List<String> prefixes = new ArrayList<>();
1212
for (String pkg : packages.split(",")) {
13-
String replace = pkg.replace('.', '/').trim() + '/';
14-
if (!replace.isEmpty()) {
15-
prefixes.add(replace);
13+
String replace = pkg.replace('.', '/').trim();
14+
if (!replace.endsWith("/")) {
15+
replace += '/';
1616
}
17+
prefixes.add(replace);
1718
}
1819
packagePrefixes = prefixes.toArray(new String[]{});
1920
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.ebean.enhance.ant;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.assertj.core.api.Assertions.assertThat;
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
class AntEnhanceTaskTest {
9+
10+
@Test
11+
void combine() {
12+
String result = AntEnhanceTask.combine("com/one/**, com/two/**", "debug=1");
13+
assertThat(result).isEqualTo("packages=com/one/, com/two/,debug=1");
14+
}
15+
16+
@Test
17+
void combine_when_NoTransformArgs() {
18+
String result = AntEnhanceTask.combine("com/one/**", "");
19+
assertThat(result).isEqualTo("packages=com/one/");
20+
}
21+
22+
@Test
23+
void combine_when_NullTransformArgs() {
24+
String result = AntEnhanceTask.combine("com/one/**", null);
25+
assertThat(result).isEqualTo("packages=com/one/");
26+
}
27+
28+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.ebean.enhance.common;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.Map;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
class ArgParserTest {
11+
12+
@Test
13+
void parse() {
14+
Map<String, String> map = ArgParser.parse("packages=com/google/foo");
15+
assertThat(map).containsKey("packages");
16+
assertThat(map.get("packages")).isEqualTo("com/google/foo");
17+
}
18+
}

ebean-agent/src/test/java/io/ebean/enhance/common/PackageFilterTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,18 @@ void ignore() {
2121
assertTrue(filter.ignore("org/baz/Some"));
2222
assertTrue(filter.ignore("org/foo"));
2323
}
24+
25+
@Test
26+
void endingSlash() {
27+
PackageFilter filter = new PackageFilter("org/foo/,com/bar");
28+
29+
assertFalse(filter.ignore("org/foo/A"));
30+
assertFalse(filter.ignore("org/foo/B"));
31+
assertFalse(filter.ignore("org/foo/some/A"));
32+
assertFalse(filter.ignore("com/bar/A"));
33+
assertFalse(filter.ignore("com/bar/some/A"));
34+
35+
assertTrue(filter.ignore("org/baz/Some"));
36+
assertTrue(filter.ignore("org/foo"));
37+
}
2438
}

0 commit comments

Comments
 (0)