diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java index 63df5bfa1288..dfede04c9fcd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java @@ -20,14 +20,10 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; -import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference; -import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceOwner; import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet; -import com.intellij.psi.impl.source.resolve.reference.impl.providers.PsiFileReference; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author spleaner @@ -41,7 +37,7 @@ public class ConvertAbsolutePathToRelativeIntentionAction extends BaseIntentionA @Override public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { final PsiReference reference = file.findReferenceAt(editor.getCaretModel().getOffset()); - final FileReference fileReference = reference == null ? null : findFileReference(reference); + final FileReference fileReference = reference == null ? null : FileReference.findFileReference(reference); if (fileReference != null) { final FileReferenceSet set = fileReference.getFileReferenceSet(); @@ -54,26 +50,6 @@ public class ConvertAbsolutePathToRelativeIntentionAction extends BaseIntentionA return false; } - @Nullable - private static FileReference findFileReference(@NotNull final PsiReference original) { - if (original instanceof PsiMultiReference) { - final PsiMultiReference multiReference = (PsiMultiReference)original; - for (PsiReference reference : multiReference.getReferences()) { - if (reference instanceof FileReference) { - return (FileReference)reference; - } - } - } - else if (original instanceof FileReferenceOwner) { - final PsiFileReference fileReference = ((FileReferenceOwner)original).getLastFileReference(); - if (fileReference instanceof FileReference) { - return (FileReference)fileReference; - } - } - - return null; - } - @Override @NotNull public String getFamilyName() { @@ -85,7 +61,7 @@ public class ConvertAbsolutePathToRelativeIntentionAction extends BaseIntentionA if (!FileModificationService.getInstance().prepareFileForWrite(file)) return; final PsiReference reference = file.findReferenceAt(editor.getCaretModel().getOffset()); - final FileReference fileReference = reference == null ? null : findFileReference(reference); + final FileReference fileReference = reference == null ? null : FileReference.findFileReference(reference); if (fileReference != null) { final FileReference lastReference = fileReference.getFileReferenceSet().getLastReference(); if (lastReference != null) lastReference.bindToElement(lastReference.resolve(), !isConvertToRelative()); diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java index d4b493790fbd..3c7b035d1706 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java @@ -31,6 +31,7 @@ import com.intellij.openapi.vfs.VirtualFileSystem; import com.intellij.psi.*; import com.intellij.psi.impl.source.resolve.ResolveCache; import com.intellij.psi.impl.source.resolve.reference.impl.CachingReference; +import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.psi.search.PsiFileSystemItemProcessor; import com.intellij.refactoring.rename.BindablePsiReference; import com.intellij.util.ArrayUtil; @@ -71,6 +72,26 @@ public class FileReference implements PsiFileReference, FileReferenceOwner, PsiP this(original.myFileReferenceSet, original.myRange, original.myIndex, original.myText); } + @Nullable + public static FileReference findFileReference(@NotNull final PsiReference original) { + if (original instanceof PsiMultiReference) { + final PsiMultiReference multiReference = (PsiMultiReference)original; + for (PsiReference reference : multiReference.getReferences()) { + if (reference instanceof FileReference) { + return (FileReference)reference; + } + } + } + else if (original instanceof FileReferenceOwner) { + final PsiFileReference fileReference = ((FileReferenceOwner)original).getLastFileReference(); + if (fileReference instanceof FileReference) { + return (FileReference)fileReference; + } + } + + return null; + } + @NotNull protected Collection getContexts() { final FileReference contextRef = getContextReference(); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceCharFilter.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceCharFilter.java index da97653ec467..f4d6e11e0a9a 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceCharFilter.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceCharFilter.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.lookup.CharFilter; import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.psi.PsiFileSystemItem; +import com.intellij.psi.PsiReference; /** * @author peter @@ -28,7 +29,10 @@ public class FileReferenceCharFilter extends CharFilter{ public Result acceptChar(char c, int prefixLength, Lookup lookup) { final LookupElement item = lookup.getCurrentItem(); if ('.' == c && item != null && item.getObject() instanceof PsiFileSystemItem) { - return Result.ADD_TO_PREFIX; + PsiReference referenceAtCaret = lookup.getPsiFile().findReferenceAt(lookup.getEditor().getCaretModel().getOffset() - 1); + if (referenceAtCaret != null && FileReference.findFileReference(referenceAtCaret) != null) { + return Result.ADD_TO_PREFIX; + } } return null;