62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
const getStatements = {
|
|
"int": "params.getInt(%s)",
|
|
"String": "params.getString(%s)",
|
|
"boolean": "params.getBoolean(%s)",
|
|
"float": "params.getFloat(%s)",
|
|
"byte": "params.getByte(%s)",
|
|
"char": "params.getChar(%s)",
|
|
"double": "params.getDouble(%s)",
|
|
}
|
|
const getStatementsTypes = Object.keys(getStatements);
|
|
function reconJ(java, className) {
|
|
let constructorRegex = /(public|protected|private|static|\s) +(\w+) *\(([^)]*)\)/g;
|
|
|
|
let constructors = [...java.matchAll(constructorRegex).filter((line)=>{
|
|
return !line.includes(" private ") || !line.includes(" protected ");
|
|
})];
|
|
|
|
let constructorDetails = constructors.map((constructor) => {
|
|
let constructorName = constructor[2];
|
|
let argumentString = constructor[3];
|
|
let arguments = {};
|
|
|
|
if (argumentString.trim().length > 0) {
|
|
let argumentList = argumentString.split(",");
|
|
argumentList.forEach((argument) => {
|
|
let [type, name] = argument.trim().split(" ");
|
|
arguments[name] = type;
|
|
});
|
|
}
|
|
|
|
let argStr = "";
|
|
var argumentsKeys = Object.keys(arguments);
|
|
for (let i = 0; i < argumentsKeys.length; i++) {
|
|
const key = argumentsKeys[i];
|
|
|
|
argStr += `(${arguments[key]}) ${getStatementsTypes.includes(arguments[key]) ? getStatements[arguments[key]].replaceAll("%s", "\""+key+"\"") : `params.getReflective("${key}")`}`;
|
|
if (i !== argumentsKeys.length - 1) {
|
|
argStr += ", "
|
|
}
|
|
}
|
|
|
|
|
|
let impl = `
|
|
setCallbackReflectiveWithArgs("${constructorName}", (BaseData params) -> {
|
|
return new ${className}(${argStr})
|
|
});
|
|
`;
|
|
|
|
return {
|
|
name: constructorName,
|
|
idx: constructors.indexOf(constructor),
|
|
arguments: arguments,
|
|
impl: impl
|
|
};
|
|
});
|
|
|
|
|
|
return {
|
|
className: className,
|
|
constructors: constructorDetails
|
|
}
|
|
} |