Allow all primitive types in @Function method parameters
authorJaroslav Tulach <jtulach@netbeans.org>
Tue, 10 Mar 2015 15:14:30 +0100
changeset 930bf81793e4239
parent 929 50ee036959f5
child 931 41076da07b68
Allow all primitive types in @Function method parameters
json/src/main/java/org/netbeans/html/json/impl/JSON.java
json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
json/src/test/java/net/java/html/json/TypesTest.java
     1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/JSON.java	Wed Feb 18 19:14:14 2015 +0100
     1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/JSON.java	Tue Mar 10 15:14:30 2015 +0100
     1.3 @@ -126,10 +126,13 @@
     1.4  
     1.5      public static String toString(BrwsrCtx c, Object obj, String prop) {
     1.6          obj = getProperty(c, obj, prop);
     1.7 -        return obj instanceof String ? (String)obj : null;
     1.8 +        return obj == null ? null : obj.toString();
     1.9      }
    1.10      public static Number toNumber(BrwsrCtx c, Object obj, String prop) {
    1.11          obj = getProperty(c, obj, prop);
    1.12 +        if (obj instanceof Character) {
    1.13 +            obj = (int)(Character)obj;
    1.14 +        }
    1.15          if (!(obj instanceof Number)) {
    1.16              obj = Double.NaN;
    1.17          }
     2.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Wed Feb 18 19:14:14 2015 +0100
     2.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Tue Mar 10 15:14:30 2015 +0100
     2.3 @@ -1386,10 +1386,34 @@
     2.4                  toCall = classRef + ".proto.toNumber(";
     2.5                  toFinish = ".doubleValue()";
     2.6              }
     2.7 +            if (ve.asType().getKind() == TypeKind.FLOAT) {
     2.8 +                toCall = classRef + ".proto.toNumber(";
     2.9 +                toFinish = ".floatValue()";
    2.10 +            }
    2.11              if (ve.asType().getKind() == TypeKind.INT) {
    2.12                  toCall = classRef + ".proto.toNumber(";
    2.13                  toFinish = ".intValue()";
    2.14              }
    2.15 +            if (ve.asType().getKind() == TypeKind.BYTE) {
    2.16 +                toCall = classRef + ".proto.toNumber(";
    2.17 +                toFinish = ".byteValue()";
    2.18 +            }
    2.19 +            if (ve.asType().getKind() == TypeKind.SHORT) {
    2.20 +                toCall = classRef + ".proto.toNumber(";
    2.21 +                toFinish = ".shortValue()";
    2.22 +            }
    2.23 +            if (ve.asType().getKind() == TypeKind.LONG) {
    2.24 +                toCall = classRef + ".proto.toNumber(";
    2.25 +                toFinish = ".longValue()";
    2.26 +            }
    2.27 +            if (ve.asType().getKind() == TypeKind.BOOLEAN) {
    2.28 +                toCall = "\"true\".equals(" + classRef + ".proto.toString(";
    2.29 +                toFinish = ")";
    2.30 +            }
    2.31 +            if (ve.asType().getKind() == TypeKind.CHAR) {
    2.32 +                toCall = "(char)" + classRef + ".proto.toNumber(";
    2.33 +                toFinish = ".intValue()";
    2.34 +            }
    2.35              if (dataName != null && ve.getSimpleName().contentEquals(dataName) && isModel(ve.asType())) {
    2.36                  toCall = classRef + ".proto.toModel(" + ve.asType() + ".class, ";
    2.37                  addNull = false;
    2.38 @@ -1431,10 +1455,17 @@
    2.39                  params.append(classRef);
    2.40                  continue;
    2.41              }
    2.42 -            error(
    2.43 -                "The annotated method can only accept " + className + " argument or argument named 'data'",
    2.44 -                ee
    2.45 -            );
    2.46 +            StringBuilder err = new StringBuilder();
    2.47 +            err.append("Argument ").
    2.48 +                append(ve.getSimpleName()).
    2.49 +                append(" is not valid. The annotated method can only accept ").
    2.50 +                append(className).
    2.51 +                append(" argument");
    2.52 +            if (dataName != null) {
    2.53 +                err.append(" or argument named '").append(dataName).append("'");
    2.54 +            }
    2.55 +            err.append(".");
    2.56 +            error(err.toString(), ee);
    2.57          }
    2.58          return params;
    2.59      }
     3.1 --- a/json/src/test/java/net/java/html/json/TypesTest.java	Wed Feb 18 19:14:14 2015 +0100
     3.2 +++ b/json/src/test/java/net/java/html/json/TypesTest.java	Tue Mar 10 15:14:30 2015 +0100
     3.3 @@ -48,7 +48,6 @@
     3.4  import org.netbeans.html.context.spi.Contexts;
     3.5  import org.netbeans.html.json.spi.Technology;
     3.6  import org.netbeans.html.json.spi.Transfer;
     3.7 -import org.netbeans.html.json.impl.JSON;
     3.8  import org.testng.annotations.BeforeMethod;
     3.9  import org.testng.annotations.Test;
    3.10  import static org.testng.Assert.*;
    3.11 @@ -66,6 +65,7 @@
    3.12      @Property(name = "doubleX", type = double.class),
    3.13      @Property(name = "charX", type = char.class),
    3.14      @Property(name = "StringX", type = String.class),
    3.15 +    @Property(name = "boolX", type = boolean.class),
    3.16  })
    3.17  public class TypesTest {
    3.18      private MapModelTest.MapTechnology t;
    3.19 @@ -77,11 +77,10 @@
    3.20              register(Transfer.class, t, 1).build();
    3.21      }
    3.22      @Function static void readFromEvent(int intX, 
    3.23 -        /*
    3.24          byte byteX, 
    3.25          short shortX, long longX, float floatX, 
    3.26 -        char charX
    3.27 -        */
    3.28 +        boolean boolX,
    3.29 +        char charX,
    3.30          double doubleX,
    3.31          String StringX, Types myModel) {
    3.32          
    3.33 @@ -89,12 +88,12 @@
    3.34          myModel.setDoubleX(doubleX);
    3.35          myModel.setStringX(StringX);
    3.36          
    3.37 -        /*
    3.38 -        myModel.setByte(byteX);
    3.39 -        myModel.setShort(shortX);
    3.40 -        myModel.setLong(longX);
    3.41 -        myModel.setFloat(floatX);
    3.42 -        */
    3.43 +        myModel.setByteX(byteX);
    3.44 +        myModel.setShortX(shortX);
    3.45 +        myModel.setLongX(longX);
    3.46 +        myModel.setFloatX(floatX);
    3.47 +        myModel.setBoolX(boolX);
    3.48 +        myModel.setCharX(charX);
    3.49      }
    3.50      
    3.51      @Test public void canParseEventAttributes() {
    3.52 @@ -102,14 +101,12 @@
    3.53          t.setIntX(33);
    3.54          t.setDoubleX(180.5);
    3.55          t.setStringX("Ahoj");
    3.56 -        
    3.57 -        /*
    3.58          t.setCharX('A');
    3.59          t.setByteX((byte)3);
    3.60          t.setShortX((short)10);
    3.61          t.setLongX(66);
    3.62          t.setFloatX(99f);
    3.63 -        */
    3.64 +        t.setBoolX(true);
    3.65          
    3.66          Object json = Models.toRaw(t);
    3.67          
    3.68 @@ -121,6 +118,11 @@
    3.69          assertEquals(copy.getIntX(), 33);
    3.70          assertEquals(copy.getDoubleX(), 180.5);
    3.71          assertEquals(copy.getStringX(), "Ahoj");
    3.72 -//        assertEquals(copy.getCharX(), 'A');
    3.73 +        assertEquals(copy.getByteX(), (byte)3);
    3.74 +        assertEquals(copy.getShortX(), (short)10);
    3.75 +        assertEquals(copy.getLongX(), 66L);
    3.76 +        assertEquals(copy.getFloatX(), 99f);
    3.77 +        assertTrue(copy.isBoolX());
    3.78 +        assertEquals(copy.getCharX(), 'A');
    3.79      }
    3.80  }