You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jt...@apache.org on 2017/10/24 14:14:58 UTC

[incubator-netbeans-html4j] 03/04: Regular subclassing of Proto.Type is possible

This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans-html4j.git

commit f461c370b8a4b3be47349bcd31466b1fe09d4083
Author: Jaroslav Tulach <ja...@oracle.com>
AuthorDate: Wed Oct 18 04:38:29 2017 +0200

    Regular subclassing of Proto.Type is possible
---
 .../java/org/netbeans/html/json/spi/Proto.java     | 10 +---
 .../test/java/net/java/html/json/TypesTest.java    | 69 ++++++++++++++++++----
 src/main/javadoc/overview.html                     |  2 +
 3 files changed, 60 insertions(+), 21 deletions(-)

diff --git a/json/src/main/java/org/netbeans/html/json/spi/Proto.java b/json/src/main/java/org/netbeans/html/json/spi/Proto.java
index 6f9065f..d54cf58 100644
--- a/json/src/main/java/org/netbeans/html/json/spi/Proto.java
+++ b/json/src/main/java/org/netbeans/html/json/spi/Proto.java
@@ -526,7 +526,7 @@ public final class Proto {
      * @since 0.7
      */
     public static abstract class Type<Model> {
-        private final Class<Model> clazz;
+        private final Class<? extends Model> clazz;
         private final String[] propertyNames;
         private final byte[] propertyType;
         private final String[] functions;
@@ -540,14 +540,8 @@ public final class Proto {
          * @param functions  number of functions the class has
          */
         protected Type(
-            Class<Model> clazz, Class<?> modelFor, int properties, int functions
+            Class<? extends Model> clazz, Class<?> modelFor, int properties, int functions
         ) {
-            assert getClass().getName().endsWith("$Html4JavaType");
-            try {
-                assert getClass().getDeclaringClass() == clazz;
-            } catch (SecurityException ex) {
-                // OK, no check
-            }
             this.clazz = clazz;
             this.propertyNames = new String[properties];
             this.propertyType = new byte[properties];
diff --git a/json/src/test/java/net/java/html/json/TypesTest.java b/json/src/test/java/net/java/html/json/TypesTest.java
index 432885b..465c752 100644
--- a/json/src/test/java/net/java/html/json/TypesTest.java
+++ b/json/src/test/java/net/java/html/json/TypesTest.java
@@ -20,13 +20,12 @@ package net.java.html.json;
 
 import net.java.html.BrwsrCtx;
 import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
 import net.java.html.json.MapModelTest.One;
 import org.netbeans.html.context.spi.Contexts;
+import org.netbeans.html.json.spi.Proto;
 import org.netbeans.html.json.spi.Technology;
 import org.netbeans.html.json.spi.Transfer;
 import org.testng.annotations.BeforeMethod;
@@ -57,18 +56,18 @@ public class TypesTest {
         c = Contexts.newBuilder().register(Technology.class, t, 1).
             register(Transfer.class, t, 1).build();
     }
-    @Function static void readFromEvent(int intX, 
-        byte byteX, 
-        short shortX, long longX, float floatX, 
+    @Function static void readFromEvent(int intX,
+        byte byteX,
+        short shortX, long longX, float floatX,
         boolean boolX,
         char charX,
         double doubleX,
         String StringX, Types myModel) {
-        
+
         myModel.setIntX(intX);
         myModel.setDoubleX(doubleX);
         myModel.setStringX(StringX);
-        
+
         myModel.setByteX(byteX);
         myModel.setShortX(shortX);
         myModel.setLongX(longX);
@@ -76,7 +75,7 @@ public class TypesTest {
         myModel.setBoolX(boolX);
         myModel.setCharX(charX);
     }
-    
+
     @Test public void canParseEventAttributes() {
         Types t = Models.bind(new Types(), c);
         t.setIntX(33);
@@ -88,16 +87,16 @@ public class TypesTest {
         t.setLongX(66);
         t.setFloatX(99f);
         t.setBoolX(true);
-        
+
         assertValidJSON(t.toString());
-        
+
         Object json = Models.toRaw(t);
-        
+
         Types copy = Models.bind(new Types(), c);
         Map copyMap = (Map) Models.toRaw(copy);
         One o = (One) copyMap.get("readFromEvent");
         o.fb.call(null, json);
-        
+
         assertEquals(copy.getIntX(), 33);
         assertEquals(copy.getDoubleX(), 180.5);
         assertEquals(copy.getStringX(), "Ahoj");
@@ -108,7 +107,7 @@ public class TypesTest {
         assertTrue(copy.isBoolX());
         assertEquals(copy.getCharX(), 'A');
     }
-    
+
     private static void assertValidJSON(String text) {
         ScriptEngineManager sem = new ScriptEngineManager();
         ScriptEngine eng = sem.getEngineByMimeType("text/javascript");
@@ -118,4 +117,48 @@ public class TypesTest {
             fail("Cannot parse " + text, ex);
         }
     }
+
+    @Test
+    public void subclassOfProtoType() {
+        class MyType extends Proto.Type<Number> {
+            public MyType() {
+                super(Integer.class, Integer.class, 0, 0);
+            }
+
+            @Override
+            protected void setValue(Number model, int index, Object value) {
+            }
+
+            @Override
+            protected Object getValue(Number model, int index) {
+                return null;
+            }
+
+            @Override
+            protected void call(Number model, int index, Object data, Object event) throws Exception {
+            }
+
+            @Override
+            protected Number cloneTo(Number model, BrwsrCtx ctx) {
+                return model;
+            }
+
+            @Override
+            protected Number read(BrwsrCtx c, Object json) {
+                return null;
+            }
+
+            @Override
+            protected void onChange(Number model, int index) {
+            }
+
+            @Override
+            protected Proto protoFor(Object object) {
+                return null;
+            }
+        }
+
+        MyType type = new MyType();
+        assertNotNull(type, "Can be instantiated");
+    }
 }
diff --git a/src/main/javadoc/overview.html b/src/main/javadoc/overview.html
index b894c78..9bdbc8b 100644
--- a/src/main/javadoc/overview.html
+++ b/src/main/javadoc/overview.html
@@ -58,6 +58,8 @@
         bug <a target="_blank" href="https://issues.apache.org/jira/browse/NETBEANS-89">#89</a>.
         It is acceptable to read properties of a model when
         {@link net.java.html.json.ComputedProperty computing a property}.
+        Regular subclassing of {@link org.netbeans.html.json.spi.Proto.Type} is
+        possible.
         
         <h3>New in version 1.5</h3>
 

-- 
To stop receiving notification emails like this one, please contact
"commits@netbeans.apache.org" <co...@netbeans.apache.org>.