Skip to content

Commit 830b95e

Browse files
authored
feat: Add generate both flag (#88)
Signed-off-by: Kristiyan Selveliev <[email protected]>
1 parent c9a2baf commit 830b95e

File tree

5 files changed

+109
-16
lines changed

5 files changed

+109
-16
lines changed

src/main/java/org/web3j/gradle/plugin/GenerateContractWrapper.java

+29-16
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
package org.web3j.gradle.plugin;
1414

1515
import java.io.File;
16+
import java.util.ArrayList;
17+
import java.util.Arrays;
18+
import java.util.List;
1619

1720
import org.gradle.api.provider.Property;
1821
import org.gradle.workers.WorkAction;
@@ -28,22 +31,30 @@ public void execute() {
2831
final String typesFlag =
2932
getParameters().getUseNativeJavaTypes().get() ? "--javaTypes" : "--solidityTypes";
3033

31-
SolidityFunctionWrapperGenerator.main(
32-
new String[] {
33-
"--abiFile",
34-
getParameters().getContractAbi().get().getAbsolutePath(),
35-
"--binFile",
36-
getParameters().getContractBin().get().getAbsolutePath(),
37-
"--outputDir",
38-
getParameters().getOutputDir().get(),
39-
"--package",
40-
getParameters().getPackageName().get(),
41-
"--contractName",
42-
getParameters().getContractName().get(),
43-
"--addressLength",
44-
String.valueOf(getParameters().getAddressLength().get()),
45-
typesFlag
46-
});
34+
final String generateBoth = getParameters().getGenerateBoth().get() ? "--generateBoth" : "";
35+
36+
List<String> arguments =
37+
new ArrayList<>(
38+
Arrays.asList(
39+
"--abiFile",
40+
getParameters().getContractAbi().get().getAbsolutePath(),
41+
"--binFile",
42+
getParameters().getContractBin().get().getAbsolutePath(),
43+
"--outputDir",
44+
getParameters().getOutputDir().get(),
45+
"--package",
46+
getParameters().getPackageName().get(),
47+
"--contractName",
48+
getParameters().getContractName().get(),
49+
"--addressLength",
50+
String.valueOf(getParameters().getAddressLength().get()),
51+
typesFlag));
52+
53+
if (!generateBoth.isEmpty()) {
54+
arguments.add(generateBoth);
55+
}
56+
57+
SolidityFunctionWrapperGenerator.main(arguments.toArray(new String[0]));
4758
}
4859

4960
public interface Parameters extends WorkParameters {
@@ -61,5 +72,7 @@ public interface Parameters extends WorkParameters {
6172
Property<Integer> getAddressLength();
6273

6374
Property<Boolean> getUseNativeJavaTypes();
75+
76+
Property<Boolean> getGenerateBoth();
6477
}
6578
}

src/main/java/org/web3j/gradle/plugin/GenerateContractWrappers.java

+11
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public class GenerateContractWrappers extends SourceTask {
3939

4040
@Input @Optional private Integer addressLength;
4141

42+
@Input @Optional private Boolean generateBoth;
43+
4244
@Inject
4345
public GenerateContractWrappers(final WorkerExecutor executor) {
4446
this.executor = executor;
@@ -72,6 +74,7 @@ void generateContractWrappers() {
7274
params.getPackageName().set(packageName);
7375
params.getAddressLength().set(addressLength);
7476
params.getUseNativeJavaTypes().set(useNativeJavaTypes);
77+
params.getGenerateBoth().set(generateBoth);
7578
});
7679
}
7780
}
@@ -125,4 +128,12 @@ public Integer getAddressLength() {
125128
public void setAddressLength(final Integer addressLength) {
126129
this.addressLength = addressLength;
127130
}
131+
132+
public Boolean getGenerateBoth() {
133+
return generateBoth;
134+
}
135+
136+
public void setGenerateBoth(Boolean generateBoth) {
137+
this.generateBoth = generateBoth;
138+
}
128139
}

src/main/java/org/web3j/gradle/plugin/Web3jExtension.java

