Fixed EA-70681

This commit is contained in:
Valentin Kipyatkov
2015-07-28 14:35:44 +03:00
parent 8f940b07fb
commit 9d84e4b60a
6 changed files with 38 additions and 18 deletions
@@ -16,28 +16,21 @@
package org.jetbrains.kotlin.j2k
import org.jetbrains.kotlin.j2k.ast.Type
import org.jetbrains.kotlin.j2k.ast.Nullability
import com.intellij.psi.*
import org.jetbrains.kotlin.j2k.ast.assignPrototype
import com.intellij.psi.CommonClassNames.JAVA_LANG_OBJECT
import org.jetbrains.kotlin.j2k.ast.assignNoPrototype
import org.jetbrains.kotlin.j2k.ast.ErrorType
import com.intellij.codeInsight.NullableNotNullManager
import org.jetbrains.kotlin.j2k.ast.ArrayType
import org.jetbrains.kotlin.j2k.ast.ClassType
import org.jetbrains.kotlin.j2k.ast.ReferenceElement
import org.jetbrains.kotlin.j2k.ast.Identifier
import java.util.HashMap
import org.jetbrains.kotlin.j2k.ast.Mutability
import java.util.HashSet
import com.intellij.psi.*
import com.intellij.psi.CommonClassNames.JAVA_LANG_OBJECT
import org.jetbrains.kotlin.asJava.KotlinLightElement
import org.jetbrains.kotlin.psi.JetCallableDeclaration
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.j2k.ast.*
import org.jetbrains.kotlin.psi.JetCallableDeclaration
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.types.TypeUtils
import java.util.HashMap
import java.util.HashSet
class TypeConverter(val converter: Converter) {
private val typesBeingConverted = HashSet<PsiType>()
public fun convertType(
type: PsiType?,
nullability: Nullability = Nullability.Default,
@@ -46,7 +39,14 @@ class TypeConverter(val converter: Converter) {
): Type {
if (type == null) return ErrorType().assignNoPrototype()
if (!typesBeingConverted.add(type)) { // recursion in conversion
return ErrorType().assignNoPrototype()
}
val result = type.accept<Type>(TypeVisitor(converter, type, mutability, inAnnotationType))!!.assignNoPrototype()
typesBeingConverted.remove(type)
return when (nullability) {
Nullability.NotNull -> result.toNotNullType()
Nullability.Nullable -> result.toNullableType()
@@ -106,7 +106,7 @@ class TypeVisitor(
if (targetClass != null) {
return targetClass.getTypeParameters().map {
val superType = it.getSuperTypes().first() // there must be at least one super type always
ClassType(constructReferenceElement(superType, mutability), Nullability.Default, converter.settings).assignNoPrototype()
typeConverter.convertType(superType, Nullability.Default, mutability, inAnnotationType).assignNoPrototype()
}
}
}
+5
View File
@@ -0,0 +1,5 @@
class JavaClass1<T extends JavaClass2> {
}
class JavaClass2<T extends JavaClass1> {
}
+3
View File
@@ -0,0 +1,3 @@
class JavaClass1<T : JavaClass2<JavaClass1<???>>>
class JavaClass2<T : JavaClass1<JavaClass2<???>>>
@@ -3709,6 +3709,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/rawGenerics"), Pattern.compile("^(.+)\\.java$"), true);
}
@TestMetadata("cycle.java")
public void testCycle() throws Exception {
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/rawGenerics/cycle.java");
doTest(fileName);
}
@TestMetadata("kt-540.java")
public void testKt_540() throws Exception {
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/rawGenerics/kt-540.java");
@@ -3709,6 +3709,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/rawGenerics"), Pattern.compile("^(.+)\\.java$"), true);
}
@TestMetadata("cycle.java")
public void testCycle() throws Exception {
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/rawGenerics/cycle.java");
doTest(fileName);
}
@TestMetadata("kt-540.java")
public void testKt_540() throws Exception {
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/rawGenerics/kt-540.java");