Skip to content

Commit 04c10fe

Browse files
committed
Some more annotators, indexing using stubs
[skip ci]
1 parent ada1ea7 commit 04c10fe

18 files changed

+352
-176
lines changed

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ qodana {
5151
}
5252

5353
tasks {
54+
runIde {
55+
autoReloadPlugins.set(true)
56+
}
5457
// Set the JVM compatibility versions
5558
properties("javaVersion").let {
5659
withType<JavaCompile> {

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -> https://plugins.jetbrains.com/docs/intellij/intellij-artifacts.html
33
pluginGroup=nl.jrdie.idea.springql
44
pluginName=spring-graphql-intellij-plugin
5-
pluginVersion=0.0.1
5+
pluginVersion=0.0.2-alpha
66
# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
77
# for insight into build numbers and IntelliJ Platform versions.
88
pluginSinceBuild=211.0
@@ -11,11 +11,11 @@ pluginUntilBuild=213.*
1111
# See https://jb.gg/intellij-platform-builds-list for available build versions.
1212
pluginVerifierIdeVersions=2020.3.4, 2021.1.3, 2021.2.1
1313
platformType=IU
14-
platformVersion=IU-LATEST-EAP-SNAPSHOT
14+
platformVersion=IU-212.5457.46
1515
platformDownloadSources=true
1616
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
1717
# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22
18-
platformPlugins=com.intellij.spring, com.intellij.java, org.jetbrains.kotlin, IntelliLang, com.intellij.lang.jsgraphql:3.0.0, PsiViewer:213-SNAPSHOT
18+
platformPlugins=com.intellij.java, org.jetbrains.kotlin, IntelliLang, com.intellij.lang.jsgraphql:3.0.0, PsiViewer:212-SNAPSHOT
1919
# Java language level used to compile sources and to generate the files for - Java 11 is required since 2020.3
2020
javaVersion=11
2121
gradleVersion=7.2

src/main/kotlin/nl/jrdie/idea/springql/ide/GraphQlFieldReference.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import com.intellij.psi.PsiElement
77
import com.intellij.psi.PsiElementResolveResult
88
import com.intellij.psi.PsiPolyVariantReferenceBase
99
import com.intellij.psi.ResolveResult
10-
import nl.jrdie.idea.springql.services.getGraphQlIdeService
10+
import nl.jrdie.idea.springql.services.getKaraService
1111

1212
class GraphQlFieldReference(element: PsiElement) : PsiPolyVariantReferenceBase<PsiElement>(element) {
1313

1414
override fun multiResolve(incompleteCode: Boolean): Array<ResolveResult> {
15-
val graphQlIdeService = myElement.project.getGraphQlIdeService()
15+
val graphQlIdeService = myElement.project.getKaraService()
1616

1717
return graphQlIdeService
1818
.getTypeDefinitionRegistry(myElement.project)
@@ -23,7 +23,7 @@ class GraphQlFieldReference(element: PsiElement) : PsiPolyVariantReferenceBase<P
2323
}
2424

2525
override fun getVariants(): Array<Any> {
26-
val graphQlIdeService = myElement.project.getGraphQlIdeService()
26+
val graphQlIdeService = myElement.project.getKaraService()
2727

2828
return graphQlIdeService
2929
.getTypeDefinitionRegistry(myElement.project)

src/main/kotlin/nl/jrdie/idea/springql/ide/GraphQlTypeNameReference.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import com.intellij.psi.PsiElement
77
import com.intellij.psi.PsiElementResolveResult
88
import com.intellij.psi.PsiPolyVariantReferenceBase
99
import com.intellij.psi.ResolveResult
10-
import nl.jrdie.idea.springql.services.getGraphQlIdeService
10+
import nl.jrdie.idea.springql.services.getKaraService
1111

1212
class GraphQlTypeNameReference(element: PsiElement) : PsiPolyVariantReferenceBase<PsiElement>(element) {
1313

1414
override fun multiResolve(incompleteCode: Boolean): Array<ResolveResult> {
15-
val graphQlIdeService = myElement.project.getGraphQlIdeService()
15+
val graphQlIdeService = myElement.project.getKaraService()
1616

1717
return graphQlIdeService
1818
.getTypeDefinitionRegistry(myElement.project)
@@ -22,7 +22,7 @@ class GraphQlTypeNameReference(element: PsiElement) : PsiPolyVariantReferenceBas
2222
}
2323

2424
override fun getVariants(): Array<Any> {
25-
val graphQlIdeService = myElement.project.getGraphQlIdeService()
25+
val graphQlIdeService = myElement.project.getKaraService()
2626

2727
return graphQlIdeService
2828
.getTypeDefinitionRegistry(myElement.project)

src/main/kotlin/nl/jrdie/idea/springql/ide/gutter/marker/SchemaMappingToSchemaLineMarkerProvider.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo
44
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider
55
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder
66
import com.intellij.icons.AllIcons
7-
import com.intellij.lang.jsgraphql.icons.JSGraphQLIcons
87
import com.intellij.openapi.components.service
98
import com.intellij.psi.PsiElement
109
import com.intellij.psi.util.nextLeaf
1110
import nl.jrdie.idea.springql.models.annotations.SchemaMappingType
12-
import nl.jrdie.idea.springql.services.SpringGraphQlIdeService
11+
import nl.jrdie.idea.springql.services.KaraIdeService
1312
import org.jetbrains.uast.UAnnotation
1413
import org.jetbrains.uast.toUElement
1514

@@ -26,11 +25,11 @@ class SchemaMappingToSchemaLineMarkerProvider : RelatedItemLineMarkerProvider()
2625
}
2726

2827
if (!SchemaMappingType.isSchemaMappingAnnotation(uElement.qualifiedName!!)) {
29-
println("NOT A SCHEMA MAPPING ANNOTATION: ${uElement.qualifiedName}")
28+
// println("NOT A SCHEMA MAPPING ANNOTATION: ${uElement.qualifiedName}")
3029
return
3130
}
3231

33-
val graphQlService = element.project.service<SpringGraphQlIdeService>()
32+
val graphQlService = element.project.service<KaraIdeService>()
3433
val index = graphQlService.getAnnotationIndex().findMappingsByAnnotation(uElement)
3534

3635
val lineMarkerInfo = if (index.isEmpty()) {

src/main/kotlin/nl/jrdie/idea/springql/ide/gutter/marker/SchemaToSchemaMappingLineMarkerProvider.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ package nl.jrdie.idea.springql.ide.gutter.marker
33
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo
44
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider
55
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder
6-
import com.intellij.icons.AllIcons
76
import com.intellij.lang.jsgraphql.icons.JSGraphQLIcons
87
import com.intellij.lang.jsgraphql.psi.GraphQLFieldDefinition
98
import com.intellij.lang.jsgraphql.psi.GraphQLPsiUtil
109
import com.intellij.openapi.components.service
1110
import com.intellij.psi.PsiElement
1211
import com.intellij.psi.util.nextLeaf
13-
import nl.jrdie.idea.springql.services.SpringGraphQlIdeService
12+
import nl.jrdie.idea.springql.services.KaraIdeService
1413

1514
class SchemaToSchemaMappingLineMarkerProvider : RelatedItemLineMarkerProvider() {
1615

@@ -22,7 +21,7 @@ class SchemaToSchemaMappingLineMarkerProvider : RelatedItemLineMarkerProvider()
2221
return
2322
}
2423

25-
val graphQlService = element.project.service<SpringGraphQlIdeService>()
24+
val graphQlService = element.project.service<KaraIdeService>()
2625
val indexEntry = graphQlService.getAnnotationIndex().findMappingsByFieldDefinition(element)
2726
if (indexEntry.isNotEmpty()) {
2827
val lineMarkerInfo = NavigationGutterIconBuilder
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package nl.jrdie.idea.springql.ide.highlighting
2+
3+
import com.intellij.lang.annotation.AnnotationHolder
4+
import com.intellij.lang.annotation.Annotator
5+
import com.intellij.lang.annotation.HighlightSeverity
6+
import com.intellij.psi.PsiElement
7+
import nl.jrdie.idea.springql.utils.KaraIdeUtil
8+
import org.jetbrains.uast.UMethod
9+
import org.jetbrains.uast.toUElement
10+
11+
class BatchMappingAndSchemaMappingErrorAnnotator : Annotator {
12+
13+
override fun annotate(psiElement: PsiElement, holder: AnnotationHolder) {
14+
val uElement = psiElement.toUElement();
15+
if (uElement !is UMethod) {
16+
return
17+
}
18+
19+
val anyIsSchemaMapping = uElement
20+
.uAnnotations
21+
.filter(KaraIdeUtil::isSchemaMappingAnnotation)
22+
23+
if (anyIsSchemaMapping.isEmpty()) {
24+
return // Short circuit for performance
25+
}
26+
27+
val anyIsBatchMapping = uElement
28+
.uAnnotations
29+
.filter(KaraIdeUtil::isBatchMappingAnnotation)
30+
31+
// If only one of the mapping types is present, short circuit
32+
if (anyIsBatchMapping.isEmpty()) {
33+
return
34+
}
35+
//anyIsBatchMapping.forEach { println("A::: " + it) }
36+
// Annotate offending annotations
37+
(anyIsBatchMapping union anyIsSchemaMapping).forEach {
38+
println("Annotating ${it.qualifiedName}")
39+
holder
40+
.newAnnotation(
41+
HighlightSeverity.ERROR,
42+
"Methods can not have both @SchemaMapping and @BatchMapping annotations at the same time"
43+
)
44+
.range(it.sourcePsi!!)
45+
.create()
46+
}
47+
}
48+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package nl.jrdie.idea.springql.ide.highlighting
2+
3+
import com.intellij.codeInspection.ProblemHighlightType
4+
import com.intellij.lang.annotation.AnnotationHolder
5+
import com.intellij.lang.annotation.Annotator
6+
import com.intellij.lang.annotation.HighlightSeverity
7+
import com.intellij.psi.PsiElement
8+
import nl.jrdie.idea.springql.utils.KaraIdeUtil
9+
import org.jetbrains.uast.UMethod
10+
import org.jetbrains.uast.toUElement
11+
12+
// TODO: Spring merges the annotations using their utility class
13+
// https://github.com/spring-projects/spring-graphql/blob/main/spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedControllerConfigurer.java#L206
14+
// Add quick fix to simplify
15+
class DuplicateSchemaMappingAnnotator : Annotator {
16+
17+
override fun annotate(psiElement: PsiElement, holder: AnnotationHolder) {
18+
val uElement = psiElement.toUElement();
19+
if (uElement !is UMethod) {
20+
return
21+
}
22+
23+
val numSchemaMappingAnnotations = uElement
24+
.uAnnotations
25+
.filter(KaraIdeUtil::isSchemaMappingAnnotation)
26+
27+
if (numSchemaMappingAnnotations.size > 1) {
28+
numSchemaMappingAnnotations.forEach {
29+
holder
30+
.newAnnotation(
31+
HighlightSeverity.WEAK_WARNING,
32+
"The mapping annotations will be reduced by Spring"
33+
)
34+
.range(it.sourcePsi!!)
35+
.create()
36+
}
37+
}
38+
}
39+
}

src/main/kotlin/nl/jrdie/idea/springql/ide/highlighting/SchemaMappingDoesNotExistAnnotator.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import com.intellij.lang.annotation.Annotator
55
import com.intellij.lang.annotation.HighlightSeverity
66
import com.intellij.lang.jsgraphql.types.language.ObjectTypeDefinition
77
import com.intellij.psi.PsiElement
8-
import nl.jrdie.idea.springql.services.getGraphQlIdeService
9-
import nl.jrdie.idea.springql.utils.SpringGraphQlIdeUtil
8+
import nl.jrdie.idea.springql.services.getKaraService
9+
import nl.jrdie.idea.springql.utils.KaraIdeUtil
1010
import org.jetbrains.uast.UAnnotation
1111
import org.jetbrains.uast.toUElement
1212

@@ -18,12 +18,12 @@ class SchemaMappingDoesNotExistAnnotator : Annotator {
1818
return
1919
}
2020

21-
val annotationInfo = SpringGraphQlIdeUtil.getSchemaMappingAnnotationInfo(uElement)
21+
val annotationInfo = KaraIdeUtil.getSchemaMappingAnnotationInfo(uElement)
2222
if (annotationInfo == null) {
2323
return // Not a SchemaMapping annotation
2424
}
2525

26-
val graphQlIdeService = element.project.getGraphQlIdeService()
26+
val graphQlIdeService = element.project.getKaraService()
2727
val indexEntries = graphQlIdeService.getAnnotationIndex().findMappingsByAnnotation(uElement)
2828
for (indexEntry in indexEntries) {
2929
val objectType = graphQlIdeService.getTypeDefinitionRegistry(element.project)

src/main/kotlin/nl/jrdie/idea/springql/index/SpringGraphQlIdeIndex.kt renamed to src/main/kotlin/nl/jrdie/idea/springql/index/KaraIdeIndex.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.intellij.lang.jsgraphql.psi.GraphQLFieldDefinition
44
import org.jetbrains.uast.UAnnotation
55
import org.jetbrains.uast.UMethod
66

7-
class SpringGraphQlIdeIndex {
7+
class KaraIdeIndex {
88

99
val annotationIndex: MutableSet<SchemaMappingAnnotationIndexEntry>
1010

0 commit comments

Comments
 (0)