Skip to content

Commit 6cb35d6

Browse files
committed
fix: remove jvm-specific imports
ref: sourceplusplus/sourceplusplus#928
1 parent 9a0ab5f commit 6cb35d6

File tree

6 files changed

+56
-10
lines changed

6 files changed

+56
-10
lines changed

common/src/main/kotlin/spp/jetbrains/artifact/service/ArtifactTypeService.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ object ArtifactTypeService : AbstractSourceMarkerService<IArtifactTypeService>()
3030
return getService(element.language).getNameIdentifier(element)
3131
}
3232

33+
override fun getAnnotations(element: PsiElement): List<PsiElement> {
34+
return getService(element.language).getAnnotations(element)
35+
}
36+
37+
override fun getAnnotationOwnerIfAnnotation(element: PsiElement): PsiElement? {
38+
return getService(element.language).getAnnotationOwnerIfAnnotation(element)
39+
}
40+
3341
override fun getAnnotationOwnerIfAnnotation(element: PsiElement, line: Int): PsiElement? {
3442
return getService(element.language).getAnnotationOwnerIfAnnotation(element, line)
3543
}

common/src/main/kotlin/spp/jetbrains/artifact/service/define/IArtifactTypeService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ interface IArtifactTypeService : ISourceMarkerService {
2727
* Necessary because Groovy uses [LightIdentifier] for the name identifier.
2828
*/
2929
fun getNameIdentifier(element: PsiElement): PsiElement = element
30+
fun getAnnotations(element: PsiElement): List<PsiElement>
31+
fun getAnnotationOwnerIfAnnotation(element: PsiElement): PsiElement?
3032
fun getAnnotationOwnerIfAnnotation(element: PsiElement, line: Int): PsiElement?
3133
fun isComment(element: PsiElement): Boolean
3234
fun getType(element: PsiElement): ArtifactType?

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ import spp.protocol.artifact.ArtifactType
3131
*/
3232
class JavascriptArtifactTypeService : IArtifactTypeService {
3333

34+
override fun getAnnotations(element: PsiElement): List<PsiElement> {
35+
return emptyList() //todo: implement
36+
}
37+
38+
override fun getAnnotationOwnerIfAnnotation(element: PsiElement): PsiElement? {
39+
return null //todo: implement
40+
}
41+
3442
override fun getAnnotationOwnerIfAnnotation(element: PsiElement, line: Int): PsiElement? {
3543
return null //todo: implement
3644
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@ class JVMArtifactTypeService : IArtifactTypeService {
4545
} else element
4646
}
4747

48+
override fun getAnnotations(element: PsiElement): List<PsiElement> {
49+
return (element as? PsiModifierListOwner)?.annotations?.toList() ?: emptyList()
50+
}
51+
52+
override fun getAnnotationOwnerIfAnnotation(element: PsiElement): PsiElement? {
53+
if (element is PsiAnnotation) {
54+
if (element.owner is PsiModifierList) {
55+
return (element.owner as PsiModifierList).parent
56+
}
57+
}
58+
return null
59+
}
60+
4861
override fun getAnnotationOwnerIfAnnotation(element: PsiElement, line: Int): PsiElement? {
4962
val annotation = element.parentOfType<PsiAnnotation>()
5063
if (annotation != null && getLineNumber(annotation) == line) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ import spp.protocol.artifact.ArtifactType
3232
*/
3333
class PythonArtifactTypeService : IArtifactTypeService {
3434

35+
override fun getAnnotations(element: PsiElement): List<PsiElement> {
36+
return emptyList() //todo: implement
37+
}
38+
39+
override fun getAnnotationOwnerIfAnnotation(element: PsiElement): PsiElement? {
40+
if (element is PyDecorator) {
41+
return element.target
42+
}
43+
return null
44+
}
45+
3546
override fun getAnnotationOwnerIfAnnotation(element: PsiElement, line: Int): PsiElement? {
3647
if (element is PyDecorator && getLineNumber(element) == line) {
3748
return element.target

marker/src/main/kotlin/spp/jetbrains/marker/plugin/SourceLineMarkerProvider.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ package spp.jetbrains.marker.plugin
1919
import com.intellij.codeInsight.daemon.GutterIconNavigationHandler
2020
import com.intellij.codeInsight.daemon.LineMarkerInfo
2121
import com.intellij.codeInsight.daemon.LineMarkerProviderDescriptor
22-
import com.intellij.psi.*
22+
import com.intellij.psi.PsiElement
23+
import com.intellij.psi.PsiNameIdentifierOwner
2324
import com.intellij.util.Function
25+
import spp.jetbrains.artifact.service.ArtifactTypeService
2426
import spp.jetbrains.marker.SourceMarker
2527
import spp.jetbrains.marker.service.ArtifactMarkService
28+
import spp.jetbrains.marker.source.SourceFileMarker
2629
import spp.jetbrains.marker.source.mark.gutter.GutterMark
2730

2831
/**
@@ -34,19 +37,20 @@ import spp.jetbrains.marker.source.mark.gutter.GutterMark
3437
class SourceLineMarkerProvider : LineMarkerProviderDescriptor() {
3538

3639
override fun getLineMarkerInfo(element: PsiElement): LineMarkerInfo<PsiElement>? {
37-
if (element is PsiAnnotation && element.owner is PsiModifierList) {
38-
val owner = element.owner as PsiModifierList
39-
if (owner.parent is PsiNameIdentifierOwner) {
40-
val gutterMark = (owner.parent as PsiNameIdentifierOwner).nameIdentifier
41-
?.getUserData(GutterMark.KEY)
42-
if (gutterMark?.configuration?.preferShowOnAnnotations == true) {
43-
return getLineMarkerInfo(gutterMark, element)
44-
}
40+
if (!SourceFileMarker.isFileSupported(element.containingFile)) {
41+
return null //not a supported file type
42+
}
43+
44+
val annotationOwner = ArtifactTypeService.getAnnotationOwnerIfAnnotation(element)
45+
if (annotationOwner is PsiNameIdentifierOwner) {
46+
val gutterMark = annotationOwner.nameIdentifier?.getUserData(GutterMark.KEY)
47+
if (gutterMark?.configuration?.preferShowOnAnnotations == true) {
48+
return getLineMarkerInfo(gutterMark, element)
4549
}
4650
}
4751

4852
val gutterMark = element.getUserData(GutterMark.KEY) ?: return null
49-
val hasAnnotations = (gutterMark.getPsiElement() as? PsiModifierListOwner)?.annotations?.isNotEmpty() == true
53+
val hasAnnotations = ArtifactTypeService.getAnnotations(gutterMark.getPsiElement()).isNotEmpty()
5054
return if (hasAnnotations && gutterMark.configuration.preferShowOnAnnotations) {
5155
null
5256
} else {

0 commit comments

Comments
 (0)