Java 类org.eclipse.jdt.core.dom.rewrite.ListRewrite 实例源码
项目:code
文件:RemoveAnnotations.java
@Override
public boolean visit(VariableDeclarationFragment param) {
ASTNode parent = param.getParent();
if (parent instanceof VariableDeclarationStatement) {
VariableDeclarationStatement statement = (VariableDeclarationStatement) parent;
ASTNode annotation = getAnnotation(statement.modifiers(), "Domain");
if (annotation != null) {
ListRewrite paramRewrite = rewrite.getListRewrite(statement,
VariableDeclarationStatement.MODIFIERS2_PROPERTY);
paramRewrite.remove(annotation, null);
}
}
return super.visit(param);
}
项目:code
文件:RemoveAnnotations.java
@Override
public boolean visit(VariableDeclarationFragment param) {
ASTNode parent = param.getParent();
if (parent instanceof VariableDeclarationStatement) {
VariableDeclarationStatement statement = (VariableDeclarationStatement) parent;
ASTNode annotation = getAnnotation(statement.modifiers(), "Domain");
if (annotation != null) {
ListRewrite paramRewrite = rewrite.getListRewrite(statement,
VariableDeclarationStatement.MODIFIERS2_PROPERTY);
paramRewrite.remove(annotation, null);
}
}
return super.visit(param);
}
项目:bayou
文件:Visitor.java
/**
* Performs global post-processing of synthesized code:
* - Adds import declarations
*
* @param ast the owner of the document
* @param env environment that was used for synthesis
* @param document draft program document
* @throws BadLocationException if an error occurred when rewriting document
*/
private void postprocessGlobal(AST ast, Environment env, Document document)
throws BadLocationException {
/* add imports */
ASTRewrite rewriter = ASTRewrite.create(ast);
ListRewrite lrw = rewriter.getListRewrite(cu, CompilationUnit.IMPORTS_PROPERTY);
Set<Class> toImport = new HashSet<>(env.imports);
toImport.addAll(sketch.exceptionsThrown()); // add all catch(...) types to imports
for (Class cls : toImport) {
while (cls.isArray())
cls = cls.getComponentType();
if (cls.isPrimitive() || cls.getPackage().getName().equals("java.lang"))
continue;
ImportDeclaration impDecl = cu.getAST().newImportDeclaration();
String className = cls.getName().replaceAll("\\$", "\\.");
impDecl.setName(cu.getAST().newName(className.split("\\.")));
lrw.insertLast(impDecl, null);
}
rewriter.rewriteAST(document, null).apply(document);
}
项目:SparkBuilderGenerator
文件:StagedBuilderCompilationUnitGenerator.java
public void generateBuilder(CompilationUnitModificationDomain modificationDomain, List<StagedBuilderProperties> stagedBuilderStages) {
AST ast = modificationDomain.getAst();
TypeDeclaration originalType = modificationDomain.getOriginalType();
ListRewrite listRewrite = modificationDomain.getListRewrite();
builderRemover.removeExistingBuilderWhenNeeded(modificationDomain);
// TODO: eventually have a better design to avoid nulls here
List<TypeDeclaration> stageInterfaces = createStageInterfaces(modificationDomain, stagedBuilderStages);
TypeDeclaration builderType = stagedBuilderClassCreator.createBuilderClass(modificationDomain, stagedBuilderStages, stageInterfaces);
privateConstructorPopulator.addPrivateConstructorToCompilationUnit(ast, originalType, builderType, listRewrite, collectAllFieldsFromAllStages(stagedBuilderStages));
stagedBuilderStaticBuilderCreatorMethodCreator.addBuilderMethodToCompilationUnit(modificationDomain, builderType, stagedBuilderStages);
stageInterfaces.stream().forEach(stageInterface -> listRewrite.insertLast(stageInterface, null));
listRewrite.insertLast(builderType, null);
importPopulator.populateImports(modificationDomain);
}
项目:SparkBuilderGenerator
文件:StagedBuilderCreationWithMethodAdder.java
public void addBuilderMethodToCompilationUnit(CompilationUnitModificationDomain modificationDomain, TypeDeclaration builderType,
StagedBuilderProperties currentStage) {
AST ast = modificationDomain.getAst();
ListRewrite listRewrite = modificationDomain.getListRewrite();
BuilderField firstField = currentStage.getNamedVariableDeclarationField().get(0);
StagedBuilderProperties nextStage = currentStage.getNextStage().orElse(currentStage);
MethodDeclaration staticWithMethod = stagedBuilderWithMethodDefiniationCreatorFragment.createNewWithMethod(ast, firstField, nextStage);
staticWithMethod.modifiers().add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD));
String parameterName = firstField.getBuilderFieldName();
String withMethodName = staticWithMethod.getName().toString();
Block block = newBuilderAndWithMethodCallCreationFragment.createReturnBlock(ast, builderType, withMethodName, parameterName);
javadocAdder.addJavadocForWithBuilderMethod(ast, builderType.getName().toString(), parameterName, staticWithMethod);
staticWithMethod.setBody(block);
listRewrite.insertLast(staticWithMethod, null);
}
项目:eclipse.jdt.ls
文件:ReplaceRewrite.java
protected void handleManyMany(ASTNode[] replacements, TextEditGroup description) {
ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
if (fToReplace.length == replacements.length) {
for (int i= 0; i < fToReplace.length; i++) {
container.replace(fToReplace[i], replacements[i], description);
}
} else if (fToReplace.length < replacements.length) {
for (int i= 0; i < fToReplace.length; i++) {
container.replace(fToReplace[i], replacements[i], description);
}
for (int i= fToReplace.length; i < replacements.length; i++) {
container.insertAfter(replacements[i], replacements[i - 1], description);
}
} else if (fToReplace.length > replacements.length) {
int delta= fToReplace.length - replacements.length;
for(int i= 0; i < delta; i++) {
container.remove(fToReplace[i], description);
}
for (int i= delta, r= 0; i < fToReplace.length; i++, r++) {
container.replace(fToReplace[i], replacements[r], description);
}
}
}
项目:eclipse.jdt.ls
文件:StatementRewrite.java
@Override
protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
AST ast= fToReplace[0].getAST();
// to replace == 1, but more than one replacement. Have to check if we
// need to insert a block to not change structure
if (ASTNodes.isControlStatementBody(fDescriptor)) {
Block block= ast.newBlock();
ListRewrite statements= fRewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
for (int i= 0; i < replacements.length; i++) {
statements.insertLast(replacements[i], description);
}
fRewrite.replace(fToReplace[0], block, description);
} else {
ListRewrite container= fRewrite.getListRewrite(fToReplace[0].getParent(), (ChildListPropertyDescriptor)fDescriptor);
container.replace(fToReplace[0], replacements[0], description);
for (int i= 1; i < replacements.length; i++) {
container.insertAfter(replacements[i], replacements[i - 1], description);
}
}
}
项目:eclipse.jdt.ls
文件:TypeAnnotationRewrite.java
/**
* Removes all {@link Annotation} whose only {@link Target} is {@link ElementType#TYPE_USE} from
* <code>node</code>'s <code>childListProperty</code>.
* <p>
* In a combination of {@link ElementType#TYPE_USE} and {@link ElementType#TYPE_PARAMETER}
* the latter is ignored, because this is implied by the former and creates no ambiguity.</p>
*
* @param node ASTNode
* @param childListProperty child list property
* @param rewrite rewrite that removes the nodes
* @param editGroup the edit group in which to collect the corresponding text edits, or null if
* ungrouped
*/
public static void removePureTypeAnnotations(ASTNode node, ChildListPropertyDescriptor childListProperty, ASTRewrite rewrite, TextEditGroup editGroup) {
CompilationUnit root= (CompilationUnit) node.getRoot();
if (!JavaModelUtil.is18OrHigher(root.getJavaElement().getJavaProject())) {
return;
}
ListRewrite listRewrite= rewrite.getListRewrite(node, childListProperty);
@SuppressWarnings("unchecked")
List<? extends ASTNode> children= (List<? extends ASTNode>) node.getStructuralProperty(childListProperty);
for (ASTNode child : children) {
if (child instanceof Annotation) {
Annotation annotation= (Annotation) child;
if (isPureTypeAnnotation(annotation)) {
listRewrite.remove(child, editGroup);
}
}
}
}
项目:eclipse.jdt.ls
文件:StubUtility2.java
/**
* Evaluates the insertion position of a new node.
*
* @param listRewrite The list rewriter to which the new node will be added
* @param sibling The Java element before which the new element should be added.
* @return the AST node of the list to insert before or null to insert as last.
* @throws JavaModelException thrown if accessing the Java element failed
*/
public static ASTNode getNodeToInsertBefore(ListRewrite listRewrite, IJavaElement sibling) throws JavaModelException {
if (sibling instanceof IMember) {
ISourceRange sourceRange= ((IMember) sibling).getSourceRange();
if (sourceRange == null) {
return null;
}
int insertPos= sourceRange.getOffset();
List<? extends ASTNode> members= listRewrite.getOriginalList();
for (int i= 0; i < members.size(); i++) {
ASTNode curr= members.get(i);
if (curr.getStartPosition() >= insertPos) {
return curr;
}
}
}
return null;
}
项目:eclipse.jdt.ls
文件:UnusedCodeFix.java
private void splitUpDeclarations(ASTRewrite rewrite, TextEditGroup group, VariableDeclarationFragment frag, VariableDeclarationStatement originalStatement, List<Expression> sideEffects) {
if (sideEffects.size() > 0) {
ListRewrite statementRewrite= rewrite.getListRewrite(originalStatement.getParent(), (ChildListPropertyDescriptor) originalStatement.getLocationInParent());
Statement previousStatement= originalStatement;
for (int i= 0; i < sideEffects.size(); i++) {
Expression sideEffect= sideEffects.get(i);
Expression movedInit= (Expression) rewrite.createMoveTarget(sideEffect);
ExpressionStatement wrapped= rewrite.getAST().newExpressionStatement(movedInit);
statementRewrite.insertAfter(wrapped, previousStatement, group);
previousStatement= wrapped;
}
VariableDeclarationStatement newDeclaration= null;
List<VariableDeclarationFragment> fragments= originalStatement.fragments();
int fragIndex= fragments.indexOf(frag);
ListIterator<VariableDeclarationFragment> fragmentIterator= fragments.listIterator(fragIndex+1);
while (fragmentIterator.hasNext()) {
VariableDeclarationFragment currentFragment= fragmentIterator.next();
VariableDeclarationFragment movedFragment= (VariableDeclarationFragment) rewrite.createMoveTarget(currentFragment);
if (newDeclaration == null) {
newDeclaration= rewrite.getAST().newVariableDeclarationStatement(movedFragment);
Type copiedType= (Type) rewrite.createCopyTarget(originalStatement.getType());
newDeclaration.setType(copiedType);
} else {
newDeclaration.fragments().add(movedFragment);
}
}
if (newDeclaration != null){
statementRewrite.insertAfter(newDeclaration, previousStatement, group);
if (originalStatement.fragments().size() == newDeclaration.fragments().size() + 1){
rewrite.remove(originalStatement, group);
}
}
}
}
项目:eclipse.jdt.ls
文件:ImplementInterfaceProposal.java
@Override
protected ASTRewrite getRewrite() throws CoreException {
ASTNode boundNode= fAstRoot.findDeclaringNode(fBinding);
ASTNode declNode= null;
CompilationUnit newRoot= fAstRoot;
if (boundNode != null) {
declNode= boundNode; // is same CU
} else {
newRoot= ASTResolving.createQuickFixAST(getCompilationUnit(), null);
declNode= newRoot.findDeclaringNode(fBinding.getKey());
}
ImportRewrite imports= createImportRewrite(newRoot);
if (declNode instanceof TypeDeclaration) {
AST ast= declNode.getAST();
ASTRewrite rewrite= ASTRewrite.create(ast);
ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(declNode, imports);
Type newInterface= imports.addImport(fNewInterface, ast, importRewriteContext, TypeLocation.OTHER);
ListRewrite listRewrite= rewrite.getListRewrite(declNode, TypeDeclaration.SUPER_INTERFACE_TYPES_PROPERTY);
listRewrite.insertLast(newInterface, null);
return rewrite;
}
return null;
}
项目:eclipse.jdt.ls
文件:NewVariableCorrectionProposal.java
private ASTRewrite doAddEnumConst(CompilationUnit astRoot) {
SimpleName node= fOriginalNode;
ASTNode newTypeDecl= astRoot.findDeclaringNode(fSenderBinding);
if (newTypeDecl == null) {
astRoot= ASTResolving.createQuickFixAST(getCompilationUnit(), null);
newTypeDecl= astRoot.findDeclaringNode(fSenderBinding.getKey());
}
if (newTypeDecl != null) {
AST ast= newTypeDecl.getAST();
ASTRewrite rewrite= ASTRewrite.create(ast);
EnumConstantDeclaration constDecl= ast.newEnumConstantDeclaration();
constDecl.setName(ast.newSimpleName(node.getIdentifier()));
ListRewrite listRewriter= rewrite.getListRewrite(newTypeDecl, EnumDeclaration.ENUM_CONSTANTS_PROPERTY);
listRewriter.insertLast(constDecl, null);
return rewrite;
}
return null;
}
项目:eclipse.jdt.ls
文件:JavadocTagsSubProcessor.java
private void insertAllMissingTypeTags(ASTRewrite rewriter, TypeDeclaration typeDecl) {
AST ast= typeDecl.getAST();
Javadoc javadoc= typeDecl.getJavadoc();
ListRewrite tagsRewriter= rewriter.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
List<TypeParameter> typeParams= typeDecl.typeParameters();
for (int i= typeParams.size() - 1; i >= 0; i--) {
TypeParameter decl= typeParams.get(i);
String name= '<' + decl.getName().getIdentifier() + '>';
if (findTag(javadoc, TagElement.TAG_PARAM, name) == null) {
TagElement newTag= ast.newTagElement();
newTag.setTagName(TagElement.TAG_PARAM);
TextElement text= ast.newTextElement();
text.setText(name);
newTag.fragments().add(text);
insertTabStop(rewriter, newTag.fragments(), "typeParam" + i); //$NON-NLS-1$
insertTag(tagsRewriter, newTag, getPreviousTypeParamNames(typeParams, decl));
}
}
}
项目:code
文件:RemoveAnnotations.java
private void setFieldAnnotation(ASTRewrite rewrite, FieldDeclaration fieldDeclaration, String annotation) {
SingleMemberAnnotation newFieldAnnotation = fieldDeclaration.getAST().newSingleMemberAnnotation();
newFieldAnnotation.setTypeName(rewrite.getAST().newSimpleName("Domain"));
StringLiteral newStringLiteral = rewrite.getAST().newStringLiteral();
newStringLiteral.setLiteralValue(annotation);
newFieldAnnotation.setValue(newStringLiteral);
ASTNode modifier = getModifier(fieldDeclaration.modifiers());
if (modifier != null) {
ListRewrite paramRewrite = rewrite.getListRewrite(fieldDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY);
paramRewrite.insertAfter(newFieldAnnotation, modifier, null);
}
else {
ListRewrite fieldRewrite = rewrite.getListRewrite(fieldDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY);
fieldRewrite.insertFirst(newFieldAnnotation, null);
}
}
项目:code
文件:SaveAnnotations.java
private void setTypeAnnotationDomains(ASTRewrite rewrite, TypeDeclaration typeDeclaration, String annotation,
String domainName, ASTNode after) {
SingleMemberAnnotation newParamAnnotation = getTypeAnnotationDomain(rewrite,
typeDeclaration,
annotation,
domainName);
ListRewrite paramRewrite = rewrite.getListRewrite(typeDeclaration, TypeDeclaration.MODIFIERS2_PROPERTY);
if (after == null) {
paramRewrite.insertFirst(newParamAnnotation, null);
}
else {
paramRewrite.insertAfter(newParamAnnotation, after, null);
}
}
项目:code
文件:SaveAnnotations.java
private void declareOtherDomains(ASTRewrite rewrite, ListRewrite listRewrite, TypeDeclaration typeDeclaration) {
String qualifiedName = typeDeclaration.resolveBinding().getQualifiedName();
OGraphFacade facade = RefinementAnalysis.getFacade();
RefinementModel refinementModel = facade.getRefinementModel();
List<IOtherRefinement> otherRefinements = refinementModel.getOtherRefinements();
for(IOtherRefinement otherRefinement : otherRefinements ) {
if (otherRefinement instanceof CreateDomain ) {
CreateDomain createDomain = (CreateDomain)otherRefinement;
String fullyQualifiedName = createDomain.getSrcIObject().getC().getFullyQualifiedName();
if (fullyQualifiedName.equals(qualifiedName)) {
StringLiteral newStringLiteralPARAM = rewrite.getAST().newStringLiteral();
newStringLiteralPARAM.setLiteralValue(createDomain.getDstDomain());
listRewrite.insertLast(newStringLiteralPARAM, null);
}
}
}
}
项目:code
文件:SaveAnnotations.java
private SingleMemberAnnotation getTypeAnnotationDomainAssumes(ASTRewrite rewrite, TypeDeclaration typeDeclaration, String annotation, String domainName) {
ArrayInitializer initializer = rewrite.getAST().newArrayInitializer();
if (domainName != null) {
ListRewrite listRewrite = rewrite.getListRewrite(initializer, ArrayInitializer.EXPRESSIONS_PROPERTY);
StringLiteral newStringLiteral = rewrite.getAST().newStringLiteral();
newStringLiteral.setLiteralValue(domainName);
listRewrite.insertFirst(newStringLiteral, null);
declareOtherDomains(rewrite, listRewrite, typeDeclaration);
}
SingleMemberAnnotation newParamAnnotation = typeDeclaration.getAST().newSingleMemberAnnotation();
newParamAnnotation.setTypeName(rewrite.getAST().newSimpleName(annotation));
newParamAnnotation.setValue(initializer);
return newParamAnnotation;
}
项目:code
文件:SaveAnnotations.java
private SingleMemberAnnotation getTypeAnnotationParams(ASTRewrite rewrite, TypeDeclaration typeDeclaration,
String annotation) {
ArrayInitializer initializer = rewrite.getAST().newArrayInitializer();
if (!typeDeclaration.resolveBinding().getQualifiedName().equals(Config.MAINCLASS)) {
StringLiteral newStringLiteral = rewrite.getAST().newStringLiteral();
newStringLiteral.setLiteralValue("p");
ListRewrite listRewrite = rewrite.getListRewrite(initializer, ArrayInitializer.EXPRESSIONS_PROPERTY);
listRewrite.insertFirst(newStringLiteral, null);
}
SingleMemberAnnotation newParamAnnotation = typeDeclaration.getAST().newSingleMemberAnnotation();
newParamAnnotation.setTypeName(rewrite.getAST().newSimpleName(annotation));
newParamAnnotation.setValue(initializer);
return newParamAnnotation;
}
项目:code
文件:RemoveAnnotations.java
private void setFieldAnnotation(ASTRewrite rewrite, FieldDeclaration fieldDeclaration, String annotation) {
SingleMemberAnnotation newFieldAnnotation = fieldDeclaration.getAST().newSingleMemberAnnotation();
newFieldAnnotation.setTypeName(rewrite.getAST().newSimpleName("Domain"));
StringLiteral newStringLiteral = rewrite.getAST().newStringLiteral();
newStringLiteral.setLiteralValue(annotation);
newFieldAnnotation.setValue(newStringLiteral);
ASTNode modifier = getModifier(fieldDeclaration.modifiers());
if (modifier != null) {
ListRewrite paramRewrite = rewrite.getListRewrite(fieldDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY);
paramRewrite.insertAfter(newFieldAnnotation, modifier, null);
}
else {
ListRewrite fieldRewrite = rewrite.getListRewrite(fieldDeclaration, FieldDeclaration.MODIFIERS2_PROPERTY);
fieldRewrite.insertFirst(newFieldAnnotation, null);
}
}
项目:code
文件:SaveAnnotations.java
private void setTypeAnnotationDomains(ASTRewrite rewrite, TypeDeclaration typeDeclaration, String annotation,
String domainName, ASTNode after) {
SingleMemberAnnotation newParamAnnotation = getTypeAnnotationDomain(rewrite,
typeDeclaration,
annotation,
domainName);
ListRewrite paramRewrite = rewrite.getListRewrite(typeDeclaration, TypeDeclaration.MODIFIERS2_PROPERTY);
if (after == null) {
paramRewrite.insertFirst(newParamAnnotation, null);
}
else {
paramRewrite.insertAfter(newParamAnnotation, after, null);
}
}
项目:code
文件:SaveAnnotations.java
private void declareOtherDomains(ASTRewrite rewrite, ListRewrite listRewrite, TypeDeclaration typeDeclaration) {
String qualifiedName = typeDeclaration.resolveBinding().getQualifiedName();
OGraphFacade facade = RefinementAnalysis.getFacade();
RefinementModel refinementModel = facade.getRefinementModel();
List<IOtherRefinement> otherRefinements = refinementModel.getOtherRefinements();
for(IOtherRefinement otherRefinement : otherRefinements ) {
if (otherRefinement instanceof CreateDomain ) {
CreateDomain createDomain = (CreateDomain)otherRefinement;
String fullyQualifiedName = createDomain.getSrcIObject().getC().getFullyQualifiedName();
if (fullyQualifiedName.equals(qualifiedName)) {
StringLiteral newStringLiteralPARAM = rewrite.getAST().newStringLiteral();
newStringLiteralPARAM.setLiteralValue(createDomain.getDstDomain());
listRewrite.insertLast(newStringLiteralPARAM, null);
}
}
}
}
项目:code
文件:SaveAnnotations.java
private SingleMemberAnnotation getTypeAnnotationDomainAssumes(ASTRewrite rewrite, TypeDeclaration typeDeclaration, String annotation, String domainName) {
ArrayInitializer initializer = rewrite.getAST().newArrayInitializer();
if (domainName != null) {
ListRewrite listRewrite = rewrite.getListRewrite(initializer, ArrayInitializer.EXPRESSIONS_PROPERTY);
StringLiteral newStringLiteral = rewrite.getAST().newStringLiteral();
newStringLiteral.setLiteralValue(domainName);
listRewrite.insertFirst(newStringLiteral, null);
declareOtherDomains(rewrite, listRewrite, typeDeclaration);
}
SingleMemberAnnotation newParamAnnotation = typeDeclaration.getAST().newSingleMemberAnnotation();
newParamAnnotation.setTypeName(rewrite.getAST().newSimpleName(annotation));
newParamAnnotation.setValue(initializer);
return newParamAnnotation;
}
项目:code
文件:SaveAnnotations.java
private SingleMemberAnnotation getTypeAnnotationParams(ASTRewrite rewrite, TypeDeclaration typeDeclaration,
String annotation) {
ArrayInitializer initializer = rewrite.getAST().newArrayInitializer();
if (!typeDeclaration.resolveBinding().getQualifiedName().equals(Config.MAINCLASS)) {
StringLiteral newStringLiteral = rewrite.getAST().newStringLiteral();
newStringLiteral.setLiteralValue("p");
ListRewrite listRewrite = rewrite.getListRewrite(initializer, ArrayInitializer.EXPRESSIONS_PROPERTY);
listRewrite.insertFirst(newStringLiteral, null);
}
SingleMemberAnnotation newParamAnnotation = typeDeclaration.getAST().newSingleMemberAnnotation();
newParamAnnotation.setTypeName(rewrite.getAST().newSimpleName(annotation));
newParamAnnotation.setValue(initializer);
return newParamAnnotation;
}
项目:che
文件:ReplaceRewrite.java
protected void handleManyMany(ASTNode[] replacements, TextEditGroup description) {
ListRewrite container =
fRewrite.getListRewrite(
fToReplace[0].getParent(), (ChildListPropertyDescriptor) fDescriptor);
if (fToReplace.length == replacements.length) {
for (int i = 0; i < fToReplace.length; i++) {
container.replace(fToReplace[i], replacements[i], description);
}
} else if (fToReplace.length < replacements.length) {
for (int i = 0; i < fToReplace.length; i++) {
container.replace(fToReplace[i], replacements[i], description);
}
for (int i = fToReplace.length; i < replacements.length; i++) {
container.insertAfter(replacements[i], replacements[i - 1], description);
}
} else if (fToReplace.length > replacements.length) {
int delta = fToReplace.length - replacements.length;
for (int i = 0; i < delta; i++) {
container.remove(fToReplace[i], description);
}
for (int i = delta, r = 0; i < fToReplace.length; i++, r++) {
container.replace(fToReplace[i], replacements[r], description);
}
}
}
项目:che
文件:StatementRewrite.java
@Override
protected void handleOneMany(ASTNode[] replacements, TextEditGroup description) {
AST ast = fToReplace[0].getAST();
// to replace == 1, but more than one replacement. Have to check if we
// need to insert a block to not change structure
if (ASTNodes.isControlStatementBody(fDescriptor)) {
Block block = ast.newBlock();
ListRewrite statements = fRewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
for (int i = 0; i < replacements.length; i++) {
statements.insertLast(replacements[i], description);
}
fRewrite.replace(fToReplace[0], block, description);
} else {
ListRewrite container =
fRewrite.getListRewrite(
fToReplace[0].getParent(), (ChildListPropertyDescriptor) fDescriptor);
container.replace(fToReplace[0], replacements[0], description);
for (int i = 1; i < replacements.length; i++) {
container.insertAfter(replacements[i], replacements[i - 1], description);
}
}
}
项目:che
文件:StubUtility2.java
/**
* Evaluates the insertion position of a new node.
*
* @param listRewrite The list rewriter to which the new node will be added
* @param sibling The Java element before which the new element should be added.
* @return the AST node of the list to insert before or null to insert as last.
* @throws JavaModelException thrown if accessing the Java element failed
*/
public static ASTNode getNodeToInsertBefore(ListRewrite listRewrite, IJavaElement sibling)
throws JavaModelException {
if (sibling instanceof IMember) {
ISourceRange sourceRange = ((IMember) sibling).getSourceRange();
if (sourceRange == null) {
return null;
}
int insertPos = sourceRange.getOffset();
List<? extends ASTNode> members = listRewrite.getOriginalList();
for (int i = 0; i < members.size(); i++) {
ASTNode curr = members.get(i);
if (curr.getStartPosition() >= insertPos) {
return curr;
}
}
}
return null;
}
项目:che
文件:Java50Fix.java
/** {@inheritDoc} */
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model)
throws CoreException {
AST ast = cuRewrite.getRoot().getAST();
ListRewrite listRewrite =
cuRewrite
.getASTRewrite()
.getListRewrite(fBodyDeclaration, fBodyDeclaration.getModifiersProperty());
Annotation newAnnotation = ast.newMarkerAnnotation();
newAnnotation.setTypeName(ast.newSimpleName(fAnnotation));
TextEditGroup group =
createTextEditGroup(
Messages.format(
FixMessages.Java50Fix_AddMissingAnnotation_description,
BasicElementLabels.getJavaElementName(fAnnotation)),
cuRewrite);
listRewrite.insertFirst(newAnnotation, group);
}
项目:che
文件:NullAnnotationsRewriteOperations.java
boolean checkExisting(
List<IExtendedModifier> existingModifiers,
ListRewrite listRewrite,
TextEditGroup editGroup) {
for (Object mod : existingModifiers) {
if (mod instanceof MarkerAnnotation) {
MarkerAnnotation annotation = (MarkerAnnotation) mod;
String existingName = annotation.getTypeName().getFullyQualifiedName();
int lastDot = fAnnotationToRemove.lastIndexOf('.');
if (existingName.equals(fAnnotationToRemove)
|| (lastDot != -1
&& fAnnotationToRemove.substring(lastDot + 1).equals(existingName))) {
if (!fAllowRemove) return false; // veto this change
listRewrite.remove(annotation, editGroup);
return true;
}
// paranoia: check if by accident the annotation is already present (shouldn't happen):
lastDot = fAnnotationToAdd.lastIndexOf('.');
if (existingName.equals(fAnnotationToAdd)
|| (lastDot != -1 && fAnnotationToAdd.substring(lastDot + 1).equals(existingName))) {
return false; // already present
}
}
}
return true;
}
项目:che
文件:NullAnnotationsRewriteOperations.java
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model)
throws CoreException {
AST ast = cuRewrite.getRoot().getAST();
ListRewrite listRewrite =
cuRewrite
.getASTRewrite()
.getListRewrite(fBodyDeclaration, fBodyDeclaration.getModifiersProperty());
TextEditGroup group = createTextEditGroup(fMessage, cuRewrite);
if (!checkExisting(fBodyDeclaration.modifiers(), listRewrite, group)) return;
if (hasNonNullDefault(fBodyDeclaration.resolveBinding()))
return; // should be safe, as in this case checkExisting() should've already produced a
// change (remove existing
// annotation).
Annotation newAnnotation = ast.newMarkerAnnotation();
ImportRewrite importRewrite = cuRewrite.getImportRewrite();
String resolvableName = importRewrite.addImport(fAnnotationToAdd);
newAnnotation.setTypeName(ast.newName(resolvableName));
listRewrite.insertLast(
newAnnotation,
group); // null annotation is last modifier, directly preceding the return type
}
项目:che
文件:NullAnnotationsRewriteOperations.java
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel)
throws CoreException {
AST ast = cuRewrite.getRoot().getAST();
ListRewrite listRewrite =
cuRewrite
.getASTRewrite()
.getListRewrite(fArgument, SingleVariableDeclaration.MODIFIERS2_PROPERTY);
TextEditGroup group = createTextEditGroup(fMessage, cuRewrite);
if (!checkExisting(fArgument.modifiers(), listRewrite, group)) return;
Annotation newAnnotation = ast.newMarkerAnnotation();
ImportRewrite importRewrite = cuRewrite.getImportRewrite();
String resolvableName = importRewrite.addImport(fAnnotationToAdd);
newAnnotation.setTypeName(ast.newName(resolvableName));
listRewrite.insertLast(
newAnnotation, group); // null annotation is last modifier, directly preceding the type
}
项目:che
文件:TypeParametersFix.java
/** {@inheritDoc} */
@Override
public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model)
throws CoreException {
TextEditGroup group =
createTextEditGroup(
FixMessages.TypeParametersFix_remove_redundant_type_arguments_description, cuRewrite);
ASTRewrite rewrite = cuRewrite.getASTRewrite();
rewrite.setTargetSourceRangeComputer(new NoCommentSourceRangeComputer());
ListRewrite listRewrite =
rewrite.getListRewrite(fParameterizedType, ParameterizedType.TYPE_ARGUMENTS_PROPERTY);
List<Type> typeArguments = fParameterizedType.typeArguments();
for (Iterator<Type> iterator = typeArguments.iterator(); iterator.hasNext(); ) {
listRewrite.remove(iterator.next(), group);
}
}
项目:che
文件:ChangeSignatureProcessor.java
private void addExceptionToNodeList(
ExceptionInfo exceptionInfo, ListRewrite exceptionListRewrite) {
String fullyQualified = exceptionInfo.getFullyQualifiedName();
for (Iterator<? extends ASTNode> iter = exceptionListRewrite.getOriginalList().iterator();
iter.hasNext(); ) {
Type exType = (Type) iter.next();
// XXX: existing superclasses of the added exception are redundant and could be removed
ITypeBinding typeBinding = exType.resolveBinding();
if (typeBinding == null) continue; // newly added or unresolvable type
if (typeBinding.getQualifiedName().equals(fullyQualified)) return; // don't add it again
}
String importedType = getImportRewrite().addImport(exceptionInfo.getFullyQualifiedName());
getImportRemover().registerAddedImport(importedType);
ASTNode exNode = getASTRewrite().createStringPlaceholder(importedType, ASTNode.SIMPLE_TYPE);
exceptionListRewrite.insertLast(exNode, fDescription);
}
项目:che
文件:ReorgPolicyFactory.java
private void copyImportsToDestination(
IImportContainer container,
ASTRewrite rewrite,
CompilationUnit sourceCuNode,
CompilationUnit destinationCuNode)
throws JavaModelException {
ListRewrite listRewrite =
rewrite.getListRewrite(destinationCuNode, CompilationUnit.IMPORTS_PROPERTY);
IJavaElement[] importDeclarations = container.getChildren();
for (int i = 0; i < importDeclarations.length; i++) {
IImportDeclaration declaration = (IImportDeclaration) importDeclarations[i];
ImportDeclaration sourceNode =
ASTNodeSearchUtil.getImportDeclarationNode(declaration, sourceCuNode);
ImportDeclaration copiedNode =
(ImportDeclaration) ASTNode.copySubtree(rewrite.getAST(), sourceNode);
if (getLocation() == IReorgDestination.LOCATION_BEFORE) {
listRewrite.insertFirst(copiedNode, null);
} else {
listRewrite.insertLast(copiedNode, null);
}
}
}
项目:che
文件:ReorgPolicyFactory.java
private void copyImportToDestination(
IImportDeclaration declaration,
ASTRewrite targetRewrite,
CompilationUnit sourceCuNode,
CompilationUnit destinationCuNode)
throws JavaModelException {
ImportDeclaration sourceNode =
ASTNodeSearchUtil.getImportDeclarationNode(declaration, sourceCuNode);
ImportDeclaration copiedNode =
(ImportDeclaration) ASTNode.copySubtree(targetRewrite.getAST(), sourceNode);
ListRewrite listRewrite =
targetRewrite.getListRewrite(destinationCuNode, CompilationUnit.IMPORTS_PROPERTY);
if (getJavaElementDestination() instanceof IImportDeclaration) {
ImportDeclaration destinationNode =
ASTNodeSearchUtil.getImportDeclarationNode(
(IImportDeclaration) getJavaElementDestination(), destinationCuNode);
insertRelative(copiedNode, destinationNode, listRewrite);
} else {
// dropped on container, we could be better here
listRewrite.insertLast(copiedNode, null);
}
}
项目:che
文件:JavadocUtil.java
/**
* Adds a "param" javadoc tag for a new last parameter if necessary.
*
* @param parameterName
* @param methodDeclaration
* @param astRewrite
* @param javaProject
* @param groupDescription
*/
public static void addParamJavadoc(
String parameterName,
MethodDeclaration methodDeclaration,
ASTRewrite astRewrite,
IJavaProject javaProject,
TextEditGroup groupDescription) {
if (!shouldAddParamJavadoc(methodDeclaration)) return;
ListRewrite tagsRewrite =
astRewrite.getListRewrite(methodDeclaration.getJavadoc(), Javadoc.TAGS_PROPERTY);
HashSet<String> leadingNames = new HashSet<String>();
for (Iterator<SingleVariableDeclaration> iter = methodDeclaration.parameters().iterator();
iter.hasNext(); ) {
SingleVariableDeclaration curr = iter.next();
leadingNames.add(curr.getName().getIdentifier());
}
TagElement parameterTag = createParamTag(parameterName, astRewrite.getAST(), javaProject);
JavadocTagsSubProcessor.insertTag(tagsRewrite, parameterTag, leadingNames, groupDescription);
}
项目:che
文件:LocalCorrectionsSubProcessor.java
private static void createMissingDefaultProposal(
IInvocationContext context,
SwitchStatement switchStatement,
Image image,
Collection<ICommandAccess> proposals) {
AST ast = switchStatement.getAST();
ASTRewrite astRewrite = ASTRewrite.create(ast);
ListRewrite listRewrite =
astRewrite.getListRewrite(switchStatement, SwitchStatement.STATEMENTS_PROPERTY);
SwitchCase newSwitchCase = ast.newSwitchCase();
newSwitchCase.setExpression(null);
listRewrite.insertLast(newSwitchCase, null);
listRewrite.insertLast(ast.newBreakStatement(), null);
String label = CorrectionMessages.LocalCorrectionsSubProcessor_add_default_case_description;
proposals.add(
new ASTRewriteCorrectionProposal(
label,
context.getCompilationUnit(),
astRewrite,
IProposalRelevance.ADD_MISSING_DEFAULT_CASE,
image));
}
项目:che
文件:SuppressWarningsSubProcessor.java
private static boolean addSuppressArgument(
ASTRewrite rewrite, Expression value, StringLiteral newStringLiteral) {
if (value instanceof ArrayInitializer) {
ListRewrite listRewrite =
rewrite.getListRewrite(value, ArrayInitializer.EXPRESSIONS_PROPERTY);
listRewrite.insertLast(newStringLiteral, null);
} else if (value instanceof StringLiteral) {
ArrayInitializer newArr = rewrite.getAST().newArrayInitializer();
newArr.expressions().add(rewrite.createMoveTarget(value));
newArr.expressions().add(newStringLiteral);
rewrite.replace(value, newArr, null);
} else {
return false;
}
return true;
}
项目:che
文件:VarargsWarningsSubProcessor.java
@Override
protected ASTRewrite getRewrite() throws CoreException {
if (fMethodDeclaration == null) {
CompilationUnit astRoot = ASTResolving.createQuickFixAST(getCompilationUnit(), null);
fMethodDeclaration = (MethodDeclaration) astRoot.findDeclaringNode(fMethodBinding.getKey());
}
AST ast = fMethodDeclaration.getAST();
ASTRewrite rewrite = ASTRewrite.create(ast);
ListRewrite listRewrite =
rewrite.getListRewrite(fMethodDeclaration, MethodDeclaration.MODIFIERS2_PROPERTY);
MarkerAnnotation annotation = ast.newMarkerAnnotation();
String importString =
createImportRewrite((CompilationUnit) fMethodDeclaration.getRoot())
.addImport("java.lang.SafeVarargs"); // $NON-NLS-1$
annotation.setTypeName(ast.newName(importString));
listRewrite.insertFirst(annotation, null);
// set up linked mode
addLinkedPosition(rewrite.track(annotation), true, "annotation"); // $NON-NLS-1$
return rewrite;
}
项目:che
文件:QuickAssistProcessor.java
public static ASTNode getCopyOfInner(
ASTRewrite rewrite, ASTNode statement, boolean toControlStatementBody) {
if (statement.getNodeType() == ASTNode.BLOCK) {
Block block = (Block) statement;
List<Statement> innerStatements = block.statements();
int nStatements = innerStatements.size();
if (nStatements == 1) {
return rewrite.createCopyTarget(innerStatements.get(0));
} else if (nStatements > 1) {
if (toControlStatementBody) {
return rewrite.createCopyTarget(block);
}
ListRewrite listRewrite = rewrite.getListRewrite(block, Block.STATEMENTS_PROPERTY);
ASTNode first = innerStatements.get(0);
ASTNode last = innerStatements.get(nStatements - 1);
return listRewrite.createCopyTarget(first, last);
}
return null;
} else {
return rewrite.createCopyTarget(statement);
}
}
项目:che
文件:JavadocTagsSubProcessor.java
private void insertAllMissingTypeTags(ASTRewrite rewriter, TypeDeclaration typeDecl) {
AST ast = typeDecl.getAST();
Javadoc javadoc = typeDecl.getJavadoc();
ListRewrite tagsRewriter = rewriter.getListRewrite(javadoc, Javadoc.TAGS_PROPERTY);
List<TypeParameter> typeParams = typeDecl.typeParameters();
for (int i = typeParams.size() - 1; i >= 0; i--) {
TypeParameter decl = typeParams.get(i);
String name = '<' + decl.getName().getIdentifier() + '>';
if (findTag(javadoc, TagElement.TAG_PARAM, name) == null) {
TagElement newTag = ast.newTagElement();
newTag.setTagName(TagElement.TAG_PARAM);
TextElement text = ast.newTextElement();
text.setText(name);
newTag.fragments().add(text);
insertTabStop(rewriter, newTag.fragments(), "typeParam" + i); // $NON-NLS-1$
insertTag(tagsRewriter, newTag, getPreviousTypeParamNames(typeParams, decl));
}
}
}