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>.