8283417: Update java.nio buffers to use sealed classes

Reviewed-by: rriggs, darcy, iris, alanb
This commit is contained in:
Brian Burkhalter 2022-03-24 16:11:57 +00:00
parent 19f01ab701
commit b36cf35ad9
7 changed files with 45 additions and 8 deletions

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -191,7 +191,9 @@ import java.util.Spliterator;
* @since 1.4
*/
public abstract class Buffer {
public abstract sealed class Buffer
permits ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer,
LongBuffer, ShortBuffer {
// Cached unsafe-access object
static final Unsafe UNSAFE = Unsafe.getUnsafe();

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -31,8 +31,16 @@ import java.util.Objects;
import jdk.internal.access.foreign.MemorySegmentProxy;
import jdk.internal.misc.Unsafe;
#if[rw]
sealed
#else[rw]
final
#end[rw]
class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private
extends {#if[ro]?ByteBufferAs}$Type$Buffer{#if[ro]?$BO$}
#if[rw]
permits ByteBufferAs$Type$BufferR$BO$
#end[rw]
{
#if[rw]

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -37,6 +37,11 @@ import jdk.internal.ref.Cleaner;
import sun.nio.ch.DirectBuffer;
#if[rw]
sealed
#else[rw]
final
#end[rw]
class Direct$Type$Buffer$RW$$BO$
#if[rw]
extends {#if[byte]?Mapped$Type$Buffer:$Type$Buffer}
@ -44,6 +49,9 @@ class Direct$Type$Buffer$RW$$BO$
extends Direct$Type$Buffer$BO$
#end[rw]
implements DirectBuffer
#if[rw]
permits Direct$Type$BufferR$BO$
#end[rw]
{
#if[rw]

@ -40,8 +40,16 @@ import jdk.internal.access.foreign.MemorySegmentProxy;
* instance of this class rather than of the superclass.
#end[rw]
*/
#if[rw]
sealed
#else[rw]
final
#end[rw]
class Heap$Type$Buffer$RW$
extends {#if[ro]?Heap}$Type$Buffer
#if[rw]
permits Heap$Type$BufferR
#end[rw]
{
#if[rw]
// Cached array base offset

@ -70,8 +70,9 @@ import jdk.internal.misc.Unsafe;
* @since 1.4
*/
public abstract class MappedByteBuffer
public abstract sealed class MappedByteBuffer
extends ByteBuffer
permits DirectByteBuffer
{
// This is a little bit backwards: By rights MappedByteBuffer should be a

@ -29,7 +29,7 @@ import java.util.Objects;
// ## If the sequence is a string, use reflection to share its array
class StringCharBuffer // package-private
final class StringCharBuffer // package-private
extends CharBuffer
{
CharSequence str;

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -264,9 +264,19 @@ import jdk.internal.util.ArraysSupport;
* @since 1.4
*/
public abstract class $Type$Buffer
public abstract sealed class $Type$Buffer
extends Buffer
implements Comparable<$Type$Buffer>{#if[char]?, Appendable, CharSequence, Readable}
permits
#if[byte]
Heap$Type$Buffer, MappedByteBuffer
#else[byte]
#if[char]
StringCharBuffer,
#end[char]
Heap$Type$Buffer, Direct$Type$BufferS, Direct$Type$BufferU,
ByteBufferAs$Type$BufferB, ByteBufferAs$Type$BufferL
#end[byte]
{
// Cached array base offset
private static final long ARRAY_BASE_OFFSET = UNSAFE.arrayBaseOffset($type$[].class);