generics dependency on raw type (IDEA-146395)

This commit is contained in:
Anna Kozlova
2015-10-15 18:14:05 +02:00
parent 1ccc83b667
commit bd72fa775d
4 changed files with 30 additions and 2 deletions

View File

@@ -118,7 +118,12 @@ class TypeCorrector extends PsiTypeMapper {
private PsiSubstitutor mapSubstitutor(PsiClass originalClass, PsiClass mappedClass, PsiSubstitutor substitutor) {
PsiTypeParameter[] typeParameters = mappedClass.getTypeParameters();
PsiTypeParameter[] originalTypeParameters = originalClass.getTypeParameters();
if (typeParameters.length != originalTypeParameters.length) return substitutor;
if (typeParameters.length != originalTypeParameters.length) {
if (originalTypeParameters.length == 0) {
return JavaPsiFacade.getElementFactory(mappedClass.getProject()).createRawSubstitutor(mappedClass);
}
return substitutor;
}
Map<PsiTypeParameter, PsiType> substitutionMap = substitutor.getSubstitutionMap();

View File

@@ -0,0 +1,9 @@
package p;
import java.util.Map;
public class Bar {
public static Map get() {
return null;
}
}

View File

@@ -0,0 +1,7 @@
package p;
import java.util.Map;
class Foo {
{
Map<String, String> m = Bar.get();
}
}

View File

@@ -22,7 +22,6 @@ import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.testFramework.IdeaTestCase;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.UsefulTestCase;
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
@@ -165,6 +164,14 @@ public class MultipleJdksHighlightingTest extends UsefulTestCase {
doTest3Modules();
}
public void testRawAssignmentToGenerics() throws Exception {
ModuleRootModificationUtil.addDependency(myJava7Module, myJava3Module);
final String name = getTestName(false);
myFixture.copyFileToProject("java3/p/" + name + ".java");
myFixture.configureByFiles("java7/p/" + name + ".java");
myFixture.checkHighlighting();
}
public void testCloseableAutoCloseable() {
IdeaTestUtil.setModuleLanguageLevel(myJava7Module, LanguageLevel.JDK_1_7);
ModuleRootModificationUtil.addDependency(myJava7Module, myJava3Module);