use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.
the class ProgramExecutorImpl method getEventConstructor.
private static Set<ProgramMethod> getEventConstructor(Map<String, ClassCode> classCodes) {
Map<String, MethodCode> methodCodes = new LinkedHashMap<>();
getEventClassCodes(classCodes).forEach(classCode -> {
for (MethodCode methodCode : classCode.methods) {
if (methodCode.isConstructor) {
methodCodes.put(methodCode.fullName, methodCode);
}
}
});
return methodCodes.values().stream().filter(methodCode -> methodCode.isConstructor).map(methodCode -> {
ProgramMethod method = new ProgramMethod();
method.setName(methodCode.classCode.simpleName);
method.setDesc(methodCode.normalDesc);
method.setArgs(methodCode.args);
method.setReturnArg(methodCode.returnArg);
method.setView(methodCode.hasViewAnnotation());
method.setPayable(methodCode.hasPayableAnnotation());
method.setEvent(true);
return method;
}).collect(Collectors.toSet());
}
use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.
the class ProgramExecutorImpl method getProgramMethodCodes.
public static List<MethodCode> getProgramMethodCodes(Map<String, ClassCode> classCodes) {
Map<String, MethodCode> methodCodes = new LinkedHashMap<>();
ClassCode contractClassCode = getContractClassCode(classCodes);
if (contractClassCode != null) {
contractMethods(methodCodes, classCodes, contractClassCode, false);
}
return methodCodes.values().stream().collect(Collectors.toList());
}
use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.
the class NativeVM method initialize.
/**
* native
*
* @see VM#initialize()
*/
private static Result initialize(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
ObjectRef savedProps = (ObjectRef) frame.heap.getStatic(TYPE, "savedProps");
ObjectRef key = frame.heap.newString("user.script");
ObjectRef value = frame.heap.newString("");
MethodCode methodCode1 = frame.methodArea.loadMethod("java/util/Properties", "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
frame.vm.run(methodCode1, new Object[] { savedProps, key, value }, false);
Result result = NativeMethod.result(methodCode, null, frame);
return result;
}
use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.
the class LoadJarTest method test.
@Test
public void test() {
InputStream in = null;
try {
// in = new FileInputStream(LoadJarTest.class.getResource("/contract.jar").getFile());
in = new FileInputStream(LoadJarTest.class.getResource("/nrc20.jar").getFile());
byte[] contractCode = IOUtils.toByteArray(in);
Map<String, ClassCode> codeMap = ClassCodeLoader.loadJarCache(contractCode);
// for(String key : codeMap.keySet()) {
// System.out.println("key: " + key);
// }
// io/nuls/vote/contract/event/AddItemEvent
// io/nuls/vote/contract/func/BaseVote
// io/nuls/vote/contract/VoteContract
// io/nuls/contract/token/SimpleToken
// ClassCode classCode = codeMap.get("io/nuls/vote/contract/event/AddItemEvent");
// ClassCode classCode = codeMap.get("io/nuls/vote/contract/func/BaseVote");
// ClassCode classCode = codeMap.get("io/nuls/vote/contract/VoteContract");
ClassCode classCode = codeMap.get("io/nuls/contract/token/SimpleToken");
List<MethodCode> methods = classCode.methods;
for (MethodCode methodCode : methods) {
System.out.println("Method Name: " + methodCode.fullName);
InsnList instructions = methodCode.instructions;
ListIterator<AbstractInsnNode> iterator = instructions.iterator();
AbstractInsnNode node;
while (iterator.hasNext()) {
node = iterator.next();
String desc = getDesc(node);
int opcode = node.getOpcode();
OpCode opCode = OpCode.valueOf(opcode);
if (opCode != null) {
System.out.println(OpCode.valueOf(opcode) + " " + desc);
}
}
System.out.println();
System.out.println();
System.out.println("////////////////////////////////////////////////////////////////////////");
System.out.println("////////////////////////////////////////////////////////////////////////");
System.out.println("////////////////////////////////////////////////////////////////////////");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.
the class MethodArea method loadSuperMethod.
private MethodCode loadSuperMethod(String className, String methodName, String methodDesc) {
ClassCode classCode = loadClass(className);
MethodCode methodCode = classCode.getMethodCode(methodName, methodDesc);
if (methodCode == null && classCode.superName != null) {
methodCode = loadSuperMethod(classCode.superName, methodName, methodDesc);
}
return methodCode;
}
Aggregations