Fix: ClassCastException when dumping generic bean
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ae977f0..c789aba 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,7 +7,10 @@
 	</properties>

 	<body>

 		<release version="1.7" date="in Mercurial" description="development">

-	        <action dev="py4fun" type="fix" issue="59">

+	        <action dev="py4fun" type="fix" issue="61">

+                Fix: ClassCastException when dumping generic bean (2010-04-01)

+            </action>

+            <action dev="py4fun" type="fix" issue="59">

                 Provide an example for changing JavaBean properties order (2010-04-01)

             </action>

             <action dev="py4fun" type="fix" issue="60">

diff --git a/src/main/java/org/yaml/snakeyaml/representer/Representer.java b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
index dc049cd..af6d0b1 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/Representer.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
@@ -21,6 +21,7 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -181,6 +182,10 @@
         if (arguments != null) {
             if (node.getNodeId() == NodeId.sequence) {
                 // apply map tag where class is the same
+                if (arguments[0] instanceof TypeVariable) {
+                    // generic collections need the tag
+                    return;
+                }
                 Class<? extends Object> t = (Class<? extends Object>) arguments[0];
                 SequenceNode snode = (SequenceNode) node;
                 List<Object> memberList = (List<Object>) object;
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericBeanTest.java
new file mode 100644
index 0000000..727254f
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericBeanTest.java
@@ -0,0 +1,93 @@
+/**

+ * Copyright (c) 2008-2010 Andrey Somov

+ *

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+package org.yaml.snakeyaml.issues.issue61;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import junit.framework.TestCase;

+

+import org.yaml.snakeyaml.JavaBeanDumper;

+import org.yaml.snakeyaml.Util;

+

+public class GenericBeanTest extends TestCase {

+    public void testGenericList() throws Exception {

+        JavaBeanDumper beanDumper = new JavaBeanDumper();

+        ListProvider<String> listProvider = new ListProvider<String>();

+        listProvider.getList().add("foo");

+        listProvider.getList().add("bar");

+        String s = beanDumper.dump(listProvider);

+        // System.out.println(s);

+        assertEquals("list:\n- foo\n- bar\n", s);

+        // parse

+        // JavaBeanLoader<ListProvider> loader = new

+        // JavaBeanLoader<ListProvider>(ListProvider.class);

+        // ListProvider listProvider2 = loader.load(s);

+        // assertEquals("foo", listProvider2.getList().get(0));

+        // assertEquals("bar", listProvider2.getList().get(1));

+    }

+

+    public void testGenericBean() throws Exception {

+        JavaBeanDumper beanDumper = new JavaBeanDumper();

+        ListProvider<Bean> listProvider = new ListProvider<Bean>();

+        Bean foo = new Bean();

+        foo.setName("foo");

+        listProvider.getList().add(foo);

+        Bean bar = new Bean();

+        bar.setName("bar");

+        bar.setNumber(3);

+        listProvider.getList().add(bar);

+        String s = beanDumper.dump(listProvider);

+        // System.out.println(s);

+        String etalon = Util.getLocalResource("issues/issue61-1.yaml");

+        assertEquals(etalon, s);

+    }

+

+    public static class ListProvider<T> {

+        private List<T> list = new ArrayList<T>();

+

+        public List<T> getList() {

+            return list;

+        }

+

+        public void setList(List<T> list) {

+            this.list = list;

+        }

+    }

+

+    public static class Bean {

+        private String name;

+        private int number;

+

+        public String getName() {

+            return name;

+        }

+

+        public void setName(String name) {

+            this.name = name;

+        }

+

+        public int getNumber() {

+            return number;

+        }

+

+        public void setNumber(int number) {

+            this.number = number;

+        }

+    }

+

+}

diff --git a/src/test/resources/issues/issue61-1.yaml b/src/test/resources/issues/issue61-1.yaml
new file mode 100644
index 0000000..52e1f43
--- /dev/null
+++ b/src/test/resources/issues/issue61-1.yaml
@@ -0,0 +1,7 @@
+list:
+- !!org.yaml.snakeyaml.issues.issue61.GenericBeanTest$Bean
+  name: foo
+  number: 0
+- !!org.yaml.snakeyaml.issues.issue61.GenericBeanTest$Bean
+  name: bar
+  number: 3