Lines 56-61
Link Here
|
56 |
import javax.lang.model.element.ExecutableElement; |
56 |
import javax.lang.model.element.ExecutableElement; |
57 |
import javax.lang.model.element.Modifier; |
57 |
import javax.lang.model.element.Modifier; |
58 |
import javax.lang.model.element.TypeElement; |
58 |
import javax.lang.model.element.TypeElement; |
|
|
59 |
import org.netbeans.api.annotations.common.NonNull; |
59 |
import org.netbeans.api.fileinfo.NonRecursiveFolder; |
60 |
import org.netbeans.api.fileinfo.NonRecursiveFolder; |
60 |
import org.netbeans.api.java.classpath.ClassPath; |
61 |
import org.netbeans.api.java.classpath.ClassPath; |
61 |
import org.netbeans.api.java.platform.JavaPlatform; |
62 |
import org.netbeans.api.java.platform.JavaPlatform; |
Lines 296-312
Link Here
|
296 |
} |
297 |
} |
297 |
} else if (el.getKind().isClass() || el.getKind().isInterface()) { |
298 |
} else if (el.getKind().isClass() || el.getKind().isInterface()) { |
298 |
if (isFindSubclasses || isFindDirectSubclassesOnly) { |
299 |
if (isFindSubclasses || isFindDirectSubclassesOnly) { |
299 |
EnumSet searchKind = EnumSet.of(ClassIndex.SearchKind.IMPLEMENTORS); |
|
|
300 |
if (isFindDirectSubclassesOnly) { |
300 |
if (isFindDirectSubclassesOnly) { |
|
|
301 |
EnumSet searchKind = EnumSet.of(ClassIndex.SearchKind.IMPLEMENTORS); |
302 |
if (el.getKind() == ElementKind.INTERFACE) { |
303 |
searchKind.add(ClassIndex.SearchKind.FUNCTIONAL_IMPLEMENTORS); |
304 |
} |
301 |
//get direct implementors from index |
305 |
//get direct implementors from index |
302 |
sourceSet.addAll(idx.getResources(ElementHandle.create((TypeElement) el), searchKind, searchScopeType, resourceType)); |
306 |
sourceSet.addAll(idx.getResources(ElementHandle.create((TypeElement) el), searchKind, searchScopeType, resourceType)); |
303 |
} else { |
307 |
} else { |
304 |
Set<?> implementorsAsHandles = RefactoringUtils.getImplementorsAsHandles(idx, cpInfo, (TypeElement)el, cancel); |
308 |
Set<ElementHandle<TypeElement>> implementorsAsHandles = RefactoringUtils.getImplementorsAsHandles(idx, cpInfo, (TypeElement)el, cancel); |
305 |
if (cancel != null && cancel.get()) { |
309 |
if (cancel != null && cancel.get()) { |
306 |
sourceSet.clear(); |
310 |
sourceSet.clear(); |
307 |
return; |
311 |
return; |
308 |
} |
312 |
} |
309 |
sourceSet.addAll(SourceUtilsEx.getFiles((Collection<ElementHandle<? extends Element>>) implementorsAsHandles, cpInfo, cancel)); |
313 |
sourceSet.addAll(SourceUtilsEx.getFiles((Collection<ElementHandle<? extends Element>>)(Collection<?>)implementorsAsHandles, cpInfo, cancel)); |
|
|
314 |
if (el.getKind() == ElementKind.INTERFACE) { |
315 |
sourceSet.addAll(getFunctionalSubtypes( |
316 |
ElementHandle.create((TypeElement)el), |
317 |
implementorsAsHandles, |
318 |
cpInfo, |
319 |
searchScopeType)); |
320 |
} |
310 |
} |
321 |
} |
311 |
} else { |
322 |
} else { |
312 |
//get type references from index |
323 |
//get type references from index |
Lines 550-555
Link Here
|
550 |
} |
561 |
} |
551 |
} |
562 |
} |
552 |
|
563 |
|
|
|
564 |
@NonNull |
565 |
private static Collection<? extends FileObject> getFunctionalSubtypes( |
566 |
@NonNull final ElementHandle<TypeElement> base, |
567 |
@NonNull final Collection<ElementHandle<TypeElement>> subtypes, |
568 |
@NonNull final ClasspathInfo cpInfo, |
569 |
@NonNull final Set<ClassIndex.SearchScopeType> scope) { |
570 |
assert base.getKind() == ElementKind.INTERFACE; |
571 |
final ClassIndex index = cpInfo.getClassIndex(); |
572 |
final Set<ClassIndex.SearchKind> fncKind = EnumSet.of(ClassIndex.SearchKind.FUNCTIONAL_IMPLEMENTORS); |
573 |
final Set<FileObject> result = new HashSet<>(); |
574 |
result.addAll(index.getResources(base, fncKind, scope)); |
575 |
for (ElementHandle<TypeElement> e : subtypes) { |
576 |
if (e.getKind() == ElementKind.INTERFACE) { |
577 |
result.addAll(index.getResources(e, fncKind, scope)); |
578 |
} |
579 |
} |
580 |
return result; |
581 |
} |
582 |
|
553 |
private class FindTask implements CancellableTask<CompilationController> { |
583 |
private class FindTask implements CancellableTask<CompilationController> { |
554 |
|
584 |
|
555 |
private final RefactoringElementsBag elements; |
585 |
private final RefactoringElementsBag elements; |