diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java index 1bee18ba7db..4b3bda246ad 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.java @@ -1,7 +1,6 @@ package org.jetbrains.jet.j2k.visitors; import com.intellij.psi.*; -import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -158,11 +157,23 @@ public class ExpressionVisitor extends StatementVisitor { @Override public void visitLiteralExpression(PsiLiteralExpression expression) { super.visitLiteralExpression(expression); - myResult = new LiteralExpression( - new IdentifierImpl( - ((PsiLiteralExpressionImpl) expression).getCanonicalText() // TODO - ) - ); + + final Object value = expression.getValue(); + String text = expression.getText(); + + final PsiType type = expression.getType(); + if (type != null) { + String canonicalTypeStr = type.getCanonicalText(); + if (canonicalTypeStr.equals("double") || canonicalTypeStr.equals("java.lang.Double")) + text = text.replace("D", "").replace("d", ""); + if (canonicalTypeStr.equals("float") || canonicalTypeStr.equals("java.lang.Float")) + text = text.replace("F", "").replace("f", "") + "." + "flt"; + if (canonicalTypeStr.equals("long") || canonicalTypeStr.equals("java.lang.Long")) + text = text.replace("L", "").replace("l", ""); + if (canonicalTypeStr.equals("int") || canonicalTypeStr.equals("java.lang.Integer")) // need for hex support + text = value != null ? value.toString() : text; + } + myResult = new LiteralExpression(new IdentifierImpl(text)); } @Override @@ -405,4 +416,11 @@ public class ExpressionVisitor extends StatementVisitor { getOperatorString(expression.getOperationTokenType()) ); } +} + +class Test { + void test() { + char c1 = 'c'; + Character c2 = 'C'; + } } \ No newline at end of file diff --git a/testData/ast/literalExpression/file/char.jav b/testData/ast/literalExpression/file/char.jav new file mode 100644 index 00000000000..653706393b2 --- /dev/null +++ b/testData/ast/literalExpression/file/char.jav @@ -0,0 +1,6 @@ +class Test { + void test() { + char c1 = 'c'; + Character c2 = 'C'; + } +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/char.kt b/testData/ast/literalExpression/file/char.kt new file mode 100644 index 00000000000..d8749cea99d --- /dev/null +++ b/testData/ast/literalExpression/file/char.kt @@ -0,0 +1,6 @@ +open class Test() { +open fun test() : Unit { +var c1 : Char = 'c' +var c2 : Char? = 'C' +} +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/endsWithDFL.jav b/testData/ast/literalExpression/file/endsWithDFL.jav new file mode 100644 index 00000000000..4b4450d3303 --- /dev/null +++ b/testData/ast/literalExpression/file/endsWithDFL.jav @@ -0,0 +1,21 @@ +class Test { + void test() { + long l1 = 10L; + double d1 = 10.0D; + float f1 = 10.0F; + + long l2 = 10l; + double d2 = 10.0d; + float f2 = 10.0f; + } + + void testBoxed() { + Long l1 = 10L; + Double d1 = 10.0D; + Float f1 = 10.0F; + + Long l2 = 10l; + Double d2 = 10.0d; + Float f2 = 10.0f; + } +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/endsWithDFL.kt b/testData/ast/literalExpression/file/endsWithDFL.kt new file mode 100644 index 00000000000..48b88fd5ebc --- /dev/null +++ b/testData/ast/literalExpression/file/endsWithDFL.kt @@ -0,0 +1,18 @@ +open class Test() { +open fun test() : Unit { +var l1 : Long = 10 +var d1 : Double = 10.0 +var f1 : Float = 10.0.flt +var l2 : Long = 10 +var d2 : Double = 10.0 +var f2 : Float = 10.0.flt +} +open fun testBoxed() : Unit { +var l1 : Long? = 10 +var d1 : Double? = 10.0 +var f1 : Float? = 10.0.flt +var l2 : Long? = 10 +var d2 : Double? = 10.0 +var f2 : Float? = 10.0.flt +} +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/hex.jav b/testData/ast/literalExpression/file/hex.jav new file mode 100644 index 00000000000..285af379ea2 --- /dev/null +++ b/testData/ast/literalExpression/file/hex.jav @@ -0,0 +1,6 @@ +class Test { + void test() { + int i1 = 0x21; + Int i2 = 0x33; + } +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/hex.kt b/testData/ast/literalExpression/file/hex.kt new file mode 100644 index 00000000000..0bd6b37ae40 --- /dev/null +++ b/testData/ast/literalExpression/file/hex.kt @@ -0,0 +1,6 @@ +open class Test() { +open fun test() : Unit { +var i1 : Int = 33 +var i2 : Int? = 51 +} +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/octal.jav b/testData/ast/literalExpression/file/octal.jav new file mode 100644 index 00000000000..900549670fb --- /dev/null +++ b/testData/ast/literalExpression/file/octal.jav @@ -0,0 +1,6 @@ +class Test { + void test() { + int i1 = 045; + Int i2 = 032; + } +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/octal.kt b/testData/ast/literalExpression/file/octal.kt new file mode 100644 index 00000000000..83165bcc6fc --- /dev/null +++ b/testData/ast/literalExpression/file/octal.kt @@ -0,0 +1,6 @@ +open class Test() { +open fun test() : Unit { +var i1 : Int = 37 +var i2 : Int? = 26 +} +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/trueOrFalse.jav b/testData/ast/literalExpression/file/trueOrFalse.jav new file mode 100644 index 00000000000..2b6495e3427 --- /dev/null +++ b/testData/ast/literalExpression/file/trueOrFalse.jav @@ -0,0 +1,9 @@ +class Test { + void test() { + boolean t1 = true; + Boolean t2 = true; + + boolean f1 = false; + Boolean f2 = false; + } +} \ No newline at end of file diff --git a/testData/ast/literalExpression/file/trueOrFalse.kt b/testData/ast/literalExpression/file/trueOrFalse.kt new file mode 100644 index 00000000000..ad61883202e --- /dev/null +++ b/testData/ast/literalExpression/file/trueOrFalse.kt @@ -0,0 +1,8 @@ +open class Test() { +open fun test() : Unit { +var t1 : Boolean = true +var t2 : Boolean? = true +var f1 : Boolean = false +var f2 : Boolean? = false +} +} \ No newline at end of file