Skip to content

Commit 0076315

Browse files
committed
[GR-48439] Convert igvutil.args to common utility
PullRequest: graal/18665
2 parents 16ca5f6 + 59d2d92 commit 0076315

File tree

29 files changed

+271
-107
lines changed

29 files changed

+271
-107
lines changed

compiler/mx.compiler/suite.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@
552552
"jdk.graal.compiler.options to org.graalvm.nativeimage.driver,org.graalvm.nativeimage.junitsupport",
553553
"jdk.graal.compiler.phases.common to org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.configure",
554554
"jdk.graal.compiler.serviceprovider to jdk.graal.compiler.management,org.graalvm.nativeimage.driver,org.graalvm.nativeimage.agent.jvmtibase,org.graalvm.nativeimage.agent.diagnostics",
555+
"jdk.graal.compiler.util.args",
555556
"jdk.graal.compiler.util.json",
556557
],
557558
"uses" : [

compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandGroupTest.java renamed to compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandGroupTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,19 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package org.graalvm.igvutil.test.args;
25+
package jdk.graal.compiler.util.args.test;
2626

27-
import org.graalvm.igvutil.args.Command;
28-
import org.graalvm.igvutil.args.CommandGroup;
29-
import org.graalvm.igvutil.args.CommandParsingException;
30-
import org.graalvm.igvutil.args.HelpRequestedException;
31-
import org.graalvm.igvutil.args.InvalidArgumentException;
32-
import org.graalvm.igvutil.args.OptionValue;
33-
import org.graalvm.igvutil.args.StringValue;
3427
import org.junit.Assert;
3528
import org.junit.Test;
3629

30+
import jdk.graal.compiler.util.args.Command;
31+
import jdk.graal.compiler.util.args.CommandGroup;
32+
import jdk.graal.compiler.util.args.CommandParsingException;
33+
import jdk.graal.compiler.util.args.HelpRequestedException;
34+
import jdk.graal.compiler.util.args.InvalidArgumentException;
35+
import jdk.graal.compiler.util.args.OptionValue;
36+
import jdk.graal.compiler.util.args.StringValue;
37+
3738
public class CommandGroupTest {
3839

3940
@Test

compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandTest.java renamed to compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandTest.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,23 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package org.graalvm.igvutil.test.args;
25+
package jdk.graal.compiler.util.args.test;
2626

2727
import java.util.List;
2828

29-
import org.graalvm.igvutil.args.Command;
30-
import org.graalvm.igvutil.args.CommandParsingException;
31-
import org.graalvm.igvutil.args.Flag;
32-
import org.graalvm.igvutil.args.HelpRequestedException;
33-
import org.graalvm.igvutil.args.IntegerValue;
34-
import org.graalvm.igvutil.args.InvalidArgumentException;
35-
import org.graalvm.igvutil.args.MissingArgumentException;
36-
import org.graalvm.igvutil.args.OptionValue;
37-
import org.graalvm.igvutil.args.StringValue;
3829
import org.junit.Assert;
3930
import org.junit.Test;
4031

32+
import jdk.graal.compiler.util.args.Command;
33+
import jdk.graal.compiler.util.args.CommandParsingException;
34+
import jdk.graal.compiler.util.args.Flag;
35+
import jdk.graal.compiler.util.args.HelpRequestedException;
36+
import jdk.graal.compiler.util.args.IntegerValue;
37+
import jdk.graal.compiler.util.args.InvalidArgumentException;
38+
import jdk.graal.compiler.util.args.MissingArgumentException;
39+
import jdk.graal.compiler.util.args.OptionValue;
40+
import jdk.graal.compiler.util.args.StringValue;
41+
4142
public class CommandTest {
4243

4344
@Test

compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/OptionValueTest.java renamed to compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/OptionValueTest.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,21 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package org.graalvm.igvutil.test.args;
25+
package jdk.graal.compiler.util.args.test;
2626

2727
import java.util.List;
2828

29-
import org.graalvm.igvutil.args.BooleanValue;
30-
import org.graalvm.igvutil.args.Flag;
31-
import org.graalvm.igvutil.args.IntegerValue;
32-
import org.graalvm.igvutil.args.InvalidArgumentException;
33-
import org.graalvm.igvutil.args.OptionValue;
34-
import org.graalvm.igvutil.args.StringValue;
3529
import org.junit.Assert;
3630
import org.junit.Test;
3731

32+
import jdk.graal.compiler.util.args.BooleanValue;
33+
import jdk.graal.compiler.util.args.Flag;
34+
import jdk.graal.compiler.util.args.IntegerValue;
35+
import jdk.graal.compiler.util.args.InvalidArgumentException;
36+
import jdk.graal.compiler.util.args.MultiChoiceValue;
37+
import jdk.graal.compiler.util.args.OptionValue;
38+
import jdk.graal.compiler.util.args.StringValue;
39+
3840
public class OptionValueTest {
3941

4042
@Test
@@ -98,6 +100,35 @@ public void testFlag() throws InvalidArgumentException {
98100
Assert.assertTrue(option.getValue());
99101
}
100102

103+
enum TestEnum {
104+
OptionA,
105+
OptionB,
106+
OptionC,
107+
OptionD
108+
}
109+
110+
@Test
111+
public void testEnum() throws InvalidArgumentException {
112+
MultiChoiceValue<TestEnum> option = new MultiChoiceValue<>("", "");
113+
option.addChoice("OptionA", TestEnum.OptionA, "");
114+
option.addChoice("OptionB", TestEnum.OptionB, "");
115+
option.addChoice("OptionD", TestEnum.OptionD, "");
116+
117+
Assert.assertFalse(option.isSet());
118+
Assert.assertTrue(option.parseValue("OptionA"));
119+
Assert.assertTrue(option.isSet());
120+
Assert.assertEquals(TestEnum.OptionA, option.getValue());
121+
Assert.assertTrue(option.parseValue("OptionD"));
122+
Assert.assertTrue(option.isSet());
123+
Assert.assertEquals(TestEnum.OptionD, option.getValue());
124+
try {
125+
Assert.assertFalse(option.parseValue("OptionC"));
126+
Assert.fail("Expected InvalidArgumentException");
127+
} catch (InvalidArgumentException e) {
128+
// expected
129+
}
130+
}
131+
101132
@Test
102133
public void testRepeated() throws InvalidArgumentException {
103134
OptionValue<List<String>> option = new StringValue("REPEATED", "").repeated();

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,10 @@ private static String edges() {
240240

241241
private final ErrorReporter reporter;
242242

243-
private abstract static class Member implements LengthToString {
244-
final Klass holder;
245-
final int accessFlags;
246-
final String name;
243+
public abstract static class Member implements LengthToString {
244+
public final Klass holder;
245+
public final int accessFlags;
246+
public final String name;
247247

248248
private Member(Klass holder, String name, int accessFlags) {
249249
this.holder = holder;
@@ -279,10 +279,11 @@ public boolean equals(Object obj) {
279279
}
280280

281281
public static final class Method extends Member {
282-
final Signature signature;
282+
public final Signature signature;
283283
public final byte[] code;
284284

285-
/* package-private */ Method(String name, Signature signature, byte[] code, Klass holder, int accessFlags) {
285+
/* package-private */
286+
public Method(String name, Signature signature, byte[] code, Klass holder, int accessFlags) {
286287
super(holder, name, accessFlags);
287288
this.signature = signature;
288289
this.code = code;
@@ -340,12 +341,12 @@ public boolean equals(Object obj) {
340341
}
341342
}
342343

343-
/* package-private */ static final class Signature {
344+
public static final class Signature {
344345
public final String returnType;
345346
public final String[] argTypes;
346347
private final int hash;
347348

348-
Signature(String returnType, String[] argTypes) {
349+
public Signature(String returnType, String[] argTypes) {
349350
this.returnType = returnType;
350351
this.argTypes = argTypes;
351352
this.hash = toString().hashCode();
@@ -380,10 +381,10 @@ public boolean equals(Object obj) {
380381
}
381382
}
382383

383-
/* package-private */ static final class Field extends Member {
384+
public static final class Field extends Member {
384385
public final String type;
385386

386-
Field(String type, Klass holder, String name, int accessFlags) {
387+
public Field(String type, Klass holder, String name, int accessFlags) {
387388
super(holder, name, accessFlags);
388389
this.type = type;
389390
}
@@ -413,7 +414,7 @@ public static class Klass implements LengthToString {
413414
public final String simpleName;
414415
private final int hash;
415416

416-
Klass(String name) {
417+
public Klass(String name) {
417418
this.name = name;
418419
String simple;
419420
try {
@@ -467,10 +468,10 @@ public boolean equals(Object obj) {
467468

468469
}
469470

470-
/* package-private */ static final class EnumKlass extends Klass {
471+
public static final class EnumKlass extends Klass {
471472
public final String[] values;
472473

473-
EnumKlass(String name, String[] values) {
474+
public EnumKlass(String name, String[] values) {
474475
super(name);
475476
this.values = values;
476477
}
@@ -490,9 +491,9 @@ public boolean equals(Object obj) {
490491
}
491492
}
492493

493-
/* package-private */ static final class EnumValue implements LengthToString {
494-
EnumKlass enumKlass;
495-
int ordinal;
494+
public static final class EnumValue implements LengthToString {
495+
public EnumKlass enumKlass;
496+
public int ordinal;
496497

497498
EnumValue(EnumKlass enumKlass, int ordinal) {
498499
this.enumKlass = enumKlass;

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/Builder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public boolean equals(Object obj) {
183183
}
184184

185185
final class TypedPort extends Port {
186-
final EnumValue type;
186+
public final EnumValue type;
187187

188188
TypedPort(boolean isList, String name, EnumValue type) {
189189
super(isList, name);

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public String getFullMethodName() {
7979
return method == null ? null : method.toString(Builder.Length.M);
8080
}
8181

82-
BinaryReader.Method getMethod() {
82+
public BinaryReader.Method getMethod() {
8383
return method;
8484
}
8585

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/BinaryGraphPrinter.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.io.IOException;
3131
import java.net.URI;
3232
import java.net.URISyntaxException;
33+
import java.nio.channels.WritableByteChannel;
3334
import java.util.ArrayList;
3435
import java.util.Arrays;
3536
import java.util.Collection;
@@ -52,6 +53,12 @@
5253
import jdk.graal.compiler.graph.NodeMap;
5354
import jdk.graal.compiler.graph.NodeSourcePosition;
5455
import jdk.graal.compiler.graph.SourceLanguagePosition;
56+
import jdk.graal.compiler.graphio.GraphBlocks;
57+
import jdk.graal.compiler.graphio.GraphElements;
58+
import jdk.graal.compiler.graphio.GraphLocations;
59+
import jdk.graal.compiler.graphio.GraphOutput;
60+
import jdk.graal.compiler.graphio.GraphStructure;
61+
import jdk.graal.compiler.graphio.GraphTypes;
5562
import jdk.graal.compiler.nodes.AbstractBeginNode;
5663
import jdk.graal.compiler.nodes.AbstractEndNode;
5764
import jdk.graal.compiler.nodes.AbstractMergeNode;
@@ -64,20 +71,13 @@
6471
import jdk.graal.compiler.nodes.ProxyNode;
6572
import jdk.graal.compiler.nodes.StructuredGraph;
6673
import jdk.graal.compiler.nodes.VirtualState;
67-
import jdk.graal.compiler.nodes.cfg.HIRBlock;
6874
import jdk.graal.compiler.nodes.cfg.ControlFlowGraph;
75+
import jdk.graal.compiler.nodes.cfg.HIRBlock;
6976
import jdk.graal.compiler.nodes.memory.MemoryAccess;
7077
import jdk.graal.compiler.nodes.memory.MemoryKill;
7178
import jdk.graal.compiler.nodes.memory.MultiMemoryKill;
7279
import jdk.graal.compiler.nodes.memory.SingleMemoryKill;
7380
import jdk.graal.compiler.nodes.util.JavaConstantFormattable;
74-
import jdk.graal.compiler.graphio.GraphBlocks;
75-
import jdk.graal.compiler.graphio.GraphElements;
76-
import jdk.graal.compiler.graphio.GraphLocations;
77-
import jdk.graal.compiler.graphio.GraphOutput;
78-
import jdk.graal.compiler.graphio.GraphStructure;
79-
import jdk.graal.compiler.graphio.GraphTypes;
80-
8181
import jdk.vm.ci.meta.JavaType;
8282
import jdk.vm.ci.meta.ResolvedJavaField;
8383
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -104,6 +104,12 @@ public BinaryGraphPrinter(DebugContext ctx, SnippetReflectionProvider snippetRef
104104
this.snippetReflection = snippetReflection;
105105
}
106106

107+
@SuppressWarnings("this-escape")
108+
public BinaryGraphPrinter(WritableByteChannel channel, SnippetReflectionProvider snippetReflection) throws IOException {
109+
this.output = GraphOutput.newBuilder(this).blocks(this).elementsAndLocations(this, this).types(this).build(channel);
110+
this.snippetReflection = snippetReflection;
111+
}
112+
107113
@Override
108114
public SnippetReflectionProvider getSnippetReflectionProvider() {
109115
return snippetReflection;

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/GraphPrinter.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -242,16 +242,14 @@ static String constantArrayToString(Object array, Set<Object> visited) {
242242

243243
@SuppressWarnings("try")
244244
static StructuredGraph.ScheduleResult getScheduleOrNull(Graph graph) {
245-
if (graph instanceof StructuredGraph) {
246-
StructuredGraph sgraph = (StructuredGraph) graph;
247-
StructuredGraph.ScheduleResult scheduleResult = sgraph.getLastSchedule();
248-
if (scheduleResult == null) {
249-
DebugContext debug = graph.getDebug();
250-
try (Scope scope = debug.disable()) {
251-
SchedulePhase.runWithoutContextOptimizations(sgraph);
252-
scheduleResult = sgraph.getLastSchedule();
253-
} catch (Throwable t) {
254-
}
245+
if (graph instanceof StructuredGraph sgraph) {
246+
DebugContext debug = graph.getDebug();
247+
StructuredGraph.ScheduleResult scheduleResult;
248+
try (Scope scope = debug.disable()) {
249+
SchedulePhase.runWithoutContextOptimizations(sgraph);
250+
scheduleResult = sgraph.getLastSchedule();
251+
} catch (Throwable t) {
252+
scheduleResult = null;
255253
}
256254
return scheduleResult;
257255
}

compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/BooleanValue.java renamed to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/BooleanValue.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package org.graalvm.igvutil.args;
25+
package jdk.graal.compiler.util.args;
26+
27+
import java.util.Locale;
2628

2729
/**
2830
* Parses a literal boolean ("true" or "false", ignoring case) from command line arguments.
@@ -42,7 +44,7 @@ public boolean parseValue(String arg) throws InvalidArgumentException {
4244
if (arg == null) {
4345
throw new InvalidArgumentException(getName(), "no value provided");
4446
}
45-
switch (arg.toLowerCase()) {
47+
switch (arg.toLowerCase(Locale.US)) {
4648
case "true":
4749
value = true;
4850
break;

compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Command.java renamed to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Command.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package org.graalvm.igvutil.args;
25+
package jdk.graal.compiler.util.args;
2626

2727
import java.io.PrintWriter;
2828
import java.util.ArrayList;
@@ -223,17 +223,35 @@ private void verifyOptions(int nextPositionalArg) throws MissingArgumentExceptio
223223
}
224224
}
225225

226-
public void printUsage(PrintWriter writer) {
227-
writer.append(getName());
228-
if (!named.isEmpty()) {
226+
protected void printOptionUsage(PrintWriter writer) {
227+
boolean optionalFound = false;
228+
var it = named.getEntries();
229+
while (it.advance()) {
230+
if (it.getValue().isRequired()) {
231+
writer.append(String.format(" %s %s", it.getKey(), it.getValue().getUsage()));
232+
} else {
233+
optionalFound = true;
234+
}
235+
}
236+
if (optionalFound) {
229237
writer.append(" [OPTIONS]");
230238
}
239+
231240
for (OptionValue<?> option : positional) {
232241
writer.append(' ');
233-
writer.append(option.getUsage());
242+
if (option.isRequired()) {
243+
writer.append(option.getUsage());
244+
} else {
245+
writer.append(String.format("[%s]", option.getUsage()));
246+
}
234247
}
235248
}
236249

250+
public void printUsage(PrintWriter writer) {
251+
writer.append(getName());
252+
printOptionUsage(writer);
253+
}
254+
237255
public final void printHelp(PrintWriter writer) {
238256
printHelp(writer, 0);
239257
}

0 commit comments

Comments
 (0)