Lines 167-172
Link Here
|
167 |
isFindSubclasses(), |
167 |
isFindSubclasses(), |
168 |
isFindDirectSubclassesOnly(), |
168 |
isFindDirectSubclassesOnly(), |
169 |
isFindOverridingMethods(), |
169 |
isFindOverridingMethods(), |
|
|
170 |
isSearchOverloadedMethods(), |
170 |
isFindUsages(), |
171 |
isFindUsages(), |
171 |
null, cancelRequested)); |
172 |
null, cancelRequested)); |
172 |
} |
173 |
} |
Lines 197-202
Link Here
|
197 |
isFindSubclasses(), |
198 |
isFindSubclasses(), |
198 |
isFindDirectSubclassesOnly(), |
199 |
isFindDirectSubclassesOnly(), |
199 |
isFindOverridingMethods(), |
200 |
isFindOverridingMethods(), |
|
|
201 |
isSearchOverloadedMethods(), |
200 |
isFindUsages(), packages, cancelRequested)); |
202 |
isFindUsages(), packages, cancelRequested)); |
201 |
} |
203 |
} |
202 |
} |
204 |
} |
Lines 208-213
Link Here
|
208 |
isFindSubclasses(), |
210 |
isFindSubclasses(), |
209 |
isFindDirectSubclassesOnly(), |
211 |
isFindDirectSubclassesOnly(), |
210 |
isFindOverridingMethods(), |
212 |
isFindOverridingMethods(), |
|
|
213 |
isSearchOverloadedMethods(), |
211 |
isFindUsages(), |
214 |
isFindUsages(), |
212 |
null, |
215 |
null, |
213 |
cancelRequested); |
216 |
cancelRequested); |
Lines 218-225
Link Here
|
218 |
public static Set<FileObject> getRelevantFiles( |
221 |
public static Set<FileObject> getRelevantFiles( |
219 |
final TreePathHandle tph, final ClasspathInfo cpInfo, |
222 |
final TreePathHandle tph, final ClasspathInfo cpInfo, |
220 |
final boolean isFindSubclasses, final boolean isFindDirectSubclassesOnly, |
223 |
final boolean isFindSubclasses, final boolean isFindDirectSubclassesOnly, |
221 |
final boolean isFindOverridingMethods, final boolean isFindUsages, |
224 |
final boolean isFindOverridingMethods, final boolean isSearchOverloadedMethods, |
222 |
final Set<NonRecursiveFolder> folders, final AtomicBoolean cancel) { |
225 |
final boolean isFindUsages, final Set<NonRecursiveFolder> folders, |
|
|
226 |
final AtomicBoolean cancel) { |
223 |
final ClassIndex idx = cpInfo.getClassIndex(); |
227 |
final ClassIndex idx = cpInfo.getClassIndex(); |
224 |
final Set<FileObject> set = new TreeSet<FileObject>(new FileComparator()); |
228 |
final Set<FileObject> set = new TreeSet<FileObject>(new FileComparator()); |
225 |
final Set<NonRecursiveFolder> packages = (folders == null)? Collections.<NonRecursiveFolder>emptySet() : folders; |
229 |
final Set<NonRecursiveFolder> packages = (folders == null)? Collections.<NonRecursiveFolder>emptySet() : folders; |
Lines 289-320
Link Here
|
289 |
//get type references from index |
293 |
//get type references from index |
290 |
set.addAll(idx.getResources(ElementHandle.create((TypeElement) el), EnumSet.of(ClassIndex.SearchKind.TYPE_REFERENCES, ClassIndex.SearchKind.IMPLEMENTORS), searchScopeType)); |
294 |
set.addAll(idx.getResources(ElementHandle.create((TypeElement) el), EnumSet.of(ClassIndex.SearchKind.TYPE_REFERENCES, ClassIndex.SearchKind.IMPLEMENTORS), searchScopeType)); |
291 |
} |
295 |
} |
292 |
} else if (el.getKind() == ElementKind.METHOD && isFindOverridingMethods) { |
296 |
} else if (el.getKind() == ElementKind.METHOD) { |
293 |
//Find overriding methods |
297 |
ExecutableElement method = (ExecutableElement) el; |
294 |
TypeElement type = (TypeElement) el.getEnclosingElement(); |
298 |
List<ExecutableElement> methods = new LinkedList<ExecutableElement>(); |
295 |
set.addAll(getImplementorsRecursive(idx, cpInfo, type, cancel)); |
299 |
methods.add(method); |
296 |
} |
300 |
TypeElement enclosingTypeElement = info.getElementUtilities().enclosingTypeElement(method); |
297 |
if (el.getKind() == ElementKind.METHOD && isFindUsages) { |
301 |
if(isSearchOverloadedMethods) { |
298 |
//get method references for method and for all it's overriders |
302 |
for (Element overloaded : enclosingTypeElement.getEnclosedElements()) { |
299 |
Set<ElementHandle<TypeElement>> s = RefactoringUtils.getImplementorsAsHandles(idx, cpInfo, (TypeElement) el.getEnclosingElement(), cancel); |
303 |
if(method != overloaded && |
300 |
for (ElementHandle<TypeElement> eh : s) { |
304 |
method.getKind() == overloaded.getKind() && |
301 |
if (cancel != null && cancel.get()) { |
305 |
((ExecutableElement)overloaded).getSimpleName().contentEquals(method.getSimpleName())) { |
302 |
set.clear(); |
306 |
methods.add((ExecutableElement)overloaded); |
303 |
return; |
307 |
} |
304 |
} |
308 |
} |
305 |
TypeElement te = eh.resolve(info); |
309 |
} |
306 |
if (te == null) { |
310 |
if (isFindOverridingMethods) { |
307 |
continue; |
311 |
//Find overriding methods |
308 |
} |
312 |
set.addAll(getImplementorsRecursive(idx, cpInfo, enclosingTypeElement, cancel)); |
309 |
for (Element e : te.getEnclosedElements()) { |
313 |
} |
310 |
if (e.getKind() == ElementKind.METHOD || e.getKind() == ElementKind.CONSTRUCTOR) { |
314 |
if (isFindUsages) { |
311 |
if (info.getElements().overrides((ExecutableElement) e, (ExecutableElement) el, te)) { |
315 |
//get method references for method and for all it's overriders |
312 |
set.addAll(idx.getResources(ElementHandle.create(te), EnumSet.of(ClassIndex.SearchKind.METHOD_REFERENCES), searchScopeType)); |
316 |
Set<ElementHandle<TypeElement>> s = RefactoringUtils.getImplementorsAsHandles(idx, cpInfo, (TypeElement) method.getEnclosingElement(), cancel); |
|
|
317 |
for (ElementHandle<TypeElement> eh : s) { |
318 |
if (cancel != null && cancel.get()) { |
319 |
set.clear(); |
320 |
return; |
321 |
} |
322 |
TypeElement te = eh.resolve(info); |
323 |
if (te == null) { |
324 |
continue; |
325 |
} |
326 |
for (Element e : te.getEnclosedElements()) { |
327 |
if (e.getKind() == ElementKind.METHOD || e.getKind() == ElementKind.CONSTRUCTOR) { |
328 |
for (ExecutableElement executableElement : methods) { |
329 |
if (info.getElements().overrides((ExecutableElement) e, executableElement, te)) { |
330 |
set.addAll(idx.getResources(ElementHandle.create(te), EnumSet.of(ClassIndex.SearchKind.METHOD_REFERENCES), searchScopeType)); |
331 |
} |
332 |
} |
313 |
} |
333 |
} |
314 |
} |
334 |
} |
315 |
} |
335 |
} |
|
|
336 |
set.addAll(idx.getResources(ElementHandle.create((TypeElement) el.getEnclosingElement()), EnumSet.of(ClassIndex.SearchKind.METHOD_REFERENCES), searchScopeType)); //????? |
316 |
} |
337 |
} |
317 |
set.addAll(idx.getResources(ElementHandle.create((TypeElement) el.getEnclosingElement()), EnumSet.of(ClassIndex.SearchKind.METHOD_REFERENCES), searchScopeType)); //????? |
|
|
318 |
} else if (el.getKind() == ElementKind.CONSTRUCTOR) { |
338 |
} else if (el.getKind() == ElementKind.CONSTRUCTOR) { |
319 |
set.addAll(idx.getResources(ElementHandle.create((TypeElement) el.getEnclosingElement()), EnumSet.of(ClassIndex.SearchKind.TYPE_REFERENCES, ClassIndex.SearchKind.IMPLEMENTORS), searchScopeType)); |
339 |
set.addAll(idx.getResources(ElementHandle.create((TypeElement) el.getEnclosingElement()), EnumSet.of(ClassIndex.SearchKind.TYPE_REFERENCES, ClassIndex.SearchKind.IMPLEMENTORS), searchScopeType)); |
320 |
} |
340 |
} |
Lines 434-439
Link Here
|
434 |
private boolean isFindOverridingMethods() { |
454 |
private boolean isFindOverridingMethods() { |
435 |
return refactoring.getBooleanValue(WhereUsedQueryConstants.FIND_OVERRIDING_METHODS); |
455 |
return refactoring.getBooleanValue(WhereUsedQueryConstants.FIND_OVERRIDING_METHODS); |
436 |
} |
456 |
} |
|
|
457 |
private boolean isSearchOverloadedMethods() { |
458 |
return refactoring.getBooleanValue(WhereUsedQueryConstants.SEARCH_OVERLOADED); |
459 |
} |
437 |
private boolean isSearchFromBaseClass() { |
460 |
private boolean isSearchFromBaseClass() { |
438 |
return refactoring.getBooleanValue(WhereUsedQueryConstants.SEARCH_FROM_BASECLASS); |
461 |
return refactoring.getBooleanValue(WhereUsedQueryConstants.SEARCH_FROM_BASECLASS); |
439 |
} |
462 |
} |
Lines 505-511
Link Here
|
505 |
final boolean fromTestRoot = RefactoringUtils.isFromTestRoot(compiler.getFileObject(), compiler.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.SOURCE)); |
528 |
final boolean fromTestRoot = RefactoringUtils.isFromTestRoot(compiler.getFileObject(), compiler.getClasspathInfo().getClassPath(ClasspathInfo.PathKind.SOURCE)); |
506 |
AtomicBoolean inImport = new AtomicBoolean(); |
529 |
AtomicBoolean inImport = new AtomicBoolean(); |
507 |
if (isFindUsages()) { |
530 |
if (isFindUsages()) { |
508 |
FindUsagesVisitor findVisitor = new FindUsagesVisitor(compiler, cancelled, refactoring.getBooleanValue(WhereUsedQuery.SEARCH_IN_COMMENTS), fromTestRoot, inImport); |
531 |
FindUsagesVisitor findVisitor = new FindUsagesVisitor(compiler, cancelled, refactoring.getBooleanValue(WhereUsedQuery.SEARCH_IN_COMMENTS), isSearchOverloadedMethods(), fromTestRoot, inImport); |
509 |
findVisitor.scan(compiler.getCompilationUnit(), element); |
532 |
findVisitor.scan(compiler.getCompilationUnit(), element); |
510 |
Collection<WhereUsedElement> foundElements = findVisitor.getElements(); |
533 |
Collection<WhereUsedElement> foundElements = findVisitor.getElements(); |
511 |
for (WhereUsedElement el : foundElements) { |
534 |
for (WhereUsedElement el : foundElements) { |