Merge pull request #4 from ebarboni/NoSuchBuffer

[MSHARED-786] jdk8 incompatibility at runtime (NoSuchMethodError)
diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
index 333d0f9..c0e0cac 100644
--- a/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
+++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/asm/ConstantPoolParser.java
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import java.nio.Buffer;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.util.Collections;
@@ -159,8 +160,10 @@
 
     private static String decodeString( ByteBuffer buf )
     {
-        int size = buf.getChar(), oldLimit = buf.limit();
-        buf.limit( buf.position() + size );
+        int size = buf.getChar();
+        // Explicit cast for compatibility with covariant return type on JDK 9's ByteBuffer
+        int oldLimit = ( (Buffer) buf ).limit();
+        ( (Buffer) buf ).limit( buf.position() + size );
         StringBuilder sb = new StringBuilder( size + ( size >> 1 ) + 16 );
         while ( buf.hasRemaining() )
         {
@@ -183,7 +186,7 @@
                 }
             }
         }
-        buf.limit( oldLimit );
+        ( (Buffer) buf ).limit( oldLimit );
         return sb.toString();
     }
 }