How do I run the plugin project under Resources [1] here: http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation%5FAST/index.html
If I am not wrong, the project starting point is here public class ASTArticleActionDelegate implements IObjectActionDelegate -> public void run(IAction action)
public void run(IAction action) {
if (selection instanceof IStructuredSelection) {
ICompilationUnit lwUnit = (ICompilationUnit) ((IStructuredSelection) selection).getFirstElement();
createActionExecutable(action.getId()).run(lwUnit);
}
}
I know I should run it as an Eclipse Application, but what should I do after that to see something? I only see an Eclipse application started, and nothing else, no button or anything!
I search for "IObjectActionDelegate" and it seems like it has something to do with context menu, which is I should see something when I right click on something (IStructuredSelection - tree structure?)? But I see no difference in the context menu!
Just let me know an example of a way to see that this project is running, so that I would be able to use it.
The proper way to test this AST project example (
net.sourceforge.earticleast.app_1.0.0.zip_1.0.0.zip
) is to:(Note the "Debug As", to be able to set breakpoint within your first eclipse instance)
Once the second eclipse is launched, you can:
net.sourceforge.earticleast.app
"net.sourceforge.earticleast.app
project!)Ast article: Move Declaration
" (the action to detect contradicting variable declarations and to move them to their correct place)So now almost everything is in place to test those AST manipulation.
One last thing: create a Java Unit compilation able to highlights those variable declarations rewrites.
Create in your imported project (whatever it is) a package
test
, with the class:Right-click on that class and select "
Ast article: Move Declaration
": see the source being instantly rewritten as:From the first instance of the eclipse, you can set up some breakpoints in:
ASTArticleMoveVariableDeclaration:run()
AbstractManipulator:manipulate(final CompilationUnit unit, Collection<VariableBindingManager> managers)
to see where the magic is happening.
The other cases of "Move Declaration" cases are:
which get rewritten as:
Finally, there is a more advanced move which is:
'
int i = 2
' has been correctly removed. However, note the 'i = 3
' which is left: that is because the new declaration node 'int i = 3
is added after 'i = 3
' instead of replacing it.After some debugging, it turns out
ASTRewriteBasedManipulator:addNewVariableDeclaration()
forgets to remove the initializer 'i=3
' which it is supposed to replaced with the declaration 'int i = 3
'.Just add at the end of this method:
and you are good to go.