summaryrefslogtreecommitdiff
path: root/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-psi-impl/src/com/intellij/psi/impl/source/resolve')
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ClassResolverProcessor.java10
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java4
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java5
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ResolveClassUtil.java9
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/VariableResolverProcessor.java14
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java4
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java5
7 files changed, 31 insertions, 20 deletions
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ClassResolverProcessor.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ClassResolverProcessor.java
index b109372cc882..a2e5593478eb 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ClassResolverProcessor.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ClassResolverProcessor.java
@@ -35,6 +35,8 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
private static final String[] DEFAULT_PACKAGES = {CommonClassNames.DEFAULT_PACKAGE};
private final String myClassName;
+ @NotNull
+ private final PsiFile myContainingFile;
private final PsiElement myPlace;
private PsiClass myAccessClass = null;
private List<ClassCandidateInfo> myCandidates = null;
@@ -43,8 +45,9 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
private JavaResolveResult[] myResult = JavaResolveResult.EMPTY_ARRAY;
private PsiElement myCurrentFileContext;
- public ClassResolverProcessor(String className, @NotNull PsiElement startPlace, PsiFile containingFile) {
+ public ClassResolverProcessor(@NotNull String className, @NotNull PsiElement startPlace, @NotNull PsiFile containingFile) {
myClassName = className;
+ myContainingFile = containingFile;
PsiElement place = containingFile instanceof JavaCodeFragment && ((JavaCodeFragment)containingFile).getVisibilityChecker() != null ? null : startPlace;
myPlace = place;
if (place instanceof PsiJavaCodeReferenceElement) {
@@ -111,7 +114,7 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
String fqn = psiClass.getQualifiedName();
if (fqn == null) return false;
- PsiFile file = myPlace == null ? null : FileContextUtil.getContextFile(myPlace);
+ PsiFile file = myPlace == null ? null : FileContextUtil.getContextFile(myContainingFile);
String[] defaultPackages = file instanceof PsiJavaFile ? ((PsiJavaFile)file).getImplicitlyImportedPackages() : DEFAULT_PACKAGES;
String packageName = StringUtil.getPackageName(fqn);
@@ -123,9 +126,8 @@ public class ClassResolverProcessor extends BaseScopeProcessor implements NameHi
return file instanceof PsiJavaFile && ((PsiJavaFile)file).getPackageName().equals(packageName);
}
- private Domination dominates(PsiClass aClass, boolean accessible, String fqName, ClassCandidateInfo info) {
+ private Domination dominates(@NotNull PsiClass aClass, boolean accessible, @NotNull String fqName, @NotNull ClassCandidateInfo info) {
final PsiClass otherClass = info.getElement();
- assert otherClass != null;
String otherQName = otherClass.getQualifiedName();
if (fqName.equals(otherQName)) {
return Domination.DOMINATED_BY;
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java
index 20db589bef5c..ebeebe24b88d 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java
@@ -225,7 +225,7 @@ public class JavaResolveUtil {
return true;
}
- public static void substituteResults(final @NotNull PsiJavaCodeReferenceElement ref, @NotNull JavaResolveResult[] result) {
+ public static void substituteResults(@NotNull final PsiJavaCodeReferenceElement ref, @NotNull JavaResolveResult[] result) {
if (result.length > 0 && result[0].getElement() instanceof PsiClass) {
for (int i = 0; i < result.length; i++) {
final CandidateInfo resolveResult = (CandidateInfo)result[i];
@@ -247,7 +247,7 @@ public class JavaResolveUtil {
@NotNull
public static <T extends PsiPolyVariantReference> JavaResolveResult[] resolveWithContainingFile(@NotNull T ref,
- @NotNull ResolveCache.PolyVariantResolver<T> resolver,
+ @NotNull ResolveCache.PolyVariantContextResolver<T> resolver,
boolean needToPreventRecursion,
boolean incompleteCode,
@NotNull PsiFile containingFile) {
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
index 59c8d7f386a1..556bf7152b68 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
@@ -80,8 +80,9 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
final PsiJavaParserFacade parserFacade = JavaPsiFacade.getInstance(myManager.getProject()).getParserFacade();
try {
final PsiJavaCodeReferenceElement ref = parserFacade.createReferenceFromText(referenceText, context);
- LOG.assertTrue(ref.isValid(), referenceText);
- return ResolveClassUtil.resolveClass(ref);
+ PsiFile containingFile = ref.getContainingFile();
+ LOG.assertTrue(containingFile.isValid(), referenceText);
+ return ResolveClassUtil.resolveClass(ref, containingFile);
}
catch (IncorrectOperationException e) {
return null;
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ResolveClassUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ResolveClassUtil.java
index 9c3505c160d3..2bedff69ed04 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ResolveClassUtil.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/ResolveClassUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -20,15 +20,16 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl;
import com.intellij.psi.scope.util.PsiScopesUtil;
import com.intellij.psi.util.PsiUtil;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ResolveClassUtil {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.resolve.ResolveClassUtil");
@Nullable
- public static PsiClass resolveClass(PsiJavaCodeReferenceElement ref) {
+ public static PsiClass resolveClass(@NotNull PsiJavaCodeReferenceElement ref, @NotNull PsiFile containingFile) {
if (ref instanceof PsiJavaCodeReferenceElementImpl &&
- ((PsiJavaCodeReferenceElementImpl)ref).getKind() == PsiJavaCodeReferenceElementImpl.CLASS_IN_QUALIFIED_NEW_KIND) {
+ ((PsiJavaCodeReferenceElementImpl)ref).getKind(containingFile) == PsiJavaCodeReferenceElementImpl.CLASS_IN_QUALIFIED_NEW_KIND) {
PsiElement parent = ref.getParent();
if (parent instanceof PsiAnonymousClass){
parent = parent.getParent();
@@ -63,7 +64,7 @@ public class ResolveClassUtil {
long time1 = System.currentTimeMillis();
*/
- ClassResolverProcessor processor = new ClassResolverProcessor(className, ref, ref.getContainingFile());
+ ClassResolverProcessor processor = new ClassResolverProcessor(className, ref, containingFile);
PsiScopesUtil.resolveAndWalk(processor, ref, null);
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/VariableResolverProcessor.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/VariableResolverProcessor.java
index ead814a8ef63..123e750e0a1a 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/VariableResolverProcessor.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/VariableResolverProcessor.java
@@ -41,7 +41,7 @@ public class VariableResolverProcessor extends ConflictFilterProcessor implement
private final PsiClass myAccessClass;
private PsiElement myCurrentFileContext = null;
- public VariableResolverProcessor(@NotNull PsiJavaCodeReferenceElement place, PsiFile placeFile) {
+ public VariableResolverProcessor(@NotNull PsiJavaCodeReferenceElement place, @NotNull PsiFile placeFile) {
super(place.getText(), ourFilter, new PsiConflictResolver[]{new JavaVariableConflictResolver()}, new SmartList<CandidateInfo>(), place, placeFile);
PsiElement referenceName = place.getReferenceNameElement();
@@ -54,16 +54,20 @@ public class VariableResolverProcessor extends ConflictFilterProcessor implement
final JavaResolveResult accessClass = PsiUtil.getAccessObjectClass((PsiExpression)qualifier);
final PsiElement element = accessClass.getElement();
if (element instanceof PsiTypeParameter) {
- PsiElementFactory factory = JavaPsiFacade.getInstance(element.getProject()).getElementFactory();
+ PsiElementFactory factory = JavaPsiFacade.getInstance(placeFile.getProject()).getElementFactory();
final PsiClassType type = factory.createType((PsiTypeParameter)element);
final PsiType accessType = accessClass.getSubstitutor().substitute(type);
if (accessType instanceof PsiArrayType) {
- LanguageLevel languageLevel = PsiUtil.getLanguageLevel(qualifier);
+ LanguageLevel languageLevel = PsiUtil.getLanguageLevel(placeFile);
access = factory.getArrayClass(languageLevel);
}
- else if (accessType instanceof PsiClassType) access = ((PsiClassType)accessType).resolve();
+ else if (accessType instanceof PsiClassType) {
+ access = ((PsiClassType)accessType).resolve();
+ }
+ }
+ else if (element instanceof PsiClass) {
+ access = (PsiClass)element;
}
- else if (element instanceof PsiClass) access = (PsiClass)element;
}
myAccessClass = access;
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
index 361462430105..9d9c373159f9 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
@@ -1070,7 +1070,7 @@ public class InferenceSession {
session.addConstraint(new StrictSubtypingConstraint(tReturnType, sReturnType));
return true;
} else {
- return TypeConversionUtil.isAssignable(sReturnType, tReturnType);
+ return sReturnType != null && tReturnType != null && TypeConversionUtil.isAssignable(tReturnType, sReturnType);
}
}
}
@@ -1115,7 +1115,7 @@ public class InferenceSession {
session.addConstraint(new StrictSubtypingConstraint(tReturnType, sReturnType));
return true;
} else {
- return TypeConversionUtil.isAssignable(sReturnType, tReturnType);
+ return sReturnType != null && tReturnType != null && TypeConversionUtil.isAssignable(tReturnType, sReturnType);
}
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java
index 6ff17092dfd6..67097df574a0 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java
@@ -65,7 +65,10 @@ public abstract class InputOutputConstraintFormula implements ConstraintFormula
}
}
- collectReturnTypeVariables(session, psiExpression, substitutor.substitute(interfaceMethod.getReturnType()), result);
+ final PsiType returnType = interfaceMethod.getReturnType();
+ if (returnType != null) {
+ collectReturnTypeVariables(session, psiExpression, substitutor.substitute(returnType), result);
+ }
return result;
}