fixed raw generic types fir KT-540
This commit is contained in:
@@ -6,6 +6,9 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.j2k.ast.*;
|
import org.jetbrains.jet.j2k.ast.*;
|
||||||
import org.jetbrains.jet.j2k.util.AstUtil;
|
import org.jetbrains.jet.j2k.util.AstUtil;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.jet.j2k.Converter.typeToType;
|
import static org.jetbrains.jet.j2k.Converter.typeToType;
|
||||||
import static org.jetbrains.jet.j2k.Converter.typesToTypeList;
|
import static org.jetbrains.jet.j2k.Converter.typesToTypeList;
|
||||||
|
|
||||||
@@ -43,9 +46,23 @@ public class TypeVisitor extends PsiTypeVisitor<Type> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Type visitClassType(PsiClassType classType) {
|
public Type visitClassType(PsiClassType classType) {
|
||||||
String classTypeName = getClassTypeName(classType);
|
String classTypeName = createQualifiedName(classType);
|
||||||
|
if (classTypeName.equals(""))
|
||||||
|
classTypeName = getClassTypeName(classType);
|
||||||
|
List<Type> resolvedClassTypeParams = createRawTypesForResolvedReference(classType);
|
||||||
|
|
||||||
if (classType instanceof PsiClassReferenceType) { // TODO: simplify
|
final IdentifierImpl identifier = new IdentifierImpl(classTypeName);
|
||||||
|
if (classType.getParameterCount() == 0 && resolvedClassTypeParams.size() > 0)
|
||||||
|
myResult = new ClassType(identifier, resolvedClassTypeParams);
|
||||||
|
else
|
||||||
|
myResult = new ClassType(identifier, typesToTypeList(classType.getParameters()));
|
||||||
|
return super.visitClassType(classType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private static String createQualifiedName(@NotNull PsiClassType classType) {
|
||||||
|
String classTypeName = "";
|
||||||
|
if (classType instanceof PsiClassReferenceType) {
|
||||||
final PsiJavaCodeReferenceElement reference = ((PsiClassReferenceType) classType).getReference();
|
final PsiJavaCodeReferenceElement reference = ((PsiClassReferenceType) classType).getReference();
|
||||||
if (reference.isQualified()) {
|
if (reference.isQualified()) {
|
||||||
String result = new IdentifierImpl(reference.getReferenceName()).toKotlin();
|
String result = new IdentifierImpl(reference.getReferenceName()).toKotlin();
|
||||||
@@ -58,12 +75,23 @@ public class TypeVisitor extends PsiTypeVisitor<Type> {
|
|||||||
classTypeName = result;
|
classTypeName = result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return classTypeName;
|
||||||
|
}
|
||||||
|
|
||||||
myResult = new ClassType(
|
@NotNull
|
||||||
new IdentifierImpl(classTypeName),
|
private static List<Type> createRawTypesForResolvedReference(@NotNull PsiClassType classType) {
|
||||||
typesToTypeList(classType.getParameters())
|
final List<Type> typeParams = new LinkedList<Type>();
|
||||||
);
|
if (classType instanceof PsiClassReferenceType) {
|
||||||
return super.visitClassType(classType);
|
final PsiJavaCodeReferenceElement reference = ((PsiClassReferenceType) classType).getReference();
|
||||||
|
final PsiElement resolve = reference.resolve();
|
||||||
|
if (resolve != null) {
|
||||||
|
if (resolve instanceof PsiClass)
|
||||||
|
//noinspection UnusedDeclaration
|
||||||
|
for (PsiTypeParameter p : ((PsiClass) resolve).getTypeParameters())
|
||||||
|
typeParams.add(new StarProjectionType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return typeParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ namespace test {
|
|||||||
import java.util.List
|
import java.util.List
|
||||||
open class User() {
|
open class User() {
|
||||||
open fun main() : Unit {
|
open fun main() : Unit {
|
||||||
var list : List? = java.util.LinkedList()
|
var list : List<*>? = java.util.LinkedList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
namespace test {
|
namespace test {
|
||||||
open class User() {
|
open class User() {
|
||||||
open fun main() : Unit {
|
open fun main() : Unit {
|
||||||
var list : java.util.List? = java.util.LinkedList()
|
var list : java.util.List<*>? = java.util.LinkedList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package demo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
class Test {
|
||||||
|
void main() {
|
||||||
|
List<String> common = new LinkedList<String>();
|
||||||
|
List raw = new LinkedList<String>();
|
||||||
|
List superRaw = new LinkedList();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
namespace demo {
|
||||||
|
import java.util.List
|
||||||
|
import java.util.LinkedList
|
||||||
|
open class Test() {
|
||||||
|
open fun main() : Unit {
|
||||||
|
var common : List<String?>? = LinkedList<String?>()
|
||||||
|
var raw : List<*>? = LinkedList<String?>()
|
||||||
|
var superRaw : List<*>? = LinkedList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user