Merge branch '2.7'
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..4cf2927
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,3 @@
+# Do not merge `pom.xml` from older version, as it will typically conflict
+
+pom.xml merge=ours
diff --git a/pom.xml b/pom.xml
index ac865a5..86245fb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <name>Jackson-core</name>
-  <version>2.7.2-SNAPSHOT</version>
+  <version>2.8.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
   <description>Core Jackson abstractions, basic JSON streaming API implementation</description>
   <inceptionYear>2008</inceptionYear>
@@ -23,7 +23,7 @@
   </scm>
 
   <properties>
-    <!-- 02-Oct-2015, tatu: Retain Java6/JDK1.6 compatibility for streaming for Jackson 2.7 -->
+    <!-- 03-Feb-2016, tatu: Retain Java6/JDK1.6 compatibility for streaming for Jackson 2.8 -->
     <javac.src.version>1.6</javac.src.version>
     <javac.target.version>1.6</javac.target.version>
 
@@ -103,8 +103,7 @@
               <encoding>UTF-8</encoding>
               <maxmemory>1g</maxmemory>
               <links>
-                  <!-- JDK, other Jackson pkgs -->
-                  <link>http://docs.oracle.com/javase/6/docs/api/</link>
+                  <link>http://docs.oracle.com/javase/7/docs/api/</link>
               </links>
               <excludePackageNames>${javadoc.package.exclude}</excludePackageNames>
               <bootclasspath>${sun.boot.class.path}</bootclasspath>
diff --git a/src/main/java/com/fasterxml/jackson/core/ObjectCodec.java b/src/main/java/com/fasterxml/jackson/core/ObjectCodec.java
index 649c89f..afa6aaa 100644
--- a/src/main/java/com/fasterxml/jackson/core/ObjectCodec.java
+++ b/src/main/java/com/fasterxml/jackson/core/ObjectCodec.java
@@ -26,9 +26,9 @@
 {
     protected ObjectCodec() { }
 
-    // Since 2.3: need baseline implementation to avoid backwards compatibility
+    // Since 2.3
     @Override
-    public Version version() { return Version.unknownVersion(); }
+    public abstract Version version();
     
     /*
     /**********************************************************
@@ -46,8 +46,8 @@
      * The reason is that due to type erasure, key and value types
      * can not be introspected when using this method.
      */
-    public abstract <T> T readValue(JsonParser jp, Class<T> valueType)
-        throws IOException, JsonProcessingException;
+    public abstract <T> T readValue(JsonParser p, Class<T> valueType)
+        throws IOException;
 
     /**
      * Method to deserialize JSON content into a Java type, reference
@@ -56,8 +56,8 @@
      * and specifically needs to be used if the root type is a 
      * parameterized (generic) container type.
      */
-    public abstract <T> T readValue(JsonParser jp, TypeReference<?> valueTypeRef)
-        throws IOException, JsonProcessingException;
+    public abstract <T> T readValue(JsonParser p, TypeReference<?> valueTypeRef)
+        throws IOException;
 
     /**
      * Method to deserialize JSON content into a POJO, type specified
@@ -65,30 +65,30 @@
      * including containers like {@link java.util.Collection} and
      * {@link java.util.Map}).
      */
-    public abstract <T> T readValue(JsonParser jp, ResolvedType valueType)
-        throws IOException, JsonProcessingException;
+    public abstract <T> T readValue(JsonParser p, ResolvedType valueType)
+        throws IOException;
 
     /**
      * Method for reading sequence of Objects from parser stream,
      * all with same specified value type.
      */
-    public abstract <T> Iterator<T> readValues(JsonParser jp, Class<T> valueType)
-        throws IOException, JsonProcessingException;
+    public abstract <T> Iterator<T> readValues(JsonParser p, Class<T> valueType)
+        throws IOException;
 
     /**
      * Method for reading sequence of Objects from parser stream,
      * all with same specified value type.
      */
-    public abstract <T> Iterator<T> readValues(JsonParser jp, TypeReference<?> valueTypeRef)
-        throws IOException, JsonProcessingException;
+    public abstract <T> Iterator<T> readValues(JsonParser p, TypeReference<?> valueTypeRef)
+        throws IOException;
     
     /**
      * Method for reading sequence of Objects from parser stream,
      * all with same specified value type.
      */
-    public abstract <T> Iterator<T> readValues(JsonParser jp, ResolvedType valueType)
-        throws IOException, JsonProcessingException;
-    
+    public abstract <T> Iterator<T> readValues(JsonParser p, ResolvedType valueType)
+        throws IOException;
+
     /*
     /**********************************************************
     /* API for serialization (Object-to-JSON)
@@ -99,8 +99,7 @@
      * Method to serialize given Java Object, using generator
      * provided.
      */
-    public abstract void writeValue(JsonGenerator jgen, Object value)
-        throws IOException, JsonProcessingException;
+    public abstract void writeValue(JsonGenerator gen, Object value) throws IOException;
 
     /*
     /**********************************************************
@@ -116,15 +115,13 @@
      * value event, not container). Empty or whitespace
      * documents return null.
      *
-     * @return next tree from jp, or null if empty.
+     * @return next tree from p, or null if empty.
      */
     @Override
-    public abstract <T extends TreeNode> T readTree(JsonParser jp)
-        throws IOException, JsonProcessingException;
+    public abstract <T extends TreeNode> T readTree(JsonParser p) throws IOException;
     
     @Override
-    public abstract void writeTree(JsonGenerator jg, TreeNode tree)
-        throws IOException, JsonProcessingException;
+    public abstract void writeTree(JsonGenerator gen, TreeNode tree) throws IOException;
     
     /**
      * Method for construct root level Object nodes