# HG changeset patch # User Ralph Benjamin Ruijs # Parent f6f743a872c3a7d94f9ace290cc23789b6faeca0 #215361 - Refactoring Results Filters diff --git a/refactoring.api/src/org/netbeans/modules/refactoring/api/resources/found_item_orange.png b/refactoring.api/src/org/netbeans/modules/refactoring/api/resources/found_item_orange.png index 80b1b4e552ce90a870eda4f825e46a34de923b7b..a76278821af99f9dc795d1b145ac9145516cdf12 GIT binary patch literal 303 zc%17D@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2comUKs7M+S!VC(K#9UIO`?1s;*b z3=DkxL735kHCP2GC{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)WP}OQr z7sn6_|KuP4|JyS!osq=sz$d}kX25W8+sdoLjX(Y`+I8cEHBGaZhx@WT z`oG`*?2rHNp9dT8K59PFX_itNfAatQ-KYNjuiU`h=U6kr;$mCL(;t8T*QPPCv2_aP zdgNyw`Y-;s?|*%sc1yB=yoz6!qOdjh;s5(*Bz*e+d|C+5AZA`gJ0FLQ7vdz01v~zW tx845Beo?{BbE9)soD}EDc~=Y=8P*7S#^-#VeGKSq22WQ%mvv4FO#nT@a=ZWl diff --git a/refactoring.api/src/org/netbeans/modules/refactoring/plugins/RefactoringTreeElement.java b/refactoring.api/src/org/netbeans/modules/refactoring/plugins/RefactoringTreeElement.java --- a/refactoring.api/src/org/netbeans/modules/refactoring/plugins/RefactoringTreeElement.java +++ b/refactoring.api/src/org/netbeans/modules/refactoring/plugins/RefactoringTreeElement.java @@ -56,9 +56,11 @@ public class RefactoringTreeElement implements TreeElement { RefactoringElement element; + private final Icon icon; RefactoringTreeElement(RefactoringElement element) { this.element = element; + icon = element.getLookup().lookup(Icon.class); } @Override @@ -74,7 +76,7 @@ @Override public Icon getIcon() { - return null; + return icon; } @Override diff --git a/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/Bundle.properties b/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/Bundle.properties --- a/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/Bundle.properties +++ b/refactoring.api/src/org/netbeans/modules/refactoring/spi/impl/Bundle.properties @@ -81,6 +81,7 @@ LBL_Occurence=occurrence LBL_Occurences=occurrences LBL_Errors=errors +LBL_Hidden=filtered LBL_UsagesWindow=&Find Usages Results LBL_RefactoringWindow=&Refactoring Preview diff --git a/refactoring.java/apichanges.xml b/refactoring.java/apichanges.xml --- a/refactoring.java/apichanges.xml +++ b/refactoring.java/apichanges.xml @@ -49,6 +49,27 @@ Java Refactoring API + + + Added refactoring filter keys for find usages results. + + + + + +

Added an enumeration with keys to identify different filters used by Java Refactoring's Find Usages. + IMPORT("filter-import") + COMMENT("filter-comment") + TESTFILE("filter-testfile") + READ("filter-read") + WRITE("filter-write") + READ_WRITE("filter-readwrite") +

