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() {