Skip to content

Commit 63fd72d

Browse files
committed
chore: get fields
1 parent 87f6b14 commit 63fd72d

File tree

6 files changed

+38
-0
lines changed

6 files changed

+38
-0
lines changed

core/src/main/kotlin/spp/jetbrains/artifact/service/ArtifactScopeService.kt

+8
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ import spp.protocol.artifact.ArtifactType
3535
@Suppress("MemberVisibilityCanBePrivate", "TooManyFunctions") // public API
3636
object ArtifactScopeService : AbstractSourceMarkerService<IArtifactScopeService>(), IArtifactScopeService {
3737

38+
override fun getFields(element: PsiElement): List<PsiElement> {
39+
return getService(element.language).getFields(element)
40+
}
41+
3842
override fun getLoops(element: PsiElement): List<PsiElement> {
3943
return getService(element.language).getLoops(element)
4044
}
@@ -118,6 +122,10 @@ object ArtifactScopeService : AbstractSourceMarkerService<IArtifactScopeService>
118122

119123
// Extensions
120124

125+
fun PsiElement.getFields(): List<PsiElement> {
126+
return ArtifactScopeService.getService(language).getFields(this)
127+
}
128+
121129
fun PsiElement.getFunctions(includeInnerClasses: Boolean = false): List<PsiNamedElement> {
122130
return ArtifactScopeService.getService(language).getFunctions(this, includeInnerClasses)
123131
}

core/src/main/kotlin/spp/jetbrains/artifact/service/define/IArtifactScopeService.kt

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.intellij.psi.PsiNamedElement
3131
@Suppress("TooManyFunctions") // public API
3232
interface IArtifactScopeService : ISourceMarkerService {
3333

34+
fun getFields(element: PsiElement): List<PsiElement>
3435
fun getLoops(element: PsiElement): List<PsiElement>
3536
fun getFunctions(element: PsiElement, includeInnerClasses: Boolean = false): List<PsiNamedElement>
3637
fun getClasses(element: PsiElement): List<PsiNamedElement>

marker/js-marker/src/main/kotlin/spp/jetbrains/marker/js/service/JavascriptArtifactScopeService.kt

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ import spp.jetbrains.marker.SourceMarkerUtils
4949
@Suppress("TooManyFunctions") // public API
5050
class JavascriptArtifactScopeService : IArtifactScopeService {
5151

52+
override fun getFields(element: PsiElement): List<PsiElement> {
53+
require(ArtifactTypeService.isJavaScript(element))
54+
return element.descendantsOfType<JSField>().toList()
55+
}
56+
5257
override fun getLoops(element: PsiElement): List<PsiElement> {
5358
require(ArtifactTypeService.isJavaScript(element))
5459
return element.descendantsOfType<JSLoopStatement>().toList()

marker/jvm-marker/src/main/kotlin/spp/jetbrains/marker/jvm/service/JVMArtifactScopeService.kt

+7
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ import spp.jetbrains.marker.SourceMarkerUtils.doOnReadThread
5757
@Suppress("TooManyFunctions") // public API
5858
class JVMArtifactScopeService : IArtifactScopeService {
5959

60+
override fun getFields(element: PsiElement): List<PsiElement> {
61+
return when {
62+
ArtifactTypeService.isKotlin(element) -> element.descendantsOfType<KtProperty>().toList()
63+
else -> element.descendantsOfType<PsiField>().toList()
64+
}
65+
}
66+
6067
override fun getLoops(element: PsiElement): List<PsiElement> {
6168
return when {
6269
ArtifactTypeService.isKotlin(element) -> element.descendantsOfType<KtLoopExpression>().toList()

marker/jvm-marker/src/main/kotlin/spp/jetbrains/marker/jvm/service/utils/JVMMarkerUtils.kt

+12
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ object JVMMarkerUtils {
5555
element is PsiAnnotation -> return getFullyQualifiedName(element)
5656
element is PsiClass -> return getFullyQualifiedName(element)
5757
element is PsiMethod -> return getFullyQualifiedName(element)
58+
element is PsiField -> return getFullyQualifiedName(element)
5859
else -> Unit
5960
}
6061

@@ -158,6 +159,17 @@ object JVMMarkerUtils {
158159
)
159160
}
160161

162+
private fun getFullyQualifiedName(psiField: PsiField): ArtifactQualifiedName {
163+
val classQualifiedName = psiField.findAnyContainingStrict(PsiClass::class.java)?.let {
164+
getFullyQualifiedName(it).identifier
165+
}
166+
return ArtifactQualifiedName(
167+
"$classQualifiedName.${psiField.name}",
168+
type = ArtifactType.EXPRESSION, //todo: ArtifactType.VARIABLE
169+
lineNumber = psiField.nameIdentifier.let { SourceMarkerUtils.getLineNumber(it) }
170+
)
171+
}
172+
161173
private fun getFullyQualifiedName(method: KtNamedFunction): ArtifactQualifiedName {
162174
val classQualifiedName = method.findAnyContainingStrict(KtClass::class.java)?.let {
163175
getFullyQualifiedName(it).identifier

marker/py-marker/src/main/kotlin/spp/jetbrains/marker/py/service/PythonArtifactScopeService.kt

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ import spp.jetbrains.marker.SourceMarkerUtils
4949
@Suppress("TooManyFunctions") // public API
5050
class PythonArtifactScopeService : IArtifactScopeService {
5151

52+
override fun getFields(element: PsiElement): List<PsiElement> {
53+
require(ArtifactTypeService.isPython(element))
54+
return element.descendantsOfType<PyTargetExpression>().toList()
55+
}
56+
5257
override fun getLoops(element: PsiElement): List<PsiElement> {
5358
require(ArtifactTypeService.isPython(element))
5459
return element.descendantsOfType<PyLoopStatement>().toList()

0 commit comments

Comments
 (0)