diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 3cd110aa04c..ce61907a114 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -208,7 +208,7 @@ public class ExpressionVisitor extends StatementVisitor { private static List createConversions(@NotNull PsiCallExpression expression) { List conversions = new LinkedList(); PsiExpressionList argumentList = expression.getArgumentList(); - PsiExpression[] arguments = argumentList != null? argumentList.getExpressions() : new PsiExpression[]{}; + PsiExpression[] arguments = argumentList != null ? argumentList.getExpressions() : new PsiExpression[]{}; //noinspection UnusedDeclaration for (final PsiExpression a : arguments) { conversions.add(""); @@ -230,16 +230,25 @@ public class ExpressionVisitor extends StatementVisitor { for (int i = 0; i < actualTypes.size(); i++) { PsiType actual = actualTypes.get(i); PsiType expected = expectedTypes.get(i); + PsiExpression argument = arguments[i]; - if (isConversionNeeded(actual, expected)) { - conversions.set(i, getPrimitiveTypeConversion(expected.getCanonicalText())); - } + String conversion = ""; + if (isConversionNeeded(actual, expected)) + conversion += getPrimitiveTypeConversion(expected.getCanonicalText()); + + PsiType type = argument.getType(); + if (argument instanceof PsiReferenceExpression && + type != null && Node.PRIMITIVE_TYPES.contains(type.getCanonicalText()) && + ((PsiReferenceExpression) argument).isQualified()) + conversion += ".sure()"; + + conversions.set(i, conversion); } } return conversions; } - static boolean isConversionNeeded(@Nullable final PsiType actual,@Nullable final PsiType expected) { + static boolean isConversionNeeded(@Nullable final PsiType actual, @Nullable final PsiType expected) { if (actual == null || expected == null) return false; Map typeMap = new HashMap(); diff --git a/testData/ast/issues/file/kt-809-string.jav b/testData/ast/issues/file/kt-809-string.jav new file mode 100644 index 00000000000..71913e2dfab --- /dev/null +++ b/testData/ast/issues/file/kt-809-string.jav @@ -0,0 +1,21 @@ +package demo; + +class Container { + String myString = 1; +} + +class One { + static Container myContainer = new Container(); +} + +class StringContainer { + StringContainer(String s) {} +} + +class Test { + void putString(String s) { } + void test() { + putString(One.myContainer.myString); + new StringContainer(One.myContainer.myString); + } +} \ No newline at end of file diff --git a/testData/ast/issues/file/kt-809-string.kt b/testData/ast/issues/file/kt-809-string.kt new file mode 100644 index 00000000000..0e261443721 --- /dev/null +++ b/testData/ast/issues/file/kt-809-string.kt @@ -0,0 +1,19 @@ +namespace demo +open class Container() { +var myString : String? = 1 +} +open class One() { +class object { +var myContainer : Container? = Container() +} +} +open class StringContainer(s : String?) { +} +open class Test() { +open fun putString(s : String?) : Unit { +} +open fun test() : Unit { +putString(One.myContainer?.myString) +StringContainer(One.myContainer?.myString) +} +} \ No newline at end of file diff --git a/testData/ast/issues/file/kt-809.jav b/testData/ast/issues/file/kt-809.jav new file mode 100644 index 00000000000..b2cc8015ee9 --- /dev/null +++ b/testData/ast/issues/file/kt-809.jav @@ -0,0 +1,21 @@ +package demo; + +class Container { + int myInt = 1; +} + +class One { + static Container myContainer = new Container(); +} + +class IntContainer { + IntContainer(int i) {} +} + +class Test { + void putInt(int i) { } + void test() { + putInt(One.myContainer.myInt); + new IntContainer(One.myContainer.myInt); + } +} \ No newline at end of file diff --git a/testData/ast/issues/file/kt-809.kt b/testData/ast/issues/file/kt-809.kt new file mode 100644 index 00000000000..e9e43c99bf3 --- /dev/null +++ b/testData/ast/issues/file/kt-809.kt @@ -0,0 +1,19 @@ +namespace demo +open class Container() { +var myInt : Int = 1 +} +open class One() { +class object { +var myContainer : Container? = Container() +} +} +open class IntContainer(i : Int) { +} +open class Test() { +open fun putInt(i : Int) : Unit { +} +open fun test() : Unit { +putInt((One.myContainer?.myInt).sure()) +IntContainer((One.myContainer?.myInt).sure()) +} +} \ No newline at end of file