Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
6aadd150
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
6aadd150
编写于
9月 10, 2014
作者:
V
vlivanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8030079: Lint warnings in java.lang.invoke
8031373: Lint warnings in java.util.stream Reviewed-by: psandoz, forax
上级
e84c709f
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
50 addition
and
30 deletion
+50
-30
src/share/classes/java/lang/invoke/BoundMethodHandle.java
src/share/classes/java/lang/invoke/BoundMethodHandle.java
+5
-5
src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java
...classes/java/lang/invoke/InnerClassLambdaMetafactory.java
+8
-8
src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
...re/classes/java/lang/invoke/InvokerBytecodeGenerator.java
+6
-6
src/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java
...classes/java/lang/invoke/TypeConvertingMethodAdapter.java
+3
-3
src/share/classes/java/util/stream/ForEachOps.java
src/share/classes/java/util/stream/ForEachOps.java
+4
-1
src/share/classes/java/util/stream/Nodes.java
src/share/classes/java/util/stream/Nodes.java
+6
-1
src/share/classes/java/util/stream/SortedOps.java
src/share/classes/java/util/stream/SortedOps.java
+5
-3
src/share/classes/java/util/stream/SpinedBuffer.java
src/share/classes/java/util/stream/SpinedBuffer.java
+4
-0
src/share/classes/java/util/stream/StreamSpliterators.java
src/share/classes/java/util/stream/StreamSpliterators.java
+8
-3
src/share/classes/java/util/stream/Streams.java
src/share/classes/java/util/stream/Streams.java
+1
-0
未找到文件。
src/share/classes/java/lang/invoke/BoundMethodHandle.java
浏览文件 @
6aadd150
...
...
@@ -612,7 +612,7 @@ import jdk.internal.org.objectweb.asm.Type;
mv
.
visitVarInsn
(
ALOAD
,
1
);
mv
.
visitVarInsn
(
ALOAD
,
2
);
mv
.
visitMethodInsn
(
INVOKESPECIAL
,
BMH
,
"<init>"
,
makeSignature
(
""
,
true
));
mv
.
visitMethodInsn
(
INVOKESPECIAL
,
BMH
,
"<init>"
,
makeSignature
(
""
,
true
)
,
false
);
for
(
int
i
=
0
,
j
=
0
;
i
<
types
.
length
();
++
i
,
++
j
)
{
// i counts the arguments, j counts corresponding argument slots
...
...
@@ -663,7 +663,7 @@ import jdk.internal.org.objectweb.asm.Type;
// put fields on the stack
emitPushFields
(
types
,
className
,
mv
);
// finally, invoke the constructor and return
mv
.
visitMethodInsn
(
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
makeSignature
(
types
,
false
));
mv
.
visitMethodInsn
(
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
makeSignature
(
types
,
false
)
,
false
);
mv
.
visitInsn
(
ARETURN
);
mv
.
visitMaxs
(
0
,
0
);
mv
.
visitEnd
();
...
...
@@ -679,7 +679,7 @@ import jdk.internal.org.objectweb.asm.Type;
int
iconstInsn
=
ICONST_0
+
extensionIndex
(
t
);
assert
(
iconstInsn
<=
ICONST_5
);
mv
.
visitInsn
(
iconstInsn
);
mv
.
visitMethodInsn
(
INVOKEVIRTUAL
,
SPECIES_DATA
,
"extendWithIndex"
,
BMHSPECIES_DATA_EWI_SIG
);
mv
.
visitMethodInsn
(
INVOKEVIRTUAL
,
SPECIES_DATA
,
"extendWithIndex"
,
BMHSPECIES_DATA_EWI_SIG
,
false
);
mv
.
visitFieldInsn
(
GETFIELD
,
SPECIES_DATA
,
"constructor"
,
"["
+
MH_SIG
);
mv
.
visitInsn
(
ICONST_0
);
mv
.
visitInsn
(
AALOAD
);
...
...
@@ -691,7 +691,7 @@ import jdk.internal.org.objectweb.asm.Type;
// put narg on stack
mv
.
visitVarInsn
(
typeLoadOp
(
t
),
3
);
// finally, invoke the constructor and return
mv
.
visitMethodInsn
(
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
makeSignature
(
types
+
t
,
false
));
mv
.
visitMethodInsn
(
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
makeSignature
(
types
+
t
,
false
)
,
false
);
mv
.
visitInsn
(
ARETURN
);
mv
.
visitMaxs
(
0
,
0
);
mv
.
visitEnd
();
...
...
@@ -702,7 +702,7 @@ import jdk.internal.org.objectweb.asm.Type;
mv
.
visitCode
();
mv
.
visitLdcInsn
(
types
);
mv
.
visitLdcInsn
(
Type
.
getObjectType
(
className
));
mv
.
visitMethodInsn
(
INVOKESTATIC
,
SPECIES_DATA
,
"getForClass"
,
BMHSPECIES_DATA_GFC_SIG
);
mv
.
visitMethodInsn
(
INVOKESTATIC
,
SPECIES_DATA
,
"getForClass"
,
BMHSPECIES_DATA_GFC_SIG
,
false
);
mv
.
visitFieldInsn
(
PUTSTATIC
,
className
,
"SPECIES_DATA"
,
SPECIES_DATA_SIG
);
mv
.
visitInsn
(
RETURN
);
mv
.
visitMaxs
(
0
,
0
);
...
...
src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java
浏览文件 @
6aadd150
...
...
@@ -193,10 +193,10 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
CallSite
buildCallSite
()
throws
LambdaConversionException
{
final
Class
<?>
innerClass
=
spinInnerClass
();
if
(
invokedType
.
parameterCount
()
==
0
)
{
final
Constructor
[]
ctrs
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Constructor
[]>()
{
final
Constructor
<?>
[]
ctrs
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Constructor
<?>
[]>()
{
@Override
public
Constructor
[]
run
()
{
public
Constructor
<?>
[]
run
()
{
Constructor
<?>[]
ctrs
=
innerClass
.
getDeclaredConstructors
();
if
(
ctrs
.
length
==
1
)
{
// The lambda implementing inner class constructor is private, set
...
...
@@ -338,7 +338,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
m
.
visitVarInsn
(
getLoadOpcode
(
argType
),
varIndex
);
varIndex
+=
getParameterSize
(
argType
);
}
m
.
visitMethodInsn
(
INVOKESPECIAL
,
lambdaClassName
,
NAME_CTOR
,
constructorType
.
toMethodDescriptorString
());
m
.
visitMethodInsn
(
INVOKESPECIAL
,
lambdaClassName
,
NAME_CTOR
,
constructorType
.
toMethodDescriptorString
()
,
false
);
m
.
visitInsn
(
ARETURN
);
m
.
visitMaxs
(-
1
,
-
1
);
m
.
visitEnd
();
...
...
@@ -354,7 +354,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
ctor
.
visitCode
();
ctor
.
visitVarInsn
(
ALOAD
,
0
);
ctor
.
visitMethodInsn
(
INVOKESPECIAL
,
JAVA_LANG_OBJECT
,
NAME_CTOR
,
METHOD_DESCRIPTOR_VOID
);
METHOD_DESCRIPTOR_VOID
,
false
);
int
parameterCount
=
invokedType
.
parameterCount
();
for
(
int
i
=
0
,
lvIndex
=
0
;
i
<
parameterCount
;
i
++)
{
ctor
.
visitVarInsn
(
ALOAD
,
0
);
...
...
@@ -402,7 +402,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
mv
.
visitInsn
(
AASTORE
);
}
mv
.
visitMethodInsn
(
INVOKESPECIAL
,
NAME_SERIALIZED_LAMBDA
,
NAME_CTOR
,
DESCR_CTOR_SERIALIZED_LAMBDA
);
DESCR_CTOR_SERIALIZED_LAMBDA
,
false
);
mv
.
visitInsn
(
ARETURN
);
// Maxs computed by ClassWriter.COMPUTE_MAXS, these arguments ignored
mv
.
visitMaxs
(-
1
,
-
1
);
...
...
@@ -421,7 +421,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
mv
.
visitInsn
(
DUP
);
mv
.
visitLdcInsn
(
"Non-serializable lambda"
);
mv
.
visitMethodInsn
(
INVOKESPECIAL
,
NAME_NOT_SERIALIZABLE_EXCEPTION
,
NAME_CTOR
,
DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION
);
DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION
,
false
);
mv
.
visitInsn
(
ATHROW
);
mv
.
visitMaxs
(-
1
,
-
1
);
mv
.
visitEnd
();
...
...
@@ -434,7 +434,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
mv
.
visitInsn
(
DUP
);
mv
.
visitLdcInsn
(
"Non-serializable lambda"
);
mv
.
visitMethodInsn
(
INVOKESPECIAL
,
NAME_NOT_SERIALIZABLE_EXCEPTION
,
NAME_CTOR
,
DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION
);
DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION
,
false
);
mv
.
visitInsn
(
ATHROW
);
mv
.
visitMaxs
(-
1
,
-
1
);
mv
.
visitEnd
();
...
...
src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
浏览文件 @
6aadd150
...
...
@@ -403,7 +403,7 @@ class InvokerBytecodeGenerator {
String
owner
=
"java/lang/"
+
wrapper
.
wrapperType
().
getSimpleName
();
String
name
=
"valueOf"
;
String
desc
=
"("
+
wrapper
.
basicTypeChar
()
+
")L"
+
owner
+
";"
;
mv
.
visitMethodInsn
(
Opcodes
.
INVOKESTATIC
,
owner
,
name
,
desc
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKESTATIC
,
owner
,
name
,
desc
,
false
);
}
/**
...
...
@@ -417,7 +417,7 @@ class InvokerBytecodeGenerator {
String
name
=
wrapper
.
primitiveSimpleName
()
+
"Value"
;
String
desc
=
"()"
+
wrapper
.
basicTypeChar
();
mv
.
visitTypeInsn
(
Opcodes
.
CHECKCAST
,
owner
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
owner
,
name
,
desc
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
owner
,
name
,
desc
,
false
);
}
/**
...
...
@@ -437,7 +437,7 @@ class InvokerBytecodeGenerator {
mv
.
visitLdcInsn
(
constantPlaceholder
(
pclass
));
mv
.
visitTypeInsn
(
Opcodes
.
CHECKCAST
,
CLS
);
mv
.
visitInsn
(
Opcodes
.
SWAP
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKESTATIC
,
MHI
,
"castReference"
,
CLL_SIG
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKESTATIC
,
MHI
,
"castReference"
,
CLL_SIG
,
false
);
if
(
pclass
.
isArray
())
mv
.
visitTypeInsn
(
Opcodes
.
CHECKCAST
,
OBJARY
);
}
...
...
@@ -575,7 +575,7 @@ class InvokerBytecodeGenerator {
// invocation
MethodType
type
=
name
.
function
.
methodType
();
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
type
.
basicType
().
toMethodDescriptorString
());
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
type
.
basicType
().
toMethodDescriptorString
()
,
false
);
}
static
private
Class
<?>[]
STATICALLY_INVOCABLE_PACKAGES
=
{
...
...
@@ -1082,7 +1082,7 @@ class InvokerBytecodeGenerator {
emitAloadInsn
(
0
);
mv
.
visitFieldInsn
(
Opcodes
.
GETFIELD
,
MH
,
"form"
,
"Ljava/lang/invoke/LambdaForm;"
);
mv
.
visitInsn
(
Opcodes
.
SWAP
);
// swap form and array; avoid local variable
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
LF
,
"interpretWithArguments"
,
"([Ljava/lang/Object;)Ljava/lang/Object;"
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
LF
,
"interpretWithArguments"
,
"([Ljava/lang/Object;)Ljava/lang/Object;"
,
false
);
// maybe unbox
Class
<?>
rtype
=
invokerType
.
returnType
();
...
...
@@ -1145,7 +1145,7 @@ class InvokerBytecodeGenerator {
// Invoke
String
targetDesc
=
dstType
.
basicType
().
toMethodDescriptorString
();
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
targetDesc
);
mv
.
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
MH
,
"invokeBasic"
,
targetDesc
,
false
);
// Box primitive types
Class
<?>
rtype
=
dstType
.
returnType
();
...
...
src/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java
浏览文件 @
6aadd150
...
...
@@ -158,19 +158,19 @@ class TypeConvertingMethodAdapter extends MethodVisitor {
visitMethodInsn
(
Opcodes
.
INVOKESTATIC
,
wrapperName
(
w
),
NAME_BOX_METHOD
,
boxingDescriptor
(
w
));
boxingDescriptor
(
w
)
,
false
);
}
/**
* Convert types by unboxing. The source type is known to be a primitive wrapper.
* @param
ws
A primitive wrapper corresponding to wrapped reference source type
* @param
sname
A primitive wrapper corresponding to wrapped reference source type
* @param wt A primitive wrapper being converted to
*/
void
unbox
(
String
sname
,
Wrapper
wt
)
{
visitMethodInsn
(
Opcodes
.
INVOKEVIRTUAL
,
sname
,
unboxMethod
(
wt
),
unboxingDescriptor
(
wt
));
unboxingDescriptor
(
wt
)
,
false
);
}
private
String
descriptorToName
(
String
desc
)
{
...
...
src/share/classes/java/util/stream/ForEachOps.java
浏览文件 @
6aadd150
...
...
@@ -32,6 +32,7 @@ import java.util.concurrent.ForkJoinTask;
import
java.util.function.Consumer
;
import
java.util.function.DoubleConsumer
;
import
java.util.function.IntConsumer
;
import
java.util.function.IntFunction
;
import
java.util.function.LongConsumer
;
/**
...
...
@@ -471,9 +472,11 @@ final class ForEachOps {
if
(
task
.
getPendingCount
()
>
0
)
{
// Cannot complete just yet so buffer elements into a Node
// for use when completion occurs
@SuppressWarnings
(
"unchecked"
)
IntFunction
<
T
[]>
generator
=
size
->
(
T
[])
new
Object
[
size
];
Node
.
Builder
<
T
>
nb
=
task
.
helper
.
makeNodeBuilder
(
task
.
helper
.
exactOutputSizeIfKnown
(
rightSplit
),
size
->
(
T
[])
new
Object
[
size
]
);
generator
);
task
.
node
=
task
.
helper
.
wrapAndCopyInto
(
nb
,
rightSplit
).
build
();
task
.
spliterator
=
null
;
}
...
...
src/share/classes/java/util/stream/Nodes.java
浏览文件 @
6aadd150
...
...
@@ -63,7 +63,7 @@ final class Nodes {
// IllegalArgumentException messages
static
final
String
BAD_SIZE
=
"Stream size exceeds max array size"
;
@SuppressWarnings
(
"raw"
)
@SuppressWarnings
(
"raw
types
"
)
private
static
final
Node
EMPTY_NODE
=
new
EmptyNode
.
OfRef
();
private
static
final
Node
.
OfInt
EMPTY_INT_NODE
=
new
EmptyNode
.
OfInt
();
private
static
final
Node
.
OfLong
EMPTY_LONG_NODE
=
new
EmptyNode
.
OfLong
();
...
...
@@ -956,6 +956,7 @@ final class Nodes {
* Initiate a stack containing, in left-to-right order, the child nodes
* covered by this spliterator
*/
@SuppressWarnings
(
"unchecked"
)
protected
final
Deque
<
N
>
initStack
()
{
// Bias size to the case where leaf nodes are close to this node
// 8 is the minimum initial capacity for the ArrayDeque implementation
...
...
@@ -969,6 +970,7 @@ final class Nodes {
* Depth first search, in left-to-right order, of the node tree, using
* an explicit stack, to find the next non-empty leaf node.
*/
@SuppressWarnings
(
"unchecked"
)
protected
final
N
findNextLeafNode
(
Deque
<
N
>
stack
)
{
N
n
=
null
;
while
((
n
=
stack
.
pollFirst
())
!=
null
)
{
...
...
@@ -984,6 +986,7 @@ final class Nodes {
return
null
;
}
@SuppressWarnings
(
"unchecked"
)
protected
final
boolean
initTryAdvance
()
{
if
(
curNode
==
null
)
return
false
;
...
...
@@ -1870,6 +1873,7 @@ final class Nodes {
}
assert
task
.
offset
+
task
.
length
<
MAX_ARRAY_SIZE
;
@SuppressWarnings
(
"unchecked"
)
T_SINK
sink
=
(
T_SINK
)
task
;
task
.
helper
.
wrapAndCopyInto
(
sink
,
rightSplit
);
task
.
propagateCompletion
();
...
...
@@ -2173,6 +2177,7 @@ final class Nodes {
}
@Override
@SuppressWarnings
(
"unchecked"
)
protected
T_NODE
doLeaf
()
{
T_BUILDER
builder
=
builderFactory
.
apply
(
helper
.
exactOutputSizeIfKnown
(
spliterator
));
return
(
T_NODE
)
helper
.
wrapAndCopyInto
(
builder
,
spliterator
).
build
();
...
...
src/share/classes/java/util/stream/SortedOps.java
浏览文件 @
6aadd150
...
...
@@ -29,7 +29,6 @@ import java.util.Arrays;
import
java.util.Comparator
;
import
java.util.Objects
;
import
java.util.Spliterator
;
import
java.util.concurrent.ForkJoinTask
;
import
java.util.function.IntFunction
;
...
...
@@ -113,7 +112,9 @@ final class SortedOps {
StreamOpFlag
.
IS_ORDERED
|
StreamOpFlag
.
IS_SORTED
);
this
.
isNaturalSort
=
true
;
// Will throw CCE when we try to sort if T is not Comparable
this
.
comparator
=
(
Comparator
<?
super
T
>)
Comparator
.
naturalOrder
();
@SuppressWarnings
(
"unchecked"
)
Comparator
<?
super
T
>
comp
=
(
Comparator
<?
super
T
>)
Comparator
.
naturalOrder
();
this
.
comparator
=
comp
;
}
/**
...
...
@@ -170,7 +171,7 @@ final class SortedOps {
}
@Override
public
Sink
<
Integer
>
opWrapSink
(
int
flags
,
Sink
sink
)
{
public
Sink
<
Integer
>
opWrapSink
(
int
flags
,
Sink
<
Integer
>
sink
)
{
Objects
.
requireNonNull
(
sink
);
if
(
StreamOpFlag
.
SORTED
.
isKnown
(
flags
))
...
...
@@ -335,6 +336,7 @@ final class SortedOps {
}
@Override
@SuppressWarnings
(
"unchecked"
)
public
void
begin
(
long
size
)
{
if
(
size
>=
Nodes
.
MAX_ARRAY_SIZE
)
throw
new
IllegalArgumentException
(
Nodes
.
BAD_SIZE
);
...
...
src/share/classes/java/util/stream/SpinedBuffer.java
浏览文件 @
6aadd150
...
...
@@ -92,6 +92,7 @@ class SpinedBuffer<E>
* @throws IllegalArgumentException if the specified initial capacity
* is negative
*/
@SuppressWarnings
(
"unchecked"
)
SpinedBuffer
(
int
initialCapacity
)
{
super
(
initialCapacity
);
curChunk
=
(
E
[])
new
Object
[
1
<<
initialChunkPower
];
...
...
@@ -100,6 +101,7 @@ class SpinedBuffer<E>
/**
* Constructs an empty list with an initial capacity of sixteen.
*/
@SuppressWarnings
(
"unchecked"
)
SpinedBuffer
()
{
super
();
curChunk
=
(
E
[])
new
Object
[
1
<<
initialChunkPower
];
...
...
@@ -114,6 +116,7 @@ class SpinedBuffer<E>
:
priorElementCount
[
spineIndex
]
+
spine
[
spineIndex
].
length
;
}
@SuppressWarnings
(
"unchecked"
)
private
void
inflateSpine
()
{
if
(
spine
==
null
)
{
spine
=
(
E
[][])
new
Object
[
MIN_SPINE_SIZE
][];
...
...
@@ -125,6 +128,7 @@ class SpinedBuffer<E>
/**
* Ensure that the buffer has at least capacity to hold the target size
*/
@SuppressWarnings
(
"unchecked"
)
protected
final
void
ensureCapacity
(
long
targetSize
)
{
long
capacity
=
capacity
();
if
(
targetSize
>
capacity
)
{
...
...
src/share/classes/java/util/stream/StreamSpliterators.java
浏览文件 @
6aadd150
...
...
@@ -516,6 +516,7 @@ class StreamSpliterators {
}
@Override
@SuppressWarnings
(
"unchecked"
)
public
T_SPLITR
trySplit
()
{
return
(
T_SPLITR
)
get
().
trySplit
();
}
...
...
@@ -643,6 +644,7 @@ class StreamSpliterators {
// existing and additionally created F/J tasks that perform
// redundant work on no elements.
while
(
true
)
{
@SuppressWarnings
(
"unchecked"
)
T_SPLITR
leftSplit
=
(
T_SPLITR
)
s
.
trySplit
();
if
(
leftSplit
==
null
)
return
null
;
...
...
@@ -970,6 +972,7 @@ class StreamSpliterators {
// Stop splitting when there are no more limit permits
if
(
permits
.
get
()
==
0
)
return
null
;
@SuppressWarnings
(
"unchecked"
)
T_SPLITR
split
=
(
T_SPLITR
)
s
.
trySplit
();
return
split
==
null
?
null
:
makeSpliterator
(
split
);
}
...
...
@@ -1068,16 +1071,18 @@ class StreamSpliterators {
super
(
s
,
skip
,
limit
);
}
OfPrimitive
(
T_SPLITR
s
,
UnorderedSliceSpliterator
.
OfPrimitive
parent
)
{
OfPrimitive
(
T_SPLITR
s
,
UnorderedSliceSpliterator
.
OfPrimitive
<
T
,
T_CONS
,
T_BUFF
,
T_SPLITR
>
parent
)
{
super
(
s
,
parent
);
}
@Override
public
boolean
tryAdvance
(
T_CONS
action
)
{
Objects
.
requireNonNull
(
action
);
@SuppressWarnings
(
"unchecked"
)
T_CONS
consumer
=
(
T_CONS
)
this
;
while
(
permitStatus
()
!=
PermitStatus
.
NO_MORE
)
{
if
(!
s
.
tryAdvance
(
(
T_CONS
)
this
))
if
(!
s
.
tryAdvance
(
consumer
))
return
false
;
else
if
(
acquirePermits
(
1
)
==
1
)
{
acceptConsumed
(
action
);
...
...
@@ -1316,7 +1321,7 @@ class StreamSpliterators {
* estimate size is 0.
*
* <p>The {@code forEachRemaining} method if invoked will never terminate.
* The {@coe tryAdvance} method always returns true.
* The {@co
d
e tryAdvance} method always returns true.
*
*/
static
abstract
class
InfiniteSupplyingSpliterator
<
T
>
implements
Spliterator
<
T
>
{
...
...
src/share/classes/java/util/stream/Streams.java
浏览文件 @
6aadd150
...
...
@@ -715,6 +715,7 @@ final class Streams {
@Override
public
T_SPLITR
trySplit
()
{
@SuppressWarnings
(
"unchecked"
)
T_SPLITR
ret
=
beforeSplit
?
aSpliterator
:
(
T_SPLITR
)
bSpliterator
.
trySplit
();
beforeSplit
=
false
;
return
ret
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录