literals supported more correctly

This commit is contained in:
Sergey Ignatov
2011-11-24 13:59:32 +04:00
parent 7d117471e9
commit d6efe927bf
11 changed files with 116 additions and 6 deletions
@@ -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';
}
}
@@ -0,0 +1,6 @@
class Test {
void test() {
char c1 = 'c';
Character c2 = 'C';
}
}
@@ -0,0 +1,6 @@
open class Test() {
open fun test() : Unit {
var c1 : Char = 'c'
var c2 : Char? = 'C'
}
}
@@ -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;
}
}
@@ -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
}
}
@@ -0,0 +1,6 @@
class Test {
void test() {
int i1 = 0x21;
Int i2 = 0x33;
}
}
@@ -0,0 +1,6 @@
open class Test() {
open fun test() : Unit {
var i1 : Int = 33
var i2 : Int? = 51
}
}
@@ -0,0 +1,6 @@
class Test {
void test() {
int i1 = 045;
Int i2 = 032;
}
}
@@ -0,0 +1,6 @@
open class Test() {
open fun test() : Unit {
var i1 : Int = 37
var i2 : Int? = 26
}
}
@@ -0,0 +1,9 @@
class Test {
void test() {
boolean t1 = true;
Boolean t2 = true;
boolean f1 = false;
Boolean f2 = false;
}
}
@@ -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
}
}