Allow compilation and usage on JDK6
diff --git a/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java b/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java
index 9f188a9..8afd819 100644
--- a/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java
+++ b/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java
@@ -49,7 +49,7 @@
     }
     private static Object createJSON(boolean includeSex) 
     throws UnsupportedEncodingException {
-        Map<String,Object> map = new HashMap<>();
+        Map<String,Object> map = new HashMap<String,Object>();
         map.put("firstName", "son");
         map.put("lastName", "dj");
         if (includeSex) {
diff --git a/json/pom.xml b/json/pom.xml
index 157c0c5..9200122 100644
--- a/json/pom.xml
+++ b/json/pom.xml
@@ -8,7 +8,7 @@
   </parent>
   <groupId>org.apidesign.html</groupId>
   <artifactId>net.java.html.json</artifactId>
-  <version>0.3</version>
+  <version>0.3.1</version>
   <name>JSON Model in Java</name>
   <url>http://maven.apache.org</url>
   <properties>
diff --git a/json/src/main/java/org/apidesign/html/json/impl/Bindings.java b/json/src/main/java/org/apidesign/html/json/impl/Bindings.java
index 7770cdb..c938ef3 100644
--- a/json/src/main/java/org/apidesign/html/json/impl/Bindings.java
+++ b/json/src/main/java/org/apidesign/html/json/impl/Bindings.java
@@ -41,13 +41,13 @@
     }
     
     public <M> PropertyBinding registerProperty(String propName, M model, SetAndGet<M> access, boolean readOnly) {
-        PropertyBinding pb = PropertyBindingAccessor.create(new PBData<>(propName, model, access, readOnly));
+        PropertyBinding pb = PropertyBindingAccessor.create(new PBData<M>(propName, model, access, readOnly));
         bp.bind(pb, model, data);
         return pb;
     }
 
     public <M> FunctionBinding registerFunction(String name, M model, Callback<M> access) {
-        FunctionBinding fb = PropertyBindingAccessor.createFunction(new FBData<>(name, model, access));
+        FunctionBinding fb = PropertyBindingAccessor.createFunction(new FBData<M>(name, model, access));
         bp.expose(fb, model, data);
         return fb;
     }
@@ -61,7 +61,7 @@
         Technology<Data> bp, Object model
     ) {
         Data d = bp.wrapModel(model);
-        return new Bindings<>(d, bp);
+        return new Bindings<Data>(d, bp);
     }
     
     
diff --git a/json/src/main/java/org/apidesign/html/json/impl/JSON.java b/json/src/main/java/org/apidesign/html/json/impl/JSON.java
index 480da09..eb1665c 100644
--- a/json/src/main/java/org/apidesign/html/json/impl/JSON.java
+++ b/json/src/main/java/org/apidesign/html/json/impl/JSON.java
@@ -109,7 +109,7 @@
     
     private static final Map<Class,FromJSON<?>> froms;
     static {
-        Map<Class,FromJSON<?>> m = new HashMap<>();
+        Map<Class,FromJSON<?>> m = new HashMap<Class,FromJSON<?>>();
         froms = m;
     }
     public static void register(FromJSON<?> from) {
@@ -160,8 +160,7 @@
                 Class.forName(modelClazz.getName(), true, l);
             }
             modelClazz.newInstance();
-        } catch (ClassNotFoundException | InstantiationException |
-            IllegalAccessException | SecurityException ex) {
+        } catch (Exception ex) {
             // ignore and try again
         }
     }
diff --git a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java
index c9450a6..94915cb 100644
--- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java
+++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java
@@ -82,7 +82,7 @@
  * @author Jaroslav Tulach <jtulach@netbeans.org>
  */
 @ServiceProvider(service=Processor.class)