+11
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public class Web3jExtension {
4040
/** Generate smart contract wrappers using native Java types. */
4141
private Boolean useNativeJavaTypes;
4242

43+
private Boolean generateBoth;
44+
4345
/** Excluded contract names from wrapper generation. */
4446
private List<String> excludedContracts;
4547

@@ -75,6 +77,14 @@ public void setUseNativeJavaTypes(final Boolean useNativeJavaTypes) {
7577
this.useNativeJavaTypes = useNativeJavaTypes;
7678
}
7779

80+
public Boolean getGenerateBoth() {
81+
return generateBoth;
82+
}
83+
84+
public void setGenerateBoth(Boolean generateBoth) {
85+
this.generateBoth = generateBoth;
86+
}
87+
7888
public List<String> getExcludedContracts() {
7989
return excludedContracts;
8090
}
@@ -110,6 +120,7 @@ public Web3jExtension(final Project project) {
110120
excludedContracts = new ArrayList<>();
111121
includedContracts = new ArrayList<>();
112122
addressBitLength = Address.DEFAULT_LENGTH / Byte.SIZE;
123+
generateBoth = false;
113124
}
114125

115126
protected String getDefaultGeneratedPackageName(Project project) {

src/main/java/org/web3j/gradle/plugin/Web3jPlugin.java

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ private void configure(final Project project, final SourceSet sourceSet) {
124124
task.setGeneratedJavaPackageName(
125125
extension.getGeneratedPackageName());
126126
task.setUseNativeJavaTypes(extension.getUseNativeJavaTypes());
127+
task.setGenerateBoth(extension.getGenerateBoth());
127128
task.setGroup(Web3jExtension.NAME);
128129

129130
// Set task excluded contracts

src/test/java/org/web3j/gradle/plugin/Web3jPluginTest.java

+57
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,63 @@ public void generateContractWrappersIncluding() throws IOException {
107107
+ "web3j {\n"
108108
+ " generatedPackageName = 'org.web3j.test'\n"
109109
+ " includedContracts = ['StandardToken']\n"
110+
+ " generateBoth = true\n"
111+
+ "}\n"
112+
+ "sourceSets {\n"
113+
+ " main {\n"
114+
+ " solidity {\n"
115+
+ " srcDir '"
116+
+ sourceDir.toAbsolutePath()
117+
+ "'\n"
118+
+ " }\n"
119+
+ " }\n"
120+
+ " }\n"
121+
+ "repositories {\n"
122+
+ " mavenCentral()\n"
123+
+ " maven {\n"
124+
+ " url 'https://oss.sonatype.org/content/repositories/snapshots'\n"
125+
+ " }\n"
126+
+ "}\n";
127+
128+
Files.write(buildFile, buildFileContent.getBytes());
129+
130+
final GradleRunner gradleRunner =
131+
GradleRunner.create()
132+
.withProjectDir(testProjectDir.toFile())
133+
.withArguments("build")
134+
.withPluginClasspath()
135+
.forwardOutput();
136+
137+
final BuildResult success = gradleRunner.build();
138+
assertNotNull(success.task(":generateContractWrappers"));
139+
assertEquals(SUCCESS, success.task(":generateContractWrappers").getOutcome());
140+
141+
final Path web3jContractsDir =
142+
testProjectDir.resolve("build/generated/sources/web3j/main/java");
143+
final Path generatedContract =
144+
web3jContractsDir.resolve("org/web3j/test/StandardToken.java");
145+
assertTrue(Files.exists(generatedContract));
146+
147+
final Path excludedContract = web3jContractsDir.resolve("org/web3j/test/Token.java");
148+
assertFalse(Files.exists(excludedContract));
149+
150+
final BuildResult upToDate = gradleRunner.build();
151+
assertNotNull(upToDate.task(":generateContractWrappers"));
152+
assertEquals(UP_TO_DATE, upToDate.task(":generateContractWrappers").getOutcome());
153+
}
154+
155+
@Test
156+
public void generateContractWrappersIncludingGenerateBothFalseUseNativeJava()
157+
throws IOException {
158+
final String buildFileContent =
159+
"plugins {\n"
160+
+ " id 'org.web3j'\n"
161+
+ "}\n"
162+
+ "web3j {\n"
163+
+ " generatedPackageName = 'org.web3j.test'\n"
164+
+ " includedContracts = ['StandardToken']\n"
165+
+ " useNativeJavaTypes = true\n"
166+
+ " generateBoth = false\n"
110167
+ "}\n"
111168
+ "sourceSets {\n"
112169
+ " main {\n"

0 commit comments

Comments
 (0)