Skip to content

Commit 844f794

Browse files
authored
[IJ Plugin] Don't report "GraphQL endpoint not configured" for submodules (#6071)
1 parent 866141a commit 844f794

File tree

6 files changed

+23
-5
lines changed

6 files changed

+23
-5
lines changed

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/inspection/ApolloEndpointNotConfiguredInspection.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.apollographql.ijplugin.project.apolloProjectService
55
import com.apollographql.ijplugin.telemetry.TelemetryEvent
66
import com.apollographql.ijplugin.telemetry.telemetryService
77
import com.apollographql.ijplugin.util.getMethodName
8+
import com.apollographql.ijplugin.util.isMethodCall
89
import com.apollographql.ijplugin.util.lambdaBlockExpression
910
import com.intellij.codeInsight.intention.preview.IntentionPreviewUtils
1011
import com.intellij.codeInspection.LocalInspectionTool
@@ -29,9 +30,12 @@ class ApolloEndpointNotConfiguredInspection : LocalInspectionTool() {
2930
super.visitCallExpression(expression)
3031
if (!expression.project.apolloProjectService.apolloVersion.isAtLeastV3) return
3132
if (expression.containingFile.name != buildGradleFileName) return
32-
if (expression.getMethodName() == "service" && expression.findParentInFile { it is KtCallExpression && it.getMethodName() == "apollo" } != null) {
33+
if (expression.getMethodName() == "service" && expression.findParentInFile { it.isMethodCall("apollo") } != null) {
3334
val serviceBlockExpression = expression.lambdaBlockExpression() ?: return
34-
if (serviceBlockExpression.statements.none { it is KtCallExpression && it.getMethodName() == "introspection" }) {
35+
// Don't suggest to add an introspection block if this is a submodule
36+
val hasDependsOn = serviceBlockExpression.statements.any { it.isMethodCall("dependsOn") }
37+
if (hasDependsOn) return
38+
if (serviceBlockExpression.statements.none { it.isMethodCall("introspection") }) {
3539
holder.registerProblem(expression.calleeExpression!!, ApolloBundle.message("inspection.endpointNotConfigured.reportText"), AddIntrospectionBlockQuickFix)
3640
}
3741
}

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/refactoring/migration/v3tov4/item/EncloseInService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.apollographql.ijplugin.refactoring.migration.item.toMigrationItemUsag
77
import com.apollographql.ijplugin.util.decapitalizeFirstLetter
88
import com.apollographql.ijplugin.util.findPsiFilesByName
99
import com.apollographql.ijplugin.util.getMethodName
10+
import com.apollographql.ijplugin.util.isMethodCall
1011
import com.apollographql.ijplugin.util.lambdaBlockExpression
1112
import com.intellij.openapi.project.Project
1213
import com.intellij.psi.PsiMigration
@@ -32,7 +33,7 @@ object EncloseInService : MigrationItem() {
3233
val blockExpression = expression.lambdaBlockExpression() ?: return
3334
val statements = blockExpression.statements
3435
// If there's already a service call, we can't automatically refactor
35-
if (statements.none { it is KtCallExpression && it.getMethodName() == "service" }) {
36+
if (statements.none { it.isMethodCall("service") }) {
3637
usages.add(blockExpression.toMigrationItemUsageInfo())
3738
}
3839
}

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/refactoring/migration/v3tov4/item/UpdateMultiModuleConfiguration.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.apollographql.ijplugin.refactoring.migration.item.toMigrationItemUsag
66
import com.apollographql.ijplugin.util.containingKtFile
77
import com.apollographql.ijplugin.util.findPsiFilesByName
88
import com.apollographql.ijplugin.util.getMethodName
9+
import com.apollographql.ijplugin.util.isMethodCall
910
import com.apollographql.ijplugin.util.lambdaBlockExpression
1011
import com.intellij.openapi.project.Project
1112
import com.intellij.psi.PsiMigration
@@ -41,11 +42,11 @@ object UpdateMultiModuleConfiguration : MigrationItem() {
4142
file.accept(object : KtTreeVisitorVoid() {
4243
override fun visitCallExpression(expression: KtCallExpression) {
4344
super.visitCallExpression(expression)
44-
var serviceFound= false
45+
var serviceFound = false
4546
if (expression.getMethodName() == "apollo") {
4647
val apolloBlockExpression = expression.lambdaBlockExpression() ?: return
4748
val apolloStatements = apolloBlockExpression.statements
48-
apolloStatements.filter { it is KtCallExpression && it.getMethodName() == "service" }.forEach { serviceCallExpression ->
49+
apolloStatements.filter { it.isMethodCall("service") }.forEach { serviceCallExpression ->
4950
val serviceBlockExpression = (serviceCallExpression as KtCallExpression).lambdaBlockExpression() ?: return@forEach
5051
serviceBlockExpression.add(ktFactory.createNewLine())
5152
serviceBlockExpression.add(ktFactory.createExpression("dependsOn(${usage.attachedData<String>()})"))

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/util/Psi.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ fun PsiElement.originalClassName(): String? = resolveKtName()?.asKtClass()?.name
7878

7979
fun KtCallExpression.getMethodName(): String? = calleeExpression.cast<KtNameReferenceExpression>()?.getReferencedName()
8080

81+
fun PsiElement.isMethodCall(methodName: String) = this is KtCallExpression && getMethodName() == methodName
82+
8183
fun KtCallExpression.lambdaBlockExpression(): KtBlockExpression? =
8284
valueArguments.firstIsInstanceOrNull<KtLambdaArgument>()?.getLambdaExpression()?.bodyExpression
8385

intellij-plugin/src/test/testData/inspection/EndpointNotConfigured.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,9 @@ apollo {
3232
schemaFile.set(file("src/main/graphql/schema.graphqls"))
3333
}
3434
}
35+
36+
service("e") { // Shouldn't highlight
37+
packageName.set("com.example")
38+
dependsOn(":schemaModule", bidirectional = true)
39+
}
3540
}

intellij-plugin/src/test/testData/inspection/EndpointNotConfigured_after.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,9 @@ apollo {
4242
schemaFile.set(file("src/main/graphql/schema.graphqls"))
4343
}
4444
}
45+
46+
service("e") { // Shouldn't highlight
47+
packageName.set("com.example")
48+
dependsOn(":schemaModule", bidirectional = true)
49+
}
4550
}

0 commit comments

Comments
 (0)