-@SupportedSourceVersion(SourceVersion.RELEASE_7)
+@SupportedSourceVersion(SourceVersion.RELEASE_6)
 @SupportedAnnotationTypes({
     "net.java.html.json.Model",
     "net.java.html.json.Function",
@@ -93,8 +93,8 @@
 })
 public final class ModelProcessor extends AbstractProcessor {
     private static final Logger LOG = Logger.getLogger(ModelProcessor.class.getName());
-    private final Map<Element,String> models = new WeakHashMap<>();
-    private final Map<Element,Prprt[]> verify = new WeakHashMap<>();
+    private final Map<Element,String> models = new WeakHashMap<Element,String>();
+    private final Map<Element,Prprt[]> verify = new WeakHashMap<Element,Prprt[]>();
     @Override
     public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
         boolean ok = true;
@@ -159,10 +159,10 @@
         models.put(e, className);
         try {
             StringWriter body = new StringWriter();
-            List<String> propsGetSet = new ArrayList<>();
-            List<String> functions = new ArrayList<>();
-            Map<String, Collection<String>> propsDeps = new HashMap<>();
-            Map<String, Collection<String>> functionDeps = new HashMap<>();
+            List<String> propsGetSet = new ArrayList<String>();
+            List<String> functions = new ArrayList<String>();
+            Map<String, Collection<String>> propsDeps = new HashMap<String, Collection<String>>();
+            Map<String, Collection<String>> functionDeps = new HashMap<String, Collection<String>>();
             Prprt[] props = createProps(e, m.properties());
             
             if (!generateComputedProperties(body, props, e.getEnclosedElements(), propsGetSet, propsDeps)) {
@@ -217,7 +217,7 @@
                 for (int i = 0; i < propsGetSet.size(); i += 5) {
                     final String set = propsGetSet.get(i + 2);
                     String tn = propsGetSet.get(i + 4);
-                    if (processingEnv.getSourceVersion().compareTo(SourceVersion.RELEASE_7) < 0) {
+                    if (processingEnv.getSourceVersion().compareTo(SourceVersion.RELEASE_6) <= 0) {
                         String btn = findBoxedType(tn);
                         if (btn != null) {
                             tn = btn;
@@ -311,8 +311,15 @@
                             w.append(type).append(".valueOf((String)ret[" + cnt + "]);\n");
                         } else if (isPrimitive(type)) {
                             w.append("    this.prop_").append(pn);
-                            w.append(" = ret[" + cnt + "] == null ? (").append(type).append(")0 : ");
-                            w.append("((Number)").append("ret[" + cnt + "]).");
+                            w.append(" = ret[" + cnt + "] == null ? ");
+                            if ("char".equals(type)) {
+                                w.append("0 : ((Character)");
+                            } else if ("boolean".equals(type)) {
+                                w.append("false : ((Boolean)");
+                            } else {
+                                w.append("0 : ((Number)");
+                            }
+                            w.append("ret[" + cnt + "]).");
                             w.append(type).append("Value();\n");
                         } else {
                             w.append("    this.prop_").append(pn);
@@ -472,7 +479,7 @@
                 
                 Collection<String> depends = deps.get(dn);
                 if (depends == null) {
-                    depends = new LinkedHashSet<>();
+                    depends = new LinkedHashSet<String>();
                     deps.put(dn, depends);
                 }
                 depends.add(sn);
@@ -685,14 +692,14 @@
                 
                 Collection<String> change = functionDeps.get(pn);
                 if (change == null) {
-                    change = new ArrayList<>();
+                    change = new ArrayList<String>();
                     functionDeps.put(pn, change);
                 }
                 change.add(call.toString());
                 for (String dpn : findDerivedFrom(propDeps, pn)) {
                     change = functionDeps.get(dpn);
                     if (change == null) {
-                        change = new ArrayList<>();
+                        change = new ArrayList<String>();
                         functionDeps.put(dpn, change);
                     }
                     change.add(call.toString());
@@ -741,7 +748,7 @@
             }
             String modelClass = null;
             boolean expectsList = false;
-            List<String> args = new ArrayList<>();
+            List<String> args = new ArrayList<String>();
             {
                 for (VariableElement ve : e.getParameters()) {
                     TypeMirror modelType = null;
@@ -1117,7 +1124,7 @@
     private Iterable<String> findParamNames(
         Element e, String url, String jsonParam, StringBuilder... both
     ) {
-        List<String> params = new ArrayList<>();
+        List<String> params = new ArrayList<String>();
         int wasJSON = 0;
 
         for (int pos = 0; ;) {
@@ -1165,11 +1172,13 @@
             "long".equals(type) ||
             "short".equals(type) ||
             "byte".equals(type) ||
+            "char".equals(type) ||
+            "boolean".equals(type) ||
             "float".equals(type);
     }
 
     private static Collection<String> findDerivedFrom(Map<String, Collection<String>> propsDeps, String derivedProp) {
-        Set<String> names = new HashSet<>();
+        Set<String> names = new HashSet<String>();
         for (Map.Entry<String, Collection<String>> e : propsDeps.entrySet()) {
             if (e.getValue().contains(derivedProp)) {
                 names.add(e.getKey());
@@ -1269,17 +1278,21 @@
         }
 
         String typeName(ProcessingEnvironment env) {
+            RuntimeException ex;
             try {
                 return p.type().getName();
-            } catch (IncompleteAnnotationException | AnnotationTypeMismatchException ex) {
-                for (Object v : getAnnoValues(env, e, tm)) {
-                    String s = v.toString().replace(" ", "");
-                    if (s.startsWith("type=") && s.endsWith(".class")) {
-                        return s.substring(5, s.length() - 6);
-                    }
-                }
-                throw ex;
+            } catch (IncompleteAnnotationException e) {
+                ex = e;
+            } catch (AnnotationTypeMismatchException e) {
+                ex = e;
             }
+            for (Object v : getAnnoValues(env, e, tm)) {
+                String s = v.toString().replace(" ", "");
+                if (s.startsWith("type=") && s.endsWith(".class")) {
+                    return s.substring(5, s.length() - 6);
+                }
+            }
+            throw ex;
         }
         
         
diff --git a/json/src/test/java/net/java/html/json/Compile.java b/json/src/test/java/net/java/html/json/Compile.java
index 19da280..9fddf7a 100644
--- a/json/src/test/java/net/java/html/json/Compile.java
+++ b/json/src/test/java/net/java/html/json/Compile.java
@@ -51,7 +51,8 @@
  * @author Jaroslav Tulach <jtulach@netbeans.org>
  */
 final class Compile implements DiagnosticListener<JavaFileObject> {
-    private final List<Diagnostic<? extends JavaFileObject>> errors = new ArrayList<>();
+    private final List<Diagnostic<? extends JavaFileObject>> errors = 
+            new ArrayList<Diagnostic<? extends JavaFileObject>>();
     private final Map<String, byte[]> classes;
     private final String pkg;
     private final String cls;
@@ -83,7 +84,8 @@
     /** Obtains errors created during compilation.
      */
     public List<Diagnostic<? extends JavaFileObject>> getErrors() {
-        List<Diagnostic<? extends JavaFileObject>> err = new ArrayList<>();
+        List<Diagnostic<? extends JavaFileObject>> err;
+        err = new ArrayList<Diagnostic<? extends JavaFileObject>>();
         for (Diagnostic<? extends JavaFileObject> diagnostic : errors) {
             if (diagnostic.getKind() == Diagnostic.Kind.ERROR) {
                 err.add(diagnostic);
@@ -95,7 +97,8 @@
     private Map<String, byte[]> compile(final String html, final String code) throws IOException {
         StandardJavaFileManager sjfm = ToolProvider.getSystemJavaCompiler().getStandardFileManager(this, null, null);
 
-        final Map<String, ByteArrayOutputStream> class2BAOS = new HashMap<>();
+        final Map<String, ByteArrayOutputStream> class2BAOS;
+        class2BAOS = new HashMap<String, ByteArrayOutputStream>();
 
         JavaFileObject file = new SimpleJavaFileObject(URI.create("mem://mem"), Kind.SOURCE) {
             @Override
@@ -201,7 +204,7 @@
 
         ToolProvider.getSystemJavaCompiler().getTask(null, jfm, this, /*XXX:*/Arrays.asList("-source", sourceLevel, "-target", "1.7"), null, Arrays.asList(file)).call();
 
-        Map<String, byte[]> result = new HashMap<>();
+        Map<String, byte[]> result = new HashMap<String, byte[]>();
 
         for (Map.Entry<String, ByteArrayOutputStream> e : class2BAOS.entrySet()) {
             result.put(e.getKey(), e.getValue().toByteArray());
diff --git a/json/src/test/java/net/java/html/json/MapModelTest.java b/json/src/test/java/net/java/html/json/MapModelTest.java
index 3352219..85dd0be 100644
--- a/json/src/test/java/net/java/html/json/MapModelTest.java
+++ b/json/src/test/java/net/java/html/json/MapModelTest.java
@@ -143,7 +143,7 @@
 
         @Override
         public Map<String, One> wrapModel(Object model) {
-            return new HashMap<>();
+            return new HashMap<String, One>();
         }
 
         @Override
diff --git a/json/src/test/java/net/java/html/json/ModelTest.java b/json/src/test/java/net/java/html/json/ModelTest.java
index 28a610b..a981164 100644
--- a/json/src/test/java/net/java/html/json/ModelTest.java
+++ b/json/src/test/java/net/java/html/json/ModelTest.java
@@ -240,7 +240,7 @@
     }
     
     private static class MockTechnology implements Technology<Object> {
-        private final List<String> mutated = new ArrayList<>();
+        private final List<String> mutated = new ArrayList<String>();
 
         @Override
         public Object wrapModel(Object model) {
diff --git a/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java b/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java
index a74edb6..90e6e5f 100644
--- a/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java
+++ b/json/src/test/java/org/apidesign/html/json/impl/JSONListTest.java
@@ -40,7 +40,7 @@
  */
 public class JSONListTest implements Technology<Object> {
     private boolean replaceArray;
-    private final Map<String,PropertyBinding> bindings = new HashMap<>();
+    private final Map<String,PropertyBinding> bindings = new HashMap<String,PropertyBinding>();
     
     public JSONListTest() {
     }
diff --git a/pom.xml b/pom.xml
index d7d72be..4838f65 100644
--- a/pom.xml
+++ b/pom.xml
@@ -122,8 +122,8 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>2.3.2</version>
                 <configuration>
-                    <source>1.7</source>
-                    <target>1.7</target>
+                    <source>1.6</source>
+                    <target>1.6</target>
                 </configuration>
             </plugin>
           </plugins>