From 29d0617d805fc35fd8fc872623f4ba63ecdbccb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 20 Jun 2013 21:50:04 +0300 Subject: [PATCH] #55 Add test --- .../com/mysema/scalagen/Primitives.scala | 25 +++++++++++-------- .../scala/com/mysema/examples/ValueOf.java | 9 +++++++ 2 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 scalagen/src/test/scala/com/mysema/examples/ValueOf.java diff --git a/scalagen/src/main/scala/com/mysema/scalagen/Primitives.scala b/scalagen/src/main/scala/com/mysema/scalagen/Primitives.scala index 136f636..a801ba4 100644 --- a/scalagen/src/main/scala/com/mysema/scalagen/Primitives.scala +++ b/scalagen/src/main/scala/com/mysema/scalagen/Primitives.scala @@ -15,6 +15,7 @@ package com.mysema.scalagen import java.util.ArrayList import UnitTransformer._ +import japa.parser.ast.expr._ object Primitives extends Primitives @@ -22,26 +23,28 @@ object Primitives extends Primitives * Primitives modifies primitive type related constants and method calls */ class Primitives extends UnitTransformerBase { - + private val TRUE = new BooleanLiteral(true) - + private val FALSE = new BooleanLiteral(false) - + private val primitives = Set("Boolean","Byte","Char","Double","Float","Integer","Long","Short") - + def transform(cu: CompilationUnit): CompilationUnit = { - cu.accept(this, cu).asInstanceOf[CompilationUnit] - } - + cu.accept(this, cu).asInstanceOf[CompilationUnit] + } + override def visit(n: FieldAccess, arg: CompilationUnit): Node = n match { case FieldAccess(str("Boolean"), "TRUE") => TRUE case FieldAccess(str("Boolean"), "FALSE") => FALSE case _ => super.visit(n, arg) } - + + // XXX doesn't work properly for e.g. Double.valueOf(String) override def visit(n: MethodCall, arg: CompilationUnit): Node = n match { - case MethodCall(str(scope), "valueOf", a :: Nil) if primitives.contains(scope) => a.accept(this, arg) + case MethodCall(str(scope), "valueOf", a :: Nil) + if primitives.contains(scope) && !a.isInstanceOf[LiteralExpr] => a.accept(this, arg) case _ => super.visit(n, arg) } - -} \ No newline at end of file + +} \ No newline at end of file diff --git a/scalagen/src/test/scala/com/mysema/examples/ValueOf.java b/scalagen/src/test/scala/com/mysema/examples/ValueOf.java new file mode 100644 index 0000000..5f4f85b --- /dev/null +++ b/scalagen/src/test/scala/com/mysema/examples/ValueOf.java @@ -0,0 +1,9 @@ +package com.mysema.examples; + +public class ValueOf { + + public void foo() { + double a = Double.valueOf("1.0"); + System.out.println(a - 3.0); + } +}