+
+ + +
New refactorings on board: ReplaceConstructorWithFactory, diff --git a/refactoring.java/nbproject/project.properties b/refactoring.java/nbproject/project.properties --- a/refactoring.java/nbproject/project.properties +++ b/refactoring.java/nbproject/project.properties @@ -2,7 +2,7 @@ javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml -spec.version.base=1.38.0 +spec.version.base=1.39.0 #test configs test.config.find.includes=\ **/FindUsagesSuite.class diff --git a/refactoring.java/nbproject/project.xml b/refactoring.java/nbproject/project.xml --- a/refactoring.java/nbproject/project.xml +++ b/refactoring.java/nbproject/project.xml @@ -185,7 +185,7 @@ - 1.28 + 1.29 diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/RefactoringUtils.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/RefactoringUtils.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/RefactoringUtils.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/RefactoringUtils.java @@ -66,6 +66,7 @@ import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.api.java.queries.SourceForBinaryQuery; import org.netbeans.api.java.queries.SourceForBinaryQuery.Result; +import org.netbeans.api.java.queries.UnitTestForSourceQuery; import org.netbeans.api.java.source.*; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; @@ -978,6 +979,17 @@ return ""; //NOI18N } + public static boolean isFromTestRoot(FileObject file, ClassPath cp) { + boolean inTest = false; + if (cp != null) { + FileObject root = cp.findOwnerRoot(file); + if (UnitTestForSourceQuery.findSources(root).length > 0) { + inTest = true; + } + } + return inTest; + } + private RefactoringUtils() { } } diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/WhereUsedElement.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/WhereUsedElement.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/WhereUsedElement.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/WhereUsedElement.java @@ -44,18 +44,24 @@ package org.netbeans.modules.refactoring.java; import com.sun.source.tree.*; +import com.sun.source.tree.Tree.Kind; import com.sun.source.util.SourcePositions; import com.sun.source.util.TreePath; import com.sun.source.util.Trees; +import java.util.concurrent.atomic.AtomicBoolean; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; +import javax.swing.Icon; import javax.swing.text.Position.Bias; import org.netbeans.api.java.source.CompilationInfo; import org.netbeans.api.java.source.TreeUtilities; import org.netbeans.modules.refactoring.java.plugins.JavaWhereUsedQueryPlugin; +import org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters; +import org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters.ReadWrite; import org.netbeans.modules.refactoring.java.ui.UIUtilities; import org.netbeans.modules.refactoring.java.ui.WhereUsedPanel; import org.netbeans.modules.refactoring.java.ui.tree.ElementGripFactory; +import org.netbeans.modules.refactoring.spi.FiltersManager; import org.netbeans.modules.refactoring.spi.SimpleRefactoringElementImplementation; import org.openide.ErrorManager; import org.openide.filesystems.FileObject; @@ -65,21 +71,40 @@ import org.openide.text.PositionBounds; import org.openide.text.PositionRef; import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; -public class WhereUsedElement extends SimpleRefactoringElementImplementation { +public class WhereUsedElement extends SimpleRefactoringElementImplementation implements FiltersManager.Filterable { private PositionBounds bounds; private String displayText; private FileObject parentFile; - public WhereUsedElement(PositionBounds bounds, String displayText, FileObject parentFile, TreePath tp, CompilationInfo info) { + private final JavaWhereUsedFilters.ReadWrite access; + private final boolean inComment; + private final boolean inImport; + private final boolean inTestclass; + +// public WhereUsedElement(PositionBounds bounds, String displayText, FileObject parentFile, TreePath tp, CompilationInfo info) { +// this(bounds, displayText, parentFile, tp, info, null, false, true); +// } +// +// public WhereUsedElement(PositionBounds bounds, String displayText, FileObject parentFile, TreePath tp, CompilationInfo info, JavaWhereUsedFilters.ReadWrite access) { +// this(bounds, displayText, parentFile, tp, info, access, false, false); +// } + + public WhereUsedElement(PositionBounds bounds, String displayText, FileObject parentFile, TreePath tp, CompilationInfo info, ReadWrite access, boolean inTestclass, boolean inComment, boolean inImport) { this.bounds = bounds; this.displayText = displayText; this.parentFile = parentFile; - if (tp!=null) { + if (tp != null) { ElementGripFactory.getDefault().put(parentFile, tp, info); } + ElementGripFactory.getDefault().put(parentFile, inTestclass); + this.access = access; + this.inTestclass = inTestclass; + this.inComment = inComment; + this.inImport = inImport; } @Override @@ -93,7 +118,26 @@ if (composite==null) { composite = parentFile; } - return Lookups.singleton(composite); + Icon icon = null; + if(access != null) { + switch(access) { + case WRITE: + icon = ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_write.png", false); + break; + case READ_WRITE: + icon = ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_readwrite.png", false); + break; + default: + case READ: + icon = ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_read.png", false); + break; + } + } else if(inComment) { + icon = ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_comment.png", false); + } else if(inImport) { + icon = ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_import.png", false); + } + return icon != null ? Lookups.fixed(composite, icon) : Lookups.singleton(composite); } @Override @@ -114,8 +158,20 @@ public FileObject getParentFile() { return parentFile; } + + public JavaWhereUsedFilters.ReadWrite getAccess() { + return access; + } - public static WhereUsedElement create(CompilationInfo compiler, TreePath tree) { + public static WhereUsedElement create(CompilationInfo compiler, TreePath tree, boolean inTest) { + return create(compiler, tree, null, inTest, new AtomicBoolean()); + } + + public static WhereUsedElement create(CompilationInfo compiler, TreePath tree, boolean inTest, AtomicBoolean inImport) { + return create(compiler, tree, null, inTest, inImport); + } + + public static WhereUsedElement create(CompilationInfo compiler, TreePath tree, JavaWhereUsedFilters.ReadWrite access, boolean inTest, AtomicBoolean inImport) { CompilationUnitTree unit = tree.getCompilationUnit(); CharSequence content = compiler.getSnapshot().getText(); SourcePositions sp = compiler.getTrees().getSourcePositions(); @@ -135,6 +191,15 @@ } t = tree.getLeaf(); } + + boolean elementInImport = false; + if(t.getKind() == Tree.Kind.IDENTIFIER || t.getKind() == Tree.Kind.MEMBER_SELECT) { + TreePath enclosingTree = getEnclosingImportTree(tree); + if(enclosingTree != null) { + elementInImport = true; + inImport.set(true); + } + } if (TreeUtilities.CLASS_TREE_KINDS.contains(t.getKind())) { int[] pos = treeUtils.findNameSpan((ClassTree)t); @@ -231,7 +296,7 @@ end = start; } } - + assert start>0:"Cannot find start position in file " + unit.getSourceFile().getName() + "\n tree=" + tree.toString(); assert end>0:"Cannot find end position in file " + unit.getSourceFile().getName() + "\n tree=" + tree.toString(); LineMap lm = tree.getCompilationUnit().getLineMap(); @@ -264,7 +329,7 @@ start==end && anonClassNameBug128074 ? NbBundle.getMessage(WhereUsedPanel.class, "LBL_AnonymousClass"):sb.toString().trim(), compiler.getFileObject(), tr, - compiler); + compiler, access, inTest, false, elementInImport); } private static String trimStart(String s) { @@ -289,7 +354,7 @@ return ""; } - public static WhereUsedElement create(int start, int end, CompilationInfo compiler) { + public static WhereUsedElement create(int start, int end, CompilationInfo compiler, boolean inTest) { CharSequence content = compiler.getSnapshot().getText(); LineMap lm = compiler.getCompilationUnit().getLineMap(); long line = lm.getLineNumber(start); @@ -315,9 +380,19 @@ PositionRef ref1 = ces.createPositionRef(start, Bias.Forward); PositionRef ref2 = ces.createPositionRef(end, Bias.Forward); PositionBounds bounds = new PositionBounds(ref1, ref2); - return new WhereUsedElement(bounds, sb.toString().trim(), compiler.getFileObject(), null, compiler); + return new WhereUsedElement(bounds, sb.toString().trim(), compiler.getFileObject(), null, compiler, null, inTest, true, false); } + private static TreePath getEnclosingImportTree(TreePath tp) { + while(tp != null) { + Tree tree = tp.getLeaf(); + if (tree.getKind() == Tree.Kind.IMPORT) { + return tp; + } + tp = tp.getParentPath(); + } + return null; + } private static TreePath getEnclosingTree(TreePath tp) { while(tp != null) { @@ -330,4 +405,20 @@ return null; } + @Override + public boolean filter(FiltersManager manager) { + if(!inTestclass || (inTestclass && manager.isSelected(JavaWhereUsedFilters.TESTFILE.getKey()))) { + if (access != null) { + return manager.isSelected(access.getKey()); + } else if (inComment) { + return manager.isSelected(JavaWhereUsedFilters.COMMENT.getKey()); + } else if (inImport) { + return manager.isSelected(JavaWhereUsedFilters.IMPORT.getKey()); + } else { + return true; + } + } else { + return false; + } + } } diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallOccurrence.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallOccurrence.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallOccurrence.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/callhierarchy/CallOccurrence.java @@ -87,7 +87,7 @@ public static CallOccurrence createOccurrence( CompilationInfo javac, TreePath selection, Call parent) { - WhereUsedElement wue = WhereUsedElement.create(javac, selection); + WhereUsedElement wue = WhereUsedElement.create(javac, selection, false); CallOccurrence c = new CallOccurrence(); c.occurrence = TreePathHandle.create(selection, javac); c.displayName = selection.getLeaf().toString(); diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/FindUsagesVisitor.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/FindUsagesVisitor.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/FindUsagesVisitor.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/FindUsagesVisitor.java @@ -41,61 +41,85 @@ * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. */ - package org.netbeans.modules.refactoring.java.plugins; import com.sun.source.tree.*; import com.sun.source.tree.Tree.Kind; import com.sun.source.util.TreePath; +import com.sun.source.util.TreePathScanner; import com.sun.source.util.Trees; +import java.io.IOException; import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; import java.util.logging.Logger; import javax.lang.model.element.*; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.ElementFilter; import org.netbeans.api.java.lexer.JavaTokenId; +import org.netbeans.api.java.source.ClasspathInfo.PathKind; import org.netbeans.api.java.source.CompilationController; import org.netbeans.api.java.source.ElementUtilities; +import org.netbeans.api.java.source.JavaSource; import org.netbeans.api.lexer.Token; import org.netbeans.api.lexer.TokenSequence; +import org.netbeans.modules.refactoring.java.RefactoringUtils; +import org.netbeans.modules.refactoring.java.WhereUsedElement; +import org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters; +import org.netbeans.modules.refactoring.java.spi.ToPhaseException; +import org.openide.ErrorManager; +import org.openide.util.Exceptions; /** * * @author Jan Becicka */ -public class FindUsagesVisitor extends FindVisitor { +public class FindUsagesVisitor extends TreePathScanner { + private Collection usages = new ArrayList(); + private Collection elements = new ArrayList(); + protected CompilationController workingCopy; + private Collection usagesInComments = Collections.emptyList(); private boolean findInComments = false; - private Collection usagesInComments = Collections.emptyList(); + private final boolean fromTestRoot; + private final AtomicBoolean inImport; + public FindUsagesVisitor(CompilationController workingCopy) { - super(workingCopy); + this(workingCopy, false); + } + + public FindUsagesVisitor(CompilationController workingCopy, boolean findInComments) { + this(workingCopy, findInComments, RefactoringUtils.isFromTestRoot(workingCopy.getFileObject(), workingCopy.getClasspathInfo().getClassPath(PathKind.SOURCE)), new AtomicBoolean()); } - public Collection getUsagesInComments() { - return usagesInComments; - } - - public FindUsagesVisitor(CompilationController workingCopy, boolean findInComments) { - super(workingCopy); + public FindUsagesVisitor(CompilationController workingCopy, boolean findInComments, boolean fromTestRoot, AtomicBoolean inImport) { + try { + setWorkingCopy(workingCopy); + } catch (ToPhaseException ex) { + Exceptions.printStackTrace(ex); + } this.findInComments = findInComments; if (findInComments) { usagesInComments = new ArrayList(); } + this.fromTestRoot = fromTestRoot; + this.inImport = inImport; } + // @Override public Tree visitCompilationUnit(CompilationUnitTree node, Element p) { if (findInComments) { String originalName = p.getSimpleName().toString(); TokenSequence ts = workingCopy.getTokenHierarchy().tokenSequence(JavaTokenId.language()); - + while (ts.moveNext()) { Token t = ts.token(); - + if (t.id() == JavaTokenId.BLOCK_COMMENT || t.id() == JavaTokenId.LINE_COMMENT || t.id() == JavaTokenId.JAVADOC_COMMENT) { Scanner tokenizer = new Scanner(t.text().toString()); tokenizer.useDelimiter("[^a-zA-Z0-9_]"); //NOI18N - + while (tokenizer.hasNext()) { String current = tokenizer.next(); if (current.equals(originalName)) { @@ -107,43 +131,8 @@ } return super.visitCompilationUnit(node, p); } + // - @Override - public Tree visitIdentifier(IdentifierTree node, Element p) { - addIfMatch(getCurrentPath(), node, p); - return super.visitIdentifier(node, p); - } - - @Override - public Tree visitMemberSelect(MemberSelectTree node, Element p) { - addIfMatch(getCurrentPath(), node,p); - return super.visitMemberSelect(node, p); - } - - @Override - public Tree visitNewClass(NewClassTree node, Element p) { - Trees trees = workingCopy.getTrees(); - ClassTree classTree = ((NewClassTree) node).getClassBody(); - if (classTree != null && p.getKind()==ElementKind.CONSTRUCTOR) { - Element anonClass = workingCopy.getTrees().getElement(TreePath.getPath(workingCopy.getCompilationUnit(), classTree)); - if (anonClass==null) { - Logger.getLogger("org.netbeans.modules.refactoring.java").severe("FindUsages cannot resolve " + classTree); - } else { - for (ExecutableElement c : ElementFilter.constructorsIn(anonClass.getEnclosedElements())) { - MethodTree t = workingCopy.getTrees().getTree(c); - TreePath superCall = trees.getPath(workingCopy.getCompilationUnit(), ((ExpressionStatementTree) t.getBody().getStatements().get(0)).getExpression()); - Element superCallElement = trees.getElement(superCall); - if (superCallElement != null && superCallElement.equals(p) && !workingCopy.getTreeUtilities().isSynthetic(superCall)) { - addUsage(superCall); - } - } - } - } else { - addIfMatch(getCurrentPath(), node, p); - } - return super.visitNewClass(node, p); - } - private void addIfMatch(TreePath path, Tree tree, Element elementToFind) { if (workingCopy.getTreeUtilities().isSynthetic(path)) { if (ElementKind.CONSTRUCTOR != elementToFind.getKind() @@ -158,7 +147,7 @@ if (el == null) { path = path.getParentPath(); if (path != null && path.getLeaf().getKind() == Kind.IMPORT) { - ImportTree impTree = (ImportTree)path.getLeaf(); + ImportTree impTree = (ImportTree) path.getLeaf(); if (!impTree.isStatic()) { return; } @@ -176,7 +165,7 @@ if (el == null) { return; } - Iterator iter = workingCopy.getElementUtilities().getMembers(el.asType(),new ElementUtilities.ElementAcceptor() { + Iterator iter = workingCopy.getElementUtilities().getMembers(el.asType(), new ElementUtilities.ElementAcceptor() { @Override public boolean accept(Element e, TypeMirror type) { return id.equals(e.getSimpleName()); @@ -192,22 +181,153 @@ return; } } - if (elementToFind!=null&& elementToFind.getKind() == ElementKind.METHOD && el.getKind() == ElementKind.METHOD) { + if (elementToFind != null && elementToFind.getKind() == ElementKind.METHOD && el.getKind() == ElementKind.METHOD) { if (el.equals(elementToFind) || workingCopy.getElements().overrides((ExecutableElement) el, (ExecutableElement) elementToFind, (TypeElement) elementToFind.getEnclosingElement())) { - addUsage(getCurrentPath()); + addUsage(path); } } else if (el.equals(elementToFind)) { - addUsage(getCurrentPath()); + final ElementKind kind = elementToFind.getKind(); + if(kind.isField() || kind == ElementKind.LOCAL_VARIABLE || kind == ElementKind.RESOURCE_VARIABLE) { + JavaWhereUsedFilters.ReadWrite access = JavaWhereUsedFilters.ReadWrite.READ; + TreePath parentPath = path.getParentPath(); + Tree parentTree = parentPath.getLeaf(); + Kind parentKind = parentTree.getKind(); + + switch(parentKind) { + case ARRAY_ACCESS: + case MEMBER_SELECT: + // TODO: Check usages of arrays for writing + break; + + case POSTFIX_INCREMENT: + case POSTFIX_DECREMENT: + case PREFIX_INCREMENT: + case PREFIX_DECREMENT: + access = JavaWhereUsedFilters.ReadWrite.READ_WRITE; + break; + + case ASSIGNMENT: { + AssignmentTree assignmentTree = (AssignmentTree) parentTree; + ExpressionTree left = assignmentTree.getVariable(); + if (left.equals(tree)) { + access = JavaWhereUsedFilters.ReadWrite.WRITE; + } + break; + } + case MULTIPLY_ASSIGNMENT: + case DIVIDE_ASSIGNMENT: + case REMAINDER_ASSIGNMENT: + case PLUS_ASSIGNMENT: + case MINUS_ASSIGNMENT: + case LEFT_SHIFT_ASSIGNMENT: + case RIGHT_SHIFT_ASSIGNMENT: + case UNSIGNED_RIGHT_SHIFT_ASSIGNMENT: + case AND_ASSIGNMENT: + case XOR_ASSIGNMENT: + case OR_ASSIGNMENT: { + CompoundAssignmentTree compoundAssignmentTree = (CompoundAssignmentTree) parentTree; + ExpressionTree left = compoundAssignmentTree.getVariable(); + if (left.equals(tree)) { + access = JavaWhereUsedFilters.ReadWrite.READ_WRITE; + } + break; + } + } + addUsage(path, access); + } else { + addUsage(path); + } } } + + /** + * + * @param workingCopy + * @throws org.netbeans.modules.refactoring.java.spi.ToPhaseException + */ + public final void setWorkingCopy(CompilationController workingCopy) throws ToPhaseException { + this.workingCopy = workingCopy; + try { + if (this.workingCopy.toPhase(JavaSource.Phase.RESOLVED) != JavaSource.Phase.RESOLVED) { + throw new ToPhaseException(); + } + } catch (IOException ioe) { + ErrorManager.getDefault().notify(ioe); + } + } + + public Collection getUsagesInComments() { + return usagesInComments; + } + protected void addUsage(TreePath tp, JavaWhereUsedFilters.ReadWrite access) { + assert tp != null; + elements.add(WhereUsedElement.create(workingCopy, tp, access, fromTestRoot, inImport)); + usages.add(tp); + } + + public boolean isInImport() { + return inImport.get(); + } + + protected void addUsage(TreePath tp) { + assert tp != null; + elements.add(WhereUsedElement.create(workingCopy, tp, fromTestRoot, inImport)); + usages.add(tp); + } + + public Collection getElements() { + return elements; + } + + public Collection getUsages() { + return usages; + } + + @Override + public Tree visitIdentifier(IdentifierTree node, Element p) { + addIfMatch(getCurrentPath(), node, p); + return super.visitIdentifier(node, p); + } + + @Override + public Tree visitMemberSelect(MemberSelectTree node, Element p) { + addIfMatch(getCurrentPath(), node, p); + return super.visitMemberSelect(node, p); + } + + @Override + public Tree visitNewClass(NewClassTree node, Element p) { + Trees trees = workingCopy.getTrees(); + ClassTree classTree = ((NewClassTree) node).getClassBody(); + if (classTree != null && p.getKind() == ElementKind.CONSTRUCTOR) { + Element anonClass = workingCopy.getTrees().getElement(TreePath.getPath(workingCopy.getCompilationUnit(), classTree)); + if (anonClass == null) { + Logger.getLogger("org.netbeans.modules.refactoring.java").log(Level.SEVERE, "FindUsages cannot resolve {0}", classTree); // NOI18N + } else { + for (ExecutableElement c : ElementFilter.constructorsIn(anonClass.getEnclosedElements())) { + MethodTree t = workingCopy.getTrees().getTree(c); + TreePath superCall = trees.getPath(workingCopy.getCompilationUnit(), ((ExpressionStatementTree) t.getBody().getStatements().get(0)).getExpression()); + Element superCallElement = trees.getElement(superCall); + if (superCallElement != null && superCallElement.equals(p) && !workingCopy.getTreeUtilities().isSynthetic(superCall)) { + addUsage(superCall); + } + } + } + } else { + addIfMatch(getCurrentPath(), node, p); + } + return super.visitNewClass(node, p); + } + public static class UsageInComment { + int from; int to; + public UsageInComment(int from, int to) { this.from = from; this.to = to; } } } - diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/JavaWhereUsedQueryPlugin.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/JavaWhereUsedQueryPlugin.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/JavaWhereUsedQueryPlugin.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/JavaWhereUsedQueryPlugin.java @@ -47,7 +47,6 @@ import com.sun.source.tree.Tree; import com.sun.source.util.TreePath; import java.io.IOException; -import java.net.URL; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import javax.lang.model.element.Element; @@ -56,31 +55,34 @@ import javax.lang.model.element.TypeElement; import org.netbeans.api.fileinfo.NonRecursiveFolder; import org.netbeans.api.java.classpath.ClassPath; +import org.netbeans.api.java.source.*; import org.netbeans.api.java.source.ClassIndex.SearchScopeType; -import org.netbeans.api.java.source.*; import org.netbeans.modules.refactoring.api.*; import org.netbeans.modules.refactoring.java.RefactoringUtils; import org.netbeans.modules.refactoring.java.SourceUtilsEx; import org.netbeans.modules.refactoring.java.WhereUsedElement; import org.netbeans.modules.refactoring.java.api.JavaRefactoringUtils; import org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants; +import org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.UsageInComment; import org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin; +import org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters; +import org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters.ReadWrite; import org.netbeans.modules.refactoring.spi.RefactoringElementsBag; -import org.netbeans.spi.java.classpath.support.ClassPathSupport; +import org.netbeans.modules.refactoring.spi.ui.FiltersDescription; import org.openide.ErrorManager; import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileSystem; import org.openide.loaders.DataObject; import org.openide.text.CloneableEditorSupport; -import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; -import org.openide.util.lookup.Lookups; /** * * @author Jan Becicka * @author Ralph Ruijs */ -public class JavaWhereUsedQueryPlugin extends JavaRefactoringPlugin { +public class JavaWhereUsedQueryPlugin extends JavaRefactoringPlugin implements FiltersDescription.Provider { private boolean fromLibrary; private WhereUsedQuery refactoring; private ClasspathInfo cp; @@ -340,7 +342,8 @@ fireProgressListenerStep(a.size()); Problem problem = null; try { - queryFiles(a, new FindTask(elements)); + final FindTask findTask = new FindTask(elements); + queryFiles(a, findTask); } catch (IOException e) { problem = createProblemAndLog(null, e); } @@ -379,11 +382,11 @@ } public static CloneableEditorSupport findCloneableEditorSupport(DataObject dob) { - Object obj = dob.getCookie(org.openide.cookies.OpenCookie.class); + Object obj = dob.getLookup().lookup(org.openide.cookies.OpenCookie.class); if (obj instanceof CloneableEditorSupport) { return (CloneableEditorSupport)obj; } - obj = dob.getCookie(org.openide.cookies.EditorCookie.class); + obj = dob.getLookup().lookup(org.openide.cookies.EditorCookie.class); if (obj instanceof CloneableEditorSupport) { return (CloneableEditorSupport)obj; } @@ -406,6 +409,34 @@ private boolean isSearchFromBaseClass() { return refactoring.getBooleanValue(WhereUsedQueryConstants.SEARCH_FROM_BASECLASS); } + + @Override + public void addFilters(FiltersDescription filtersDescription) { + filtersDescription.addFilter(JavaWhereUsedFilters.ReadWrite.READ.getKey(), "Read filter", true, + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_read.png", false)); + filtersDescription.addFilter(JavaWhereUsedFilters.ReadWrite.WRITE.getKey(), "Write filter", true, + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_write.png", false)); + filtersDescription.addFilter(JavaWhereUsedFilters.ReadWrite.READ_WRITE.getKey(), "Read/Write filter", true, + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_readwrite.png", false)); + filtersDescription.addFilter(JavaWhereUsedFilters.IMPORT.getKey(), "Import filter", true, + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_import.png", false)); + filtersDescription.addFilter(JavaWhereUsedFilters.COMMENT.getKey(), "Comment filter", true, + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_comment.png", false)); + filtersDescription.addFilter(JavaWhereUsedFilters.TESTFILE.getKey(), "Test filter", true, + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_test.png", false)); + } + + private EnumSet usedAccessFilters = EnumSet.noneOf(JavaWhereUsedFilters.ReadWrite.class); + private LinkedList usedFilters = new LinkedList(); + @Override + public void enableFilters(FiltersDescription filtersDescription) { + for (JavaWhereUsedFilters.ReadWrite filter : usedAccessFilters) { + filtersDescription.enable(filter.getKey()); + } + for (String string : usedFilters) { + filtersDescription.enable(string); + } + } private class FindTask implements CancellableTask { @@ -442,15 +473,31 @@ return; } - Collection result = new ArrayList(); + final boolean fromTestRoot = RefactoringUtils.isFromTestRoot(compiler.getFileObject(), compiler.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.SOURCE)); + AtomicBoolean inImport = new AtomicBoolean(); if (isFindUsages()) { - FindUsagesVisitor findVisitor = new FindUsagesVisitor(compiler, refactoring.getBooleanValue(WhereUsedQuery.SEARCH_IN_COMMENTS)); + FindUsagesVisitor findVisitor = new FindUsagesVisitor(compiler, refactoring.getBooleanValue(WhereUsedQuery.SEARCH_IN_COMMENTS), fromTestRoot, inImport); findVisitor.scan(compiler.getCompilationUnit(), element); - result.addAll(findVisitor.getUsages()); - for (FindUsagesVisitor.UsageInComment usageInComment : findVisitor.getUsagesInComments()) { - elements.add(refactoring, WhereUsedElement.create(usageInComment.from, usageInComment.to, compiler)); + final Collection usagesInComments = findVisitor.getUsagesInComments(); + for (FindUsagesVisitor.UsageInComment usageInComment : usagesInComments) { + elements.add(refactoring, WhereUsedElement.create(usageInComment.from, usageInComment.to, compiler, fromTestRoot)); + } + if(!usagesInComments.isEmpty()) { + usedFilters.add(JavaWhereUsedFilters.COMMENT.getKey()); + } + Collection foundElements = findVisitor.getElements(); + for (WhereUsedElement el : foundElements) { + final ReadWrite access = el.getAccess(); + if(access != null) { + usedAccessFilters.add(access); + } + elements.add(refactoring, el); + } + if(fromTestRoot && !foundElements.isEmpty()) { + usedFilters.add(JavaWhereUsedFilters.TESTFILE.getKey()); } } + Collection result = new ArrayList(); if (element.getKind() == ElementKind.METHOD && isFindOverridingMethods()) { FindOverridingVisitor override = new FindOverridingVisitor(compiler); override.scan(compiler.getCompilationUnit(), element); @@ -462,13 +509,19 @@ result.addAll(subtypes.getUsages()); } for (TreePath tree : result) { - elements.add(refactoring, WhereUsedElement.create(compiler, tree)); + elements.add(refactoring, WhereUsedElement.create(compiler, tree, fromTestRoot, inImport)); + } + if(fromTestRoot && !result.isEmpty()) { + usedFilters.add(JavaWhereUsedFilters.TESTFILE.getKey()); + } + if(inImport.get()) { + usedFilters.add(JavaWhereUsedFilters.IMPORT.getKey()); } fireProgressListenerStep(); } } - private static class FileComparator implements Comparator { + private static class FileComparator implements Comparator { @Override public int compare(FileObject o1, FileObject o2) { diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/resources/found_item_comment.png b/refactoring.java/src/org/netbeans/modules/refactoring/java/resources/found_item_comment.png new file mode 100644 index 0000000000000000000000000000000000000000..743769988b41c7d9bcb5ea77dea8b85314a6356c GIT binary patch literal 410 zc$@*60cHM)P)pF8gxZibW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE-^4L^m3s9009^#AWuGyZR$UIoJV4Kni8`@i?{^8YZ} z#NXim%L{A%|9P+rjDPMb`@g!cAGuu1-G2comUKs7M+S!VC(K#9UIO`?1s;*b z3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**M!Iz?iKvmy7 zT^vI!{F4(TSS_3vY~LPU@a@gbrT_l@`yak8=B960z}Xpwi?5tL`}Y6p@b&-P-Q51g z?=LxbGdFnkfBjY6fB6?RRwy|($Hv6`leew<^8e%G;&ei*Z$Y%X}3HU|J(P!+FRJec!|oz=l{Do)qujDte5Au zK2&h-;JUMXfrg)_=g;}lk9RNGYw)Z-amU?y0p24mybP=}y1KdyjnpJM7IPJ}F)(C5 W+>{jK%rX-g0t}w6elF{r5}E)KT&1}H diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/resources/found_item_read.png b/refactoring.java/src/org/netbeans/modules/refactoring/java/resources/found_item_read.png new file mode 100644 index 0000000000000000000000000000000000000000..4f065b19dee246156538e6365d1ae7ef7345c91e GIT binary patch literal 374 zc%17D@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2comUKs7M+S!VC(K#9UIO`?1s;*b z3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**M!Iz?iKvkbS zT^vI!{F4(T<}Ij84QTQ=e_y}fZ{PovpBqZH`8QQ_U;lso{=C2J7f)CuHffy*$ZcYa zeq!|ZeoZ~ZX zZ|=XIDe(^5&0Dv)*p}X&rd475XZrVq9XA6dKL5Wl<;H(?GvA-}h1Ycq{_R}-=KrgG zLVq5z8gaacNmjV_>eR>I|9_uh;o%WdmoPJ6-Mf_YfBYBgfB$!`73g!UnP8#W=JQ5} z=l}ntrj!5YM+Y4=>EJhEseiEO_JueJW5JI9;%&Eq&R4LzxK1L}W3B)LL*MLWNz;?g R{RR4-!PC{xWt~$(69D0;qb~pe diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/resources/found_item_readwrite.png b/refactoring.java/src/org/netbeans/modules/refactoring/java/resources/found_item_readwrite.png new file mode 100644 index 0000000000000000000000000000000000000000..704c7a305336ccbb7afa143de4e03a03da0ba79a GIT binary patch literal 432 zc$@*S0Z;ykP)pF8gxZibW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE-^4L^m3s900AsXL_t(IPh(&ho}hkZP=Zf4?|;8ezW-$TuynRhf_n?s|JUE1 z{Rh#=IAMY+$WU#923zDZ{oj0N0S12f@#cS!-1O?S|J$ZkPsD3bOtDj`dMLyHjZbI% z2hqsbI!XNhh2?esH&3quVcZ7U+S&>RrQ4P&cr*N$_h7i$Q5f_8*p%4+CpJy_e{t6= zF#fr#?EmV%68zx>G6?8gV<6V*%JKVumW|>6d3J{X57Qn0|2{JTj6vdfy>wQB@&7Sa z1{D1F)qODkYLxN+7yXX^drK4W8?ust;s5uwtr+<4{qz4pa-D_YAVcs6ZZ#vr(XxLE`YmoNr~QlJ-G2comUKs7M+S!VC(K#9UIO`?1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)W0|Vo9 zPZ!4!3;*OF|Nq-FFP)LZ?7+8RpCXUI0adld8LL*Mi>=E|+wXV%(odldwvUdF6e=eu zJyCFY%Anf(s95LmChdRU&qsXt|Dkj9|M=$tjWcIYUvu-% z|GQtC|L?E+|F!<`Ip&04zt7+Q4>rhZj^4*E550GDY@YvLzTW=-{W(wm|NlAl@c;X@ zzxa;LE`P(?-TcJyRe{taF_Hb{&;LFCAHVPSr~fCH9{!*2!}sg|muId2&DGfc?6=hZ z_kT0{_WuyoN$+Le}1{apZyU^pZ|YbHt&D5`MSUSlh{`t z&g^L2{C=YE?!G_uUtgL_+}~U9=Kt208~?w*yMsrZ`DF8zhbAufFYVl#{i>!wp@~Vv z<*-2yRO6mq>l){^KEA2?x;!z1?Koe+oeRg_GI+@DD><}mMW(=_^oJ!2Hm3jjFFgJI zpZf0~xo1GaF2O4C@a!86Tss;yFSE^Xs&3T$s$p<+AM-^8I}aI^e)EkJXU|?apYdcV aCqs{wVB5qXL0w=(GI+ZBxvX-G2comUKs7M+S!VC(K#9UIO`?1s;*b z3=DjSL74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**M!Iz?iKvh>g zT^vI!{F4(TSikT#<_51;XZrZxwRGcuN0Sc!N!(`s>t}Hs`CmVO*2n+%&o57qI>O#5 zoO|KbzDfV>%cuVR|2aWirum0L;UeCbr#}9!pVs^Ee`Q(QfBws||Nq+=Gxj(>s^GQM zKKSFmgf=tRzu&LyX4IRW`tiTJ?)d+`OF4h=MxH$I;s5VjVLX4n|NHr0VduF+1rrp1 z99}YO;=@c~FVdQ&MBb@0OqHVi2wiq diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/spi/JavaWhereUsedFilters.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/spi/JavaWhereUsedFilters.java new file mode 100644 --- /dev/null +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/spi/JavaWhereUsedFilters.java @@ -0,0 +1,80 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2012 Oracle and/or its affiliates. All rights reserved. + * + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. + * Other names may be trademarks of their respective owners. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2012 Sun Microsystems, Inc. + */ +package org.netbeans.modules.refactoring.java.spi; + +/** + * Filters used by Java Find Usages plugins. + * + * @author Ralph Benjamin Ruijs + * @since 1.39 + */ +public enum JavaWhereUsedFilters { + + IMPORT("filter-import"), + COMMENT("filter-comment"), + TESTFILE("filter-testfile"); + private final String key; + + private JavaWhereUsedFilters(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + + public static enum ReadWrite { + + READ("filter-read"), + WRITE("filter-write"), + READ_WRITE("filter-readwrite"); + private final String key; + + private ReadWrite(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + } +} \ No newline at end of file diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/ElementGripFactory.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/ElementGripFactory.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/ElementGripFactory.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/ElementGripFactory.java @@ -63,6 +63,7 @@ private static ElementGripFactory instance; private final Map map = new WeakHashMap(); + private final Map testFiles = new WeakHashMap(); /** * Creates a new instance of ElementGripFactory @@ -97,6 +98,14 @@ Interval start = map.get(el.getFileObject()); return start.getParent(el); } + + public void put(FileObject parentFile, Boolean inTestfile) { + testFiles.put(parentFile, inTestfile); + } + + public Boolean inTestFile(FileObject parentFile) { + return testFiles.get(parentFile); + } public void put(FileObject parentFile, TreePath tp, CompilationInfo info) { Interval root = map.get(parentFile); diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/FileTreeElement.java @@ -44,6 +44,7 @@ package org.netbeans.modules.refactoring.java.ui.tree; +import java.awt.Image; import java.beans.BeanInfo; import javax.swing.Icon; import javax.swing.ImageIcon; @@ -54,6 +55,7 @@ import org.openide.filesystems.FileObject; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; +import org.openide.util.ImageUtilities; /** * @@ -80,7 +82,14 @@ @Override public Icon getIcon() { try { - return new ImageIcon(DataObject.find(fo).getNodeDelegate().getIcon(BeanInfo.ICON_COLOR_16x16)); + ImageIcon imageIcon = new ImageIcon(DataObject.find(fo).getNodeDelegate().getIcon(BeanInfo.ICON_COLOR_16x16)); + Boolean inTestFile = ElementGripFactory.getDefault().inTestFile(fo); + if(Boolean.TRUE == inTestFile) { + Image mergeImages = ImageUtilities.mergeImages(imageIcon.getImage(), + ImageUtilities.loadImageIcon("org/netbeans/modules/refactoring/java/resources/found_item_test.png", false).getImage(), 4, 4); + imageIcon = new ImageIcon(mergeImages); + } + return imageIcon; } catch (DataObjectNotFoundException ex) { return null; } diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/RefactoringTreeElement.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/RefactoringTreeElement.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/RefactoringTreeElement.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/RefactoringTreeElement.java @@ -46,9 +46,11 @@ import com.sun.source.tree.Tree; import javax.swing.Icon; +import javax.swing.ImageIcon; import org.netbeans.modules.refactoring.api.RefactoringElement; import org.netbeans.modules.refactoring.spi.ui.TreeElement; import org.netbeans.modules.refactoring.spi.ui.TreeElementFactory; +import org.openide.util.Lookup; /** * @@ -59,11 +61,14 @@ private RefactoringElement refactoringElement; private ElementGrip thisFeature; private ElementGrip parent; + private Icon icon; RefactoringTreeElement(RefactoringElement element) { + final Lookup lookup = element.getLookup(); this.refactoringElement = element; - thisFeature = getFeature(element.getLookup().lookup(ElementGrip.class)); + thisFeature = getFeature(lookup.lookup(ElementGrip.class)); parent = thisFeature; + icon = lookup.lookup(Icon.class); } @Override @@ -84,7 +89,7 @@ @Override public Icon getIcon() { - return null; + return icon; } @Override diff --git a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/TreeElementFactoryImpl.java b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/TreeElementFactoryImpl.java --- a/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/TreeElementFactoryImpl.java +++ b/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/tree/TreeElementFactoryImpl.java @@ -98,9 +98,10 @@ else if (o instanceof Project) { result = new ProjectTreeElement((Project) o); } else if (o instanceof RefactoringElement) { - ElementGrip grip = ((RefactoringElement) o).getLookup().lookup(ElementGrip.class); + RefactoringElement refactoringElement = (RefactoringElement) o; + ElementGrip grip = (refactoringElement).getLookup().lookup(ElementGrip.class); if (grip!=null) { - result = new RefactoringTreeElement((RefactoringElement) o); + result = new RefactoringTreeElement(refactoringElement); } } if (result != null) { diff --git a/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/FindUsagesTest.java b/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/FindUsagesTest.java --- a/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/FindUsagesTest.java +++ b/refactoring.java/test/unit/src/org/netbeans/modules/refactoring/java/test/FindUsagesTest.java @@ -390,6 +390,7 @@ wuq[0].fastCheckParameters(); wuq[0].checkParameters(); wuq[0].prepare(rs); + rs.finished(); rs.doRefactoring(true); Collection elems = rs.getRefactoringElements(); @@ -414,8 +415,8 @@ } public static Test suite() throws InterruptedException { - return NbModuleSuite.create(NbModuleSuite.createConfiguration(FindUsagesTest.class) + return NbModuleSuite.createConfiguration(FindUsagesTest.class) .clusters(".*").enableModules(".*") - .gui(false)); + .gui(false).suite(); } }