|
1 | 1 | package cc.unitmesh.idea.util
|
2 | 2 |
|
| 3 | +import com.intellij.find.FindManager |
| 4 | +import com.intellij.find.findUsages.JavaClassFindUsagesOptions |
| 5 | +import com.intellij.find.impl.FindManagerImpl |
3 | 6 | import com.intellij.openapi.application.runReadAction
|
4 | 7 | import com.intellij.openapi.progress.ProgressManager
|
5 | 8 | import com.intellij.openapi.progress.util.ProgressIndicatorBase
|
6 | 9 | import com.intellij.openapi.project.Project
|
| 10 | +import com.intellij.openapi.util.text.StringUtil |
7 | 11 | import com.intellij.psi.JavaRecursiveElementVisitor
|
| 12 | +import com.intellij.psi.PsiClass |
8 | 13 | import com.intellij.psi.PsiMethod
|
9 | 14 | import com.intellij.psi.PsiMethodCallExpression
|
10 | 15 | import com.intellij.psi.search.ProjectScope
|
11 | 16 | import com.intellij.psi.search.searches.ClassInheritorsSearch
|
12 | 17 | import com.intellij.psi.search.searches.MethodReferencesSearch
|
13 |
| -import com.intellij.psi.util.* |
14 |
| -import kotlin.collections.flatten |
| 18 | +import com.intellij.psi.util.PsiTreeUtil |
| 19 | +import com.intellij.usageView.UsageInfo |
| 20 | +import com.intellij.util.CommonProcessors |
| 21 | +import com.intellij.util.Function |
15 | 22 |
|
16 | 23 | object JavaCallHelper {
|
17 | 24 | /**
|
@@ -69,4 +76,25 @@ object JavaCallHelper {
|
69 | 76 |
|
70 | 77 | return callers.distinct()
|
71 | 78 | }
|
| 79 | + |
| 80 | + fun findCallers(project: Project, clazz: PsiClass): List<PsiMethod> { |
| 81 | + val options = JavaClassFindUsagesOptions(project) |
| 82 | + val processor = CommonProcessors.CollectProcessor<UsageInfo?>() |
| 83 | + val findUsagesManager = (FindManager.getInstance(project) as FindManagerImpl).findUsagesManager |
| 84 | + val handler = findUsagesManager.getFindUsagesHandler(clazz, true) |
| 85 | + |
| 86 | + val callers: MutableList<PsiMethod> = ArrayList() |
| 87 | + |
| 88 | + ProgressManager.getInstance().runProcess(Runnable { |
| 89 | + handler!!.processElementUsages(clazz, processor, options) |
| 90 | + |
| 91 | + val usages = processor.getResults() |
| 92 | + val text = StringUtil.join<UsageInfo?>(usages, Function { u: UsageInfo? -> u!!.element!!.text }, ",") |
| 93 | + |
| 94 | + println("Find usages: $text") |
| 95 | + }, ProgressIndicatorBase()) |
| 96 | + |
| 97 | + return callers |
| 98 | + } |
72 | 99 | }
|
| 100 | + |
0 commit comments