Skip to content

Commit

Permalink
<fix>(v2,v3): fix v3,v2 lib struct name compile error, fix v2 event o…
Browse files Browse the repository at this point in the history
…verload bug. (#20)
  • Loading branch information
kyonRay committed Aug 10, 2023
1 parent 3f42183 commit c43d930
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 21 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ sourceSets {
// integrationTest.mustRunAfter test
allprojects {
group = 'org.fisco-bcos.code-generator'
version = '1.1.0'
version = '1.2.0-SNAPSHOT'
apply plugin: 'maven-publish'
apply plugin: 'idea'
apply plugin: 'eclipse'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,9 +241,10 @@ private FieldSpec createDefinition(String type, String binayArrayName) {
.build();
}

private FieldSpec createEventDefinition(String name, List<NamedTypeName> parameters) {
private FieldSpec createEventDefinition(
String rawEventName, String name, List<NamedTypeName> parameters) {

CodeBlock initializer = buildVariableLengthEventInitializer(name, parameters);
CodeBlock initializer = buildVariableLengthEventInitializer(rawEventName, parameters);

return FieldSpec.builder(Event.class, buildEventDefinitionName(name))
.addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
Expand All @@ -270,6 +271,20 @@ private static boolean isOverLoadFunction(
return count > 1;
}

private static boolean isOverLoadEvent(String name, List<ABIDefinition> functionDefinitions) {
int count = 0;
for (ABIDefinition functionDefinition : functionDefinitions) {
if (!functionDefinition.getType().equals("event")) {
continue;
}

if (functionDefinition.getName().equals(name)) {
count += 1;
}
}
return count > 1;
}

private List<MethodSpec> buildFunctionDefinitions(
TypeSpec.Builder classBuilder, List<ABIDefinition> functionDefinitions)
throws ClassNotFoundException {
Expand Down Expand Up @@ -302,7 +317,11 @@ private List<MethodSpec> buildFunctionDefinitions(
}
}
} else if (functionDefinition.getType().equals("event")) {
methodSpecs.addAll(buildEventFunctions(functionDefinition, classBuilder));
boolean isOverloadEvent =
isOverLoadEvent(functionDefinition.getName(), functionDefinitions);

methodSpecs.addAll(
buildEventFunctions(functionDefinition, classBuilder, isOverloadEvent));
}
}

Expand Down Expand Up @@ -1209,9 +1228,10 @@ private MethodSpec buildEventTransactionReceiptFunction(
}

private List<MethodSpec> buildEventFunctions(
ABIDefinition functionDefinition, TypeSpec.Builder classBuilder)
ABIDefinition functionDefinition, TypeSpec.Builder classBuilder, boolean isOverload)
throws ClassNotFoundException {
String functionName = functionDefinition.getName();

String functionName = getInputOutputFunctionName(functionDefinition, isOverload);
List<ABIDefinition.NamedType> inputs = functionDefinition.getInputs();
String responseClassName =
StringUtils.capitaliseFirstLetter(functionName) + "EventResponse";
Expand Down Expand Up @@ -1255,7 +1275,8 @@ private List<MethodSpec> buildEventFunctions(
parameters.add(parameter);
}

classBuilder.addField(createEventDefinition(functionName, parameters));
classBuilder.addField(
createEventDefinition(functionDefinition.getName(), functionName, parameters));

classBuilder.addType(
buildEventResponseObject(
Expand Down Expand Up @@ -1819,12 +1840,21 @@ private static TypeName buildStructArrayTypeName(ABIDefinition.NamedType namedTy
.structIdentifier())
.toString();
} else {
structName =
namedType
.getInternalType()
.substring(
namedType.getInternalType().lastIndexOf(" ") + 1,
namedType.getInternalType().indexOf("["));
if (namedType.getInternalType().contains(".")) {
structName =
namedType
.getInternalType()
.substring(
namedType.getInternalType().lastIndexOf(".") + 1,
namedType.getInternalType().indexOf("["));
} else {
structName =
namedType
.getInternalType()
.substring(
namedType.getInternalType().lastIndexOf(" ") + 1,
namedType.getInternalType().indexOf("["));
}
}

return ParameterizedTypeName.get(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -837,12 +837,21 @@ private TypeName buildStructArrayTypeName(ABIDefinition.NamedType namedType) {
namedType.getInternalType().lastIndexOf(".") + 1,
namedType.getInternalType().indexOf("["));
} else {
structName =
namedType
.getInternalType()
.substring(
namedType.getInternalType().lastIndexOf(" ") + 1,
namedType.getInternalType().indexOf("["));
if (namedType.getInternalType().contains(".")) {
structName =
namedType
.getInternalType()
.substring(
namedType.getInternalType().lastIndexOf(".") + 1,
namedType.getInternalType().indexOf("["));
} else {
structName =
namedType
.getInternalType()
.substring(
namedType.getInternalType().lastIndexOf(" ") + 1,
namedType.getInternalType().indexOf("["));
}
}
}

Expand Down
19 changes: 17 additions & 2 deletions src/test/java/org/fisco/bcos/codegen/v2/test/CodeGenV2Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,23 @@ public void weidABICodeGen() throws IOException {
codeGenTest(ABI_FILE, CONTRACT_NAME);
}

// FIXME: v2 event override bug
// @Test
@Test
public void StructReqRespCodeGen() throws IOException {
// abi from https://github.com/FISCO-BCOS/code-generator/issues/19
final String ABI_FILE = "StructReqRespContract.abi";
final String CONTRACT_NAME = "StructReqRespContract";
codeGenTest(ABI_FILE, CONTRACT_NAME);
}

@Test
public void SupplyChainFinCodeGen() throws IOException {
// abi from https://github.com/FISCO-BCOS/java-sdk/issues/801
final String ABI_FILE = "SupplyChainFin.abi";
final String CONTRACT_NAME = "SupplyChainFin";
codeGenTest(ABI_FILE, CONTRACT_NAME);
}

@Test
public void eventTestCodeGen() throws IOException {
final String ABI_FILE = "EventSubDemo.abi";
final String CONTRACT_NAME = "EventSubDemo";
Expand Down
16 changes: 16 additions & 0 deletions src/test/java/org/fisco/bcos/codegen/v3/test/CodeGenV3Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,22 @@ public void weidABICodeGen() throws IOException {
codeGenTest(ABI_FILE, CONTRACT_NAME);
}

@Test
public void StructReqRespCodeGen() throws IOException {
// abi from https://github.com/FISCO-BCOS/code-generator/issues/19
final String ABI_FILE = "StructReqRespContract.abi";
final String CONTRACT_NAME = "StructReqRespContract";
codeGenTest(ABI_FILE, CONTRACT_NAME);
}

@Test
public void SupplyChainFinCodeGen() throws IOException {
// abi from https://github.com/FISCO-BCOS/java-sdk/issues/801
final String ABI_FILE = "SupplyChainFin.abi";
final String CONTRACT_NAME = "SupplyChainFin";
codeGenTest(ABI_FILE, CONTRACT_NAME);
}

@Test
public void liquidCodeTestCodeGen() throws IOException {
final String ABI_FILE = "codec_test.abi";
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/StructReqRespContract.abi
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"inputs":[{"components":[{"components":[{"internalType":"string","name":"req","type":"string"}],"internalType":"struct StructLibrary.Req[]","name":"reqs","type":"tuple[]"}],"internalType":"struct StructLibrary.StructReq","name":"req","type":"tuple"}],"name":"request","outputs":[{"components":[{"internalType":"string","name":"resp","type":"string"}],"internalType":"struct StructLibrary.StructResp","name":"resp","type":"tuple"}],"stateMutability":"nonpayable","type":"function"}]
1 change: 1 addition & 0 deletions src/test/resources/SupplyChainFin.abi
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"banks","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"senderAddress","type":"address"},{"name":"accepterAddress","type":"address"},{"name":"amount","type":"uint256"},{"name":"receiptType","type":"uint8"}],"name":"companyToCompanyReceipt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"companies","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"bankAddress","type":"address"},{"name":"credit","type":"uint256"}],"name":"addBank","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"companyAddress","type":"address"}],"name":"addCompany","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"senderAddress","type":"address"},{"name":"accepterAddress","type":"address"},{"name":"amount","type":"uint256"},{"name":"receiptType","type":"uint8"}],"name":"companyToBankReceipt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"companyAddress","type":"address"}],"name":"getCompany","outputs":[{"name":"","type":"string"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllBankAddress","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"receiptIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"senderAddress","type":"address"},{"name":"accepterAddress","type":"address"},{"name":"amount","type":"uint256"},{"name":"receiptType","type":"uint8"}],"name":"bankToCompanyReceipt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"bankAddress","type":"address"}],"name":"getBank","outputs":[{"name":"","type":"string"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"superviosrIns","outputs":[{"name":"supervisorName","type":"string"},{"name":"supervisorAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getReceipt","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllCompanyAddress","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

0 comments on commit c43d930

Please sign in to comment.