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 <[email protected]> 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 "[email protected]" <[email protected]>.
