Search in sources :

Example 16 with FileReference

use of com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference in project intellij-community by JetBrains.

the class ReferenceInjectionTest method testInjectIntoTagValue.

public void testInjectIntoTagValue() throws Exception {
    myFixture.configureByText("foo.xml", "<foo xmlns=\"http://foo.bar\" <bar>x<caret>xx</bar>/>");
    assertNull(myFixture.getReferenceAtCaretPosition());
    InjectLanguageAction.invokeImpl(getProject(), myFixture.getEditor(), myFixture.getFile(), new FileReferenceInjector());
    assertTrue(myFixture.getReferenceAtCaretPosition() instanceof FileReference);
    UnInjectLanguageAction.invokeImpl(getProject(), myFixture.getEditor(), myFixture.getFile());
    assertNull(myFixture.getReferenceAtCaretPosition());
}
Also used : FileReferenceInjector(org.intellij.plugins.intelliLang.references.FileReferenceInjector) FileReference(com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference)

Example 17 with FileReference

use of com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference in project intellij-community by JetBrains.

the class AnchorPathReferenceProvider method createReferences.

@Override
public boolean createReferences(@NotNull final PsiElement psiElement, @NotNull final List<PsiReference> references, final boolean soft) {
    final TextRange range = ElementManipulators.getValueTextRange(psiElement);
    final String elementText = psiElement.getText();
    final int anchorOffset = elementText.indexOf('#');
    if (anchorOffset == -1) {
        return false;
    }
    final boolean dynamic = isDynamic(psiElement, anchorOffset + 1, elementText);
    if (dynamic) {
        return false;
    }
    FileReference fileReference = null;
    if (range.getStartOffset() != anchorOffset) {
        fileReference = findFileReference(references);
        if (fileReference == null || fileReference.resolve() == null) {
            return false;
        }
    }
    final int pos = elementText.indexOf('?', anchorOffset);
    final String anchor;
    try {
        int endIndex = pos != -1 ? pos : range.getEndOffset();
        if (endIndex <= anchorOffset) {
            endIndex = anchorOffset + 1;
        }
        anchor = elementText.substring(anchorOffset + 1, endIndex);
    } catch (StringIndexOutOfBoundsException e) {
        throw new RuntimeException(elementText, e);
    }
    final AnchorReferenceImpl anchorReference = new AnchorReferenceImpl(anchor, fileReference, psiElement, anchorOffset + 1, soft);
    references.add(anchorReference);
    return false;
}
Also used : TextRange(com.intellij.openapi.util.TextRange) FileReference(com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference)

Aggregations

FileReference (com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference)17 NotNull (org.jetbrains.annotations.NotNull)7 VirtualFile (com.intellij.openapi.vfs.VirtualFile)6 PsiElement (com.intellij.psi.PsiElement)5 PsiReference (com.intellij.psi.PsiReference)5 ArrayList (java.util.ArrayList)4 FileReferenceInjector (org.intellij.plugins.intelliLang.references.FileReferenceInjector)4 TextRange (com.intellij.openapi.util.TextRange)3 FileReferenceSet (com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet)3 LocalQuickFix (com.intellij.codeInspection.LocalQuickFix)2 Nullable (org.jetbrains.annotations.Nullable)2 GoReference (com.goide.psi.impl.GoReference)1 CreateFileFix (com.intellij.codeInsight.daemon.quickFix.CreateFileFix)1 ProblemHighlightType (com.intellij.codeInspection.ProblemHighlightType)1 CfmlMappingsConfig (com.intellij.coldFusion.UI.config.CfmlMappingsConfig)1 CfmlProjectConfiguration (com.intellij.coldFusion.UI.config.CfmlProjectConfiguration)1 CfmlTag (com.intellij.coldFusion.model.psi.CfmlTag)1 ASTNode (com.intellij.lang.ASTNode)1 Module (com.intellij.openapi.module.Module)1 PsiDynaReference (com.intellij.openapi.paths.PsiDynaReference)1