File tree Expand file tree Collapse file tree 6 files changed +38
-0
lines changed
core/src/main/kotlin/spp/jetbrains/artifact/service
js-marker/src/main/kotlin/spp/jetbrains/marker/js/service
jvm-marker/src/main/kotlin/spp/jetbrains/marker/jvm/service
py-marker/src/main/kotlin/spp/jetbrains/marker/py/service Expand file tree Collapse file tree 6 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -35,6 +35,10 @@ import spp.protocol.artifact.ArtifactType
3535@Suppress(" MemberVisibilityCanBePrivate" , " TooManyFunctions" ) // public API
3636object 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+
121129fun PsiElement.getFunctions (includeInnerClasses : Boolean = false): List <PsiNamedElement > {
122130 return ArtifactScopeService .getService(language).getFunctions(this , includeInnerClasses)
123131}
Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ import com.intellij.psi.PsiNamedElement
3131@Suppress(" TooManyFunctions" ) // public API
3232interface 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 >
Original file line number Diff line number Diff line change @@ -49,6 +49,11 @@ import spp.jetbrains.marker.SourceMarkerUtils
4949@Suppress(" TooManyFunctions" ) // public API
5050class 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()
Original file line number Diff line number Diff line change @@ -57,6 +57,13 @@ import spp.jetbrains.marker.SourceMarkerUtils.doOnReadThread
5757@Suppress(" TooManyFunctions" ) // public API
5858class 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()
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -49,6 +49,11 @@ import spp.jetbrains.marker.SourceMarkerUtils
4949@Suppress(" TooManyFunctions" ) // public API
5050class 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()
You can’t perform that action at this time.
0 commit comments