remap types according to the current place (IDEA-187378)

This commit is contained in:
Anna.Kozlova
2018-03-14 11:50:00 +01:00
parent 285da6d208
commit 4b9f5eee44
4 changed files with 25 additions and 5 deletions
@@ -28,8 +28,6 @@ import com.intellij.psi.search.searches.SuperMethodsSearch;
import com.intellij.psi.util.*;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.containers.ContainerUtil;
import java.util.HashMap;
import java.util.HashSet;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
@@ -1487,10 +1485,10 @@ public class GenericsHighlightUtil {
final PsiSubstitutor substitutor = resolveResult.getSubstitutor();
final GlobalSearchScope resolveScope = ref.getResolveScope();
message = isTypeAccessible(substitutor.substitute(method.getReturnType()), classes, false, resolveScope, facade);
message = isTypeAccessible(PsiClassImplUtil.correctType(substitutor.substitute(method.getReturnType()), resolveScope), classes, false, resolveScope, facade);
if (message == null) {
for (PsiType type : method.getSignature(substitutor).getParameterTypes()) {
message = isTypeAccessible(type, classes, false, resolveScope, facade);
message = isTypeAccessible(PsiClassImplUtil.correctType(type, resolveScope), classes, false, resolveScope, facade);
if (message != null) {
break;
}
@@ -1503,7 +1501,7 @@ public class GenericsHighlightUtil {
if (resolve instanceof PsiField) {
final GlobalSearchScope resolveScope = ref.getResolveScope();
final JavaPsiFacade facade = JavaPsiFacade.getInstance(ref.getProject());
message = isTypeAccessible(((PsiField)resolve).getType(), new HashSet<>(), false, resolveScope, facade);
message = isTypeAccessible(PsiClassImplUtil.correctType(((PsiField)resolve).getType(), resolveScope), new HashSet<>(), false, resolveScope, facade);
}
}
@@ -0,0 +1,8 @@
package p;
class Class1 {
void f(I i) {
java.io.ObjectInput input = i.get();
}
}
@@ -0,0 +1,5 @@
package p;
interface I {
java.io.ObjectInput get();
}
@@ -186,6 +186,15 @@ public class MultipleJdksHighlightingTest extends UsefulTestCase {
myFixture.checkHighlighting();
}
public void testDependsOnNewerJdk() {
IdeaTestUtil.setModuleLanguageLevel(myJava7Module, LanguageLevel.JDK_1_7);
ModuleRootModificationUtil.addDependency(myJava3Module, myJava7Module);
final String name = getTestName(false);
myFixture.copyFileToProject("java7/p/" + name + ".java");
myFixture.configureByFiles("java3/p/" + name + ".java");
myFixture.checkHighlighting();
}
public void testMissedAutoCloseable() {
IdeaTestUtil.setModuleLanguageLevel(myJava7Module, LanguageLevel.JDK_1_7);
ModuleRootModificationUtil.addDependency(myJava3Module, myJava7Module);