From 72beddda6e7adabb5db7f801d3dbfc49eaa05992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Mon, 19 Jul 2021 15:40:15 +0200 Subject: [PATCH] add kotlin specific key annotator --- .../easyi18n/editor/kotlin/KeyAnnotator.java | 38 +++++++++++++++++++ .../editor/kotlin/KotlinKeyAnnotator.java | 30 +++++++++++++++ .../META-INF/de.marhali.easyi18n-kotlin.xml | 5 +++ 3 files changed, 73 insertions(+) create mode 100644 src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java create mode 100644 src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java create mode 100644 src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java new file mode 100644 index 0000000..a80bf06 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/kotlin/KeyAnnotator.java @@ -0,0 +1,38 @@ +package de.marhali.easyi18n.editor.kotlin; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.project.Project; + +import de.marhali.easyi18n.model.LocalizedNode; +import de.marhali.easyi18n.service.DataStore; +import de.marhali.easyi18n.service.SettingsService; + +import org.jetbrains.annotations.NotNull; + +/** + * + * @author marhali + */ +public class KeyAnnotator { + + /** + * Adds annotations for i18n keys with content preview for preferred locale. + * @param key I18n key extracted by psi element + * @param project Project instance + * @param holder Annotation holder + */ + protected void annotate(@NotNull String key, @NotNull Project project, @NotNull AnnotationHolder holder) { + String previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); + LocalizedNode node = DataStore.getInstance(project).getTranslations().getNode(key); + + if(node == null) { // Unknown translation. Just ignore it + return; + } + + String tooltip = node.isLeaf() ? "I18n(" + previewLocale + ": " + node.getValue().get(previewLocale) + ")" + : "I18n ([])"; + + holder.newAnnotation(HighlightSeverity.INFORMATION, tooltip).create(); + } +} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java new file mode 100644 index 0000000..6dc68b9 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/editor/kotlin/KotlinKeyAnnotator.java @@ -0,0 +1,30 @@ +package de.marhali.easyi18n.editor.kotlin; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.Annotator; +import com.intellij.psi.PsiElement; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry; + +/** + * Kotlin specific translation key annotator + * @author marhali + */ +public class KotlinKeyAnnotator extends KeyAnnotator implements Annotator { + + @Override + public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { + if(!(element instanceof KtLiteralStringTemplateEntry)) { + return; + } + + String value = element.getText(); + + if(value == null) { + return; + } + + annotate(value, element.getProject(), holder); + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml b/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml new file mode 100644 index 0000000..83163b9 --- /dev/null +++ b/src/main/resources/META-INF/de.marhali.easyi18n-kotlin.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file