Backout changes for issue 84: regular expessions for implicit types are always applied
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0b41f05..bf5cc46 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,10 +7,6 @@
</properties>
<body>
<release version="1.8-SNAPSHOT" date="in Mercurial" description="Performance improvement">
- <action dev="py4fun" type="update" issue="84">
- JavaBeanLoader does not use regular expressions for implicit types. It is possible
- to keep the implicit types when it is required. (2010-09-06)
- </action>
<action dev="py4fun" type="update" issue="79">
Introduce LoaderOptions to be able to specify configuration while loading (2010-09-03)
</action>
diff --git a/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java b/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java
index e5f0a83..805cec3 100644
--- a/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java
+++ b/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java
@@ -40,25 +40,22 @@
this(typeDescription, BeanAccess.DEFAULT);
}
- // TODO should BeanAccess be inside LoaderOptions ???
public JavaBeanLoader(TypeDescription typeDescription, BeanAccess beanAccess) {
this(new LoaderOptions(typeDescription), beanAccess);
}
public JavaBeanLoader(LoaderOptions options, BeanAccess beanAccess) {
+ if (options == null) {
+ throw new NullPointerException("LoaderOptions must be provided.");
+ }
if (options.getRootTypeDescription() == null) {
throw new NullPointerException("TypeDescription must be provided.");
}
Constructor constructor = new Constructor(options.getRootTypeDescription().getType());
options.getRootTypeDescription().setRoot(true);
- Resolver resolver;
- if (options.useImplicitTypes()) {
- resolver = new Resolver(Resolver.Mode.STANDARD);
- } else {
- resolver = new Resolver(Resolver.Mode.JAVABEAN);
- }
constructor.addTypeDescription(options.getRootTypeDescription());
- loader = new Yaml(constructor, options, new Representer(), new DumperOptions(), resolver);
+ loader = new Yaml(constructor, options, new Representer(), new DumperOptions(),
+ new Resolver());
loader.setBeanAccess(beanAccess);
}
diff --git a/src/main/java/org/yaml/snakeyaml/LoaderOptions.java b/src/main/java/org/yaml/snakeyaml/LoaderOptions.java
index 9f7e24f..6f4a2f7 100644
--- a/src/main/java/org/yaml/snakeyaml/LoaderOptions.java
+++ b/src/main/java/org/yaml/snakeyaml/LoaderOptions.java
@@ -22,7 +22,6 @@
* 40% slower and it consumes much more memory (default=false)
*/
private boolean withMarkContext = false;
- private ImplicitMode implicitMode = ImplicitMode.DYNAMIC_IMPLICIT_TYPES;
private TypeDescription rootTypeDescription;
public LoaderOptions() {
@@ -33,22 +32,6 @@
this.rootTypeDescription = rootTypeDescription;
}
- public enum ImplicitMode {
- /**
- * Disable implicit types when JavaBean is loaded (default).
- */
- DYNAMIC_IMPLICIT_TYPES,
- /**
- * Enable this when JavaBean has a property which is a generic
- * collections like Map<String, Integer>
- */
- ALWAYS_IMPLICIT_TYPES,
- /**
- * When implicit types are not used all the scalars are Strings.
- */
- NEVER_IMPLICIT_TYPES;
- }
-
public boolean isWithMarkContext() {
return withMarkContext;
}
@@ -57,14 +40,6 @@
this.withMarkContext = useContextMark;
}
- public ImplicitMode getImplicitMode() {
- return implicitMode;
- }
-
- public void setImplicitMode(ImplicitMode implicitMode) {
- this.implicitMode = implicitMode;
- }
-
public TypeDescription getRootTypeDescription() {
return rootTypeDescription;
}
@@ -72,13 +47,4 @@
public void setRootTypeDescription(TypeDescription rootTypeDescription) {
this.rootTypeDescription = rootTypeDescription;
}
-
- public boolean useImplicitTypes() {
- if (implicitMode == ImplicitMode.DYNAMIC_IMPLICIT_TYPES) {
- Class<?> t = rootTypeDescription.getType();
- return Object.class.equals(t);
- } else {
- return implicitMode == ImplicitMode.ALWAYS_IMPLICIT_TYPES;
- }
- }
}
diff --git a/src/main/java/org/yaml/snakeyaml/Yaml.java b/src/main/java/org/yaml/snakeyaml/Yaml.java
index 252635f..2a6cc31 100644
--- a/src/main/java/org/yaml/snakeyaml/Yaml.java
+++ b/src/main/java/org/yaml/snakeyaml/Yaml.java
@@ -41,7 +41,6 @@
import org.yaml.snakeyaml.reader.UnicodeReader;
import org.yaml.snakeyaml.representer.Representer;
import org.yaml.snakeyaml.resolver.Resolver;
-import org.yaml.snakeyaml.resolver.Resolver.Mode;
import org.yaml.snakeyaml.serializer.Serializer;
/**
@@ -66,8 +65,7 @@
public Yaml(LoaderOptions loaderOptions) {
this(new Constructor(), loaderOptions, new Representer(), new DumperOptions(),
- loaderOptions.useImplicitTypes() ? new Resolver(Mode.STANDARD) : new Resolver(
- Mode.JAVABEAN));
+ new Resolver());
}
/**
diff --git a/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java b/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java
index 98aaba0..ecc2fa9 100644
--- a/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java
+++ b/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java
@@ -48,10 +48,6 @@
protected Map<Character, List<ResolverTuple>> yamlImplicitResolvers = new HashMap<Character, List<ResolverTuple>>();
- public enum Mode {
- STANDARD, JAVABEAN;
- }
-
/**
* Create Resolver
*
@@ -82,16 +78,7 @@
}
public Resolver() {
- this(Mode.STANDARD);
- }
-
- public Resolver(Mode mode) {
- if (mode == Mode.STANDARD) {
- addImplicitResolvers();
- } else {
- addImplicitResolver(Tag.NULL, NULL, "~nN\0");
- addImplicitResolver(Tag.NULL, EMPTY, null);
- }
+ this(true);
}
public void addImplicitResolver(Tag tag, Pattern regexp, String first) {
diff --git a/src/test/java/examples/collections/TypeSafeMapTest.java b/src/test/java/examples/collections/TypeSafeMapTest.java
index 440a798..83d9d59 100644
--- a/src/test/java/examples/collections/TypeSafeMapTest.java
+++ b/src/test/java/examples/collections/TypeSafeMapTest.java
@@ -23,11 +23,7 @@
import org.yaml.snakeyaml.JavaBeanDumper;
import org.yaml.snakeyaml.JavaBeanLoader;
-import org.yaml.snakeyaml.LoaderOptions;
-import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Util;
-import org.yaml.snakeyaml.LoaderOptions.ImplicitMode;
-import org.yaml.snakeyaml.introspector.BeanAccess;
/**
* Test MapBean->Map<String, Developer> developers <br/>
@@ -170,10 +166,8 @@
public void testLoadMapWithObject() {
String output = Util.getLocalResource("examples/map-bean-10.yaml");
// System.out.println(output);
- LoaderOptions options = new LoaderOptions(new TypeDescription(MapBeanNoGenerics.class));
- options.setImplicitMode(ImplicitMode.ALWAYS_IMPLICIT_TYPES);
JavaBeanLoader<MapBeanNoGenerics> beanLoader = new JavaBeanLoader<MapBeanNoGenerics>(
- options, BeanAccess.DEFAULT);
+ MapBeanNoGenerics.class);
MapBeanNoGenerics parsed = beanLoader.load(output);
assertNotNull(parsed);
Map<String, Integer> data = parsed.getData();
diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java
index 654c2d5..4d6660f 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java
@@ -25,6 +25,8 @@
import junit.framework.TestCase;
+import org.yaml.snakeyaml.introspector.BeanAccess;
+
public class JavaBeanLoaderTest extends TestCase {
public void testLoadString() {
@@ -84,6 +86,15 @@
}
}
+ public void testLoaderNullOptions() {
+ try {
+ new JavaBeanLoader<Bean>((LoaderOptions) null, BeanAccess.DEFAULT);
+ fail();
+ } catch (NullPointerException e) {
+ assertEquals("LoaderOptions must be provided.", e.getMessage());
+ }
+ }
+
public static class Bean {
private String name;
private int id;
@@ -152,23 +163,6 @@
assertEquals("Name123", parsed.getName());
}
- public void testTypeDescription1111() {
- Bean3 bean3 = new Bean3();
- bean3.setName("Name123");
- Bean bean = new Bean();
- bean.setId(3);
- bean.setName("Test me.");
- bean3.setBean(bean);
- JavaBeanDumper dumper = new JavaBeanDumper();
- String output = dumper.dump(bean3);
- assertEquals("bean:\n id: 3\n name: Test me.\nlist: null\nname: Name123\n", output);
- TypeDescription td = new TypeDescription(Bean3.class);
- td.putListPropertyType("list", Integer.class);
- JavaBeanLoader<Bean3> loader = new JavaBeanLoader<Bean3>(td);
- Bean3 parsed = loader.load("bean:\n id: 3\n name: Test me.\n\nname: Name123\n");
- assertEquals("Name123", parsed.getName());
- }
-
public void testTypeDescription2() {
Bean3 bean3 = new Bean3();
bean3.setName("Name123");
diff --git a/src/test/java/org/yaml/snakeyaml/LoaderOptionsTest.java b/src/test/java/org/yaml/snakeyaml/LoaderOptionsTest.java
index 4b3ba3c..d8e63bc 100644
--- a/src/test/java/org/yaml/snakeyaml/LoaderOptionsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/LoaderOptionsTest.java
@@ -18,38 +18,10 @@
import junit.framework.TestCase;
-import org.yaml.snakeyaml.LoaderOptions.ImplicitMode;
-
public class LoaderOptionsTest extends TestCase {
public void testGetMode() {
LoaderOptions defaultOptions = new LoaderOptions();
assertFalse(defaultOptions.isWithMarkContext());
- assertEquals(LoaderOptions.ImplicitMode.DYNAMIC_IMPLICIT_TYPES, defaultOptions
- .getImplicitMode());
- }
-
- public void testUseImplicitTypes1() {
- LoaderOptions options = new LoaderOptions();
- assertTrue(options.useImplicitTypes());
-
- }
-
- public void testUseImplicitTypes2() {
- LoaderOptions options = new LoaderOptions(new TypeDescription(Object.class));
- assertTrue(options.useImplicitTypes());
- }
-
- public void testUseImplicitTypes3() {
- LoaderOptions options = new LoaderOptions(new TypeDescription(LoaderOptionsTest.class));
- assertFalse(options.useImplicitTypes());
- }
-
- public void testMoImplicitTypes() {
- LoaderOptions options = new LoaderOptions();
- options.setImplicitMode(ImplicitMode.NEVER_IMPLICIT_TYPES);
- Yaml yaml = new Yaml(options);
- String number = (String) yaml.load("11");
- assertEquals("Integer must not be recognised.", "11", number);
}
}
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/BeanConstructorTest.java b/src/test/java/org/yaml/snakeyaml/constructor/BeanConstructorTest.java
index e129dbb..f6b25fa 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/BeanConstructorTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/BeanConstructorTest.java
@@ -22,7 +22,6 @@
import junit.framework.TestCase;
import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.JavaBeanLoader;
import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.error.YAMLException;
@@ -215,19 +214,6 @@
}
}
- public void testScalarContructorExceptionNoImplicitTypesMode() throws IOException {
- JavaBeanLoader<ExceptionParent> loader = new JavaBeanLoader<ExceptionParent>(
- ExceptionParent.class);
- String document = "id: 123\nchild: 25";
- try {
- loader.load(document);
- fail("ExceptionParent should not be created.");
- } catch (Exception e) {
- assertTrue(e.getMessage(), e.getMessage().contains(
- "Can't construct a java object for scalar tag:yaml.org,2002:str"));
- }
- }
-
static public class ExceptionParent {
private String id;
private ExceptionChild child;
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java b/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java
index 9dc3fe6..071db15 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java
@@ -69,26 +69,6 @@
}
}
- public void testTypeSafeMapNoRegularExpressionsMode() throws IOException {
- Constructor constructor = new Constructor(MyCar.class);
- TypeDescription carDescription = new TypeDescription(MyCar.class);
- carDescription.putMapPropertyType("wheels", MyWheel.class, Object.class);
- constructor.addTypeDescription(carDescription);
- Yaml yaml = new Yaml(constructor);
- MyCar car = (MyCar) yaml.load(Util
- .getLocalResource("constructor/car-no-root-class-map.yaml"));
- assertEquals("00-FF-Q2", car.getPlate());
- Map<MyWheel, Date> wheels = car.getWheels();
- assertNotNull(wheels);
- assertEquals(5, wheels.size());
- for (MyWheel wheel : wheels.keySet()) {
- assertTrue(wheel.getId() > 0);
- Date date = wheels.get(wheel);
- long time = date.getTime();
- assertTrue("It must be midnight.", time % 10000 == 0);
- }
- }
-
public void testWithGlobalTag() throws IOException {
Map<MyWheel, Date> wheels = new TreeMap<MyWheel, Date>();
long time = 1248212168084L;
diff --git a/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java b/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java
index c2f805c..9360322 100644
--- a/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java
+++ b/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java
@@ -25,10 +25,6 @@
import org.yaml.snakeyaml.JavaBeanDumper;
import org.yaml.snakeyaml.JavaBeanLoader;
-import org.yaml.snakeyaml.LoaderOptions;
-import org.yaml.snakeyaml.TypeDescription;
-import org.yaml.snakeyaml.LoaderOptions.ImplicitMode;
-import org.yaml.snakeyaml.introspector.BeanAccess;
public class ObjectValuesTest extends TestCase {
@@ -52,10 +48,8 @@
JavaBeanDumper dumper = new JavaBeanDumper();
String dumpedStr = dumper.dump(ov);
- LoaderOptions options = new LoaderOptions(new TypeDescription(ObjectValues.class));
- options.setImplicitMode(ImplicitMode.ALWAYS_IMPLICIT_TYPES);
- JavaBeanLoader<ObjectValues> loader = new JavaBeanLoader<ObjectValues>(options,
- BeanAccess.DEFAULT);
+
+ JavaBeanLoader<ObjectValues> loader = new JavaBeanLoader<ObjectValues>(ObjectValues.class);
ObjectValues ov2 = loader.load(dumpedStr);
assertEquals(ov.getObject(), ov2.getObject());
@@ -64,6 +58,7 @@
ov.getPossible()[0] = ov2.getPossible()[0];
}
+ @SuppressWarnings("unchecked")
public void testObjectValuesWithParam() {
ObjectValuesWithParam<String, Integer> ov = new ObjectValuesWithParam<String, Integer>();
Integer obj = new Integer(131313);
@@ -85,11 +80,8 @@
JavaBeanDumper dumper = new JavaBeanDumper();
String dumpedStr = dumper.dump(ov);
- LoaderOptions options = new LoaderOptions(new TypeDescription(
- new ObjectValuesWithParam<String, Integer>().getClass()));
- options.setImplicitMode(ImplicitMode.ALWAYS_IMPLICIT_TYPES);
JavaBeanLoader<ObjectValuesWithParam<String, Integer>> loader = new JavaBeanLoader<ObjectValuesWithParam<String, Integer>>(
- options, BeanAccess.DEFAULT);
+ new ObjectValuesWithParam<String, Integer>().getClass());
ObjectValuesWithParam<String, Integer> ov2 = loader.load(dumpedStr);
assertEquals(ov.getObject(), ov2.getObject());
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
index 3a68b84..dc7343b 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
@@ -23,11 +23,7 @@
import org.yaml.snakeyaml.JavaBeanDumper;
import org.yaml.snakeyaml.JavaBeanLoader;
-import org.yaml.snakeyaml.LoaderOptions;
-import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Util;
-import org.yaml.snakeyaml.LoaderOptions.ImplicitMode;
-import org.yaml.snakeyaml.introspector.BeanAccess;
public class GenericMapBeanTest extends TestCase {
@SuppressWarnings("unchecked")
@@ -40,11 +36,7 @@
// System.out.println(s);
assertEquals("map:\n foo: 17\n bar: 19\n", s);
// parse
- LoaderOptions options = new LoaderOptions();
- options.setRootTypeDescription(new TypeDescription(MapProvider.class));
- options.setImplicitMode(ImplicitMode.ALWAYS_IMPLICIT_TYPES);
- JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(options,
- BeanAccess.DEFAULT);
+ JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(MapProvider.class);
MapProvider<String, Integer> listProvider2 = loader.load(s);
assertEquals(new Integer(17), listProvider2.getMap().get("foo"));
assertEquals(new Integer(19), listProvider2.getMap().get("bar"));
@@ -52,27 +44,6 @@
}
@SuppressWarnings("unchecked")
- public void testGenericMapNoImplicitTypes() throws Exception {
- JavaBeanDumper beanDumper = new JavaBeanDumper();
- MapProvider<String, Integer> listProvider = new MapProvider<String, Integer>();
- listProvider.getMap().put("foo", 17);
- listProvider.getMap().put("bar", 19);
- String s = beanDumper.dump(listProvider);
- // System.out.println(s);
- assertEquals("map:\n foo: 17\n bar: 19\n", s);
- // parse
- LoaderOptions options = new LoaderOptions();
- options.setRootTypeDescription(new TypeDescription(MapProvider.class));
- options.setImplicitMode(ImplicitMode.NEVER_IMPLICIT_TYPES);
- JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(options,
- BeanAccess.DEFAULT);
- MapProvider<String, Integer> listProvider2 = loader.load(s);
- assertEquals("17", listProvider2.getMap().get("foo"));
- assertEquals("19", listProvider2.getMap().get("bar"));
- assertFalse(listProvider.equals(listProvider2));
- }
-
- @SuppressWarnings("unchecked")
public void testGenericBean() throws Exception {
JavaBeanDumper beanDumper = new JavaBeanDumper();
MapProvider<String, Bean> listProvider = new MapProvider<String, Bean>();
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java
index 64df6ba..19e296e 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java
@@ -106,6 +106,7 @@
String dump = yaml.dump(customerAB);
// System.out.println(dump);
CustomerAB parsed = (CustomerAB) yaml.load(dump);
+ assertNotNull(parsed);
}
public void testAB_Set() {
@@ -127,6 +128,7 @@
String dump = yaml.dump(customerAB);
// System.out.println(dump);
CustomerAB parsed = (CustomerAB) yaml.load(dump);
+ assertNotNull(parsed);
}
public void testABWithCustomTag() {
@@ -155,6 +157,7 @@
String dump = yaml.dump(customerAB);
// System.out.println(dump);
CustomerAB parsed = (CustomerAB) yaml.load(dump);
+ assertNotNull(parsed);
}
public void testABwithJavaBeanHelpers() {
@@ -177,6 +180,7 @@
// System.out.println(dump2);
JavaBeanLoader<CustomerAB> loader = new JavaBeanLoader<CustomerAB>(CustomerAB.class);
CustomerAB parsed = loader.load(dump2);
+ assertNotNull(parsed);
}
public void testAB_asMapValue() {
@@ -198,6 +202,7 @@
String dump = yaml.dump(customerAB_mapValue);
// System.out.println(dump);
CustomerAB_MapValue parsed = (CustomerAB_MapValue) yaml.load(dump);
+ assertNotNull(parsed);
}
public void testAB_asMapKey() {
@@ -219,6 +224,7 @@
String dump = yaml.dump(customerAB_mapKey);
// System.out.println(dump);
CustomerAB_MapKey parsed = (CustomerAB_MapKey) yaml.load(dump);
+ assertNotNull(parsed);
}
public void testBA() {