private static boolean isSideEffectFree(SimpleName simpleName, CompilationUnit completeRoot) { SimpleName nameNode= (SimpleName) NodeFinder.perform(completeRoot, simpleName.getStartPosition(), simpleName.getLength()); SimpleName[] references= LinkedNodeFinder.findByBinding(completeRoot, nameNode.resolveBinding()); for (int i= 0; i < references.length; i++) { if (hasSideEffect(references[i])) return false; } return true; }
/** * Find all nodes connected to the given name node. If the node has a binding then all nodes connected * to this binding are returned. If the node has no binding, then all nodes that also miss a binding and have * the same name are returned. * @param root The root of the AST tree to search * @param name The node to find linked nodes for * @return Return */ public static SimpleName[] findByNode(ASTNode root, SimpleName name) { IBinding binding = name.resolveBinding(); if (binding != null) { return findByBinding(root, binding); } SimpleName[] names= findByProblems(root, name); if (names != null) { return names; } int parentKind= name.getParent().getNodeType(); if (parentKind == ASTNode.LABELED_STATEMENT || parentKind == ASTNode.BREAK_STATEMENT || parentKind == ASTNode.CONTINUE_STATEMENT) { ArrayList res= new ArrayList(); LabelFinder nodeFinder= new LabelFinder(name, res); root.accept(nodeFinder); return (SimpleName[]) res.toArray(new SimpleName[res.size()]); } return new SimpleName[] { name }; }
private HashSet<String> makeNamesUnique(HashSet<String> excludedNames, MethodDeclaration methodDeclaration, ASTRewrite rewrite, TextEditGroup group) { HashSet<String> newNames= new HashSet<>(); excludedNames.addAll(ASTNodes.getVisibleLocalVariablesInScope(methodDeclaration)); List<SimpleName> simpleNamesInMethod= getNamesInMethod(methodDeclaration); List<String> namesInMethod= new ArrayList<>(); for (SimpleName name : simpleNamesInMethod) { namesInMethod.add(name.getIdentifier()); } for (int i= 0; i < simpleNamesInMethod.size(); i++) { SimpleName name= simpleNamesInMethod.get(i); String identifier= namesInMethod.get(i); HashSet<String> allNamesToExclude= getNamesToExclude(excludedNames, namesInMethod, i); if (allNamesToExclude.contains(identifier)) { String newIdentifier= createName(identifier, allNamesToExclude); excludedNames.add(newIdentifier); newNames.add(newIdentifier); SimpleName[] references= LinkedNodeFinder.findByNode(name.getRoot(), name); for (SimpleName ref : references) { rewrite.set(ref, SimpleName.IDENTIFIER_PROPERTY, newIdentifier, group); } } } return newNames; }
int nameNodeKind= getNameNodeProblemKind(problems, nameNode); if (nameNodeKind == 0) { // no problem on node return null; int currKind= getProblemKind(curr); if ((nameNodeKind & currKind) != 0) { ASTNode node= NodeFinder.perform(parent, probStart, probEnd - probStart);
private SimpleName[] getAllReferences(Block body) { SimpleName[] names= LinkedNodeFinder.findByProblems(body, fOriginalNode); if (names == null) { return new SimpleName[] { fOriginalNode }; } if (names.length > 1) { Arrays.sort(names, new Comparator<SimpleName>() { @Override public int compare(SimpleName s1, SimpleName s2) { return s1.getStartPosition() - s2.getStartPosition(); } }); } return names; }
private static int getNameNodeProblemKind(IProblem[] problems, SimpleName nameNode) { int nameOffset= nameNode.getStartPosition(); int nameInclEnd= nameOffset + nameNode.getLength() - 1; for (int i= 0; i < problems.length; i++) { IProblem curr= problems[i]; if (curr.getSourceStart() == nameOffset && curr.getSourceEnd() == nameInclEnd) { int kind= getProblemKind(curr); if (kind != 0) { return kind; } } } return 0; }
private SimpleName[] getAllReferences(Block body) { SimpleName[] names= LinkedNodeFinder.findByProblems(body, fOriginalNode); if (names == null) { return new SimpleName[] { fOriginalNode }; } if (names.length > 1) { Arrays.sort(names, new Comparator() { public int compare(Object o1, Object o2) { return ((SimpleName) o1).getStartPosition() - ((SimpleName) o2).getStartPosition(); } }); } return names; }
public static SimpleName[] findByProblems(ASTNode parent, SimpleName nameNode) { ArrayList<SimpleName> res= new ArrayList<>(); ASTNode astRoot = parent.getRoot(); if (!(astRoot instanceof CompilationUnit)) { return null; } IProblem[] problems= ((CompilationUnit) astRoot).getProblems(); int nameNodeKind= getNameNodeProblemKind(problems, nameNode); if (nameNodeKind == 0) { // no problem on node return null; } int bodyStart= parent.getStartPosition(); int bodyEnd= bodyStart + parent.getLength(); String name= nameNode.getIdentifier(); for (int i= 0; i < problems.length; i++) { IProblem curr= problems[i]; int probStart= curr.getSourceStart(); int probEnd= curr.getSourceEnd() + 1; if (probStart > bodyStart && probEnd < bodyEnd) { int currKind= getProblemKind(curr); if ((nameNodeKind & currKind) != 0) { ASTNode node= NodeFinder.perform(parent, probStart, (probEnd - probStart)); if (node instanceof SimpleName && name.equals(((SimpleName) node).getIdentifier())) { res.add((SimpleName) node); } } } } return res.toArray(new SimpleName[res.size()]); }
private static int getNameNodeProblemKind(IProblem[] problems, SimpleName nameNode) { int nameOffset= nameNode.getStartPosition(); int nameInclEnd= nameOffset + nameNode.getLength() - 1; for (int i= 0; i < problems.length; i++) { IProblem curr= problems[i]; if (curr.getSourceStart() == nameOffset && curr.getSourceEnd() == nameInclEnd) { int kind= getProblemKind(curr); if (kind != 0) { return kind; } } } return 0; }
private static boolean isSideEffectFree(SimpleName simpleName, CompilationUnit completeRoot) { SimpleName nameNode= (SimpleName) NodeFinder.perform(completeRoot, simpleName.getStartPosition(), simpleName.getLength()); SimpleName[] references= LinkedNodeFinder.findByBinding(completeRoot, nameNode.resolveBinding()); for (int i= 0; i < references.length; i++) { if (hasSideEffect(references[i])) return false; } return true; }
/** * Find all nodes connected to the given name node. If the node has a binding then all nodes connected * to this binding are returned. If the node has no binding, then all nodes that also miss a binding and have * the same name are returned. * @param root The root of the AST tree to search * @param name The node to find linked nodes for * @return Return */ public static SimpleName[] findByNode(ASTNode root, SimpleName name) { IBinding binding = name.resolveBinding(); if (binding != null) { return findByBinding(root, binding); } SimpleName[] names= findByProblems(root, name); if (names != null) { return names; } int parentKind= name.getParent().getNodeType(); if (parentKind == ASTNode.LABELED_STATEMENT || parentKind == ASTNode.BREAK_STATEMENT || parentKind == ASTNode.CONTINUE_STATEMENT) { ArrayList<SimpleName> res= new ArrayList<>(); LabelFinder nodeFinder= new LabelFinder(name, res); root.accept(nodeFinder); return res.toArray(new SimpleName[res.size()]); } return new SimpleName[] { name }; }
private HashSet<String> makeNamesUnique(HashSet<String> excludedNames, MethodDeclaration methodDeclaration, ASTRewrite rewrite, TextEditGroup group) { HashSet<String> newNames = new HashSet<>(); excludedNames.addAll(ASTNodes.getVisibleLocalVariablesInScope(methodDeclaration)); List<SimpleName> simpleNamesInMethod = getNamesInMethod(methodDeclaration); List<String> namesInMethod = new ArrayList<>(); for (SimpleName name : simpleNamesInMethod) { namesInMethod.add(name.getIdentifier()); } for (int i = 0; i < simpleNamesInMethod.size(); i++) { SimpleName name = simpleNamesInMethod.get(i); String identifier = namesInMethod.get(i); HashSet<String> allNamesToExclude = getNamesToExclude(excludedNames, namesInMethod, i); if (allNamesToExclude.contains(identifier)) { String newIdentifier = createName(identifier, allNamesToExclude); excludedNames.add(newIdentifier); newNames.add(newIdentifier); SimpleName[] references = LinkedNodeFinder.findByNode(name.getRoot(), name); for (SimpleName ref : references) { rewrite.set(ref, SimpleName.IDENTIFIER_PROPERTY, newIdentifier, group); } } } return newNames; }
private SimpleName[] getAllReferences(Block body) { SimpleName[] names= LinkedNodeFinder.findByProblems(body, fOriginalNode); if (names == null) { return new SimpleName[] { fOriginalNode }; } if (names.length > 1) { Arrays.sort(names, new Comparator<SimpleName>() { @Override public int compare(SimpleName s1, SimpleName s2) { return s1.getStartPosition() - s2.getStartPosition(); } }); } return names; }
int nameNodeKind= getNameNodeProblemKind(problems, nameNode); if (nameNodeKind == 0) { // no problem on node return null; int currKind= getProblemKind(curr); if ((nameNodeKind & currKind) != 0) { ASTNode node= NodeFinder.perform(parent, probStart, (probEnd - probStart));
private static int getNameNodeProblemKind(IProblem[] problems, SimpleName nameNode) { int nameOffset= nameNode.getStartPosition(); int nameInclEnd= nameOffset + nameNode.getLength() - 1; for (int i= 0; i < problems.length; i++) { IProblem curr= problems[i]; if (curr.getSourceStart() == nameOffset && curr.getSourceEnd() == nameInclEnd) { int kind= getProblemKind(curr); if (kind != 0) { return kind; } } } return 0; }
private static boolean isSideEffectFree(SimpleName simpleName, CompilationUnit completeRoot) { SimpleName nameNode= (SimpleName) NodeFinder.perform(completeRoot, simpleName.getStartPosition(), simpleName.getLength()); SimpleName[] references= LinkedNodeFinder.findByBinding(completeRoot, nameNode.resolveBinding()); for (int i= 0; i < references.length; i++) { if (hasSideEffect(references[i])) { return false; } } return true; }
/** * Find all nodes connected to the given name node. If the node has a binding then all nodes connected * to this binding are returned. If the node has no binding, then all nodes that also miss a binding and have * the same name are returned. * @param root The root of the AST tree to search * @param name The node to find linked nodes for * @return Return */ public static SimpleName[] findByNode(ASTNode root, SimpleName name) { IBinding binding = name.resolveBinding(); if (binding != null) { return findByBinding(root, binding); } SimpleName[] names= findByProblems(root, name); if (names != null) { return names; } int parentKind= name.getParent().getNodeType(); if (parentKind == ASTNode.LABELED_STATEMENT || parentKind == ASTNode.BREAK_STATEMENT || parentKind == ASTNode.CONTINUE_STATEMENT) { ArrayList<SimpleName> res= new ArrayList<>(); LabelFinder nodeFinder= new LabelFinder(name, res); root.accept(nodeFinder); return res.toArray(new SimpleName[res.size()]); } return new SimpleName[] { name }; }
private HashSet<String> makeNamesUnique(HashSet<String> excludedNames, MethodDeclaration methodDeclaration, ASTRewrite rewrite, TextEditGroup group) { HashSet<String> newNames= new HashSet<>(); excludedNames.addAll(ASTNodes.getVisibleLocalVariablesInScope(methodDeclaration)); List<SimpleName> simpleNamesInMethod= getNamesInMethod(methodDeclaration); List<String> namesInMethod= new ArrayList<>(); for (SimpleName name : simpleNamesInMethod) { namesInMethod.add(name.getIdentifier()); } for (int i= 0; i < simpleNamesInMethod.size(); i++) { SimpleName name= simpleNamesInMethod.get(i); String identifier= namesInMethod.get(i); HashSet<String> allNamesToExclude= getNamesToExclude(excludedNames, namesInMethod, i); if (allNamesToExclude.contains(identifier)) { String newIdentifier= createName(identifier, allNamesToExclude); excludedNames.add(newIdentifier); newNames.add(newIdentifier); SimpleName[] references= LinkedNodeFinder.findByNode(name.getRoot(), name); for (SimpleName ref : references) { rewrite.set(ref, SimpleName.IDENTIFIER_PROPERTY, newIdentifier, group); } } } return newNames; }
private SimpleName[] getAllReferences(Block body) { SimpleName[] names= LinkedNodeFinder.findByProblems(body, fOriginalNode); if (names == null) { return new SimpleName[] { fOriginalNode }; } if (names.length > 1) { Arrays.sort(names, new Comparator<SimpleName>() { @Override public int compare(SimpleName s1, SimpleName s2) { return s1.getStartPosition() - s2.getStartPosition(); } }); } return names; }
private static boolean isSideEffectFree(SimpleName simpleName, CompilationUnit completeRoot) { SimpleName nameNode= (SimpleName) NodeFinder.perform(completeRoot, simpleName.getStartPosition(), simpleName.getLength()); SimpleName[] references= LinkedNodeFinder.findByBinding(completeRoot, nameNode.resolveBinding()); for (int i= 0; i < references.length; i++) { if (hasSideEffect(references[i])) return false; } return true; }