Skip to content

Commit 306cccf

Browse files
committed
refactor(context-builders): replace usage of JavaContextCollection with ClassContextBuilder for improved usability and consistency across language-specific context builders.
1 parent b75d7ac commit 306cccf

File tree

9 files changed

+44
-45
lines changed

9 files changed

+44
-45
lines changed

java/src/main/kotlin/cc/unitmesh/idea/context/JavaClassContextBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class JavaClassContextBuilder : ClassContextBuilder {
1818
val methods = psiElement.methods.toList()
1919

2020
val usages =
21-
if (gatherUsages) JavaContextCollection.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
21+
if (gatherUsages) ClassContextBuilder.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
2222

2323
val annotations: List<String> = psiElement.annotations.mapNotNull {
2424
it.text

java/src/main/kotlin/cc/unitmesh/idea/context/JavaContextCollection.kt

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cc.unitmesh.idea.context
22

33
import cc.unitmesh.devti.context.SimpleClassStructure
4+
import cc.unitmesh.devti.context.builder.ClassContextBuilder
45
import com.intellij.openapi.diagnostic.logger
56
import com.intellij.openapi.util.NlsSafe
67
import com.intellij.psi.*
@@ -12,20 +13,6 @@ import com.intellij.psi.search.searches.ReferencesSearch
1213

1314
object JavaContextCollection {
1415
private val logger = logger<JavaContextCollection>()
15-
fun findUsages(nameIdentifierOwner: PsiNameIdentifierOwner): List<PsiReference> {
16-
val project = nameIdentifierOwner.project
17-
val searchScope = GlobalSearchScope.allScope(project) as SearchScope
18-
19-
return when (nameIdentifierOwner) {
20-
is PsiMethod -> {
21-
MethodReferencesSearch.search(nameIdentifierOwner, searchScope, true)
22-
}
23-
24-
else -> {
25-
ReferencesSearch.search((nameIdentifierOwner as PsiElement), searchScope, true)
26-
}
27-
}.findAll().map { it as PsiReference }
28-
}
2916

3017
/**
3118
* This method takes a PsiClass object as input and builds a tree of the class and its fields, including the fields of the fields, and so on. The resulting tree is represented as a HashMap where the keys are the PsiClass objects and the values are ArrayLists of PsiField objects.
@@ -123,11 +110,13 @@ object JavaContextCollection {
123110
}
124111

125112
private fun isPopularFrameworks(qualifiedName: @NlsSafe String?): Boolean? {
126-
return qualifiedName?.startsWith("org.springframework") == true || qualifiedName?.startsWith("org.apache") == true || qualifiedName?.startsWith(
127-
"org.hibernate"
128-
) == true || qualifiedName?.startsWith("org.slf4j") == true || qualifiedName?.startsWith("org.apache") == true || qualifiedName?.startsWith(
129-
"org.junit"
130-
) == true || qualifiedName?.startsWith("org.mockito") == true
113+
return qualifiedName?.startsWith("org.springframework") == true ||
114+
qualifiedName?.startsWith("org.apache") == true ||
115+
qualifiedName?.startsWith("org.hibernate") == true ||
116+
qualifiedName?.startsWith("org.slf4j") == true ||
117+
qualifiedName?.startsWith("org.apache") == true ||
118+
qualifiedName?.startsWith("org.junit") == true ||
119+
qualifiedName?.startsWith("org.mockito") == true
131120
}
132121

133122
/**

java/src/main/kotlin/cc/unitmesh/idea/context/JavaMethodContextBuilder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cc.unitmesh.idea.context
22

33
import cc.unitmesh.devti.context.MethodContext
4+
import cc.unitmesh.devti.context.builder.ClassContextBuilder
45
import cc.unitmesh.devti.context.builder.MethodContextBuilder
56
import cc.unitmesh.idea.service.JavaTypeUtil
67
import com.intellij.psi.PsiElement
@@ -21,7 +22,7 @@ class JavaMethodContextBuilder : MethodContextBuilder {
2122
val variableContextList = parameterList.map { it }
2223

2324
val usagesList = if (gatherUsages) {
24-
JavaContextCollection.findUsages(psiElement as PsiNameIdentifierOwner)
25+
ClassContextBuilder.findUsages(psiElement as PsiNameIdentifierOwner)
2526
} else {
2627
emptyList()
2728
}

java/src/main/kotlin/cc/unitmesh/idea/context/JavaVariableContextBuilder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cc.unitmesh.idea.context
22

33
import cc.unitmesh.devti.context.VariableContext
4+
import cc.unitmesh.devti.context.builder.ClassContextBuilder
45
import cc.unitmesh.devti.context.builder.VariableContextBuilder
56
import com.intellij.psi.*
67

@@ -17,7 +18,7 @@ class JavaVariableContextBuilder : VariableContextBuilder {
1718
val containingClass = psiElement.getContainingClass()
1819

1920
val references =
20-
if (gatherUsages) JavaContextCollection.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
21+
if (gatherUsages) ClassContextBuilder.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
2122

2223
return VariableContext(
2324
psiElement,

kotlin/src/main/kotlin/cc/unitmesh/kotlin/context/KotlinClassContextBuilder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package cc.unitmesh.kotlin.context
22

33
import cc.unitmesh.devti.context.ClassContext
44
import cc.unitmesh.devti.context.builder.ClassContextBuilder
5-
import cc.unitmesh.idea.context.JavaContextCollection
65
import cc.unitmesh.kotlin.util.KotlinPsiUtil
76
import com.intellij.psi.PsiElement
87
import com.intellij.psi.PsiNameIdentifierOwner
@@ -23,7 +22,7 @@ class KotlinClassContextBuilder : ClassContextBuilder {
2322
val functions = KotlinPsiUtil.getFunctions(psiElement)
2423
val allFields = getPrimaryConstructorFields(psiElement)
2524
val usages =
26-
if (gatherUsages) JavaContextCollection.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
25+
if (gatherUsages) ClassContextBuilder.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
2726

2827
val annotations: List<String> = psiElement.annotationEntries.mapNotNull {
2928
it.text

kotlin/src/main/kotlin/cc/unitmesh/kotlin/context/KotlinMethodContextBuilder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package cc.unitmesh.kotlin.context
22

33
import cc.unitmesh.devti.context.MethodContext
4+
import cc.unitmesh.devti.context.builder.ClassContextBuilder
45
import cc.unitmesh.devti.context.builder.MethodContextBuilder
5-
import cc.unitmesh.idea.context.JavaContextCollection
66
import cc.unitmesh.kotlin.util.KotlinPsiUtil
77
import com.intellij.psi.PsiElement
88
import com.intellij.psi.PsiNameIdentifierOwner
@@ -24,7 +24,7 @@ class KotlinMethodContextBuilder : MethodContextBuilder {
2424
val displayName = psiElement.language.displayName
2525
val valueParameters = psiElement.valueParameters.mapNotNull { it.name }
2626
val usages =
27-
if (gatherUsages) JavaContextCollection.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
27+
if (gatherUsages) ClassContextBuilder.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
2828

2929
return MethodContext(
3030
psiElement,

kotlin/src/main/kotlin/cc/unitmesh/kotlin/context/KotlinVariableContextBuilder.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package cc.unitmesh.kotlin.context
22

33
import cc.unitmesh.devti.context.VariableContext
4+
import cc.unitmesh.devti.context.builder.ClassContextBuilder
45
import cc.unitmesh.devti.context.builder.VariableContextBuilder
5-
import cc.unitmesh.idea.context.JavaContextCollection
66
import com.intellij.psi.PsiElement
77
import com.intellij.psi.PsiNameIdentifierOwner
88
import com.intellij.psi.util.PsiTreeUtil
@@ -27,7 +27,7 @@ class KotlinVariableContextBuilder : VariableContextBuilder {
2727
val psiNameIdentifierOwner = psiElement as? PsiNameIdentifierOwner
2828

2929
val usages = if (gatherUsages && psiNameIdentifierOwner != null) {
30-
JavaContextCollection.findUsages(psiNameIdentifierOwner)
30+
ClassContextBuilder.findUsages(psiNameIdentifierOwner)
3131
} else {
3232
emptyList()
3333
}
@@ -43,7 +43,7 @@ class KotlinVariableContextBuilder : VariableContextBuilder {
4343
val psiNameIdentifierOwner = psiElement as? PsiNameIdentifierOwner
4444

4545
val usages = if (gatherUsages && psiNameIdentifierOwner != null) {
46-
JavaContextCollection.findUsages(psiNameIdentifierOwner)
46+
ClassContextBuilder.findUsages(psiNameIdentifierOwner)
4747
} else {
4848
emptyList()
4949
}

scala/src/main/kotlin/cc/unitmesh/scala/context/ScalaClassContextBuilder.kt

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ScalaClassContextBuilder : ClassContextBuilder {
2121
val functions = psiElement.methods.toList()
2222
val allFields = psiElement.fields.toList()
2323
val superClass = psiElement.supers.mapNotNull { it.qualifiedName }.toList()
24-
val usages = findUsages(psiElement as PsiNameIdentifierOwner)
24+
val usages = ClassContextBuilder.findUsages(psiElement as PsiNameIdentifierOwner)
2525

2626
val annotations = psiElement.annotations.mapNotNull {
2727
it.text
@@ -41,18 +41,3 @@ class ScalaClassContextBuilder : ClassContextBuilder {
4141
)
4242
}
4343
}
44-
45-
fun findUsages(nameIdentifierOwner: PsiNameIdentifierOwner): List<PsiReference> {
46-
val project = nameIdentifierOwner.project
47-
val searchScope = GlobalSearchScope.allScope(project) as SearchScope
48-
49-
return when (nameIdentifierOwner) {
50-
is PsiMethod -> {
51-
MethodReferencesSearch.search(nameIdentifierOwner, searchScope, true)
52-
}
53-
54-
else -> {
55-
ReferencesSearch.search((nameIdentifierOwner as PsiElement), searchScope, true)
56-
}
57-
}.findAll().map { it as PsiReference }
58-
}

src/main/kotlin/cc/unitmesh/devti/context/builder/ClassContextBuilder.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ package cc.unitmesh.devti.context.builder
22

33
import cc.unitmesh.devti.context.ClassContext
44
import com.intellij.psi.PsiElement
5+
import com.intellij.psi.PsiMethod
6+
import com.intellij.psi.PsiNameIdentifierOwner
7+
import com.intellij.psi.PsiReference
8+
import com.intellij.psi.search.GlobalSearchScope
9+
import com.intellij.psi.search.SearchScope
10+
import com.intellij.psi.search.searches.MethodReferencesSearch
11+
import com.intellij.psi.search.searches.ReferencesSearch
512

613
/**
714
* The ClassContextBuilder interface provides a method to retrieve the class context for a given PsiElement.
@@ -17,4 +24,21 @@ interface ClassContextBuilder {
1724
* @return the class context for the given [psiElement], or null if the class context cannot be determined
1825
*/
1926
fun getClassContext(psiElement: PsiElement, gatherUsages: Boolean): ClassContext?
27+
28+
companion object {
29+
fun findUsages(nameIdentifierOwner: PsiNameIdentifierOwner): List<PsiReference> {
30+
val project = nameIdentifierOwner.project
31+
val searchScope = GlobalSearchScope.allScope(project) as SearchScope
32+
33+
return when (nameIdentifierOwner) {
34+
is PsiMethod -> {
35+
MethodReferencesSearch.search(nameIdentifierOwner, searchScope, true)
36+
}
37+
38+
else -> {
39+
ReferencesSearch.search((nameIdentifierOwner as PsiElement), searchScope, true)
40+
}
41+
}.findAll().map { it as PsiReference }
42+
}
43+
}
2044
}

0 commit comments

Comments
 (0)