Merge pull request #412 from Adeptius/feature/html-reference-completition
feat: html reference and completition support
This commit is contained in:
commit
5fa8c19ecb
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +1,11 @@
|
|||||||
<idea-plugin>
|
<idea-plugin>
|
||||||
<extensions defaultExtensionNs="com.intellij">
|
<extensions defaultExtensionNs="com.intellij">
|
||||||
|
|
||||||
|
<psi.referenceContributor
|
||||||
|
language="HTML"
|
||||||
|
implementation="de.marhali.easyi18n.assistance.reference.XmlKeyReferenceContributor"
|
||||||
|
/>
|
||||||
|
|
||||||
<lang.foldingBuilder
|
<lang.foldingBuilder
|
||||||
language="HTML"
|
language="HTML"
|
||||||
implementationClass="de.marhali.easyi18n.assistance.folding.XmlFoldingBuilder"
|
implementationClass="de.marhali.easyi18n.assistance.folding.XmlFoldingBuilder"
|
||||||
@ -9,5 +15,14 @@
|
|||||||
language="HTML"
|
language="HTML"
|
||||||
implementationClass="de.marhali.easyi18n.assistance.documentation.CommonDocumentationProvider"
|
implementationClass="de.marhali.easyi18n.assistance.documentation.CommonDocumentationProvider"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<completion.contributor
|
||||||
|
language="HTML"
|
||||||
|
implementationClass="de.marhali.easyi18n.assistance.completion.XmlCompletionContributor"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<intentionAction>
|
||||||
|
<className>de.marhali.easyi18n.assistance.intention.XmlTranslationIntention</className>
|
||||||
|
</intentionAction>
|
||||||
</extensions>
|
</extensions>
|
||||||
</idea-plugin>
|
</idea-plugin>
|
||||||
Loading…
x
Reference in New Issue
Block a user