From f75848e6ad5abdd13ae108cb1b1c11ebb42f49ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Sun, 25 Apr 2021 15:37:45 +0200 Subject: [PATCH] Setup basics for new code completion feature --- .../ui/editor/I18nCompletionContributor.java | 14 ++++++ .../ui/editor/I18nCompletionProvider.java | 43 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 3 ++ 3 files changed, 60 insertions(+) create mode 100644 src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java create mode 100644 src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java new file mode 100644 index 0000000..2f53fd3 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java @@ -0,0 +1,14 @@ +package de.marhali.easyi18n.ui.editor; + +import com.intellij.codeInsight.completion.CompletionContributor; +import com.intellij.codeInsight.completion.CompletionType; +import com.intellij.patterns.*; +import com.intellij.psi.PsiLiteralValue; + +public class I18nCompletionContributor extends CompletionContributor { + + public I18nCompletionContributor() { + extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(PsiLiteralValue.class), + new I18nCompletionProvider()); + } +} \ No newline at end of file diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java new file mode 100644 index 0000000..45ef979 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java @@ -0,0 +1,43 @@ +package de.marhali.easyi18n.ui.editor; + +import com.intellij.codeInsight.completion.CompletionParameters; +import com.intellij.codeInsight.completion.CompletionProvider; +import com.intellij.codeInsight.completion.CompletionResultSet; +import com.intellij.codeInsight.lookup.LookupElementBuilder; +import com.intellij.ide.DataManager; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.project.Project; +import com.intellij.util.ProcessingContext; +import de.marhali.easyi18n.model.LocalizedNode; +import de.marhali.easyi18n.service.DataStore; +import org.jetbrains.annotations.NotNull; + +public class I18nCompletionProvider extends CompletionProvider { + + Project project; + + public I18nCompletionProvider() { + DataManager.getInstance().getDataContextFromFocusAsync().onSuccess(data -> { + project = PlatformDataKeys.PROJECT.getData(data); + }); + } + + @Override + protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { + String query = result.getPrefixMatcher().getPrefix(); + + LocalizedNode node = query.contains(".") ? + DataStore.getInstance(project).getTranslations().getNode(query) + : DataStore.getInstance(project).getTranslations().getNodes(); + + if(node == null) { + return; + } + + for(LocalizedNode children : node.getChildren()) { + result.addElement(LookupElementBuilder.create(children.getKey()).appendTailText("I18n", true)); + } + + System.out.println(result.getPrefixMatcher().getPrefix()); // Debug + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 33128ca..348d1ac 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -10,5 +10,8 @@ + + \ No newline at end of file