List of usage examples for org.eclipse.jdt.core.dom.rewrite ASTRewrite ASTRewrite
protected ASTRewrite(AST ast)
From source file:org.eclipse.objectteams.otdt.internal.ui.assist.CompletionAdaptor.CreateMethodMappingCompletionProposal.java
License:Open Source License
/** Create a rewrite that additionally removes typed fragment if needed. * That fragment will not be represented by an AST-node, that could be removed. *///from www .ja v a 2 s. co m ASTRewrite createRewrite(AST ast) { if (fLength == 0) return ASTRewrite.create(ast); // the typed prefix will have to be deleted: final TextEdit delete = new DeleteEdit(fReplaceStart, fLength); // return a custom rewrite that additionally deletes typed fragment return new ASTRewrite(ast) { @Override public TextEdit rewriteAST() throws JavaModelException, IllegalArgumentException { TextEdit edits = super.rewriteAST(); if (edits instanceof MultiTextEdit) { MultiTextEdit multi = (MultiTextEdit) edits; multi.addChild(delete); } return edits; } }; }
From source file:org.eclipse.objectteams.otdt.internal.ui.assist.CompletionAdaptor.MethodMappingCompletionProposal.java
License:Open Source License
@Override
protected ASTRewrite getRewrite() throws CoreException {
ICompilationUnit iCU = getCompilationUnit();
CompilationUnit unit = ASTResolving.createQuickFixAST(iCU, null);
ImportRewrite importRewrite = createImportRewrite(unit);
// find enclosing mapping and type:
AbstractMethodMappingDeclaration partialMapping = null;
ASTNode node = NodeFinder.perform(unit, fReplaceStart, 0);
while (node != null && !(node instanceof AbstractTypeDeclaration)) {
if (partialMapping == null && (node instanceof AbstractMethodMappingDeclaration))
partialMapping = (AbstractMethodMappingDeclaration) node;
node = node.getParent();/*from w w w . ja v a 2 s. c o m*/
}
if (node != null) {
AbstractTypeDeclaration declaration = ((AbstractTypeDeclaration) node);
ChildListPropertyDescriptor bodyProperty = declaration.getBodyDeclarationsProperty();
// find role and base type bindings:
ITypeBinding roleBinding = declaration.resolveBinding();
ITypeBinding baseBinding = null;
if (roleBinding != null) {
baseBinding = roleBinding.getBaseClass();
} else if (declaration instanceof RoleTypeDeclaration) {
baseBinding = ((RoleTypeDeclaration) declaration).getBaseClassType().resolveBinding();
}
if (baseBinding == null) {
OTDTUIPlugin.getDefault().getLog().log(new Status(Status.ERROR,
"org.eclipse.objectteams.otdt.jdt.ui", "could not resolve type bindings")); //$NON-NLS-1$ //$NON-NLS-2$
return null;
}
// create and setup the rewrite:
ASTRewrite rewrite = createRewrite(unit.getAST());
rewrite.setToOTJ();
if (setupRewrite(iCU, rewrite, importRewrite, roleBinding, baseBinding, node, partialMapping,
bodyProperty))
return rewrite;
// rewriting was not successful, use the original replace string from the CompletionProposal:
return new ASTRewrite(unit.getAST()) {
@Override
public TextEdit rewriteAST() {
return new ReplaceEdit(fReplaceStart, fLength, fReplacementString);
}
};
}
return null;
}