From 112d64b2285a6f538e8fe48ac10c13cc388aa3bf Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 21 May 2012 17:15:56 +0200 Subject: [PATCH] types AST converted to Kotlin --- src/org/jetbrains/jet/j2k/Converter.java | 17 +++-- .../jetbrains/jet/j2k/ast/AnonymousClass.java | 1 + .../jet/j2k/ast/ArrayInitializerExpression.kt | 1 + src/org/jetbrains/jet/j2k/ast/ArrayType.java | 49 -------------- .../ArrayWithoutInitializationExpression.kt | 4 +- src/org/jetbrains/jet/j2k/ast/Class.java | 5 ++ src/org/jetbrains/jet/j2k/ast/ClassType.java | 57 ----------------- src/org/jetbrains/jet/j2k/ast/Constructor.kt | 1 + src/org/jetbrains/jet/j2k/ast/Enum.java | 1 + .../jetbrains/jet/j2k/ast/EnumConstant.java | 1 + .../jetbrains/jet/j2k/ast/ExpressionList.java | 1 + src/org/jetbrains/jet/j2k/ast/Field.java | 1 + src/org/jetbrains/jet/j2k/ast/Function.kt | 1 + .../jet/j2k/ast/InProjectionType.java | 36 ----------- .../jetbrains/jet/j2k/ast/LocalVariable.java | 1 + .../jet/j2k/ast/MethodCallExpression.java | 1 + .../jet/j2k/ast/OutProjectionType.java | 36 ----------- src/org/jetbrains/jet/j2k/ast/Parameter.java | 1 + .../jetbrains/jet/j2k/ast/PrimitiveType.java | 41 ------------ .../jet/j2k/ast/ReferenceElement.java | 1 + .../jet/j2k/ast/StarProjectionType.java | 30 --------- src/org/jetbrains/jet/j2k/ast/Trait.java | 1 + src/org/jetbrains/jet/j2k/ast/Type.java | 64 ------------------- .../jet/j2k/ast/TypeCastExpression.java | 1 + .../jetbrains/jet/j2k/ast/TypeElement.java | 1 + .../jetbrains/jet/j2k/ast/TypeParameter.java | 1 + src/org/jetbrains/jet/j2k/ast/VarArg.java | 42 ------------ .../jetbrains/jet/j2k/ast/types/ArrayType.kt | 17 +++++ .../jetbrains/jet/j2k/ast/types/ClassType.kt | 25 ++++++++ .../jetbrains/jet/j2k/ast/types/EmptyType.kt | 5 ++ .../jet/j2k/ast/types/InProjectionType.kt | 5 ++ .../jet/j2k/ast/types/OutProjectionType.kt | 5 ++ .../jet/j2k/ast/types/PrimitiveType.kt | 7 ++ .../jet/j2k/ast/types/StarProjectionType.kt | 5 ++ src/org/jetbrains/jet/j2k/ast/types/Type.kt | 20 ++++++ src/org/jetbrains/jet/j2k/ast/types/VarArg.kt | 9 +++ .../jet/j2k/visitors/ElementVisitor.java | 1 + .../jet/j2k/visitors/ExpressionVisitor.java | 5 +- .../jet/j2k/visitors/TypeVisitor.java | 12 ++-- 39 files changed, 143 insertions(+), 370 deletions(-) delete mode 100644 src/org/jetbrains/jet/j2k/ast/ArrayType.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/ClassType.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/InProjectionType.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/OutProjectionType.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/PrimitiveType.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/StarProjectionType.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/Type.java delete mode 100644 src/org/jetbrains/jet/j2k/ast/VarArg.java create mode 100644 src/org/jetbrains/jet/j2k/ast/types/ArrayType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/ClassType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/EmptyType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/InProjectionType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/OutProjectionType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/PrimitiveType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/StarProjectionType.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/Type.kt create mode 100644 src/org/jetbrains/jet/j2k/ast/types/VarArg.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 2b6dcb8a996..3d3cba9f6c6 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -24,6 +24,9 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.ast.*; import org.jetbrains.jet.j2k.ast.Class; import org.jetbrains.jet.j2k.ast.Enum; +import org.jetbrains.jet.j2k.ast.types.ClassType; +import org.jetbrains.jet.j2k.ast.types.EmptyType; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import org.jetbrains.jet.j2k.visitors.*; import org.jetbrains.jet.lang.types.expressions.OperatorConventions; @@ -295,7 +298,7 @@ public class Converter { new Constructor( Identifier.EMPTY_IDENTIFIER, Collections.emptySet(), - new ClassType(name), + new ClassType(name, Collections.emptyList(), false), Collections.emptyList(), new ParameterList(createParametersFromFields(finalOrWithEmptyInitializer)), new Block(createInitStatementsFromFields(finalOrWithEmptyInitializer)), @@ -323,7 +326,7 @@ public class Converter { @NotNull public static String getDefaultInitializer(@NotNull Field f) { - if (f.getType().isNullable()) { + if (f.getType().getNullable()) { return "null"; } else { @@ -602,7 +605,7 @@ public class Converter { @NotNull public Type typeToType(@Nullable PsiType type) { - if (type == null) return Type.EMPTY_TYPE; + if (type == null) return new EmptyType(); TypeVisitor typeVisitor = new TypeVisitor(this); type.accept(typeVisitor); return typeVisitor.getResult(); @@ -619,15 +622,17 @@ public class Converter { public Type typeToType(PsiType type, boolean notNull) { Type result = typeToType(type); if (notNull) { - result.convertedToNotNull(); + return result.convertedToNotNull(); } return result; } @NotNull private List typesToNotNullableTypeList(@NotNull PsiType[] types) { - List result = new LinkedList(typesToTypeList(types)); - for (Type p : result) p.convertedToNotNull(); + List result = new ArrayList(); + for (PsiType type : types) { + result.add(typeToType(type).convertedToNotNull()); + } return result; } diff --git a/src/org/jetbrains/jet/j2k/ast/AnonymousClass.java b/src/org/jetbrains/jet/j2k/ast/AnonymousClass.java index 8a547b26aab..d533ecad252 100644 --- a/src/org/jetbrains/jet/j2k/ast/AnonymousClass.java +++ b/src/org/jetbrains/jet/j2k/ast/AnonymousClass.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.j2k.Converter; +import org.jetbrains.jet.j2k.ast.types.Type; import java.util.Collections; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.kt b/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.kt index bc0b6ed98a5..6a2c711e429 100644 --- a/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.kt +++ b/src/org/jetbrains/jet/j2k/ast/ArrayInitializerExpression.kt @@ -1,6 +1,7 @@ package org.jetbrains.jet.j2k.ast import org.jetbrains.jet.j2k.util.AstUtil +import org.jetbrains.jet.j2k.ast.types.Type import org.jetbrains.jet.lang.types.expressions.OperatorConventions import java.util.* diff --git a/src/org/jetbrains/jet/j2k/ast/ArrayType.java b/src/org/jetbrains/jet/j2k/ast/ArrayType.java deleted file mode 100644 index 6c651bd39aa..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/ArrayType.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class ArrayType extends Type { - private final Type myType; - - public ArrayType(Type type) { - myType = type; - } - - public Type getInnerType() { - return myType; - } - - @NotNull - @Override - public Kind getKind() { - return Kind.ARRAY_TYPE; - } - - @NotNull - @Override - public String toKotlin() { - if (PRIMITIVE_TYPES.contains(myType.toKotlin().toLowerCase())) { - return myType.toKotlin() + "Array" + isNullableStr(); // returns IntArray, BooleanArray, etc. - } - return "Array" + "<" + myType.toKotlin() + ">" + isNullableStr(); - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt b/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt index db384ab56b9..55a8dc1dc73 100644 --- a/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt +++ b/src/org/jetbrains/jet/j2k/ast/ArrayWithoutInitializationExpression.kt @@ -1,7 +1,9 @@ package org.jetbrains.jet.j2k.ast import org.jetbrains.jet.j2k.util.AstUtil +import org.jetbrains.jet.j2k.ast.types.ArrayType import java.util.List +import org.jetbrains.jet.j2k.ast.types.Type public open class ArrayWithoutInitializationExpression(val `type` : Type, val expressions : List) : Expression() { public override fun toKotlin() : String { @@ -19,7 +21,7 @@ public open class ArrayWithoutInitializationExpression(val `type` : Type, val ex return oneDim(hostType, expressions[0]) } - var innerType : Type? = hostType.getInnerType() + var innerType : Type? = hostType.elementType if (expressions.size() > 1 && innerType?.getKind() == INode.Kind.ARRAY_TYPE) { return oneDim(hostType, expressions[0], "{" + constructInnerType(innerType as ArrayType, expressions.subList(1, expressions.size())) + "}") diff --git a/src/org/jetbrains/jet/j2k/ast/Class.java b/src/org/jetbrains/jet/j2k/ast/Class.java index 0d7a5e65595..a9a9b536986 100644 --- a/src/org/jetbrains/jet/j2k/ast/Class.java +++ b/src/org/jetbrains/jet/j2k/ast/Class.java @@ -20,6 +20,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.J2KConverterFlags; +import org.jetbrains.jet.j2k.ast.types.ClassType; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import java.util.HashSet; @@ -45,6 +47,9 @@ public class Class extends Member { public Class(Converter converter, Identifier name, Set modifiers, List typeParameters, List extendsTypes, List baseClassParams, List implementsTypes, List members) { super(modifiers); + if (extendsTypes.size() > 0) { + System.out.println("here"); + } myName = name; myBaseClassParams = baseClassParams; myTypeParameters = typeParameters; diff --git a/src/org/jetbrains/jet/j2k/ast/ClassType.java b/src/org/jetbrains/jet/j2k/ast/ClassType.java deleted file mode 100644 index 860c73cf0e3..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/ClassType.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.j2k.util.AstUtil; - -import java.util.Collections; -import java.util.List; - -/** - * @author ignatov - */ -public class ClassType extends Type { - private final Identifier myType; - private final List myParameters; - - public ClassType(Identifier type, List parameters, boolean nullable) { - myType = type; - myParameters = parameters; - myNullable = nullable; - } - - public ClassType(Identifier type, List parameters) { - myType = type; - myParameters = parameters; - } - - public ClassType(Identifier type) { - myType = type; - myNullable = false; - myParameters = Collections.emptyList(); - } - - @NotNull - @Override - public String toKotlin() { - String params = myParameters.size() == 0 - ? EMPTY - : "<" + AstUtil.joinNodes(myParameters, COMMA_WITH_SPACE) + ">"; - return myType.toKotlin() + params + isNullableStr(); - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/Constructor.kt b/src/org/jetbrains/jet/j2k/ast/Constructor.kt index ded371a6ae6..5515c532578 100644 --- a/src/org/jetbrains/jet/j2k/ast/Constructor.kt +++ b/src/org/jetbrains/jet/j2k/ast/Constructor.kt @@ -3,6 +3,7 @@ package org.jetbrains.jet.j2k.ast import java.util.List import java.util.Set import org.jetbrains.jet.j2k.ast.INode.Kind +import org.jetbrains.jet.j2k.ast.types.Type public open class Constructor(identifier : Identifier, modifiers : Set, diff --git a/src/org/jetbrains/jet/j2k/ast/Enum.java b/src/org/jetbrains/jet/j2k/ast/Enum.java index 2310a273db0..b234d578da9 100644 --- a/src/org/jetbrains/jet/j2k/ast/Enum.java +++ b/src/org/jetbrains/jet/j2k/ast/Enum.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.j2k.Converter; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/ast/EnumConstant.java b/src/org/jetbrains/jet/j2k/ast/EnumConstant.java index 990a56501a0..014165d33fb 100644 --- a/src/org/jetbrains/jet/j2k/ast/EnumConstant.java +++ b/src/org/jetbrains/jet/j2k/ast/EnumConstant.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import java.util.Set; diff --git a/src/org/jetbrains/jet/j2k/ast/ExpressionList.java b/src/org/jetbrains/jet/j2k/ast/ExpressionList.java index 5d26a57c56c..4387b065e43 100644 --- a/src/org/jetbrains/jet/j2k/ast/ExpressionList.java +++ b/src/org/jetbrains/jet/j2k/ast/ExpressionList.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/ast/Field.java b/src/org/jetbrains/jet/j2k/ast/Field.java index b9d38e23ef7..91482dd8990 100644 --- a/src/org/jetbrains/jet/j2k/ast/Field.java +++ b/src/org/jetbrains/jet/j2k/ast/Field.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import java.util.LinkedList; diff --git a/src/org/jetbrains/jet/j2k/ast/Function.kt b/src/org/jetbrains/jet/j2k/ast/Function.kt index 676f0628308..c0f9ef5b845 100644 --- a/src/org/jetbrains/jet/j2k/ast/Function.kt +++ b/src/org/jetbrains/jet/j2k/ast/Function.kt @@ -4,6 +4,7 @@ import org.jetbrains.jet.j2k.util.AstUtil import java.util.LinkedList import java.util.List import java.util.Set +import org.jetbrains.jet.j2k.ast.types.Type public open class Function(val name : Identifier, modifiers : Set, diff --git a/src/org/jetbrains/jet/j2k/ast/InProjectionType.java b/src/org/jetbrains/jet/j2k/ast/InProjectionType.java deleted file mode 100644 index 9849ee47d58..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/InProjectionType.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class InProjectionType extends Type { - private final Type myBound; - - public InProjectionType(Type bound) { - myBound = bound; - } - - @NotNull - @Override - public String toKotlin() { - return "in" + SPACE + myBound.toKotlin(); - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/LocalVariable.java b/src/org/jetbrains/jet/j2k/ast/LocalVariable.java index 6d3d411ba13..e2925caf0e2 100644 --- a/src/org/jetbrains/jet/j2k/ast/LocalVariable.java +++ b/src/org/jetbrains/jet/j2k/ast/LocalVariable.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import java.util.Set; diff --git a/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java b/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java index 481b8fad792..6b2a557e9de 100644 --- a/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/MethodCallExpression.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/ast/OutProjectionType.java b/src/org/jetbrains/jet/j2k/ast/OutProjectionType.java deleted file mode 100644 index 0d91c4b9e5d..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/OutProjectionType.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class OutProjectionType extends Type { - private final Type myBound; - - public OutProjectionType(Type bound) { - myBound = bound; - } - - @NotNull - @Override - public String toKotlin() { - return "out" + SPACE + myBound.toKotlin(); - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/Parameter.java b/src/org/jetbrains/jet/j2k/ast/Parameter.java index b20caf83fd0..39a522c8072 100644 --- a/src/org/jetbrains/jet/j2k/ast/Parameter.java +++ b/src/org/jetbrains/jet/j2k/ast/Parameter.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; /** * @author ignatov diff --git a/src/org/jetbrains/jet/j2k/ast/PrimitiveType.java b/src/org/jetbrains/jet/j2k/ast/PrimitiveType.java deleted file mode 100644 index 63ff3f900f9..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/PrimitiveType.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class PrimitiveType extends Type { - private final Identifier myType; - - public PrimitiveType(Identifier type) { - myType = type; - } - - @Override - public boolean isNullable() { - return false; - } - - @NotNull - @Override - public String toKotlin() { - return myType.toKotlin(); - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java b/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java index eb2cff5d92d..029e56fad5e 100644 --- a/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java +++ b/src/org/jetbrains/jet/j2k/ast/ReferenceElement.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.j2k.util.AstUtil; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/ast/StarProjectionType.java b/src/org/jetbrains/jet/j2k/ast/StarProjectionType.java deleted file mode 100644 index 456debe4a70..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/StarProjectionType.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class StarProjectionType extends Type { - @NotNull - @Override - public String toKotlin() { - return STAR; - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/Trait.java b/src/org/jetbrains/jet/j2k/ast/Trait.java index ecaffa79427..b4773460ee2 100644 --- a/src/org/jetbrains/jet/j2k/ast/Trait.java +++ b/src/org/jetbrains/jet/j2k/ast/Trait.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.jet.j2k.Converter; +import org.jetbrains.jet.j2k.ast.types.Type; import java.util.List; import java.util.Set; diff --git a/src/org/jetbrains/jet/j2k/ast/Type.java b/src/org/jetbrains/jet/j2k/ast/Type.java deleted file mode 100644 index b58d92fdc2e..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/Type.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public abstract class Type extends Element { - @NotNull - public static final Type EMPTY_TYPE = new EmptyType(); - boolean myNullable = true; - - @NotNull - @Override - public Kind getKind() { - return Kind.TYPE; - } - - @NotNull - public Type convertedToNotNull() { - myNullable = false; - return this; - } - - public boolean isNullable() { - return myNullable; - } - - String isNullableStr() { - return isNullable() ? QUEST : EMPTY; - } - - /** - * @author ignatov - */ - private static class EmptyType extends Type { - @NotNull - @Override - public String toKotlin() { - return "UNRESOLVED_TYPE"; - } - - @Override - public boolean isNullable() { - return false; - } - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java b/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java index ca0981c3f85..6f30b02f15a 100644 --- a/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java +++ b/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; /** * @author ignatov diff --git a/src/org/jetbrains/jet/j2k/ast/TypeElement.java b/src/org/jetbrains/jet/j2k/ast/TypeElement.java index 1985b864db5..eafbdc62b2d 100644 --- a/src/org/jetbrains/jet/j2k/ast/TypeElement.java +++ b/src/org/jetbrains/jet/j2k/ast/TypeElement.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; /** * @author ignatov diff --git a/src/org/jetbrains/jet/j2k/ast/TypeParameter.java b/src/org/jetbrains/jet/j2k/ast/TypeParameter.java index d45bfe60f50..f72d97f2e53 100644 --- a/src/org/jetbrains/jet/j2k/ast/TypeParameter.java +++ b/src/org/jetbrains/jet/j2k/ast/TypeParameter.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.j2k.ast; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.j2k.ast.types.Type; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/ast/VarArg.java b/src/org/jetbrains/jet/j2k/ast/VarArg.java deleted file mode 100644 index 8571738285e..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/VarArg.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.j2k.ast; - -import org.jetbrains.annotations.NotNull; - -/** - * @author ignatov - */ -public class VarArg extends Type { - private final Type myType; - - public VarArg(Type type) { - myType = type; - } - - @NotNull - @Override - public Kind getKind() { - return Kind.VARARG; - } - - @NotNull - @Override - public String toKotlin() { - return myType.toKotlin(); - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/types/ArrayType.kt b/src/org/jetbrains/jet/j2k/ast/types/ArrayType.kt new file mode 100644 index 00000000000..ea95b5eb456 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/ArrayType.kt @@ -0,0 +1,17 @@ +package org.jetbrains.jet.j2k.ast.types + +import org.jetbrains.jet.j2k.ast.INode + +public open class ArrayType(val elementType : Type, nullable: Boolean) : Type(nullable) { + public override fun getKind() : INode.Kind = INode.Kind.ARRAY_TYPE + + public override fun toKotlin() : String { + if (elementType is PrimitiveType) { + return elementType.toKotlin() + "Array" + isNullableStr() + } + + return "Array<" + elementType.toKotlin() + ">" + isNullableStr() + } + + public override fun convertedToNotNull() : Type = ArrayType(elementType, false) +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/ClassType.kt b/src/org/jetbrains/jet/j2k/ast/types/ClassType.kt new file mode 100644 index 00000000000..d87fb8f274c --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/ClassType.kt @@ -0,0 +1,25 @@ +package org.jetbrains.jet.j2k.ast.types + +import org.jetbrains.jet.j2k.ast.Element +import org.jetbrains.jet.j2k.ast.Identifier +import org.jetbrains.jet.j2k.util.AstUtil +import java.util.Collections +import java.util.List + +public open class ClassType(val `type` : Identifier, val parameters : List, nullable : Boolean) : Type(nullable) { + public override fun toKotlin() : String { + // TODO change to map() when KT-2051 is fixed + val parametersToKotlin: List = arrayList() + for(val param in parameters) { + parametersToKotlin.add(param.toKotlin()) + } + var params : String = if (parametersToKotlin.size() == 0) + "" + else + "<" + parametersToKotlin.makeString(", ") + ">" + return `type`.toKotlin() + params + isNullableStr() + } + + + public override fun convertedToNotNull() : Type = ClassType(`type`, parameters, false) +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/EmptyType.kt b/src/org/jetbrains/jet/j2k/ast/types/EmptyType.kt new file mode 100644 index 00000000000..948840c7307 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/EmptyType.kt @@ -0,0 +1,5 @@ +package org.jetbrains.jet.j2k.ast.types + +public open class EmptyType() : Type(false) { + public override fun toKotlin() : String = "UNRESOLVED_TYPE" +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/InProjectionType.kt b/src/org/jetbrains/jet/j2k/ast/types/InProjectionType.kt new file mode 100644 index 00000000000..dd01f68f261 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/InProjectionType.kt @@ -0,0 +1,5 @@ +package org.jetbrains.jet.j2k.ast.types + +public open class InProjectionType(val bound : Type) : Type(false) { + public override fun toKotlin() : String = "in " + bound.toKotlin() +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/OutProjectionType.kt b/src/org/jetbrains/jet/j2k/ast/types/OutProjectionType.kt new file mode 100644 index 00000000000..5fd08dbf1f7 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/OutProjectionType.kt @@ -0,0 +1,5 @@ +package org.jetbrains.jet.j2k.ast.types + +public open class OutProjectionType(val bound : Type) : Type(false) { + public override fun toKotlin() : String = "out " + bound.toKotlin() +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/PrimitiveType.kt b/src/org/jetbrains/jet/j2k/ast/types/PrimitiveType.kt new file mode 100644 index 00000000000..9e3c1967aa8 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/PrimitiveType.kt @@ -0,0 +1,7 @@ +package org.jetbrains.jet.j2k.ast.types + +import org.jetbrains.jet.j2k.ast.Identifier + +public open class PrimitiveType(val `type` : Identifier) : Type(false) { + public override fun toKotlin() : String = `type`.toKotlin() +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/StarProjectionType.kt b/src/org/jetbrains/jet/j2k/ast/types/StarProjectionType.kt new file mode 100644 index 00000000000..093a0840ab9 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/StarProjectionType.kt @@ -0,0 +1,5 @@ +package org.jetbrains.jet.j2k.ast.types + +public open class StarProjectionType() : Type(false) { + public override fun toKotlin() : String = "*" +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/Type.kt b/src/org/jetbrains/jet/j2k/ast/types/Type.kt new file mode 100644 index 00000000000..e7a395922c9 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/Type.kt @@ -0,0 +1,20 @@ +package org.jetbrains.jet.j2k.ast.types + +import org.jetbrains.jet.j2k.ast.Element +import org.jetbrains.jet.j2k.ast.INode + +public abstract class Type(val nullable: Boolean) : Element() { + public override fun getKind() : INode.Kind = INode.Kind.TYPE + + public open fun convertedToNotNull() : Type { + if (nullable) throw UnsupportedOperationException("convertedToNotNull must be defined") + return this + } + + public open fun isNullableStr() : String? { + return (if (nullable) + "?" + else + "") + } +} diff --git a/src/org/jetbrains/jet/j2k/ast/types/VarArg.kt b/src/org/jetbrains/jet/j2k/ast/types/VarArg.kt new file mode 100644 index 00000000000..2be07e1b869 --- /dev/null +++ b/src/org/jetbrains/jet/j2k/ast/types/VarArg.kt @@ -0,0 +1,9 @@ +package org.jetbrains.jet.j2k.ast.types + +import org.jetbrains.jet.j2k.ast.types.Type +import org.jetbrains.jet.j2k.ast.INode + +public open class VarArg(val `type` : Type) : Type(false) { + public override fun getKind() : INode.Kind = INode.Kind.VARARG + public override fun toKotlin() : String = `type`.toKotlin() +} diff --git a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java index 5ba41a3f703..3caded05704 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.java @@ -20,6 +20,7 @@ import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.ast.*; +import org.jetbrains.jet.j2k.ast.types.Type; import java.util.List; diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 588ce347b1d..6c2d12de18b 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.ast.*; +import org.jetbrains.jet.j2k.ast.types.Type; import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import java.util.Collections; @@ -238,7 +239,7 @@ public class ExpressionVisitor extends StatementVisitor { getConverter().expressionToExpression(expression.getMethodExpression()), getConverter().expressionsToExpressionList(expression.getArgumentList().getExpressions()), getConverter().createConversions(expression), - getConverter().typeToType(expression.getType()).isNullable(), + getConverter().typeToType(expression.getType()).getNullable(), getConverter().typesToTypeList(expression.getTypeArguments()) ); } @@ -348,7 +349,7 @@ public class ExpressionVisitor extends StatementVisitor { final boolean insideSecondaryConstructor = isInsideSecondaryConstructor(expression); final boolean hasReceiver = isFieldReference && insideSecondaryConstructor; final boolean isThis = isThisExpression(expression); - final boolean isNullable = getConverter().typeToType(expression.getType()).isNullable(); + final boolean isNullable = getConverter().typeToType(expression.getType()).getNullable(); final String className = getClassNameWithConstructor(expression); Expression identifier = new IdentifierImpl(expression.getReferenceName(), isNullable); diff --git a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java index e396a0eec44..bf9c312f7ee 100644 --- a/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/TypeVisitor.java @@ -22,8 +22,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.j2k.Converter; import org.jetbrains.jet.j2k.J2KConverterFlags; import org.jetbrains.jet.j2k.ast.*; +import org.jetbrains.jet.j2k.ast.types.*; import org.jetbrains.jet.j2k.util.AstUtil; -import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import java.util.LinkedList; import java.util.List; @@ -45,7 +45,7 @@ public class TypeVisitor extends PsiTypeVisitor implements J2KVisitor { private static final String JAVA_LANG_ITERABLE = "java.lang.Iterable"; private static final String JAVA_UTIL_ITERATOR = "java.util.Iterator"; private final Converter myConverter; - private Type myResult = Type.EMPTY_TYPE; + private Type myResult = new EmptyType(); public TypeVisitor(@NotNull Converter myConverter) { this.myConverter = myConverter; @@ -75,8 +75,8 @@ public class TypeVisitor extends PsiTypeVisitor implements J2KVisitor { @Override public Type visitArrayType(@NotNull PsiArrayType arrayType) { - if (myResult == Type.EMPTY_TYPE) { - myResult = new ArrayType(getConverter().typeToType(arrayType.getComponentType())); + if (myResult instanceof EmptyType) { + myResult = new ArrayType(getConverter().typeToType(arrayType.getComponentType()), true); } return super.visitArrayType(arrayType); } @@ -87,10 +87,10 @@ public class TypeVisitor extends PsiTypeVisitor implements J2KVisitor { final List resolvedClassTypeParams = createRawTypesForResolvedReference(classType); if (classType.getParameterCount() == 0 && resolvedClassTypeParams.size() > 0) { - myResult = new ClassType(identifier, resolvedClassTypeParams); + myResult = new ClassType(identifier, resolvedClassTypeParams, true); } else { - myResult = new ClassType(identifier, getConverter().typesToTypeList(classType.getParameters())); + myResult = new ClassType(identifier, getConverter().typesToTypeList(classType.getParameters()), true); } return super.visitClassType(classType); }