How to (programmatically) add expression to existing method?

I'm trying to generate class with main method with "System.out.println("Hello world")" inside.

How to add this expression, "System.out.println("Hello world")", to existing node<StaticMethodDeclaration> mainMethod?

I created everything up to DotExpression. It requires to create operand and operation. Operand is StaticFieldReference to System.out, and operation is InstanceMethodCallOperation to println, and I have now clue how to create this references :(

Can you show some code? Or, at least, point to right examples?

Thank you
2 comments
Found solution.
There's a special syntax for declaring expressions:

node<StatementList> mainStList = mainMethod.body.set new(StatementList);
node<ExpressionStatement> expressionSt = mainStList.statement.add new(ExpressionStatement);
node<DotExpression> dotExpr = <System.out.println("Hello World")>;
expressionSt.expression = dotExpr;

Got idea from this: http://forum.jetbrains.com/thread/Meta-Programming-System-794

Just press left angle bracket, select "<quotation>" from list, than rerun completion and replace "<abstract concept>" with DotExpression, and then carefully replace first part (using completion too) with System and press dot on keyboard... The rest is obvious.

I will create video tutorial on this topic later (in russian)
0
Not just for expressions. With quotations you can instantiate any concept. Type "StatementList" instead of DotExpression and you are able to set the whole method body in one statement.

mainMethod.body = <   
System.out.print("Hello"); 
System.out.println(" World!"); 
>;
prettyPrint();
Or even the whole method (StaticMethodDeclaration).
node<ClassConcept> cls = ...; 
cls.staticMethod.add(< 
public static void main(String[] args) { 
  System.out.print("Hello World!");  
} 
 
>);
prettyPrint();
0

Please sign in to leave a comment.