From 0441c02cb0a7c4c7b1f7afb7650f9c00218b8231 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Wed, 11 Dec 2019 23:48:43 +0000 Subject: [PATCH] added dependency from jwo --- .../net/woggioni/worth/benchmark/Main.java | 8 +- build.sbt | 1 + .../worth/serialization/ValueDumper.java | 2 +- .../worth/serialization/ValueParser.java | 11 +- .../serialization/binary/JBONDumper.java | 16 +-- .../serialization/binary/JBONParser.java | 11 +- .../worth/serialization/json/JSONDumper.java | 6 +- .../worth/serialization/json/JSONParser.java | 4 +- .../worth/traversal/ArrayStackElement.java | 2 +- .../worth/traversal/LeafStackElement.java | 2 +- .../woggioni/worth/traversal/ValueWalker.java | 21 +-- .../net/woggioni/worth/utils/ListView.java | 8 +- .../net/woggioni/worth/utils/WorthUtils.java | 123 +----------------- .../net/woggioni/worth/value/ObjectValue.java | 4 +- .../worth/serialization/ReferenceTest.java | 3 +- .../worth/serialization/json/JSONTest.java | 13 +- .../worth/traversal/ValueWalkerTest.java | 15 ++- 17 files changed, 71 insertions(+), 179 deletions(-) diff --git a/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java b/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java index a68c5c2..02644e6 100644 --- a/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java +++ b/benchmark/src/main/java/net/woggioni/worth/benchmark/Main.java @@ -16,14 +16,16 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.tukaani.xz.XZInputStream; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; -import java.util.function.Function; import java.util.stream.Collectors; public class Main { @@ -153,7 +155,7 @@ public class Main { Optional targetMethod = Arrays.stream(methods) .filter(method -> Objects.equals(benchmarkName, method.getName())) .findFirst(); - targetMethod.ifPresent(new Consumer<>() { + targetMethod.ifPresent(new Consumer() { @Override @SneakyThrows public void accept(Method method) { diff --git a/build.sbt b/build.sbt index 1f23c67..00cdc2f 100644 --- a/build.sbt +++ b/build.sbt @@ -18,6 +18,7 @@ git.useGitDescribe := true //javaOptions in Test += "-Xmx14G" //scalafmtOnCompile := true libraryDependencies += "org.projectlombok" % "lombok" % "1.18.8" % Provided +libraryDependencies += "net.woggioni" % "jwo" % "1.0" % Compile val testDependencies = Seq("com.novocode" % "junit-interface" % "0.11" % Test, "com.fasterxml.jackson.core" % "jackson-databind" % "2.9.6" % Test, diff --git a/src/main/java/net/woggioni/worth/serialization/ValueDumper.java b/src/main/java/net/woggioni/worth/serialization/ValueDumper.java index 5256e38..fdc559b 100644 --- a/src/main/java/net/woggioni/worth/serialization/ValueDumper.java +++ b/src/main/java/net/woggioni/worth/serialization/ValueDumper.java @@ -18,7 +18,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import static net.woggioni.worth.utils.WorthUtils.tail; +import static net.woggioni.jwo.JWO.tail; public abstract class ValueDumper implements Dumper { diff --git a/src/main/java/net/woggioni/worth/serialization/ValueParser.java b/src/main/java/net/woggioni/worth/serialization/ValueParser.java index 5bad618..d699490 100644 --- a/src/main/java/net/woggioni/worth/serialization/ValueParser.java +++ b/src/main/java/net/woggioni/worth/serialization/ValueParser.java @@ -4,7 +4,6 @@ import lombok.RequiredArgsConstructor; import net.woggioni.worth.exception.MaxDepthExceededException; import net.woggioni.worth.exception.NotImplementedException; import net.woggioni.worth.exception.ParseException; -import net.woggioni.worth.utils.WorthUtils; import net.woggioni.worth.value.ArrayValue; import net.woggioni.worth.value.BooleanValue; import net.woggioni.worth.value.FloatValue; @@ -23,7 +22,7 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; -import static net.woggioni.worth.utils.WorthUtils.newThrowable; +import static net.woggioni.jwo.JWO.newThrowable; public class ValueParser implements Parser { @@ -56,9 +55,11 @@ public class ValueParser implements Parser { StackLevel last = stack.getFirst(); ArrayStackLevel asl; ObjectStackLevel osl; - if ((asl = WorthUtils.dynamicCast(last, ArrayStackLevel.class)) != null) + if (last instanceof ArrayStackLevel) { + asl = (ArrayStackLevel) last; asl.value.add(value); - else if ((osl = WorthUtils.dynamicCast(last, ObjectStackLevel.class)) != null) { + } else if (last instanceof ObjectStackLevel) { + osl = (ObjectStackLevel) last; osl.value.put(osl.currentKey, value); osl.currentKey = null; } @@ -73,7 +74,7 @@ public class ValueParser implements Parser { if (cfg.serializeReferences) { idMap = new HashMap<>(); } - stack = new ArrayDeque<>() { + stack = new ArrayDeque() { @Override public void push(StackLevel stackLevel) { if (size() == cfg.maxDepth) { diff --git a/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java b/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java index 84877af..a4fa471 100644 --- a/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java +++ b/src/main/java/net/woggioni/worth/serialization/binary/JBONDumper.java @@ -3,10 +3,8 @@ package net.woggioni.worth.serialization.binary; import lombok.SneakyThrows; import net.woggioni.worth.exception.NotImplementedException; import net.woggioni.worth.serialization.ValueDumper; -import net.woggioni.worth.serialization.json.JSONDumper; import net.woggioni.worth.traversal.ValueIdentity; import net.woggioni.worth.utils.Leb128; -import net.woggioni.worth.utils.WorthUtils; import net.woggioni.worth.value.ArrayValue; import net.woggioni.worth.value.ObjectValue; import net.woggioni.worth.xface.Dumper; @@ -76,7 +74,7 @@ public class JBONDumper extends ValueDumper { stringValue(v.asString()); break; case ARRAY: - ArrayValue arrayValue = WorthUtils.dynamicCast(v, ArrayValue.class); + ArrayValue arrayValue = (ArrayValue) v; if(ids != null && (id = ids.get(new ValueIdentity(arrayValue))) != null) { if(dumpedId.add(id)) { stack.push(new ArrayStackLevel(arrayValue)); @@ -91,17 +89,17 @@ public class JBONDumper extends ValueDumper { } break; case OBJECT: - ObjectValue objectValue = WorthUtils.dynamicCast(v, ObjectValue.class); + ObjectValue objectValue = (ObjectValue) v; if(ids != null && (id = ids.get(new ValueIdentity(objectValue))) != null) { if(dumpedId.add(id)) { - stack.push(new ObjectStackLevel(WorthUtils.dynamicCast(v, ObjectValue.class))); + stack.push(new ObjectStackLevel(v)); valueId(id); beginObject(objectValue.size()); } else { valueReference(id); } } else { - stack.push(new ObjectStackLevel(WorthUtils.dynamicCast(v, ObjectValue.class))); + stack.push(new ObjectStackLevel(v)); beginObject(objectValue.size()); } break; @@ -113,14 +111,16 @@ public class JBONDumper extends ValueDumper { StackLevel last = stack.getFirst(); ArrayStackLevel arrayStackLevel; ObjectStackLevel objectStackLevel; - if ((arrayStackLevel = WorthUtils.dynamicCast(last, ArrayStackLevel.class)) != null) { + if (last instanceof ArrayStackLevel) { + arrayStackLevel = (ArrayStackLevel) last; if (arrayStackLevel.hasNext()) { handle_value.accept(arrayStackLevel.next()); } else { endArray(); stack.pop(); } - } else if ((objectStackLevel = WorthUtils.dynamicCast(last, ObjectStackLevel.class)) != null) { + } else if (last instanceof ObjectStackLevel) { + objectStackLevel = (ObjectStackLevel) last; if (objectStackLevel.hasNext()) { Map.Entry entry = objectStackLevel.next(); objectKey(entry.getKey()); diff --git a/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java b/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java index 46781f1..3ed9677 100644 --- a/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java +++ b/src/main/java/net/woggioni/worth/serialization/binary/JBONParser.java @@ -40,8 +40,10 @@ public class JBONParser extends ValueParser { Integer currentId = null; Leb128.Leb128Decoder decoder = new Leb128.Leb128Decoder(stream); ObjectStackLevel osl; + StackLevel sl; while (true) { - if ((osl = WorthUtils.dynamicCast(stack.getFirst(), ObjectStackLevel.class)) != null && osl.currentKey == null) { + sl = stack.getFirst(); + if (sl instanceof ObjectStackLevel && ((ObjectStackLevel) sl).currentKey == null) { int size = (int) decoder.decode(); byte[] buffer = new byte[size]; stream.read(buffer); @@ -106,14 +108,13 @@ public class JBONParser extends ValueParser { throw new ParseException(String.format("Illegal byte at position %d: 0x%02x", cursor, c)); } while(stack.size() > 0) { - if ((osl = WorthUtils.dynamicCast(stack.getFirst(), ObjectStackLevel.class)) != null - && osl.value.size() == osl.expectedSize) { + sl = stack.getFirst(); + if (sl instanceof ObjectStackLevel && (osl = (ObjectStackLevel) sl).value.size() == osl.expectedSize) { endObject(); continue; } ArrayStackLevel asl; - if((asl = WorthUtils.dynamicCast(stack.getFirst(), ArrayStackLevel.class)) != null - && asl.value.size() == asl.expectedSize) { + if(sl instanceof ArrayStackLevel && (asl = (ArrayStackLevel) sl).value.size() == asl.expectedSize) { endArray(); continue; } diff --git a/src/main/java/net/woggioni/worth/serialization/json/JSONDumper.java b/src/main/java/net/woggioni/worth/serialization/json/JSONDumper.java index 76207e6..6e45453 100644 --- a/src/main/java/net/woggioni/worth/serialization/json/JSONDumper.java +++ b/src/main/java/net/woggioni/worth/serialization/json/JSONDumper.java @@ -141,7 +141,8 @@ public class JSONDumper extends ValueDumper { StackLevel last = stack.getFirst(); ArrayStackLevel arrayStackLevel; ObjectStackLevel objectStackLevel; - if ((arrayStackLevel = WorthUtils.dynamicCast(last, ArrayStackLevel.class)) != null) { + if (last instanceof ArrayStackLevel) { + arrayStackLevel = (ArrayStackLevel) last; if (arrayStackLevel.hasNext()) { if (arrayStackLevel.index > 0) { writer.write(","); @@ -151,7 +152,8 @@ public class JSONDumper extends ValueDumper { endArray(); stack.pop(); } - } else if ((objectStackLevel = WorthUtils.dynamicCast(last, ObjectStackLevel.class)) != null) { + } else if (last instanceof ObjectStackLevel) { + objectStackLevel = (ObjectStackLevel) last; if (objectStackLevel.hasNext()) { if (objectStackLevel.index > 0) { writer.write(","); diff --git a/src/main/java/net/woggioni/worth/serialization/json/JSONParser.java b/src/main/java/net/woggioni/worth/serialization/json/JSONParser.java index ab7439b..73c2e2d 100644 --- a/src/main/java/net/woggioni/worth/serialization/json/JSONParser.java +++ b/src/main/java/net/woggioni/worth/serialization/json/JSONParser.java @@ -230,8 +230,8 @@ public class JSONParser extends ValueParser { } } else if (c == '\"') { String text = readString(stream); - ObjectStackLevel osl; - if ((osl = WorthUtils.dynamicCast(stack.getFirst(), ObjectStackLevel.class)) != null && osl.currentKey == null) { + StackLevel sl = stack.getFirst(); + if (sl instanceof ObjectStackLevel && ((ObjectStackLevel) sl).currentKey == null) { objectKey(text); } else { stringValue(text); diff --git a/src/main/java/net/woggioni/worth/traversal/ArrayStackElement.java b/src/main/java/net/woggioni/worth/traversal/ArrayStackElement.java index bef923d..28d00f7 100644 --- a/src/main/java/net/woggioni/worth/traversal/ArrayStackElement.java +++ b/src/main/java/net/woggioni/worth/traversal/ArrayStackElement.java @@ -6,7 +6,7 @@ import net.woggioni.worth.xface.Value; import java.util.Iterator; -import static net.woggioni.worth.utils.WorthUtils.newThrowable; +import static net.woggioni.jwo.JWO.newThrowable; class ArrayStackElement extends AbstractStackElement { diff --git a/src/main/java/net/woggioni/worth/traversal/LeafStackElement.java b/src/main/java/net/woggioni/worth/traversal/LeafStackElement.java index a93e8df..df366d2 100644 --- a/src/main/java/net/woggioni/worth/traversal/LeafStackElement.java +++ b/src/main/java/net/woggioni/worth/traversal/LeafStackElement.java @@ -3,7 +3,7 @@ package net.woggioni.worth.traversal; import net.woggioni.worth.exception.NotImplementedException; import net.woggioni.worth.xface.Value; -import static net.woggioni.worth.utils.WorthUtils.newThrowable; +import static net.woggioni.jwo.JWO.newThrowable; class LeafStackElement extends AbstractStackElement { public LeafStackElement(Value value) { diff --git a/src/main/java/net/woggioni/worth/traversal/ValueWalker.java b/src/main/java/net/woggioni/worth/traversal/ValueWalker.java index 5c6c1fa..d0edf08 100644 --- a/src/main/java/net/woggioni/worth/traversal/ValueWalker.java +++ b/src/main/java/net/woggioni/worth/traversal/ValueWalker.java @@ -10,9 +10,8 @@ import java.util.List; import java.util.Optional; import java.util.function.Function; -import static net.woggioni.worth.utils.WorthUtils.dynamicCast; -import static net.woggioni.worth.utils.WorthUtils.pop; -import static net.woggioni.worth.utils.WorthUtils.tail; +import static net.woggioni.jwo.JWO.pop; +import static net.woggioni.jwo.JWO.tail; class TraversalContextImpl implements TraversalContext { private final List> immutableStack; @@ -29,14 +28,16 @@ class TraversalContextImpl implements TraversalContext { @Override public String getPath() { StringBuilder sb = new StringBuilder(); - for (StackElement se : immutableStack) { - ArrayStackElement ase; - ObjectStackElement ose; - if ((ase = dynamicCast(se, ArrayStackElement.class)) != null) { + for (StackElement se : immutableStack) { + ArrayStackElement ase; + ObjectStackElement ose; + if (se instanceof ArrayStackElement) { + ase = (ArrayStackElement) se; sb.append("["); sb.append(ase.getCurrentIndex()); sb.append("]"); - } else if ((ose = dynamicCast(se, ObjectStackElement.class)) != null) { + } else if (se instanceof ObjectStackElement) { + ose = (ObjectStackElement) se; sb.append("[\""); sb.append(ose.getCurrentKey()); sb.append("\"]"); @@ -119,12 +120,12 @@ public class ValueWalker { private static AbstractStackElement nextChildStackElement(StackElement parent) { AbstractStackElement result = null; if (parent instanceof ArrayStackElement) { - ArrayStackElement ase = (ArrayStackElement) parent; + ArrayStackElement ase = (ArrayStackElement) parent; if (ase.hasNext()) { result = stackElementFromValue(ase.next()); } } else if (parent instanceof ObjectStackElement) { - ObjectStackElement ose = (ObjectStackElement) parent; + ObjectStackElement ose = (ObjectStackElement) parent; if (ose.hasNext()) { result = stackElementFromValue(ose.next()); } diff --git a/src/main/java/net/woggioni/worth/utils/ListView.java b/src/main/java/net/woggioni/worth/utils/ListView.java index 41945fa..493f1a8 100644 --- a/src/main/java/net/woggioni/worth/utils/ListView.java +++ b/src/main/java/net/woggioni/worth/utils/ListView.java @@ -122,7 +122,7 @@ public class ListView implements List { public T get(int i) { int index = start + i; if(end >= 0 && index < end) { - throw new IndexOutOfBoundsException(i); + throw new IndexOutOfBoundsException(Integer.toString(i)); } return delegate.get(start + i); } @@ -172,7 +172,7 @@ public class ListView implements List { @Override public ListIterator listIterator(int i) { if(i < 0 || i > size()) { - throw new IndexOutOfBoundsException(0); + throw new IndexOutOfBoundsException(Integer.toString(0)); } else { return new ListViewIterator<>(this, start); } @@ -181,9 +181,9 @@ public class ListView implements List { @Override public List subList(int i, int i1) { if(i < 0) { - throw new IndexOutOfBoundsException(0); + throw new IndexOutOfBoundsException(Integer.toString(0)); } else if(i1 > size()) { - throw new IndexOutOfBoundsException(i1); + throw new IndexOutOfBoundsException(Integer.toString(i1)); } else { return new ListView<>(delegate, start + i, start + i1); } diff --git a/src/main/java/net/woggioni/worth/utils/WorthUtils.java b/src/main/java/net/woggioni/worth/utils/WorthUtils.java index 1fdce01..ffc3bfd 100644 --- a/src/main/java/net/woggioni/worth/utils/WorthUtils.java +++ b/src/main/java/net/woggioni/worth/utils/WorthUtils.java @@ -3,101 +3,11 @@ package net.woggioni.worth.utils; import lombok.SneakyThrows; import net.woggioni.worth.xface.Value; -import java.io.*; -import java.lang.reflect.Constructor; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.Optional; -import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.Predicate; import java.util.function.Supplier; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; public class WorthUtils { - - public static T dynamicCast(final Object o, final Class cls) { - if (cls.isInstance(o)) { - return (T) o; - } else { - return null; - } - } - - public static Stream iterable2stream(Iterable iterable) { - return StreamSupport.stream(iterable.spliterator(), false); - } - - public static void writeObject2File(String fileName, Object o) { - writeObject2File(Paths.get(fileName), o); - } - - @SneakyThrows - public static void writeObject2File(Path file, Object o) { - try (Writer writer = new OutputStreamWriter(new FileOutputStream(file.toString()))) { - writer.write(o.toString()); - } - } - - @SneakyThrows - public static void writeBytes2File(Path file, byte[] bytes) { - try (OutputStream os = new FileOutputStream(file.toString())) { - os.write(bytes); - } - } - - @SneakyThrows - public static String readFile2String(Path file) { - StringBuilder builder = new StringBuilder(); - try (Reader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(file.toString())))) { - char[] buffer = new char[1024]; - while (true) { - int read = reader.read(buffer); - builder.append(buffer, 0, read); - if (read < buffer.length) break; - } - } - return builder.toString(); - } - - @SneakyThrows - public static String readResource2String(String classpath) { - StringBuilder sb = new StringBuilder(); - try (Reader reader = new InputStreamReader(WorthUtils.class.getResourceAsStream(classpath))) { - char[] buffer = new char[1024]; - while (true) { - int read = reader.read(buffer); - sb.append(buffer, 0, read); - if (read < buffer.length) break; - } - } - return sb.toString(); - } - - @SneakyThrows - public static T newThrowable(Class cls, String format, Object... args) { - Constructor constructor = cls.getConstructor(String.class); - return constructor.newInstance(String.format(format, args)); - } - - @SneakyThrows - public static T newThrowable(Class cls, Throwable throwable, String format, Object... args) { - Constructor constructor = cls.getConstructor(String.class, Throwable.class); - return constructor.newInstance(String.format(format, args), throwable); - } - - @SneakyThrows - public static void raise(Class cls, Throwable throwable, String format, Object... args) { - throw newThrowable(cls, throwable, format, args); - } - - @SneakyThrows - public static void raise(Class cls, String format, Object... args) { - throw newThrowable(cls, format, args); - } - + public static Value getOrNull(Value root, String... keys) { Value result = root; for (String key : keys) { @@ -124,35 +34,4 @@ public class WorthUtils { return success.apply(result); } } - - public static Predicate not(Predicate p) { - return p.negate(); - } - - public static Stream flatMap(Stream stream, - Function> mappingFunction) { - return stream.map(mappingFunction).filter(Optional::isPresent).map(Optional::get); - } - - public static Stream optional2Stream(Optional optional) { - return optional.map(Stream::of).orElse(Stream.empty()); - } - - public static void setSystemPropertyIfNotDefined(String key, String value) { - if(System.getProperty(key) == null) { - System.setProperty(key, value); - } - } - - public static T tail(List l) { - return tail(l, -1); - } - - public static T tail(List l, int offset) { - return l.get(l.size() + offset); - } - - public static T pop(List l) { - return l.remove(l.size() - 1); - } } diff --git a/src/main/java/net/woggioni/worth/value/ObjectValue.java b/src/main/java/net/woggioni/worth/value/ObjectValue.java index b018987..1390f5c 100644 --- a/src/main/java/net/woggioni/worth/value/ObjectValue.java +++ b/src/main/java/net/woggioni/worth/value/ObjectValue.java @@ -2,7 +2,7 @@ package net.woggioni.worth.value; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import net.woggioni.worth.utils.WorthUtils; +import static net.woggioni.jwo.JWO.newThrowable; import net.woggioni.worth.xface.Value; import java.util.*; @@ -29,7 +29,7 @@ public interface ObjectValue extends Value, Iterable> { result = new LinkedHashMapObjectValue(); break; default: - throw WorthUtils.newThrowable(IllegalArgumentException.class, + throw newThrowable(IllegalArgumentException.class, "Unknown value of %s: %s", Implementation.class.getName(), cfg.objectValueImplementation); diff --git a/src/test/java/net/woggioni/worth/serialization/ReferenceTest.java b/src/test/java/net/woggioni/worth/serialization/ReferenceTest.java index de70c97..7e951ce 100644 --- a/src/test/java/net/woggioni/worth/serialization/ReferenceTest.java +++ b/src/test/java/net/woggioni/worth/serialization/ReferenceTest.java @@ -1,6 +1,7 @@ package net.woggioni.worth.serialization; import lombok.SneakyThrows; +import net.woggioni.jwo.JWO; import net.woggioni.worth.serialization.binary.JBONDumper; import net.woggioni.worth.serialization.binary.JBONParser; import net.woggioni.worth.serialization.json.JSONDumper; @@ -38,7 +39,7 @@ public class ReferenceTest { dumper.dump(value, baos); bytes = baos.toByteArray(); } - WorthUtils.writeBytes2File(Paths.get("/tmp/ciao.jbon"), bytes); + JWO.writeBytes2File(Paths.get("/tmp/ciao.jbon"), bytes); Value reparsedValue; try(ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) { Parser parser = parserConstructor.apply(cfg); diff --git a/src/test/java/net/woggioni/worth/serialization/json/JSONTest.java b/src/test/java/net/woggioni/worth/serialization/json/JSONTest.java index 693043d..d5658ba 100644 --- a/src/test/java/net/woggioni/worth/serialization/json/JSONTest.java +++ b/src/test/java/net/woggioni/worth/serialization/json/JSONTest.java @@ -61,8 +61,8 @@ public class JSONTest { return false; } case ARRAY: - ArrayValue array = WorthUtils.dynamicCast(value, ArrayValue.class); - if (jsonNode.getNodeType() == JsonNodeType.ARRAY && array.size() == jsonNode.size()) { + ArrayValue array; + if (jsonNode.getNodeType() == JsonNodeType.ARRAY && (array = (ArrayValue) value).size() == jsonNode.size()) { for (int i = 0; i < array.size(); i++) { if (!compareValueAndJsonNode(array.get(i), jsonNode.get(i))) { return false; @@ -73,8 +73,8 @@ public class JSONTest { return false; } case OBJECT: - ObjectValue object = WorthUtils.dynamicCast(value, ObjectValue.class); if (jsonNode.getNodeType() == JsonNodeType.OBJECT) { + ObjectValue object = (ObjectValue) value; for (Map.Entry entry : object) { if (!jsonNode.has(entry.getKey())) { return false; @@ -153,8 +153,9 @@ public class JSONTest { return false; } case ARRAY: - ArrayValue array = WorthUtils.dynamicCast(value, ArrayValue.class); - if (jsonNode.getNodeType() == JsonNodeType.ARRAY && array.size() == jsonNode.size()) { + ArrayValue array; + if (jsonNode.getNodeType() == JsonNodeType.ARRAY && + (array = (ArrayValue) value).size() == jsonNode.size()) { for (int i = 0; i < array.size(); i++) { if (!compareValueAndJsonNode(array.get(i), jsonNode.get(i), cb)) { return false; @@ -166,8 +167,8 @@ public class JSONTest { return false; } case OBJECT: - ObjectValue object = WorthUtils.dynamicCast(value, ObjectValue.class); if (jsonNode.getNodeType() == JsonNodeType.OBJECT) { + ObjectValue object = (ObjectValue) value; for (Map.Entry entry : object) { if (!jsonNode.has(entry.getKey())) { cb.call(value, jsonNode); diff --git a/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java b/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java index 4ca2324..f2251ce 100644 --- a/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java +++ b/src/test/java/net/woggioni/worth/traversal/ValueWalkerTest.java @@ -1,11 +1,12 @@ package net.woggioni.worth.traversal; import lombok.SneakyThrows; +import net.woggioni.jwo.JWO; import net.woggioni.worth.serialization.json.JSONParser; import net.woggioni.worth.serialization.json.JSONTest; import net.woggioni.worth.utils.Tuple2; -import net.woggioni.worth.utils.WorthUtils; -import net.woggioni.worth.value.*; +import net.woggioni.worth.value.ArrayValue; +import net.woggioni.worth.value.ObjectValue; import net.woggioni.worth.xface.Parser; import net.woggioni.worth.xface.Value; import org.junit.Assert; @@ -41,14 +42,14 @@ public class ValueWalkerTest { @Override public boolean visitPre(TraversalContext ctx) { - Value value = WorthUtils.tail(ctx.getStack()).getValue(); + Value value = JWO.tail(ctx.getStack()).getValue(); preValues.add(value); return true; } @Override public void visitPost(TraversalContext ctx) { - Value value = WorthUtils.tail(ctx.getStack()).getValue(); + Value value = JWO.tail(ctx.getStack()).getValue(); postValues.add(value); } } @@ -57,11 +58,13 @@ public class ValueWalkerTest { ObjectValue ov; ArrayValue av; preResult.add(value); - if((av = WorthUtils.dynamicCast(value, ArrayValue.class)) != null) { + if(value instanceof ArrayValue) { + av = (ArrayValue) value; for(Value v : av) { walk(preResult, postResult, v); } - } else if((ov = WorthUtils.dynamicCast(value, ObjectValue.class)) != null) { + } else if(value instanceof ObjectValue) { + ov = (ObjectValue) value; for(Map.Entry entry : ov) { walk(preResult, postResult, entry.getValue()); }