Skip to content

Commit

Permalink
Merge pull request hyperledger-web3j#306 from taivokasper/master
Browse files Browse the repository at this point in the history
Fixed hyperledger-web3j#238 compilation failure "Cannot select from parameterized type" from generated code
  • Loading branch information
conor10 authored Jan 10, 2018
2 parents 47fe408 + 62b66c7 commit c30a0ec
Show file tree
Hide file tree
Showing 19 changed files with 80 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,17 @@ private TypeName getWrapperType(TypeName typeName) {
}
}

private TypeName getWrapperRawType(TypeName typeName) {
if (useNativeJavaTypes) {
if (typeName instanceof ParameterizedTypeName) {
return ClassName.get(List.class);
}
return getNativeType(typeName);
} else {
return typeName;
}
}

private TypeName getIndexedEventWrapperType(TypeName typeName) {
if (useNativeJavaTypes) {
return getEventNativeType(typeName);
Expand Down Expand Up @@ -534,8 +545,13 @@ private void buildConstantFunction(
} else if (outputParameterTypes.size() == 1) {

TypeName typeName = outputParameterTypes.get(0);
TypeName nativeTypeName = getWrapperType(typeName);
methodBuilder.returns(buildRemoteCall(nativeTypeName));
TypeName nativeReturnTypeName;
if (useNativeJavaTypes) {
nativeReturnTypeName = getWrapperRawType(typeName);
} else {
nativeReturnTypeName = getWrapperType(typeName);
}
methodBuilder.returns(buildRemoteCall(nativeReturnTypeName));

methodBuilder.addStatement("$T function = "
+ "new $T($S, \n$T.<$T>asList($L), "
Expand All @@ -548,7 +564,7 @@ private void buildConstantFunction(
if (useNativeJavaTypes) {
methodBuilder.addStatement(
"return executeRemoteCallSingleValueReturn(function, $T.class)",
nativeTypeName);
nativeReturnTypeName);
} else {
methodBuilder.addStatement("return executeRemoteCallSingleValueReturn(function)");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,33 @@ public void testBuildFunctionConstantSingleValueReturn() throws Exception {
assertThat(methodSpec.toString(), is(expected));
}

@Test
public void testBuildFunctionConstantSingleValueRawListReturn() throws Exception {
AbiDefinition functionDefinition = new AbiDefinition(
true,
Arrays.asList(
new AbiDefinition.NamedType("param", "uint8")),
"functionName",
Arrays.asList(
new AbiDefinition.NamedType("result", "address[]")),
"type",
false);

MethodSpec methodSpec = solidityFunctionWrapper.buildFunction(functionDefinition);

//CHECKSTYLE:OFF
String expected =
"public org.web3j.protocol.core.RemoteCall<java.util.List> functionName(java.math.BigInteger param) {\n"
+ " org.web3j.abi.datatypes.Function function = new org.web3j.abi.datatypes.Function(\"functionName\", \n"
+ " java.util.Arrays.<org.web3j.abi.datatypes.Type>asList(new org.web3j.abi.datatypes.generated.Uint8(param)), \n"
+ " java.util.Arrays.<org.web3j.abi.TypeReference<?>>asList(new org.web3j.abi.TypeReference<org.web3j.abi.datatypes.DynamicArray<org.web3j.abi.datatypes.Address>>() {}));\n"
+ " return executeRemoteCallSingleValueReturn(function, java.util.List.class);\n"
+ "}\n";
//CHECKSTYLE:ON

assertThat(methodSpec.toString(), is(expected));
}

@Test(expected = RuntimeException.class)
public void testBuildFunctionConstantInvalid() throws Exception {
AbiDefinition functionDefinition = new AbiDefinition(
Expand Down
4 changes: 4 additions & 0 deletions codegen/src/test/resources/solidity/arrays/Arrays.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,8 @@ contract Arrays {
}
return result;
}

function returnArray() constant returns (address[]) {
return new address[](0);
}
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[{"constant":false,"inputs":[{"name":"input","type":"uint256[10]"}],"name":"fixedReverse","outputs":[{"name":"result","type":"uint256[10]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"input","type":"uint256[]"}],"name":"dynamicReverse","outputs":[{"name":"result","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
[{"constant":true,"inputs":[],"name":"returnArray","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"input","type":"uint256[10]"}],"name":"fixedReverse","outputs":[{"name":"result","type":"uint256[10]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"input","type":"uint256[]"}],"name":"dynamicReverse","outputs":[{"name":"result","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6060604052341561000f57600080fd5b6102868061001e6000396000f300606060405263ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663b96f54d18114610047578063beda363b146100bc57600080fd5b341561005257600080fd5b610083600461014481600a61014060405190810160405291908282610140808284375093955061015e945050505050565b604051808261014080838360005b838110156100a9578082015183820152602001610091565b5050505090500191505060405180910390f35b34156100c757600080fd5b61010b60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101aa95505050505050565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561014a578082015183820152602001610132565b505050509050019250505060405180910390f35b610166610220565b600a60005b818110156101a3578360001982840301600a811061018557fe5b60200201518382600a811061019657fe5b602002015260010161016b565b5050919050565b6101b2610248565b60008083519150816040518059106101c75750595b90808252806020026020018201604052509250600090505b818110156101a35783816001018303815181106101f857fe5b9060200190602002015183828151811061020e57fe5b602090810290910101526001016101df565b610140604051908101604052600a815b60008152602001906001900390816102305790505090565b602060405190810160405260008152905600a165627a7a72305820740687f43e378347b6ad47b837a137cf023c0a1a53b6730025e554085824fa350029
6060604052341561000f57600080fd5b6102da8061001e6000396000f3006060604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cac14c8811461005b578063b96f54d1146100c1578063beda363b14610136575b600080fd5b341561006657600080fd5b61006e610185565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100ad578082015183820152602001610095565b505050509050019250505060405180910390f35b34156100cc57600080fd5b6100fd600461014481600a6101406040519081016040529190828261014080828437509395506101b2945050505050565b604051808261014080838360005b8381101561012357808201518382015260200161010b565b5050505090500191505060405180910390f35b341561014157600080fd5b61006e60046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101fe95505050505050565b61018d610274565b600060405180591061019c5750595b9080825280602002602001820160405250905090565b6101ba610286565b600a60005b818110156101f7578360001982840301600a81106101d957fe5b60200201518382600a81106101ea57fe5b60200201526001016101bf565b5050919050565b610206610274565b600080835191508160405180591061021b5750595b90808252806020026020018201604052509250600090505b818110156101f757838160010183038151811061024c57fe5b9060200190602002015183828151811061026257fe5b60209081029091010152600101610233565b60206040519081016040526000815290565b610140604051908101604052600a815b600081526020019060019003908161029657905050905600a165627a7a72305820305df0b85cbf8cf9c0720830cf03914a3044a0459d83288859a24d3dd311ef840029
Original file line number Diff line number Diff line change
@@ -1 +1 @@
606060405260408051908101604052600481527f48302e31000000000000000000000000000000000000000000000000000000006020820152600690805161004b9291602001906100e7565b50341561005757600080fd5b6040516109f83803806109f8833981016040528080519190602001805182019190602001805191906020018051600160a060020a0333166000908152600160205260408120879055869055909101905060038380516100ba9291602001906100e7565b506004805460ff191660ff841617905560058180516100dd9291602001906100e7565b5050505050610182565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012857805160ff1916838001178555610155565b82800160010185558215610155579182015b8281111561015557825182559160200191906001019061013a565b50610161929150610165565b5090565b61017f91905b80821115610161576000815560010161016b565b90565b610867806101916000396000f300606060405236156100935763ffffffff60e060020a60003504166306fdde0381146100a3578063095ea7b31461012d57806318160ddd1461016357806323b872dd14610188578063313ce567146101b057806354fd4d50146101d957806370a08231146101ec57806395d89b411461020b578063a9059cbb1461021e578063cae9ca5114610240578063dd62ed3e146102a5575b341561009e57600080fd5b600080fd5b34156100ae57600080fd5b6100b66102ca565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156100f25780820151838201526020016100da565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561013857600080fd5b61014f600160a060020a0360043516602435610368565b604051901515815260200160405180910390f35b341561016e57600080fd5b6101766103d5565b60405190815260200160405180910390f35b341561019357600080fd5b61014f600160a060020a03600435811690602435166044356103db565b34156101bb57600080fd5b6101c36104d3565b60405160ff909116815260200160405180910390f35b34156101e457600080fd5b6100b66104dc565b34156101f757600080fd5b610176600160a060020a0360043516610547565b341561021657600080fd5b6100b6610562565b341561022957600080fd5b61014f600160a060020a03600435166024356105cd565b341561024b57600080fd5b61014f60048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061067095505050505050565b34156102b057600080fd5b610176600160a060020a0360043581169060243516610810565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103605780601f1061033557610100808354040283529160200191610360565b820191906000526020600020905b81548152906001019060200180831161034357829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60005481565b600160a060020a03831660009081526001602052604081205482901080159061042b5750600160a060020a0380851660009081526002602090815260408083203390941683529290522054829010155b80156104375750600082115b156104c857600160a060020a03808416600081815260016020908152604080832080548801905588851680845281842080548990039055600283528184203390961684529490915290819020805486900390559091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016104cc565b5060005b9392505050565b60045460ff1681565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103605780601f1061033557610100808354040283529160200191610360565b600160a060020a031660009081526001602052604090205490565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103605780601f1061033557610100808354040283529160200191610360565b600160a060020a0333166000908152600160205260408120548290108015906105f65750600082115b1561066857600160a060020a033381166000818152600160205260408082208054879003905592861680825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016103cf565b5060006103cf565b600160a060020a03338116600081815260026020908152604080832094881680845294909152808220869055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a383600160a060020a03166040517f72656365697665417070726f76616c28616464726573732c75696e743235362c81527f616464726573732c6279746573290000000000000000000000000000000000006020820152602e01604051809103902060e060020a9004338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a03168152602001828051906020019080838360005b838110156107b1578082015183820152602001610799565b50505050905090810190601f1680156107de5780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038160008761646e5a03f192505050151561080657600080fd5b5060019392505050565b600160a060020a039182166000908152600260209081526040808320939094168252919091522054905600a165627a7a7230582099618d3c5204845d688b605708cc5a47a962ec312a8c774ab67f9c9e40c415970029
606060405260408051908101604052600481527f48302e31000000000000000000000000000000000000000000000000000000006020820152600690805161004b9291602001906100e7565b50341561005757600080fd5b6040516109fa3803806109fa833981016040528080519190602001805182019190602001805191906020018051600160a060020a0333166000908152600160205260408120879055869055909101905060038380516100ba9291602001906100e7565b506004805460ff191660ff841617905560058180516100dd9291602001906100e7565b5050505050610182565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012857805160ff1916838001178555610155565b82800160010185558215610155579182015b8281111561015557825182559160200191906001019061013a565b50610161929150610165565b5090565b61017f91905b80821115610161576000815560010161016b565b90565b610869806101916000396000f3006060604052600436106100955763ffffffff60e060020a60003504166306fdde0381146100a5578063095ea7b31461012f57806318160ddd1461016557806323b872dd1461018a578063313ce567146101b257806354fd4d50146101db57806370a08231146101ee57806395d89b411461020d578063a9059cbb14610220578063cae9ca5114610242578063dd62ed3e146102a7575b34156100a057600080fd5b600080fd5b34156100b057600080fd5b6100b86102cc565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156100f45780820151838201526020016100dc565b50505050905090810190601f1680156101215780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561013a57600080fd5b610151600160a060020a036004351660243561036a565b604051901515815260200160405180910390f35b341561017057600080fd5b6101786103d7565b60405190815260200160405180910390f35b341561019557600080fd5b610151600160a060020a03600435811690602435166044356103dd565b34156101bd57600080fd5b6101c56104d5565b60405160ff909116815260200160405180910390f35b34156101e657600080fd5b6100b86104de565b34156101f957600080fd5b610178600160a060020a0360043516610549565b341561021857600080fd5b6100b8610564565b341561022b57600080fd5b610151600160a060020a03600435166024356105cf565b341561024d57600080fd5b61015160048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061067295505050505050565b34156102b257600080fd5b610178600160a060020a0360043581169060243516610812565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103625780601f1061033757610100808354040283529160200191610362565b820191906000526020600020905b81548152906001019060200180831161034557829003601f168201915b505050505081565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60005481565b600160a060020a03831660009081526001602052604081205482901080159061042d5750600160a060020a0380851660009081526002602090815260408083203390941683529290522054829010155b80156104395750600082115b156104ca57600160a060020a03808416600081815260016020908152604080832080548801905588851680845281842080548990039055600283528184203390961684529490915290819020805486900390559091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016104ce565b5060005b9392505050565b60045460ff1681565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103625780601f1061033757610100808354040283529160200191610362565b600160a060020a031660009081526001602052604090205490565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103625780601f1061033757610100808354040283529160200191610362565b600160a060020a0333166000908152600160205260408120548290108015906105f85750600082115b1561066a57600160a060020a033381166000818152600160205260408082208054879003905592861680825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016103d1565b5060006103d1565b600160a060020a03338116600081815260026020908152604080832094881680845294909152808220869055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259086905190815260200160405180910390a383600160a060020a03166040517f72656365697665417070726f76616c28616464726573732c75696e743235362c81527f616464726573732c6279746573290000000000000000000000000000000000006020820152602e01604051809103902060e060020a9004338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a03168152602001828051906020019080838360005b838110156107b357808201518382015260200161079b565b50505050905090810190601f1680156107e05780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038160008761646e5a03f192505050151561080857600080fd5b5060019392505050565b600160a060020a039182166000908152600260209081526040808320939094168252919091522054905600a165627a7a72305820f7c827ed01d6c3a0eb10c6ab62e5e5ada68884ce0920c089c8917225b61f2a6d0029
Loading

0 comments on commit c30a0ec

Please sign in to comment.