Skip to content

Commit e149cca

Browse files
authored
Merge pull request #230 from ebean-orm/feature/229-fix
#229 AntEnhanceTask to honor packages specified
2 parents 3d0ce63 + 7997e8f commit e149cca

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)