Skip to content

Commit da084d3

Browse files
committed
Use DocumentationTarget instead of DocumentationProvider for Image previews.
1 parent 71a16cb commit da084d3

File tree

5 files changed

+70
-13
lines changed

5 files changed

+70
-13
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ pluginSinceBuild = 231.7665.28
66
pluginUntilBuild =
77

88
# See https://www.jetbrains.com/intellij-repository/snapshots/ for available build versions.
9-
pluginVerifierIdeVersions = 231.7665.28
9+
pluginVerifierIdeVersions = 231.8109.175
1010

1111
platformType = IC
1212
#platformVersion = 223.8214.52
13-
platformVersion = 231.7665.28-EAP-SNAPSHOT
13+
platformVersion = 231.8109.175
1414
platformDownloadSources = true
1515

1616
platformPlugins = java, Kotlin, Groovy, properties

src/main/kotlin/com/gmail/blueboxware/libgdxplugin/ui/ImagePreviewDocumentationProvider.kt renamed to src/main/kotlin/com/gmail/blueboxware/libgdxplugin/ui/ImagePreviewDocumentationTarget.kt

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022 Blue Box Ware
2+
* Copyright 2023 Blue Box Ware
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -14,33 +14,38 @@
1414
* limitations under the License.
1515
*/
1616

17+
@file:Suppress("UnstableTypeUsedInSignature", "UnstableApiUsage")
18+
1719
package com.gmail.blueboxware.libgdxplugin.ui
1820

1921
import com.gmail.blueboxware.libgdxplugin.filetypes.atlas2.Atlas2File
2022
import com.gmail.blueboxware.libgdxplugin.filetypes.atlas2.psi.Atlas2Region
2123
import com.gmail.blueboxware.libgdxplugin.filetypes.skin.psi.*
2224
import com.gmail.blueboxware.libgdxplugin.filetypes.skin.utils.getRealClassNamesAsString
2325
import com.gmail.blueboxware.libgdxplugin.utils.*
24-
import com.intellij.lang.documentation.AbstractDocumentationProvider
26+
import com.intellij.model.Pointer
27+
import com.intellij.navigation.TargetPresentation
2528
import com.intellij.openapi.diagnostic.Logger
2629
import com.intellij.openapi.util.SystemInfo
2730
import com.intellij.openapi.util.io.FileUtil
2831
import com.intellij.openapi.util.text.HtmlBuilder
2932
import com.intellij.openapi.util.text.HtmlChunk
33+
import com.intellij.platform.backend.documentation.DocumentationTarget
3034
import com.intellij.psi.PsiElement
3135
import com.intellij.psi.PsiJavaFile
3236
import com.intellij.psi.PsiLiteralExpression
3337
import com.intellij.util.ui.ImageUtil
3438
import org.jetbrains.kotlin.psi.KtFile
3539
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
40+
import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
3641
import java.awt.image.BufferedImage
3742
import java.net.URI
3843
import java.net.URISyntaxException
3944
import javax.imageio.ImageIO
4045

