|
1 | 1 | /* |
2 | | - * Copyright 2022 Blue Box Ware |
| 2 | + * Copyright 2023 Blue Box Ware |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
| 17 | +@file:Suppress("UnstableTypeUsedInSignature", "UnstableApiUsage") |
| 18 | + |
17 | 19 | package com.gmail.blueboxware.libgdxplugin.ui |
18 | 20 |
|
19 | 21 | import com.gmail.blueboxware.libgdxplugin.filetypes.atlas2.Atlas2File |
20 | 22 | import com.gmail.blueboxware.libgdxplugin.filetypes.atlas2.psi.Atlas2Region |
21 | 23 | import com.gmail.blueboxware.libgdxplugin.filetypes.skin.psi.* |
22 | 24 | import com.gmail.blueboxware.libgdxplugin.filetypes.skin.utils.getRealClassNamesAsString |
23 | 25 | 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 |
25 | 28 | import com.intellij.openapi.diagnostic.Logger |
26 | 29 | import com.intellij.openapi.util.SystemInfo |
27 | 30 | import com.intellij.openapi.util.io.FileUtil |
28 | 31 | import com.intellij.openapi.util.text.HtmlBuilder |
29 | 32 | import com.intellij.openapi.util.text.HtmlChunk |
| 33 | +import com.intellij.platform.backend.documentation.DocumentationTarget |
30 | 34 | import com.intellij.psi.PsiElement |
31 | 35 | import com.intellij.psi.PsiJavaFile |
32 | 36 | import com.intellij.psi.PsiLiteralExpression |
33 | 37 | import com.intellij.util.ui.ImageUtil |
34 | 38 | import org.jetbrains.kotlin.psi.KtFile |
35 | 39 | import org.jetbrains.kotlin.psi.KtStringTemplateExpression |
| 40 | +import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer |
36 | 41 | import java.awt.image.BufferedImage |
37 | 42 | import java.net.URI |
38 | 43 | import java.net.URISyntaxException |
39 | 44 | import javax.imageio.ImageIO |
40 | 45 |
|
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? { |
44 | 49 | val currentFile = originalElement?.containingFile ?: return null |
45 | 50 | if (currentFile !is SkinFile && currentFile !is PsiJavaFile && currentFile !is KtFile && currentFile !is Atlas2File) { |
46 | 51 | return null |
@@ -69,8 +74,8 @@ class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() { |
69 | 74 |
|
70 | 75 | when (currentFile) { |
71 | 76 | 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) |
74 | 79 | else -> null |
75 | 80 | }?.references?.forEach { reference -> |
76 | 81 | reference.resolve()?.let { target -> |
@@ -132,6 +137,17 @@ class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() { |
132 | 137 | return null |
133 | 138 | } |
134 | 139 |
|
| 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 | + |
135 | 151 | private fun createDoc(image: BufferedImage, name: String?, file: String?): String? { |
136 | 152 |
|
137 | 153 |
|
@@ -196,7 +212,9 @@ class ImagePreviewDocumentationProvider : AbstractDocumentationProvider() { |
196 | 212 |
|
197 | 213 | } |
198 | 214 |
|
| 215 | + |
199 | 216 | companion object { |
200 | | - val LOG = Logger.getInstance(ImagePreviewDocumentationProvider::class.java) |
| 217 | + val LOG = Logger.getInstance(ImagePreviewDocumentationTarget::class.java) |
201 | 218 | } |
| 219 | + |
202 | 220 | } |
0 commit comments