Skip to content

Commit fd6de4b

Browse files
committed
Merge master HEAD into openj9-staging
Signed-off-by: J9 Build <[email protected]>
2 parents 76c3bac + b6d29f6 commit fd6de4b

File tree

28 files changed

+406
-230
lines changed

28 files changed

+406
-230
lines changed

src/java.base/share/classes/java/lang/Object.java

+4
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ public boolean equals(Object obj) {
237237

238238
/**
239239
* {@return a string representation of the object}
240+
*
241+
* Satisfying this method's contract implies a non-{@code null}
242+
* result must be returned.
243+
*
240244
* @apiNote
241245
* In general, the
242246
* {@code toString} method returns a string that

src/java.base/share/classes/java/lang/classfile/CodeBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686

8787
import static java.util.Objects.requireNonNull;
8888
import static jdk.internal.classfile.impl.BytecodeHelpers.handleDescToHandleInfo;
89-
import jdk.internal.classfile.impl.TransformingCodeBuilder;
89+
9090
import jdk.internal.javac.PreviewFeature;
9191

9292
/**
@@ -192,7 +192,7 @@ public sealed interface CodeBuilder
192192
default CodeBuilder transforming(CodeTransform transform, Consumer<CodeBuilder> handler) {
193193
var resolved = transform.resolve(this);
194194
resolved.startHandler().run();
195-
handler.accept(new TransformingCodeBuilder(this, resolved.consumer()));
195+
handler.accept(new ChainedCodeBuilder(this, resolved.consumer()));
196196
resolved.endHandler().run();
197197
return this;
198198
}

src/java.base/share/classes/jdk/internal/classfile/impl/BlockCodeBuilderImpl.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -51,13 +51,13 @@ public BlockCodeBuilderImpl(CodeBuilder parent, Label breakLabel) {
5151

5252
public void start() {
5353
topLocal = topLocal(parent);
54-
terminalMaxLocals = topLocal(terminal);
55-
terminal.with((LabelTarget) startLabel);
54+
terminalMaxLocals = terminal.curTopLocal();
55+
parent.with((LabelTarget) startLabel);
5656
}
5757

5858
public void end() {
59-
terminal.with((LabelTarget) endLabel);
60-
if (terminalMaxLocals != topLocal(terminal)) {
59+
parent.with((LabelTarget) endLabel);
60+
if (terminalMaxLocals != terminal.curTopLocal()) {
6161
throw new IllegalStateException("Interference in local variable slot management");
6262
}
6363
}
@@ -73,10 +73,8 @@ public boolean isEmpty() {
7373
private int topLocal(CodeBuilder parent) {
7474
return switch (parent) {
7575
case BlockCodeBuilderImpl b -> b.topLocal;
76-
case ChainedCodeBuilder b -> topLocal(b.terminal);
77-
case DirectCodeBuilder b -> b.curTopLocal();
78-
case BufferedCodeBuilder b -> b.curTopLocal();
79-
case TransformingCodeBuilder b -> topLocal(b.delegate);
76+
case ChainedCodeBuilder b -> b.terminal.curTopLocal();
77+
case TerminalCodeBuilder b -> b.curTopLocal();
8078
};
8179
}
8280

src/java.base/share/classes/jdk/internal/classfile/impl/BufferedCodeBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@
4343
import java.util.function.Consumer;
4444

4545
public final class BufferedCodeBuilder
46-
implements TerminalCodeBuilder, LabelContext {
46+
implements TerminalCodeBuilder {
4747
private final SplitConstantPool constantPool;
4848
private final ClassFileImpl context;
4949
private final List<CodeElement> elements = new ArrayList<>();

src/java.base/share/classes/jdk/internal/classfile/impl/ChainedClassBuilder.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -33,13 +33,11 @@
3333

3434
public final class ChainedClassBuilder
3535
implements ClassBuilder, Consumer<ClassElement> {
36-
private final ClassBuilder downstream;
3736
private final DirectClassBuilder terminal;
3837
private final Consumer<ClassElement> consumer;
3938

4039
public ChainedClassBuilder(ClassBuilder downstream,
4140
Consumer<ClassElement> consumer) {
42-
this.downstream = downstream;
4341
this.consumer = consumer;
4442
this.terminal = switch (downstream) {
4543
case ChainedClassBuilder cb -> cb.terminal;
@@ -60,10 +58,11 @@ public Optional<ClassModel> original() {
6058

6159
@Override
6260
public ClassBuilder withField(Utf8Entry name, Utf8Entry descriptor, Consumer<? super FieldBuilder> handler) {
63-
return downstream.with(new BufferedFieldBuilder(terminal.constantPool, terminal.context,
61+
consumer.accept(new BufferedFieldBuilder(terminal.constantPool, terminal.context,
6462
name, descriptor, null)
6563
.run(handler)
6664
.toModel());
65+
return this;
6766
}
6867

6968
@Override
@@ -72,24 +71,27 @@ public ClassBuilder transformField(FieldModel field, FieldTransform transform) {
7271
field.fieldName(), field.fieldType(),
7372
field);
7473
builder.transform(field, transform);
75-
return downstream.with(builder.toModel());
74+
consumer.accept(builder.toModel());
75+
return this;
7676
}
7777

7878
@Override
7979
public ClassBuilder withMethod(Utf8Entry name, Utf8Entry descriptor, int flags,
8080
Consumer<? super MethodBuilder> handler) {
81-
return downstream.with(new BufferedMethodBuilder(terminal.constantPool, terminal.context,
81+
consumer.accept(new BufferedMethodBuilder(terminal.constantPool, terminal.context,
8282
name, descriptor, null)
8383
.run(handler)
8484
.toModel());
85+
return this;
8586
}
8687

8788
@Override
8889
public ClassBuilder transformMethod(MethodModel method, MethodTransform transform) {
8990
BufferedMethodBuilder builder = new BufferedMethodBuilder(terminal.constantPool, terminal.context,
9091
method.methodName(), method.methodType(), method);
9192
builder.transform(method, transform);
92-
return downstream.with(builder.toModel());
93+
consumer.accept(builder.toModel());
94+
return this;
9395
}
9496

9597
@Override

src/java.base/share/classes/jdk/internal/classfile/impl/ChainedMethodBuilder.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -36,13 +36,11 @@
3636
import java.lang.classfile.constantpool.ConstantPoolBuilder;
3737

3838
public final class ChainedMethodBuilder implements MethodBuilder {
39-
final MethodBuilder downstream;
4039
final TerminalMethodBuilder terminal;
4140
final Consumer<MethodElement> consumer;
4241

4342
public ChainedMethodBuilder(MethodBuilder downstream,
4443
Consumer<MethodElement> consumer) {
45-
this.downstream = downstream;
4644
this.consumer = consumer;
4745
this.terminal = switch (downstream) {
4846
case ChainedMethodBuilder cb -> cb.terminal;
@@ -58,16 +56,18 @@ public MethodBuilder with(MethodElement element) {
5856

5957
@Override
6058
public MethodBuilder withCode(Consumer<? super CodeBuilder> handler) {
61-
return downstream.with(terminal.bufferedCodeBuilder(null)
59+
consumer.accept(terminal.bufferedCodeBuilder(null)
6260
.run(handler)
6361
.toModel());
62+
return this;
6463
}
6564

6665
@Override
6766
public MethodBuilder transformCode(CodeModel code, CodeTransform transform) {
6867
BufferedCodeBuilder builder = terminal.bufferedCodeBuilder(code);
6968
builder.transform(code, transform);
70-
return downstream.with(builder.toModel());
69+
consumer.accept(builder.toModel());
70+
return this;
7171
}
7272

7373
@Override

src/java.base/share/classes/jdk/internal/classfile/impl/DirectCodeBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -75,7 +75,7 @@
7575

7676
public final class DirectCodeBuilder
7777
extends AbstractDirectBuilder<CodeModel>
78-
implements TerminalCodeBuilder, LabelContext {
78+
implements TerminalCodeBuilder {
7979
private final List<CharacterRange> characterRanges = new ArrayList<>();
8080
final List<AbstractPseudoInstruction.ExceptionCatchImpl> handlers = new ArrayList<>();
8181
private final List<LocalVariable> localVariables = new ArrayList<>();

src/java.base/share/classes/jdk/internal/classfile/impl/LabelContext.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -27,7 +27,7 @@
2727
import java.lang.classfile.Label;
2828

2929
public sealed interface LabelContext
30-
permits BufferedCodeBuilder, CodeImpl, DirectCodeBuilder {
30+
permits TerminalCodeBuilder, CodeImpl {
3131
Label newLabel();
3232
Label getLabel(int bci);
3333
void setLabelTarget(Label label, int bci);

src/java.base/share/classes/jdk/internal/classfile/impl/TerminalCodeBuilder.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,7 @@
2626

2727
import java.lang.classfile.CodeBuilder;
2828

29-
public sealed interface TerminalCodeBuilder extends CodeBuilder
30-
permits DirectCodeBuilder, BufferedCodeBuilder, TransformingCodeBuilder {
31-
29+
public sealed interface TerminalCodeBuilder extends CodeBuilder, LabelContext
30+
permits DirectCodeBuilder, BufferedCodeBuilder {
31+
int curTopLocal();
3232
}

src/java.base/share/classes/jdk/internal/classfile/impl/TransformingCodeBuilder.java

-91
This file was deleted.

src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -3436,7 +3436,15 @@ PatternResult analyzePattern(int lookahead) {
34363436
: PatternResult.PATTERN;
34373437
}
34383438
parenDepth++; break;
3439-
case RPAREN: parenDepth--; break;
3439+
case RPAREN:
3440+
parenDepth--;
3441+
if (parenDepth == 0 &&
3442+
typeDepth == 0 &&
3443+
peekToken(lookahead, TokenKind.IDENTIFIER) &&
3444+
S.token(lookahead + 1).name() == names.when) {
3445+
return PatternResult.PATTERN;
3446+
}
3447+
break;
34403448
case ARROW: return parenDepth > 0 ? PatternResult.EXPRESSION
34413449
: pendingResult;
34423450
case FINAL:

src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import jdk.jfr.Event;
3232
import jdk.jfr.internal.event.EventConfiguration;
3333
import jdk.jfr.internal.event.EventWriter;
34+
import jdk.jfr.internal.management.HiddenWait;
3435

3536
/**
3637
* Interface against the JVM.

src/jdk.jfr/share/classes/jdk/jfr/internal/JVMSupport.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import jdk.jfr.Recording;
3232
import jdk.jfr.internal.event.EventConfiguration;
33+
import jdk.jfr.internal.management.HiddenWait;
3334
import jdk.jfr.internal.util.Utils;
3435
import jdk.jfr.internal.util.ValueFormatter;
3536

@@ -118,7 +119,8 @@ private static void awaitUniqueTimestamp() {
118119
lastTimestamp = time;
119120
return;
120121
}
121-
Utils.takeNap(1);
122+
HiddenWait hiddenWait = new HiddenWait();
123+
hiddenWait.takeNap(1);
122124
}
123125
}
124126

src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import jdk.jfr.ValueDescriptor;
4848
import jdk.jfr.internal.consumer.RepositoryFiles;
4949
import jdk.jfr.internal.event.EventConfiguration;
50+
import jdk.jfr.internal.management.HiddenWait;
5051
import jdk.jfr.internal.periodic.PeriodicEvents;
5152
import jdk.jfr.internal.util.Utils;
5253

@@ -57,6 +58,7 @@ public final class MetadataRepository {
5758
private final Map<String, EventType> nativeEventTypes = LinkedHashMap.newHashMap(150);
5859
private final Map<String, EventControl> nativeControls = LinkedHashMap.newHashMap(150);
5960
private final SettingsManager settingsManager = new SettingsManager();
61+
private final HiddenWait threadSleeper = new HiddenWait();
6062
private Constructor<EventConfiguration> cachedEventConfigurationConstructor;
6163
private boolean staleMetadata = true;
6264
private boolean unregistered;
@@ -341,7 +343,7 @@ private void awaitEpochMilliShift() {
341343
lastMillis = millis;
342344
return;
343345
}
344-
Utils.takeNap(1);
346+
threadSleeper.takeNap(1);
345347
}
346348
}
347349

0 commit comments

Comments
 (0)