From acc9d70dab9966946dd48ae378c8b3262ff47052 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 29 Nov 2011 13:41:07 +0400 Subject: [PATCH] KT-656 Convert java.lang.Iterable with full qualified name --- src/org/jetbrains/jet/j2k/Converter.java | 6 +-- .../jet/j2k/visitors/TypeVisitor.java | 40 ++++++++++++++++--- testData/ast/kotlinExclusion/file/kt-656.jav | 27 +++++++++++++ testData/ast/kotlinExclusion/file/kt-656.kt | 20 ++++++++++ 4 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 testData/ast/kotlinExclusion/file/kt-656.jav create mode 100644 testData/ast/kotlinExclusion/file/kt-656.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 945961f6171..6bd3d4b9c66 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -286,7 +286,7 @@ public class Converter { @NotNull private static Function methodToFunction(@NotNull PsiMethod method, boolean notEmpty) { final IdentifierImpl identifier = new IdentifierImpl(method.getName()); - final Type type = typeToType(method.getReturnType()); + final Type returnType = typeToType(method.getReturnType()); final Block body = blockToBlock(method.getBody(), notEmpty); final Element params = elementToElement(method.getParameterList()); final List typeParameters = elementsToElementList(method.getTypeParameters()); @@ -307,7 +307,7 @@ public class Converter { return new Constructor( identifier, modifiers, - type, + returnType, typeParameters, params, new Block(removeEmpty(body.getStatements()), false), @@ -317,7 +317,7 @@ public class Converter { return new Function( identifier, modifiers, - type, + returnType, typeParameters, params, body diff --git a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java index 26797cd9055..e04eda63173 100644 --- a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.util.AstUtil; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -46,12 +47,9 @@ public class TypeVisitor extends PsiTypeVisitor { @Override public Type visitClassType(PsiClassType classType) { - String classTypeName = createQualifiedName(classType); - if (classTypeName.isEmpty()) - classTypeName = getClassTypeName(classType); - List resolvedClassTypeParams = createRawTypesForResolvedReference(classType); + final IdentifierImpl identifier = constructClassTypeIdentifier(classType); + final List resolvedClassTypeParams = createRawTypesForResolvedReference(classType); - final IdentifierImpl identifier = new IdentifierImpl(classTypeName); if (classType.getParameterCount() == 0 && resolvedClassTypeParams.size() > 0) myResult = new ClassType(identifier, resolvedClassTypeParams); else @@ -59,6 +57,26 @@ public class TypeVisitor extends PsiTypeVisitor { return super.visitClassType(classType); } + @NotNull + private static IdentifierImpl constructClassTypeIdentifier(@NotNull PsiClassType classType) { + final PsiClass psiClass = classType.resolve(); + if (psiClass != null) { + String qualifiedName = psiClass.getQualifiedName(); + if (qualifiedName != null) { + if (qualifiedName.equals("java.lang.Iterable")) + return new IdentifierImpl("java.lang.Iterable"); + if (qualifiedName.equals("java.util.Iterator")) + return new IdentifierImpl("java.util.Iterator"); + } + } + final String classTypeName = createQualifiedName(classType); + + if (classTypeName.isEmpty()) + return new IdentifierImpl(getClassTypeName(classType)); + + return new IdentifierImpl(classTypeName); + } + @NotNull private static String createQualifiedName(@NotNull PsiClassType classType) { String classTypeName = ""; @@ -136,3 +154,15 @@ public class TypeVisitor extends PsiTypeVisitor { return super.visitDisjunctionType(disjunctionType); } } + +class Test implements Iterable { + @Override + public Iterator iterator() { + return null; + } + + public Iterator push(Iterator i) { + Iterator j = i; + return j; + } +} \ No newline at end of file diff --git a/testData/ast/kotlinExclusion/file/kt-656.jav b/testData/ast/kotlinExclusion/file/kt-656.jav new file mode 100644 index 00000000000..1c05dc9b7be --- /dev/null +++ b/testData/ast/kotlinExclusion/file/kt-656.jav @@ -0,0 +1,27 @@ +package demo; + +import java.util.Iterator; + +class Test implements Iterable { + @Override + public Iterator iterator() { + return null; + } + + public Iterator push(Iterator i) { + Iterator j = i; + return j; + } +} + +class FullTest implements java.lang.Iterable { + @Override + public java.util.Iterator iterator() { + return null; + } + + public java.util.Iterator push(java.util.Iterator i) { + java.util.Iterator j = i; + return j; + } +} \ No newline at end of file diff --git a/testData/ast/kotlinExclusion/file/kt-656.kt b/testData/ast/kotlinExclusion/file/kt-656.kt new file mode 100644 index 00000000000..f0e88acf7f6 --- /dev/null +++ b/testData/ast/kotlinExclusion/file/kt-656.kt @@ -0,0 +1,20 @@ +namespace demo +import java.util.Iterator +open class Test() : java.lang.Iterable { +override public fun iterator() : java.util.Iterator? { +return null +} +open public fun push(i : java.util.Iterator?) : java.util.Iterator? { +var j : java.util.Iterator? = i +return j +} +} +open class FullTest() : java.lang.Iterable { +override public fun iterator() : java.util.Iterator? { +return null +} +open public fun push(i : java.util.Iterator?) : java.util.Iterator? { +var j : java.util.Iterator? = i +return j +} +} \ No newline at end of file