From 02596686c9dd5fa660f28f4a06037acafcc810e5 Mon Sep 17 00:00:00 2001 From: Volodymyr Date: Sat, 15 Jun 2024 14:34:01 +0300 Subject: [PATCH 1/2] feat: html reference and completition support --- .../completion/XmlCompletionContributor.java | 17 +++++++++ .../reference/XmlKeyReferenceContributor.java | 38 +++++++++++++++++++ .../META-INF/de.marhali.easyi18n-xml.xml | 12 ++++++ 3 files changed, 67 insertions(+) create mode 100644 src/main/java/de/marhali/easyi18n/assistance/completion/XmlCompletionContributor.java create mode 100644 src/main/java/de/marhali/easyi18n/assistance/reference/XmlKeyReferenceContributor.java diff --git a/src/main/java/de/marhali/easyi18n/assistance/completion/XmlCompletionContributor.java b/src/main/java/de/marhali/easyi18n/assistance/completion/XmlCompletionContributor.java new file mode 100644 index 0000000..f48c5a2 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/assistance/completion/XmlCompletionContributor.java @@ -0,0 +1,17 @@ +package de.marhali.easyi18n.assistance.completion; + +import com.intellij.codeInsight.completion.CompletionContributor; +import com.intellij.codeInsight.completion.CompletionType; +import com.intellij.patterns.PlatformPatterns; +import com.intellij.psi.impl.source.xml.XmlAttributeValueImpl; + +/** + * Xml specific completion contributor. + * @author adeptius + */ +public class XmlCompletionContributor extends CompletionContributor { + public XmlCompletionContributor() { + extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(XmlAttributeValueImpl.class), + new KeyCompletionProvider()); + } +} diff --git a/src/main/java/de/marhali/easyi18n/assistance/reference/XmlKeyReferenceContributor.java b/src/main/java/de/marhali/easyi18n/assistance/reference/XmlKeyReferenceContributor.java new file mode 100644 index 0000000..3ca88e5 --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/assistance/reference/XmlKeyReferenceContributor.java @@ -0,0 +1,38 @@ +package de.marhali.easyi18n.assistance.reference; + +import com.intellij.openapi.project.Project; +import com.intellij.patterns.PlatformPatterns; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; +import com.intellij.psi.PsiReferenceProvider; +import com.intellij.psi.PsiReferenceRegistrar; +import com.intellij.psi.impl.source.xml.XmlAttributeValueImpl; +import com.intellij.util.ProcessingContext; +import org.jetbrains.annotations.NotNull; + +/** + * Xml specific key reference binding + * @author adeptius + */ +public class XmlKeyReferenceContributor extends AbstractKeyReferenceContributor { + @Override + public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) { + registrar.registerReferenceProvider( + PlatformPatterns.psiElement(XmlAttributeValueImpl.class), + getProvider()); + } + + private PsiReferenceProvider getProvider() { + return new PsiReferenceProvider() { + @Override + public PsiReference @NotNull [] getReferencesByElement( + @NotNull PsiElement element, @NotNull ProcessingContext context) { + + Project project = element.getProject(); + XmlAttributeValueImpl literalExpression = (XmlAttributeValueImpl) element; + String value = literalExpression.getValue(); + return getReferences(project, element, value); + } + }; + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml b/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml index 3e472b0..d35eb65 100644 --- a/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml +++ b/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml @@ -1,5 +1,11 @@ + + + + + + \ No newline at end of file From 20675c35fe445cefa1296811e519538ad44f510b Mon Sep 17 00:00:00 2001 From: Volodymyr Date: Sat, 15 Jun 2024 18:44:42 +0300 Subject: [PATCH 2/2] feat: html intention support --- .../intention/XmlTranslationIntention.java | 27 +++++++++++++++++++ .../META-INF/de.marhali.easyi18n-xml.xml | 3 +++ 2 files changed, 30 insertions(+) create mode 100644 src/main/java/de/marhali/easyi18n/assistance/intention/XmlTranslationIntention.java diff --git a/src/main/java/de/marhali/easyi18n/assistance/intention/XmlTranslationIntention.java b/src/main/java/de/marhali/easyi18n/assistance/intention/XmlTranslationIntention.java new file mode 100644 index 0000000..f02ee0b --- /dev/null +++ b/src/main/java/de/marhali/easyi18n/assistance/intention/XmlTranslationIntention.java @@ -0,0 +1,27 @@ +package de.marhali.easyi18n.assistance.intention; + +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import com.intellij.psi.xml.XmlAttributeValue; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Xml specific translation key intention. + * @author adeptius + */ +public class XmlTranslationIntention extends AbstractTranslationIntention { + @Override + protected @Nullable String extractText(@NotNull PsiElement element) { + if(!(element.getParent() instanceof XmlAttributeValue)) { + return null; + } + + return ((XmlAttributeValue) element.getParent()).getValue(); + } + + @Override + @NotNull TextRange convertRange(@NotNull TextRange input) { + return new TextRange(input.getStartOffset() + 1, input.getEndOffset() - 1); + } +} diff --git a/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml b/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml index d35eb65..4243441 100644 --- a/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml +++ b/src/main/resources/META-INF/de.marhali.easyi18n-xml.xml @@ -21,5 +21,8 @@ implementationClass="de.marhali.easyi18n.assistance.completion.XmlCompletionContributor" /> + + de.marhali.easyi18n.assistance.intention.XmlTranslationIntention + \ No newline at end of file