From dfaa67ab6baf7051cd50e0dd4eb70b610164b63e Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 24 May 2012 21:52:16 +0200 Subject: [PATCH] no more SureCallChainExpression --- src/org/jetbrains/jet/j2k/Converter.java | 46 ++----------------- .../jet/j2k/ast/SureCallChainExpression.java | 43 ----------------- src/org/jetbrains/jet/j2k/util/AstUtil.java | 10 ---- .../jet/j2k/visitors/ElementVisitor.kt | 2 +- .../jet/j2k/visitors/ExpressionVisitor.java | 5 +- .../jet/j2k/visitors/StatementVisitor.java | 8 ++-- .../testData/ast/issues/file/kt-820-field.kt | 2 +- .../testData/ast/issues/file/kt-820-string.kt | 2 +- tests/testData/ast/issues/file/kt-820.kt | 2 +- .../testData/ast/issues/file/kt-824-isDir.kt | 2 +- tests/testData/ast/issues/file/kt-824.kt | 8 ++-- tests/testData/ast/issues/file/kt-837.kt | 2 +- tests/testData/ast/issues/file/kt-852.kt | 2 +- 13 files changed, 23 insertions(+), 111 deletions(-) delete mode 100644 src/org/jetbrains/jet/j2k/ast/SureCallChainExpression.java diff --git a/src/org/jetbrains/jet/j2k/Converter.java b/src/org/jetbrains/jet/j2k/Converter.java index 6ce25b9e23a..40aa89c7a0e 100644 --- a/src/org/jetbrains/jet/j2k/Converter.java +++ b/src/org/jetbrains/jet/j2k/Converter.java @@ -381,7 +381,7 @@ public class Converter { new IdentifierImpl(field.getName()), // TODO modifiers, typeToType(field.getType()), - createSureCallOnlyForChain(field.getInitializer(), field.getType()), // TODO: add modifiers + expressionToExpression(field.getInitializer(), field.getType()), // TODO: add modifiers countWritingAccesses(field, psiClass) ); } @@ -741,6 +741,7 @@ public class Converter { } public Expression expressionToExpression(PsiExpression argument, PsiType expectedType) { + if (argument == null) return (IdentifierImpl) Identifier.EMPTY_IDENTIFIER; Expression expression = expressionToExpression(argument); PsiType actualType = argument.getType(); boolean isPrimitiveTypeOrNull = actualType == null || actualType instanceof PsiPrimitiveType; @@ -751,7 +752,7 @@ public class Converter { } if (actualType != null) { - if (isConversionNeeded(actualType, expectedType)) { + if (isConversionNeeded(actualType, expectedType) && !(expression instanceof LiteralExpression)) { String conversion = PRIMITIVE_TYPE_CONVERSIONS.get(expectedType.getCanonicalText()); if (conversion != null) { expression = new DummyMethodCallExpression(expression, conversion, (IdentifierImpl) Identifier.EMPTY_IDENTIFIER); @@ -761,28 +762,6 @@ public class Converter { return expression; } - @NotNull - private String createConversionForExpression(@Nullable PsiExpression expression, @NotNull PsiType expectedType) { - String conversion = ""; - if (expression != null) { - PsiType actualType = expression.getType(); - boolean isPrimitiveTypeOrNull = actualType == null || Node.PRIMITIVE_TYPES.contains(actualType.getCanonicalText()); - boolean isRef = (expression instanceof PsiReferenceExpression && ((PsiReferenceExpression) expression).isQualified() || expression instanceof PsiMethodCallExpression); - boolean containsQuestDot = expressionToExpression(expression).toKotlin().contains("?."); - - if (isPrimitiveTypeOrNull && isRef && containsQuestDot) { - conversion += ".sure()"; - } - - if (actualType != null) { - if (isConversionNeeded(actualType, expectedType)) { - conversion += getPrimitiveTypeConversion(expectedType.getCanonicalText()); - } - } - } - return conversion; - } - private static boolean isConversionNeeded(@Nullable final PsiType actual, @Nullable final PsiType expected) { if (actual == null || expected == null) { return false; @@ -802,28 +781,11 @@ public class Converter { return !actualStr.equals(expectedStr) && (!(o1 ^ o2)); } - @NotNull - private static String getPrimitiveTypeConversion(@NotNull String type) { - if (PRIMITIVE_TYPE_CONVERSIONS.containsKey(type)) { - return "." + PRIMITIVE_TYPE_CONVERSIONS.get(type) + "()"; - } - return ""; - } - -// @NotNull + // @NotNull // private static String applyConversion(Expression expression, String conversion) { // if (conversion.isEmpty()) // return expression.toKotlin(); // return "(" + expression.toKotlin() + ")" + conversion; // } - @NotNull - public SureCallChainExpression createSureCallOnlyForChain(@Nullable PsiExpression expression, @NotNull PsiType type) { - String conversion = (expression != null && (expression instanceof PsiReferenceExpression || expression instanceof PsiMethodCallExpression)) - ? - createConversionForExpression(expression, type) - : ""; - return new SureCallChainExpression(expressionToExpression(expression), conversion); - } - } diff --git a/src/org/jetbrains/jet/j2k/ast/SureCallChainExpression.java b/src/org/jetbrains/jet/j2k/ast/SureCallChainExpression.java deleted file mode 100644 index 76c29eb272f..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/SureCallChainExpression.java +++ /dev/null @@ -1,43 +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 SureCallChainExpression extends Expression { - private final Expression myExpression; - private final String myConversion; - - public SureCallChainExpression(Expression expression, String conversion) { - myExpression = expression; - myConversion = conversion; - } - - @Override - public boolean isEmpty() { - return myExpression.isEmpty(); - } - - @NotNull - @Override - public String toKotlin() { - return myExpression.toKotlin() + myConversion; - } -} diff --git a/src/org/jetbrains/jet/j2k/util/AstUtil.java b/src/org/jetbrains/jet/j2k/util/AstUtil.java index bdc3cb6037e..7585d2dca5b 100644 --- a/src/org/jetbrains/jet/j2k/util/AstUtil.java +++ b/src/org/jetbrains/jet/j2k/util/AstUtil.java @@ -80,16 +80,6 @@ public class AstUtil { return conversions; } - @NotNull - public static List applyConversions(@NotNull List first, @NotNull List second) { - List result = new LinkedList(); - assert first.size() == second.size() : "Lists must have the same size."; - for (int i = 0; i < first.size(); i++) { - result.add(applyConversionForOneItem(first.get(i), second.get(i))); - } - return result; - } - @NotNull public static String applyConversionForOneItem(@NotNull String f, @NotNull String s) { if (s.isEmpty()) { diff --git a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt index c1e9dd926dc..c9396544801 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt @@ -24,7 +24,7 @@ public open class ElementVisitor(val myConverter : Converter) : JavaElementVisit myResult = LocalVariable(IdentifierImpl(theVariable.getName()), modifiersListToModifiersSet(theVariable.getModifierList()), myConverter.typeToType(theVariable.getType(), isAnnotatedAsNotNull(theVariable.getModifierList())), - myConverter.createSureCallOnlyForChain(theVariable.getInitializer(), theVariable.getType())) + myConverter.expressionToExpression(theVariable.getInitializer(), theVariable.getType())) } public override fun visitExpressionList(list : PsiExpressionList?) : Unit { diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index cc50fbe6509..0bdfd16c20f 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -170,7 +170,7 @@ public class ExpressionVisitor extends StatementVisitor { PsiExpression condition = expression.getCondition(); PsiType type = condition.getType(); Expression e = type != null ? - getConverter().createSureCallOnlyForChain(condition, type) : + this.getConverter().expressionToExpression(condition, type) : getConverter().expressionToExpression(condition); myResult = new ParenthesizedExpression( new IfStatement( @@ -208,6 +208,9 @@ public class ExpressionVisitor extends StatementVisitor { String canonicalTypeStr = type.getCanonicalText(); if (canonicalTypeStr.equals("double") || canonicalTypeStr.equals(JAVA_LANG_DOUBLE)) { text = text.replace("D", "").replace("d", ""); + if (!text.contains(".")) { + text += ".0"; + } } if (canonicalTypeStr.equals("float") || canonicalTypeStr.equals(JAVA_LANG_FLOAT)) { text = text.replace("F", "").replace("f", "") + "." + OperatorConventions.FLOAT + "()"; diff --git a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java index 88866b32932..8dfaede8fdd 100644 --- a/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/StatementVisitor.java @@ -105,7 +105,7 @@ public class StatementVisitor extends ElementVisitor { PsiExpression condition = statement.getCondition(); @SuppressWarnings("ConstantConditions") Expression expression = condition != null && condition.getType() != null ? - getConverter().createSureCallOnlyForChain(condition, condition.getType()) : + this.getConverter().expressionToExpression(condition, condition.getType()) : getConverter().expressionToExpression(condition); myResult = new DoWhileStatement( expression, @@ -207,7 +207,7 @@ public class StatementVisitor extends ElementVisitor { PsiExpression condition = statement.getCondition(); @SuppressWarnings("ConstantConditions") Expression expression = condition != null && condition.getType() != null ? - getConverter().createSureCallOnlyForChain(condition, condition.getType()) : + this.getConverter().expressionToExpression(condition, condition.getType()) : getConverter().expressionToExpression(condition); myResult = new IfStatement( expression, @@ -373,7 +373,7 @@ public class StatementVisitor extends ElementVisitor { PsiExpression condition = statement.getCondition(); @SuppressWarnings("ConstantConditions") Expression expression = condition != null && condition.getType() != null ? - getConverter().createSureCallOnlyForChain(condition, condition.getType()) : + this.getConverter().expressionToExpression(condition, condition.getType()) : getConverter().expressionToExpression(condition); myResult = new WhileStatement( expression, @@ -387,7 +387,7 @@ public class StatementVisitor extends ElementVisitor { PsiExpression returnValue = statement.getReturnValue(); PsiType methodReturnType = getConverter().getMethodReturnType(); Expression expression = returnValue != null && methodReturnType != null ? - getConverter().createSureCallOnlyForChain(returnValue, methodReturnType) : + this.getConverter().expressionToExpression(returnValue, methodReturnType) : getConverter().expressionToExpression(returnValue); myResult = new ReturnStatement( expression diff --git a/tests/testData/ast/issues/file/kt-820-field.kt b/tests/testData/ast/issues/file/kt-820-field.kt index 9d7eef3e755..edea1336672 100644 --- a/tests/testData/ast/issues/file/kt-820-field.kt +++ b/tests/testData/ast/issues/file/kt-820-field.kt @@ -8,5 +8,5 @@ var myContainer : Container? = Container() } } open class Test() { -var b : Byte = One.myContainer?.myInt.sure().toByte() +var b : Byte = One.myContainer?.myInt!!.toByte() } \ No newline at end of file diff --git a/tests/testData/ast/issues/file/kt-820-string.kt b/tests/testData/ast/issues/file/kt-820-string.kt index 6435b2931fc..a742b94fac2 100644 --- a/tests/testData/ast/issues/file/kt-820-string.kt +++ b/tests/testData/ast/issues/file/kt-820-string.kt @@ -1,7 +1,7 @@ open class Test() { class object { public open fun toFileSystemSafeName(name : String?) : String? { -var size : Int = name?.length().sure() +var size : Int = name?.length()!! return name } } diff --git a/tests/testData/ast/issues/file/kt-820.kt b/tests/testData/ast/issues/file/kt-820.kt index 00e4569f962..7cb6d042228 100644 --- a/tests/testData/ast/issues/file/kt-820.kt +++ b/tests/testData/ast/issues/file/kt-820.kt @@ -9,6 +9,6 @@ var myContainer : Container? = Container() } open class Test() { open fun test() : Unit { -var b : Byte = One.myContainer?.myInt.sure().toByte() +var b : Byte = One.myContainer?.myInt!!.toByte() } } \ No newline at end of file diff --git a/tests/testData/ast/issues/file/kt-824-isDir.kt b/tests/testData/ast/issues/file/kt-824-isDir.kt index 602192f2868..1879496fd0b 100644 --- a/tests/testData/ast/issues/file/kt-824-isDir.kt +++ b/tests/testData/ast/issues/file/kt-824-isDir.kt @@ -8,7 +8,7 @@ if (parent == null || !parent?.exists()) return false } var result : Boolean = true -if (parent?.isDirectory().sure()) +if (parent?.isDirectory()!!) { return true } diff --git a/tests/testData/ast/issues/file/kt-824.kt b/tests/testData/ast/issues/file/kt-824.kt index a0e38dbf3e7..c831f3b811c 100644 --- a/tests/testData/ast/issues/file/kt-824.kt +++ b/tests/testData/ast/issues/file/kt-824.kt @@ -9,18 +9,18 @@ var myContainer : Container? = Container() } open class Test() { open fun test() : Unit { -if (One.myContainer?.myBoolean.sure()) +if (One.myContainer?.myBoolean!!) System.out?.println("Ok") -var s : String? = (if (One.myContainer?.myBoolean.sure()) +var s : String? = (if (One.myContainer?.myBoolean!!) "YES" else "NO") -while (One.myContainer?.myBoolean.sure()) +while (One.myContainer?.myBoolean!!) System.out?.println("Ok") do { System.out?.println("Ok") } -while (One.myContainer?.myBoolean.sure()) +while (One.myContainer?.myBoolean!!) } } \ No newline at end of file diff --git a/tests/testData/ast/issues/file/kt-837.kt b/tests/testData/ast/issues/file/kt-837.kt index af3b65fe3be..bf5b16010d4 100644 --- a/tests/testData/ast/issues/file/kt-837.kt +++ b/tests/testData/ast/issues/file/kt-837.kt @@ -3,7 +3,7 @@ import java.io.Serializable public open class Language(code : String?) : Serializable { protected var code : String? = null public open fun equals(other : Language?) : Boolean { -return other?.toString()?.equals(this.toString()).sure() +return other?.toString()?.equals(this.toString())!! } { this.code = code diff --git a/tests/testData/ast/issues/file/kt-852.kt b/tests/testData/ast/issues/file/kt-852.kt index 5108a7b821d..59929786c3d 100644 --- a/tests/testData/ast/issues/file/kt-852.kt +++ b/tests/testData/ast/issues/file/kt-852.kt @@ -6,7 +6,7 @@ var s2 : String? = "" var s3 : String? = "" if (s1?.isEmpty()!! && s2?.isEmpty()!!) return "OK" -if ((s1?.isEmpty()).sure() && (s2?.isEmpty()).sure() && (s3?.isEmpty()).sure()) +if (s1?.isEmpty()!! && s2?.isEmpty()!! && s3?.isEmpty()!!) return "OOOK" return "" }