Skip to content

Commit 991b944

Browse files
authored
Make ARN contributor work for JSON again (#3150)
1 parent b216a66 commit 991b944

File tree

5 files changed

+62
-0
lines changed

5 files changed

+62
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Workaround regression with ARN console navigation in JSON files"
4+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. -->
2+
<!-- SPDX-License-Identifier: Apache-2.0 -->
3+
4+
<idea-plugin>
5+
<extensions defaultExtensionNs="com.intellij">
6+
<psi.referenceContributor implementation="software.aws.toolkits.jetbrains.services.federation.psireferences.JsonArnPsiReferenceContributor"/>
7+
</extensions>
8+
</idea-plugin>

jetbrains-core/resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ with what features/services are supported.
7373
<depends optional="true" config-file="ext-docker.xml">Docker</depends>
7474
<depends optional="true" config-file="ext-java.xml">com.intellij.modules.java</depends>
7575
<depends optional="true" config-file="ext-python.xml">com.intellij.modules.python</depends>
76+
<depends optional="true" config-file="ext-json.xml">com.intellij.modules.json</depends>
7677

7778
<xi:include href="/META-INF/IC-221.xml" xpointer="xpointer(/idea-plugin/*)">
7879
<xi:fallback/>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.federation.psireferences
5+
6+
import com.intellij.json.psi.JsonStringLiteral
7+
import com.intellij.patterns.PlatformPatterns
8+
import com.intellij.psi.PsiReferenceContributor
9+
import com.intellij.psi.PsiReferenceRegistrar
10+
11+
class JsonArnPsiReferenceContributor : PsiReferenceContributor() {
12+
override fun registerReferenceProviders(registrar: PsiReferenceRegistrar) {
13+
registrar.registerReferenceProvider(
14+
PlatformPatterns.psiElement(JsonStringLiteral::class.java),
15+
ArnPsiReferenceProvider(),
16+
PsiReferenceRegistrar.LOWER_PRIORITY
17+
)
18+
}
19+
}

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/federation/psireferences/ArnPsiReferenceProviderTest.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,34 @@ class ArnPsiReferenceProviderTest {
156156
}
157157
}
158158
}
159+
160+
@Test
161+
fun `attaches reference to JSON values`() {
162+
// language=JSON
163+
val contents = """
164+
{
165+
"hello": "arn:aws:lambda::123456789012:function"
166+
}
167+
""".trimIndent()
168+
169+
val file = runInEdtAndGet {
170+
projectRule.fixture.configureByText("json.json", contents)
171+
}.virtualFile
172+
173+
val elements = mutableListOf<ArnReference>()
174+
runReadAction {
175+
PsiTreeUtil.processElements(
176+
file.toPsi(projectRule.project),
177+
PsiElementProcessor { child ->
178+
elements.addAll(child.references.filterIsInstance<ArnReference>())
179+
180+
return@PsiElementProcessor true
181+
}
182+
)
183+
184+
assertThat(elements).hasSize(1).allSatisfy {
185+
assertThat(it).isInstanceOf(ArnReference::class.java)
186+
}
187+
}
188+
}
159189
}

0 commit comments

Comments
 (0)