[Java] Avoid casting ByteBuffer to Buffer (#6785)

* Revert "avoiding even more NoSuchMethod exceptions (#6729)"

This reverts commit 6fb2c90d9e.

* Revert "avoiding more NoSuchMethod exceptions (#6671)"

This reverts commit 752c7b576d.

* Revert "avoiding NoSuchMethod exception (#6658)"

This reverts commit 813d3632ec.

* Use Java 8 for Kotlin Linux builds to verify
This commit is contained in:
Björn Harrtell
2021-08-31 00:51:06 +02:00
committed by GitHub
parent b20c4d3aad
commit 0e9d79c355
8 changed files with 34 additions and 40 deletions

View File

@@ -143,7 +143,7 @@ jobs:
- uses: actions/setup-java@v2 - uses: actions/setup-java@v2
with: with:
distribution: 'adopt-hotspot' distribution: 'adopt-hotspot'
java-version: '11' java-version: '8'
- name: Build - name: Build
working-directory: kotlin working-directory: kotlin
run: ./gradlew jvmMainClasses jvmTest run: ./gradlew jvmMainClasses jvmTest

View File

@@ -2,7 +2,6 @@ package com.google.flatbuffers;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.nio.Buffer;
public class ByteBufferReadWriteBuf implements ReadWriteBuf { public class ByteBufferReadWriteBuf implements ReadWriteBuf {
@@ -15,7 +14,7 @@ public class ByteBufferReadWriteBuf implements ReadWriteBuf {
@Override @Override
public void clear() { public void clear() {
((Buffer) buffer).clear(); buffer.clear();
} }
@Override @Override
@@ -118,9 +117,9 @@ public class ByteBufferReadWriteBuf implements ReadWriteBuf {
public void set(int index, byte[] value, int start, int length) { public void set(int index, byte[] value, int start, int length) {
requestCapacity(index + (length - start)); requestCapacity(index + (length - start));
int curPos = buffer.position(); int curPos = buffer.position();
((Buffer) buffer).position(index); buffer.position(index);
buffer.put(value, start, length); buffer.put(value, start, length);
((Buffer) buffer).position(curPos); buffer.position(curPos);
} }
@Override @Override

View File

@@ -19,7 +19,6 @@ package com.google.flatbuffers;
import static com.google.flatbuffers.Constants.*; import static com.google.flatbuffers.Constants.*;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.Buffer;
/// @file /// @file
/// @addtogroup flatbuffers_java_api /// @addtogroup flatbuffers_java_api
@@ -49,9 +48,9 @@ public class ByteBufferUtil {
* size prefix * size prefix
*/ */
public static ByteBuffer removeSizePrefix(ByteBuffer bb) { public static ByteBuffer removeSizePrefix(ByteBuffer bb) {
Buffer s = ((Buffer) bb).duplicate(); ByteBuffer s = bb.duplicate();
s.position(s.position() + SIZE_PREFIX_LENGTH); s.position(s.position() + SIZE_PREFIX_LENGTH);
return (ByteBuffer) s; return s;
} }
} }

View File

@@ -92,7 +92,7 @@ public class FlatBufferBuilder {
this.bb_factory = bb_factory; this.bb_factory = bb_factory;
if (existing_bb != null) { if (existing_bb != null) {
bb = existing_bb; bb = existing_bb;
((Buffer) bb).clear(); bb.clear();
bb.order(ByteOrder.LITTLE_ENDIAN); bb.order(ByteOrder.LITTLE_ENDIAN);
} else { } else {
bb = bb_factory.newByteBuffer(initial_size); bb = bb_factory.newByteBuffer(initial_size);
@@ -154,7 +154,7 @@ public class FlatBufferBuilder {
public FlatBufferBuilder init(ByteBuffer existing_bb, ByteBufferFactory bb_factory){ public FlatBufferBuilder init(ByteBuffer existing_bb, ByteBufferFactory bb_factory){
this.bb_factory = bb_factory; this.bb_factory = bb_factory;
bb = existing_bb; bb = existing_bb;
((Buffer) bb).clear(); bb.clear();
bb.order(ByteOrder.LITTLE_ENDIAN); bb.order(ByteOrder.LITTLE_ENDIAN);
minalign = 1; minalign = 1;
space = bb.capacity(); space = bb.capacity();
@@ -235,7 +235,7 @@ public class FlatBufferBuilder {
*/ */
public void clear(){ public void clear(){
space = bb.capacity(); space = bb.capacity();
((Buffer) bb).clear(); bb.clear();
minalign = 1; minalign = 1;
while(vtable_in_use > 0) vtable[--vtable_in_use] = 0; while(vtable_in_use > 0) vtable[--vtable_in_use] = 0;
vtable_in_use = 0; vtable_in_use = 0;
@@ -273,10 +273,10 @@ public class FlatBufferBuilder {
new_buf_size = (old_buf_size & 0xC0000000) != 0 ? MAX_BUFFER_SIZE : old_buf_size << 1; new_buf_size = (old_buf_size & 0xC0000000) != 0 ? MAX_BUFFER_SIZE : old_buf_size << 1;
} }
((Buffer) bb).position(0); bb.position(0);
ByteBuffer nbb = bb_factory.newByteBuffer(new_buf_size); ByteBuffer nbb = bb_factory.newByteBuffer(new_buf_size);
new_buf_size = ((Buffer) nbb).clear().capacity(); // Ensure the returned buffer is treated as empty new_buf_size = nbb.clear().capacity(); // Ensure the returned buffer is treated as empty
((Buffer) nbb).position(new_buf_size - old_buf_size); nbb.position(new_buf_size - old_buf_size);
nbb.put(bb); nbb.put(bb);
return nbb; return nbb;
} }
@@ -527,7 +527,7 @@ public class FlatBufferBuilder {
int length = elem_size * num_elems; int length = elem_size * num_elems;
startVector(elem_size, num_elems, alignment); startVector(elem_size, num_elems, alignment);
((Buffer) bb).position(space -= length); bb.position(space -= length);
// Slice and limit the copy vector to point to the 'array' // Slice and limit the copy vector to point to the 'array'
ByteBuffer copy = bb.slice().order(ByteOrder.LITTLE_ENDIAN); ByteBuffer copy = bb.slice().order(ByteOrder.LITTLE_ENDIAN);
@@ -602,7 +602,7 @@ public class FlatBufferBuilder {
int length = utf8.encodedLength(s); int length = utf8.encodedLength(s);
addByte((byte)0); addByte((byte)0);
startVector(1, length, 1); startVector(1, length, 1);
((Buffer) bb).position(space -= length); bb.position(space -= length);
utf8.encodeUtf8(s, bb); utf8.encodeUtf8(s, bb);
return endVector(); return endVector();
} }
@@ -617,7 +617,7 @@ public class FlatBufferBuilder {
int length = s.remaining(); int length = s.remaining();
addByte((byte)0); addByte((byte)0);
startVector(1, length, 1); startVector(1, length, 1);
((Buffer) bb).position(space -= length); bb.position(space -= length);
bb.put(s); bb.put(s);
return endVector(); return endVector();
} }
@@ -631,7 +631,7 @@ public class FlatBufferBuilder {
public int createByteVector(byte[] arr) { public int createByteVector(byte[] arr) {
int length = arr.length; int length = arr.length;
startVector(1, length, 1); startVector(1, length, 1);
((Buffer) bb).position(space -= length); bb.position(space -= length);
bb.put(arr); bb.put(arr);
return endVector(); return endVector();
} }
@@ -646,7 +646,7 @@ public class FlatBufferBuilder {
*/ */
public int createByteVector(byte[] arr, int offset, int length) { public int createByteVector(byte[] arr, int offset, int length) {
startVector(1, length, 1); startVector(1, length, 1);
((Buffer) bb).position(space -= length); bb.position(space -= length);
bb.put(arr, offset, length); bb.put(arr, offset, length);
return endVector(); return endVector();
} }
@@ -663,7 +663,7 @@ public class FlatBufferBuilder {
public int createByteVector(ByteBuffer byteBuffer) { public int createByteVector(ByteBuffer byteBuffer) {
int length = byteBuffer.remaining(); int length = byteBuffer.remaining();
startVector(1, length, 1); startVector(1, length, 1);
((Buffer) bb).position(space -= length); bb.position(space -= length);
bb.put(byteBuffer); bb.put(byteBuffer);
return endVector(); return endVector();
} }
@@ -953,7 +953,7 @@ public class FlatBufferBuilder {
if (size_prefix) { if (size_prefix) {
addInt(bb.capacity() - space); addInt(bb.capacity() - space);
} }
((Buffer) bb).position(space); bb.position(space);
finished = true; finished = true;
} }
@@ -1067,7 +1067,7 @@ public class FlatBufferBuilder {
public byte[] sizedByteArray(int start, int length){ public byte[] sizedByteArray(int start, int length){
finished(); finished();
byte[] array = new byte[length]; byte[] array = new byte[length];
((Buffer) bb).position(start); bb.position(start);
bb.get(array); bb.get(array);
return array; return array;
} }
@@ -1089,10 +1089,10 @@ public class FlatBufferBuilder {
*/ */
public InputStream sizedInputStream() { public InputStream sizedInputStream() {
finished(); finished();
Buffer duplicate = ((Buffer) bb).duplicate(); ByteBuffer duplicate = bb.duplicate();
duplicate.position(space); duplicate.position(space);
duplicate.limit(bb.capacity()); duplicate.limit(bb.capacity());
return new ByteBufferBackedInputStream((ByteBuffer) duplicate); return new ByteBufferBackedInputStream(duplicate);
} }
/** /**

View File

@@ -23,7 +23,6 @@ import static com.google.flatbuffers.FlexBuffers.Unsigned.shortToUnsignedInt;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.Buffer;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
/// @file /// @file
@@ -689,7 +688,7 @@ public class FlexBuffers {
*/ */
public ByteBuffer data() { public ByteBuffer data() {
ByteBuffer dup = ByteBuffer.wrap(bb.data()); ByteBuffer dup = ByteBuffer.wrap(bb.data());
((Buffer) dup).position(end); dup.position(end);
dup.limit(end + size()); dup.limit(end + size());
return dup.asReadOnlyBuffer().slice(); return dup.asReadOnlyBuffer().slice();
} }

View File

@@ -18,7 +18,6 @@ package com.google.flatbuffers;
import static com.google.flatbuffers.Constants.*; import static com.google.flatbuffers.Constants.*;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.Buffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
/// @cond FLATBUFFERS_INTERNAL /// @cond FLATBUFFERS_INTERNAL
@@ -151,7 +150,7 @@ public class Table {
protected ByteBuffer __vector_as_bytebuffer(int vector_offset, int elem_size) { protected ByteBuffer __vector_as_bytebuffer(int vector_offset, int elem_size) {
int o = __offset(vector_offset); int o = __offset(vector_offset);
if (o == 0) return null; if (o == 0) return null;
ByteBuffer bb = ((ByteBuffer) (((Buffer) this.bb).duplicate())).order(ByteOrder.LITTLE_ENDIAN); ByteBuffer bb = this.bb.duplicate().order(ByteOrder.LITTLE_ENDIAN);
int vectorstart = __vector(o); int vectorstart = __vector(o);
bb.position(vectorstart); bb.position(vectorstart);
bb.limit(vectorstart + __vector_len(o) * elem_size); bb.limit(vectorstart + __vector_len(o) * elem_size);
@@ -175,7 +174,7 @@ public class Table {
int vectorstart = __vector(o); int vectorstart = __vector(o);
bb.rewind(); bb.rewind();
bb.limit(vectorstart + __vector_len(o) * elem_size); bb.limit(vectorstart + __vector_len(o) * elem_size);
((Buffer) bb).position(vectorstart); bb.position(vectorstart);
return bb; return bb;
} }

View File

@@ -17,7 +17,6 @@
package com.google.flatbuffers; package com.google.flatbuffers;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.Buffer;
import java.nio.CharBuffer; import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException; import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetDecoder;
@@ -56,7 +55,7 @@ public class Utf8Old extends Utf8 {
if (cache.lastOutput == null || cache.lastOutput.capacity() < estimated) { if (cache.lastOutput == null || cache.lastOutput.capacity() < estimated) {
cache.lastOutput = ByteBuffer.allocate(Math.max(128, estimated)); cache.lastOutput = ByteBuffer.allocate(Math.max(128, estimated));
} }
((Buffer) cache.lastOutput).clear(); cache.lastOutput.clear();
cache.lastInput = in; cache.lastInput = in;
CharBuffer wrap = (in instanceof CharBuffer) ? CharBuffer wrap = (in instanceof CharBuffer) ?
(CharBuffer) in : CharBuffer.wrap(in); (CharBuffer) in : CharBuffer.wrap(in);
@@ -68,7 +67,7 @@ public class Utf8Old extends Utf8 {
throw new IllegalArgumentException("bad character encoding", e); throw new IllegalArgumentException("bad character encoding", e);
} }
} }
((Buffer) cache.lastOutput).flip(); cache.lastOutput.flip();
return cache.lastOutput.remaining(); return cache.lastOutput.remaining();
} }
@@ -87,11 +86,11 @@ public class Utf8Old extends Utf8 {
public String decodeUtf8(ByteBuffer buffer, int offset, int length) { public String decodeUtf8(ByteBuffer buffer, int offset, int length) {
CharsetDecoder decoder = CACHE.get().decoder; CharsetDecoder decoder = CACHE.get().decoder;
decoder.reset(); decoder.reset();
Buffer b = ((Buffer) buffer).duplicate(); buffer = buffer.duplicate();
b.position(offset); buffer.position(offset);
b.limit(offset + length); buffer.limit(offset + length);
try { try {
CharBuffer result = decoder.decode((ByteBuffer) b); CharBuffer result = decoder.decode(buffer);
return result.toString(); return result.toString();
} catch (CharacterCodingException e) { } catch (CharacterCodingException e) {
throw new IllegalArgumentException("Bad encoding", e); throw new IllegalArgumentException("Bad encoding", e);

View File

@@ -31,7 +31,6 @@
package com.google.flatbuffers; package com.google.flatbuffers;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.Buffer;
import static java.lang.Character.MAX_SURROGATE; import static java.lang.Character.MAX_SURROGATE;
import static java.lang.Character.MIN_SUPPLEMENTARY_CODE_POINT; import static java.lang.Character.MIN_SUPPLEMENTARY_CODE_POINT;
import static java.lang.Character.MIN_SURROGATE; import static java.lang.Character.MIN_SURROGATE;
@@ -311,7 +310,7 @@ final public class Utf8Safe extends Utf8 {
} }
if (inIx == inLength) { if (inIx == inLength) {
// Successfully encoded the entire string. // Successfully encoded the entire string.
((Buffer) out).position(outIx + inIx); out.position(outIx + inIx);
return; return;
} }
@@ -354,7 +353,7 @@ final public class Utf8Safe extends Utf8 {
} }
// Successfully encoded the entire string. // Successfully encoded the entire string.
((Buffer) out).position(outIx); out.position(outIx);
} catch (IndexOutOfBoundsException e) { } catch (IndexOutOfBoundsException e) {
// TODO(nathanmittler): Consider making the API throw IndexOutOfBoundsException instead. // TODO(nathanmittler): Consider making the API throw IndexOutOfBoundsException instead.
@@ -435,7 +434,7 @@ final public class Utf8Safe extends Utf8 {
int start = out.arrayOffset(); int start = out.arrayOffset();
int end = encodeUtf8Array(in, out.array(), start + out.position(), int end = encodeUtf8Array(in, out.array(), start + out.position(),
out.remaining()); out.remaining());
((Buffer) out).position(end - start); out.position(end - start);
} else { } else {
encodeUtf8Buffer(in, out); encodeUtf8Buffer(in, out);
} }