41-
class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() {
42-
43-
override fun generateDoc(el: PsiElement, originalElement: PsiElement?): String? {
46+
class ImagePreviewDocumentationTarget(val element: PsiElement, private val originalElement: PsiElement?) :
47+
DocumentationTarget {
48+
override fun computeDocumentationHint(): String? {
4449
val currentFile = originalElement?.containingFile ?: return null
4550
if (currentFile !is SkinFile && currentFile !is PsiJavaFile && currentFile !is KtFile && currentFile !is Atlas2File) {
4651
return null
@@ -69,8 +74,8 @@ class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() {
6974

7075
when (currentFile) {
7176
is SkinFile -> element.getParentOfType<SkinStringLiteral>(false)
72-
is PsiJavaFile -> element.getParentOfType<PsiLiteralExpression>()
73-
is KtFile -> element.getParentOfType<KtStringTemplateExpression>()
77+
is PsiJavaFile -> element.getParentOfType<PsiLiteralExpression>(false)
78+
is KtFile -> element.getParentOfType<KtStringTemplateExpression>(false)
7479
else -> null
7580
}?.references?.forEach { reference ->
7681
reference.resolve()?.let { target ->
@@ -132,6 +137,17 @@ class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() {
132137
return null
133138
}
134139

140+
override fun computePresentation(): TargetPresentation = TargetPresentation.builder("Test").presentation()
141+
142+
override fun createPointer(): Pointer<out DocumentationTarget> {
143+
val elementPtr = element.createSmartPointer()
144+
val originalElementPtr = originalElement?.createSmartPointer()
145+
return Pointer {
146+
val element = elementPtr.dereference() ?: return@Pointer null
147+
ImagePreviewDocumentationTarget(element, originalElementPtr?.dereference())
148+
}
149+
}
150+
135151
private fun createDoc(image: BufferedImage, name: String?, file: String?): String? {
136152

137153

@@ -196,7 +212,9 @@ class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() {
196212

197213
}
198214

215+
199216
companion object {
200-
val LOG = Logger.getInstance(ImagePreviewDocumentationProvider::class.java)
217+
val LOG = Logger.getInstance(ImagePreviewDocumentationTarget::class.java)
201218
}
219+
202220
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright 2023 Blue Box Ware
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.gmail.blueboxware.libgdxplugin.ui
18+
19+
import com.gmail.blueboxware.libgdxplugin.filetypes.atlas2.LibGDXAtlas2Language
20+
import com.gmail.blueboxware.libgdxplugin.filetypes.skin.LibGDXSkinLanguage
21+
import com.intellij.lang.java.JavaLanguage
22+
import com.intellij.platform.backend.documentation.DocumentationTarget
23+
import com.intellij.platform.backend.documentation.PsiDocumentationTargetProvider
24+
import com.intellij.psi.PsiElement
25+
import org.jetbrains.kotlin.idea.KotlinLanguage
26+
27+
class ImagePreviewPsiDocumentationTargetProvider : PsiDocumentationTargetProvider {
28+
override fun documentationTarget(element: PsiElement, originalElement: PsiElement?): DocumentationTarget? =
29+
if (element.language in languages) ImagePreviewDocumentationTarget(element, originalElement) else null
30+
31+
companion object {
32+
private val languages = listOf(
33+
LibGDXSkinLanguage.INSTANCE,
34+
LibGDXAtlas2Language.INSTANCE,
35+
KotlinLanguage.INSTANCE,
36+
JavaLanguage.INSTANCE
37+
)
38+
}
39+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787

8888
<iconProvider implementation="com.gmail.blueboxware.libgdxplugin.ui.LibGDXIconProvider"/>
8989

90-
<documentationProvider implementation="com.gmail.blueboxware.libgdxplugin.ui.ImagePreviewDocumentationProvider" />
90+
<platform.backend.documentation.psiTargetProvider implementation="com.gmail.blueboxware.libgdxplugin.ui.ImagePreviewPsiDocumentationTargetProvider" />
9191

9292
<debugger.nodeRenderer implementation="com.gmail.blueboxware.libgdxplugin.ui.LibGDXColorObjectRenderer"/>
9393

src/test/kotlin/com/gmail/blueboxware/libgdxplugin/TestTextTextureRegionPreview.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.gmail.blueboxware.libgdxplugin
22

3-
import com.gmail.blueboxware.libgdxplugin.ui.ImagePreviewDocumentationProvider
3+
import com.gmail.blueboxware.libgdxplugin.ui.ImagePreviewDocumentationTarget
44
import java.awt.Color
55
import java.net.URL
66
import javax.imageio.ImageIO
@@ -46,7 +46,7 @@ class TestTextTextureRegionPreview : LibGDXCodeInsightFixtureTestCase() {
4646
configureByFile(fileName)
4747
val element = file.findElementAt(myFixture.caretOffset) ?: throw AssertionError()
4848
val preview: String =
49-
ImagePreviewDocumentationProvider().generateDoc(element, element) ?: throw AssertionError()
49+
ImagePreviewDocumentationTarget(element, element).computeDocumentationHint() ?: throw AssertionError()
5050
val imageFile = Regex("""src="([^"]+)"""").find(preview)?.groupValues?.get(1) ?: throw AssertionError()
5151
val image = ImageIO.read(URL(imageFile))
5252
assertEquals(width, image.width)

0 commit comments

Comments
 (0)