Merge remote-tracking branch 'origin/master'

This commit is contained in:
Yann Cébron
2013-05-23 19:44:10 +02:00
12 changed files with 52 additions and 24 deletions

View File

@@ -24,6 +24,7 @@ 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;
@@ -64,9 +65,9 @@ public class ConvertAbsolutePathToRelativeIntentionAction extends BaseIntentionA
}
}
else if (original instanceof FileReferenceOwner) {
final FileReference fileReference = ((FileReferenceOwner)original).getLastFileReference();
if (fileReference != null) {
return fileReference;
final PsiFileReference fileReference = ((FileReferenceOwner)original).getLastFileReference();
if (fileReference instanceof FileReference) {
return (FileReference)fileReference;
}
}

View File

@@ -24,5 +24,5 @@ import org.jetbrains.annotations.Nullable;
public interface FileReferenceOwner {
@Nullable
FileReference getLastFileReference();
PsiFileReference getLastFileReference();
}

View File

@@ -15,7 +15,6 @@
*/
package com.intellij.psi.impl.source.resolve.reference.impl.providers;
import com.intellij.openapi.paths.PsiDynaReference;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
@@ -55,10 +54,10 @@ public class FileReferenceUtil {
public static PsiFile findFile(PsiReference...references) {
for (int i = references.length - 1; i >= 0; i--) {
PsiReference ref = references[i];
if (ref instanceof PsiDynaReference) {
ref = ((PsiDynaReference)ref).getLastFileReference();
if (ref instanceof FileReferenceOwner && !(ref instanceof PsiFileReference)) {
ref = ((FileReferenceOwner)ref).getLastFileReference();
}
if (ref instanceof FileReference) {
if (ref instanceof PsiFileReference) {
final PsiElement file = references[i].resolve();
return file instanceof PsiFile ? (PsiFile)file : null;
}
@@ -67,15 +66,15 @@ public class FileReferenceUtil {
}
@Nullable
public static FileReference findFileReference(@NotNull PsiElement element) {
public static PsiFileReference findFileReference(@NotNull PsiElement element) {
final PsiReference[] references = element.getReferences();
for (int i = references.length - 1; i >= 0; i--) {
PsiReference ref = references[i];
if (ref instanceof PsiDynaReference) {
ref = ((PsiDynaReference)ref).getLastFileReference();
if (ref instanceof FileReferenceOwner && !(ref instanceof PsiFileReference)) {
ref = ((FileReferenceOwner)ref).getLastFileReference();
}
if (ref instanceof FileReference) {
return (FileReference)references[i];
if (ref instanceof PsiFileReference) {
return (PsiFileReference)references[i];
}
}
return null;

View File

@@ -0,0 +1,26 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.psi.impl.source.resolve.reference.impl.providers;
import com.intellij.psi.PsiPolyVariantReference;
/**
* A reference that is known to resolve to a PsiFile.
*
* @author yole
*/
public interface PsiFileReference extends PsiPolyVariantReference {
}

View File

@@ -239,9 +239,9 @@ public class FilePathCompletionContributor extends CompletionContributor {
}
}
else if (original instanceof FileReferenceOwner) {
final FileReference fileReference = ((FileReferenceOwner)original).getLastFileReference();
if (fileReference != null) {
return Pair.create(fileReference, true);
final PsiFileReference fileReference = ((FileReferenceOwner)original).getLastFileReference();
if (fileReference instanceof FileReference) {
return Pair.create((FileReference) fileReference, true);
}
}

View File

@@ -25,6 +25,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
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.PsiFileReference;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
@@ -235,7 +236,7 @@ public class PsiDynaReference<T extends PsiElement> extends PsiReferenceBase<T>
}
@Override
public FileReference getLastFileReference() {
public PsiFileReference getLastFileReference() {
for (PsiReference reference : myReferences) {
if (reference instanceof FileReferenceOwner) {
return ((FileReferenceOwner)reference).getLastFileReference();

View File

@@ -59,7 +59,7 @@ import java.util.List;
/**
* @author cdr
*/
public class FileReference implements FileReferenceOwner, PsiPolyVariantReference,
public class FileReference implements PsiFileReference, FileReferenceOwner, PsiPolyVariantReference,
QuickFixProvider<FileReference>, LocalQuickFixProvider,
EmptyResolveMessageProvider, BindablePsiReference {

View File

@@ -20,8 +20,8 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
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.PsiFileReference;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
@@ -53,7 +53,7 @@ public class FileReferenceContextUtil {
final PsiReference[] refs = element.getReferences();
if (refs.length > 0 && refs[0] instanceof FileReferenceOwner) {
final FileReference ref = ((FileReferenceOwner)refs[0]).getLastFileReference();
final PsiFileReference ref = ((FileReferenceOwner)refs[0]).getLastFileReference();
if (ref != null) {
final ResolveResult[] results = ref.multiResolve(false);
for (ResolveResult result : results) {
@@ -120,7 +120,7 @@ public class FileReferenceContextUtil {
PsiReference[] refs = element.getReferences();
for (PsiReference ref : refs) {
if (ref instanceof FileReferenceOwner) {
final FileReference fileReference = ((FileReferenceOwner)refs[0]).getLastFileReference();
final PsiFileReference fileReference = ((FileReferenceOwner)refs[0]).getLastFileReference();
if (fileReference != null) {
try {
PsiElement newElement = fileReference.bindToElement(item);

View File

@@ -35,6 +35,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceUtil;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.PsiFileReference;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
@@ -313,7 +314,7 @@ public class IconsReferencesContributor extends PsiReferenceContributor implemen
value = value.getParent();
}
if (value != null) {
final FileReference reference = FileReferenceUtil.findFileReference(value);
final PsiFileReference reference = FileReferenceUtil.findFileReference(value);
if (reference != null) {
consumer.process(reference);
}

View File

@@ -18,7 +18,7 @@ package com.intellij.psi.impl.source.xml;
import com.intellij.lang.html.HTMLLanguage;
import com.intellij.lang.xhtml.XHTMLLanguage;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.PsiFileImpl;
@@ -83,7 +83,7 @@ public class XmlFileImpl extends PsiFileImpl implements XmlFile {
myType = getLanguage().getAssociatedFileType();
if (myType == null) {
VirtualFile virtualFile = getOriginalFile().getVirtualFile();
myType = virtualFile == null ? FileTypeManager.getInstance().getFileTypeByFileName(getName()) : virtualFile.getFileType();
myType = virtualFile == null ? FileTypeRegistry.getInstance().getFileTypeByFileName(getName()) : virtualFile.getFileType();
}
}
return myType;