add kotlin specific key annotator

This commit is contained in:
Marcel Haßlinger 2021-07-19 15:40:15 +02:00
parent 0618b4686f
commit 72beddda6e
3 changed files with 73 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<annotator language="kotlin" implementationClass="de.marhali.easyi18n.editor.kotlin.KotlinKeyAnnotator" />
</extensions>
</idea-plugin>