Skip to content

Instantly share code, notes, and snippets.

@DarkSeraphim
Created November 2, 2017 00:30
Show Gist options
  • Save DarkSeraphim/3089f02ebfca41a5f4fd3b3e4a7b0139 to your computer and use it in GitHub Desktop.
Save DarkSeraphim/3089f02ebfca41a5f4fd3b3e4a7b0139 to your computer and use it in GitHub Desktop.
Lot's of parameters are now generated!
JavacProcessingEnvironment env = (JavacProcessingEnvironment) ArmoryProcessor.environment;
JavacElements elements = env.getElementUtils();
String className = getPackageName(root) + classTree.getSimpleName();
System.out.println("Hi there");
TreeMaker maker = TreeMaker.instance(env.getContext());
Symtab symtab = Symtab.instance(env.getContext());
maker = maker.at(((JCTree.JCClassDecl) classTree).pos());
System.out.println("Size is " + classTree.getMembers().size());
JCTree[] tree = ((JCTree.JCClassDecl) classTree).defs.toArray(new JCTree[classTree.getMembers().size() + 1]);
System.out.println("Size is " + tree.length);
JCTree.JCModifiers mods = maker.Modifiers(Flags.PUBLIC | Flags.STATIC);
JavacElements elem = env.getElementUtils();
Name name = elem.getName("getBadLanguage");
JCTree.JCExpression returnType = maker.Ident(elem.getName("String"));
List<JCTree.JCTypeParameter> typeParameters = List.nil();
JCTree.JCVariableDecl receiver = null;
JCTree.JCModifiers modifiers = maker.Modifiers(Flags.PARAMETER);
Name varname = elem.getName("parameter");
JCTree.JCExpression vartype = maker.Ident(elem.getName("Object"));
JCTree.JCExpression init = null; // TODO: experiment with this
JCTree.JCVariableDecl variable = maker.VarDef(modifiers, varname, vartype, init);
List<JCTree.JCVariableDecl> params = List.of(variable);
List<JCTree.JCExpression> thrown = List.nil();
JCTree.JCExpression kotlin = maker.Ident(varname);// maker.Literal("Kotlin");
JCTree.JCReturn returnKotlin = maker.Return(kotlin);
JCTree.JCBlock body = maker.Block(0, List.of(returnKotlin));
JCTree.JCExpression defaultValue = null; // TODO: experiment with this
/**/
Type.MethodType type = new Type.MethodType(List.of(symtab.stringType), symtab.stringType, List.nil(), symtab.methodClass);
Symbol.MethodSymbol sym = new Symbol.MethodSymbol(Flags.PUBLIC | Flags.STATIC, name, type, ((JCTree.JCClassDecl) classTree).sym);
//*/
//JCTree.JCMethodDecl decl = maker.MethodDef(mods, name, returnType, typeParameters, receiver, params, thrown, body, defaultValue);
//decl.sym = sym;
JCTree.JCMethodDecl decl = maker.MethodDef(sym, body);
decl.params.forEach(p -> {
p.sym.adr = 0;
p.sym.name = varname;
});
variable.sym = new Symbol.VarSymbol(Flags.PARAMETER, varname, kotlin.type, sym);
variable.sym.adr = 0;
((JCTree.JCClassDecl) classTree).sym.members_field.enter(decl.sym);
tree[tree.length - 1] = decl;
((JCTree.JCClassDecl) classTree).defs = List.from(tree);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment