diff --git a/compiler/mx.compiler/suite.py b/compiler/mx.compiler/suite.py index b8cd439c2718..8a4c94c55d9c 100644 --- a/compiler/mx.compiler/suite.py +++ b/compiler/mx.compiler/suite.py @@ -552,6 +552,7 @@ "jdk.graal.compiler.options to org.graalvm.nativeimage.driver,org.graalvm.nativeimage.junitsupport", "jdk.graal.compiler.phases.common to org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.configure", "jdk.graal.compiler.serviceprovider to jdk.graal.compiler.management,org.graalvm.nativeimage.driver,org.graalvm.nativeimage.agent.jvmtibase,org.graalvm.nativeimage.agent.diagnostics", + "jdk.graal.compiler.util.args", "jdk.graal.compiler.util.json", ], "uses" : [ diff --git a/compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandGroupTest.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandGroupTest.java similarity index 92% rename from compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandGroupTest.java rename to compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandGroupTest.java index f342073efe89..046f8db0c9d0 100644 --- a/compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandGroupTest.java +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandGroupTest.java @@ -22,18 +22,19 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.test.args; +package jdk.graal.compiler.util.args.test; -import org.graalvm.igvutil.args.Command; -import org.graalvm.igvutil.args.CommandGroup; -import org.graalvm.igvutil.args.CommandParsingException; -import org.graalvm.igvutil.args.HelpRequestedException; -import org.graalvm.igvutil.args.InvalidArgumentException; -import org.graalvm.igvutil.args.OptionValue; -import org.graalvm.igvutil.args.StringValue; import org.junit.Assert; import org.junit.Test; +import jdk.graal.compiler.util.args.Command; +import jdk.graal.compiler.util.args.CommandGroup; +import jdk.graal.compiler.util.args.CommandParsingException; +import jdk.graal.compiler.util.args.HelpRequestedException; +import jdk.graal.compiler.util.args.InvalidArgumentException; +import jdk.graal.compiler.util.args.OptionValue; +import jdk.graal.compiler.util.args.StringValue; + public class CommandGroupTest { @Test diff --git a/compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandTest.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandTest.java similarity index 94% rename from compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandTest.java rename to compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandTest.java index edee20f4ab99..7d063121bc6a 100644 --- a/compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/CommandTest.java +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/CommandTest.java @@ -22,22 +22,23 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.test.args; +package jdk.graal.compiler.util.args.test; import java.util.List; -import org.graalvm.igvutil.args.Command; -import org.graalvm.igvutil.args.CommandParsingException; -import org.graalvm.igvutil.args.Flag; -import org.graalvm.igvutil.args.HelpRequestedException; -import org.graalvm.igvutil.args.IntegerValue; -import org.graalvm.igvutil.args.InvalidArgumentException; -import org.graalvm.igvutil.args.MissingArgumentException; -import org.graalvm.igvutil.args.OptionValue; -import org.graalvm.igvutil.args.StringValue; import org.junit.Assert; import org.junit.Test; +import jdk.graal.compiler.util.args.Command; +import jdk.graal.compiler.util.args.CommandParsingException; +import jdk.graal.compiler.util.args.Flag; +import jdk.graal.compiler.util.args.HelpRequestedException; +import jdk.graal.compiler.util.args.IntegerValue; +import jdk.graal.compiler.util.args.InvalidArgumentException; +import jdk.graal.compiler.util.args.MissingArgumentException; +import jdk.graal.compiler.util.args.OptionValue; +import jdk.graal.compiler.util.args.StringValue; + public class CommandTest { @Test diff --git a/compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/OptionValueTest.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/OptionValueTest.java similarity index 77% rename from compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/OptionValueTest.java rename to compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/OptionValueTest.java index c1541143a4ba..cd1534245407 100644 --- a/compiler/src/org.graalvm.igvutil.test/src/org/graalvm/igvutil/test/args/OptionValueTest.java +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/util/args/test/OptionValueTest.java @@ -22,19 +22,21 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.test.args; +package jdk.graal.compiler.util.args.test; import java.util.List; -import org.graalvm.igvutil.args.BooleanValue; -import org.graalvm.igvutil.args.Flag; -import org.graalvm.igvutil.args.IntegerValue; -import org.graalvm.igvutil.args.InvalidArgumentException; -import org.graalvm.igvutil.args.OptionValue; -import org.graalvm.igvutil.args.StringValue; import org.junit.Assert; import org.junit.Test; +import jdk.graal.compiler.util.args.BooleanValue; +import jdk.graal.compiler.util.args.Flag; +import jdk.graal.compiler.util.args.IntegerValue; +import jdk.graal.compiler.util.args.InvalidArgumentException; +import jdk.graal.compiler.util.args.MultiChoiceValue; +import jdk.graal.compiler.util.args.OptionValue; +import jdk.graal.compiler.util.args.StringValue; + public class OptionValueTest { @Test @@ -98,6 +100,35 @@ public void testFlag() throws InvalidArgumentException { Assert.assertTrue(option.getValue()); } + enum TestEnum { + OptionA, + OptionB, + OptionC, + OptionD + } + + @Test + public void testEnum() throws InvalidArgumentException { + MultiChoiceValue option = new MultiChoiceValue<>("", ""); + option.addChoice("OptionA", TestEnum.OptionA, ""); + option.addChoice("OptionB", TestEnum.OptionB, ""); + option.addChoice("OptionD", TestEnum.OptionD, ""); + + Assert.assertFalse(option.isSet()); + Assert.assertTrue(option.parseValue("OptionA")); + Assert.assertTrue(option.isSet()); + Assert.assertEquals(TestEnum.OptionA, option.getValue()); + Assert.assertTrue(option.parseValue("OptionD")); + Assert.assertTrue(option.isSet()); + Assert.assertEquals(TestEnum.OptionD, option.getValue()); + try { + Assert.assertFalse(option.parseValue("OptionC")); + Assert.fail("Expected InvalidArgumentException"); + } catch (InvalidArgumentException e) { + // expected + } + } + @Test public void testRepeated() throws InvalidArgumentException { OptionValue> option = new StringValue("REPEATED", "").repeated(); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java index 9715bae19036..1cb784d353e5 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java @@ -240,10 +240,10 @@ private static String edges() { private final ErrorReporter reporter; - private abstract static class Member implements LengthToString { - final Klass holder; - final int accessFlags; - final String name; + public abstract static class Member implements LengthToString { + public final Klass holder; + public final int accessFlags; + public final String name; private Member(Klass holder, String name, int accessFlags) { this.holder = holder; @@ -279,10 +279,11 @@ public boolean equals(Object obj) { } public static final class Method extends Member { - final Signature signature; + public final Signature signature; public final byte[] code; - /* package-private */ Method(String name, Signature signature, byte[] code, Klass holder, int accessFlags) { + /* package-private */ + public Method(String name, Signature signature, byte[] code, Klass holder, int accessFlags) { super(holder, name, accessFlags); this.signature = signature; this.code = code; @@ -340,12 +341,12 @@ public boolean equals(Object obj) { } } - /* package-private */ static final class Signature { + public static final class Signature { public final String returnType; public final String[] argTypes; private final int hash; - Signature(String returnType, String[] argTypes) { + public Signature(String returnType, String[] argTypes) { this.returnType = returnType; this.argTypes = argTypes; this.hash = toString().hashCode(); @@ -380,10 +381,10 @@ public boolean equals(Object obj) { } } - /* package-private */ static final class Field extends Member { + public static final class Field extends Member { public final String type; - Field(String type, Klass holder, String name, int accessFlags) { + public Field(String type, Klass holder, String name, int accessFlags) { super(holder, name, accessFlags); this.type = type; } @@ -413,7 +414,7 @@ public static class Klass implements LengthToString { public final String simpleName; private final int hash; - Klass(String name) { + public Klass(String name) { this.name = name; String simple; try { @@ -467,10 +468,10 @@ public boolean equals(Object obj) { } - /* package-private */ static final class EnumKlass extends Klass { + public static final class EnumKlass extends Klass { public final String[] values; - EnumKlass(String name, String[] values) { + public EnumKlass(String name, String[] values) { super(name); this.values = values; } @@ -490,9 +491,9 @@ public boolean equals(Object obj) { } } - /* package-private */ static final class EnumValue implements LengthToString { - EnumKlass enumKlass; - int ordinal; + public static final class EnumValue implements LengthToString { + public EnumKlass enumKlass; + public int ordinal; EnumValue(EnumKlass enumKlass, int ordinal) { this.enumKlass = enumKlass; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/Builder.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/Builder.java index c7934e456f30..2e1e46713004 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/Builder.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/Builder.java @@ -183,7 +183,7 @@ public boolean equals(Object obj) { } final class TypedPort extends Port { - final EnumValue type; + public final EnumValue type; TypedPort(boolean isList, String name, EnumValue type) { super(isList, name); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java index 0ce172248b48..a428ea88e401 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java @@ -79,7 +79,7 @@ public String getFullMethodName() { return method == null ? null : method.toString(Builder.Length.M); } - BinaryReader.Method getMethod() { + public BinaryReader.Method getMethod() { return method; } diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/BinaryGraphPrinter.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/BinaryGraphPrinter.java index 3778efd9aa07..1011ac2e8187 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/BinaryGraphPrinter.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/BinaryGraphPrinter.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.nio.channels.WritableByteChannel; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -52,6 +53,12 @@ import jdk.graal.compiler.graph.NodeMap; import jdk.graal.compiler.graph.NodeSourcePosition; import jdk.graal.compiler.graph.SourceLanguagePosition; +import jdk.graal.compiler.graphio.GraphBlocks; +import jdk.graal.compiler.graphio.GraphElements; +import jdk.graal.compiler.graphio.GraphLocations; +import jdk.graal.compiler.graphio.GraphOutput; +import jdk.graal.compiler.graphio.GraphStructure; +import jdk.graal.compiler.graphio.GraphTypes; import jdk.graal.compiler.nodes.AbstractBeginNode; import jdk.graal.compiler.nodes.AbstractEndNode; import jdk.graal.compiler.nodes.AbstractMergeNode; @@ -64,20 +71,13 @@ import jdk.graal.compiler.nodes.ProxyNode; import jdk.graal.compiler.nodes.StructuredGraph; import jdk.graal.compiler.nodes.VirtualState; -import jdk.graal.compiler.nodes.cfg.HIRBlock; import jdk.graal.compiler.nodes.cfg.ControlFlowGraph; +import jdk.graal.compiler.nodes.cfg.HIRBlock; import jdk.graal.compiler.nodes.memory.MemoryAccess; import jdk.graal.compiler.nodes.memory.MemoryKill; import jdk.graal.compiler.nodes.memory.MultiMemoryKill; import jdk.graal.compiler.nodes.memory.SingleMemoryKill; import jdk.graal.compiler.nodes.util.JavaConstantFormattable; -import jdk.graal.compiler.graphio.GraphBlocks; -import jdk.graal.compiler.graphio.GraphElements; -import jdk.graal.compiler.graphio.GraphLocations; -import jdk.graal.compiler.graphio.GraphOutput; -import jdk.graal.compiler.graphio.GraphStructure; -import jdk.graal.compiler.graphio.GraphTypes; - import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ResolvedJavaField; import jdk.vm.ci.meta.ResolvedJavaMethod; @@ -104,6 +104,12 @@ public BinaryGraphPrinter(DebugContext ctx, SnippetReflectionProvider snippetRef this.snippetReflection = snippetReflection; } + @SuppressWarnings("this-escape") + public BinaryGraphPrinter(WritableByteChannel channel, SnippetReflectionProvider snippetReflection) throws IOException { + this.output = GraphOutput.newBuilder(this).blocks(this).elementsAndLocations(this, this).types(this).build(channel); + this.snippetReflection = snippetReflection; + } + @Override public SnippetReflectionProvider getSnippetReflectionProvider() { return snippetReflection; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/GraphPrinter.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/GraphPrinter.java index ccf6004039f4..6730d067b945 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/GraphPrinter.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/printer/GraphPrinter.java @@ -242,16 +242,14 @@ static String constantArrayToString(Object array, Set visited) { @SuppressWarnings("try") static StructuredGraph.ScheduleResult getScheduleOrNull(Graph graph) { - if (graph instanceof StructuredGraph) { - StructuredGraph sgraph = (StructuredGraph) graph; - StructuredGraph.ScheduleResult scheduleResult = sgraph.getLastSchedule(); - if (scheduleResult == null) { - DebugContext debug = graph.getDebug(); - try (Scope scope = debug.disable()) { - SchedulePhase.runWithoutContextOptimizations(sgraph); - scheduleResult = sgraph.getLastSchedule(); - } catch (Throwable t) { - } + if (graph instanceof StructuredGraph sgraph) { + DebugContext debug = graph.getDebug(); + StructuredGraph.ScheduleResult scheduleResult; + try (Scope scope = debug.disable()) { + SchedulePhase.runWithoutContextOptimizations(sgraph); + scheduleResult = sgraph.getLastSchedule(); + } catch (Throwable t) { + scheduleResult = null; } return scheduleResult; } diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/BooleanValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/BooleanValue.java similarity index 95% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/BooleanValue.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/BooleanValue.java index d39bdeb4e105..94f63f403f7b 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/BooleanValue.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/BooleanValue.java @@ -22,7 +22,9 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; + +import java.util.Locale; /** * Parses a literal boolean ("true" or "false", ignoring case) from command line arguments. @@ -42,7 +44,7 @@ public boolean parseValue(String arg) throws InvalidArgumentException { if (arg == null) { throw new InvalidArgumentException(getName(), "no value provided"); } - switch (arg.toLowerCase()) { + switch (arg.toLowerCase(Locale.US)) { case "true": value = true; break; diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Command.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Command.java similarity index 93% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Command.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Command.java index c7f84296dbc7..33ee33c31a95 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Command.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Command.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; import java.io.PrintWriter; import java.util.ArrayList; @@ -223,17 +223,35 @@ private void verifyOptions(int nextPositionalArg) throws MissingArgumentExceptio } } - public void printUsage(PrintWriter writer) { - writer.append(getName()); - if (!named.isEmpty()) { + protected void printOptionUsage(PrintWriter writer) { + boolean optionalFound = false; + var it = named.getEntries(); + while (it.advance()) { + if (it.getValue().isRequired()) { + writer.append(String.format(" %s %s", it.getKey(), it.getValue().getUsage())); + } else { + optionalFound = true; + } + } + if (optionalFound) { writer.append(" [OPTIONS]"); } + for (OptionValue option : positional) { writer.append(' '); - writer.append(option.getUsage()); + if (option.isRequired()) { + writer.append(option.getUsage()); + } else { + writer.append(String.format("[%s]", option.getUsage())); + } } } + public void printUsage(PrintWriter writer) { + writer.append(getName()); + printOptionUsage(writer); + } + public final void printHelp(PrintWriter writer) { printHelp(writer, 0); } diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/CommandGroup.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/CommandGroup.java similarity index 98% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/CommandGroup.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/CommandGroup.java index f6cd89355522..02c5acda7d86 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/CommandGroup.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/CommandGroup.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; import java.io.PrintWriter; diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/CommandParsingException.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/CommandParsingException.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/CommandParsingException.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/CommandParsingException.java index abd8038eee9c..e814e2f0f1dc 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/CommandParsingException.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/CommandParsingException.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Wraps an exception thrown during parsing of a command. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/DoubleValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/DoubleValue.java similarity index 98% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/DoubleValue.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/DoubleValue.java index c2b7ac97429e..c3b4c223c8d3 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/DoubleValue.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/DoubleValue.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Parses a {@link Double} from command line arguments. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Flag.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Flag.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Flag.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Flag.java index b0204f1a4338..5f9b43e234c5 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Flag.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Flag.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * A boolean flag option value that is {@code false} when not present in the program arguments and diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/HelpRequestedException.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/HelpRequestedException.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/HelpRequestedException.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/HelpRequestedException.java index dafa68184af3..4f30c49e019a 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/HelpRequestedException.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/HelpRequestedException.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Thrown when a {@code --help} flag is encountered when parsing command-line arguments. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/IntegerValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/IntegerValue.java similarity index 98% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/IntegerValue.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/IntegerValue.java index 044aa97f2ede..2e0ce9175f33 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/IntegerValue.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/IntegerValue.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Parses a {@link Integer} from command line arguments. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/InvalidArgumentException.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/InvalidArgumentException.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/InvalidArgumentException.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/InvalidArgumentException.java index 8e7db0f5790f..f7de0c5ef3e6 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/InvalidArgumentException.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/InvalidArgumentException.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Indicates that a value of a program argument is invalid. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/ListValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/ListValue.java similarity index 98% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/ListValue.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/ListValue.java index ca3c1d967e06..9a5a43483342 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/ListValue.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/ListValue.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; import java.util.ArrayList; import java.util.List; diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/MissingArgumentException.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/MissingArgumentException.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/MissingArgumentException.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/MissingArgumentException.java index 67c342d0d628..79256325f7a4 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/MissingArgumentException.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/MissingArgumentException.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Indicates that a value was not provided for a required program option. diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/MultiChoiceValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/MultiChoiceValue.java new file mode 100644 index 000000000000..637c1e3e7647 --- /dev/null +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/MultiChoiceValue.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2024, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.graal.compiler.util.args; + +import java.io.PrintWriter; + +import org.graalvm.collections.EconomicMap; + +/** + * Option value with a set number of named alternatives, which are set through calls to + * {@link #addChoice}. Intended for enum-like options, as all choice values have to be constructed + * in advance. + */ +public class MultiChoiceValue extends OptionValue { + + private final EconomicMap choices = EconomicMap.create(); + private final EconomicMap choiceHelp = EconomicMap.create(); + private String defaultChoice = null; + + public MultiChoiceValue(String name, String help) { + super(name, help); + } + + public MultiChoiceValue(String name, T defaultValue, String help) { + super(name, defaultValue, help); + } + + @Override + public boolean parseValue(String arg) throws InvalidArgumentException { + if (arg == null) { + throw new InvalidArgumentException(getName(), "no value provided"); + } + value = choices.get(arg); + if (value == null) { + throw new InvalidArgumentException(getName(), String.format("no choice named '%s'", arg)); + } + return true; + } + + /** + * Adds a choice to the set of alternatives for this option. + * + * @param name user-visible name for the alternative, as will be parsed from the command-line. + * @param choiceValue value that will be returned if the given choice is selected. + * @param help help text for the choice in question. + * @return {@code this} + */ + public MultiChoiceValue addChoice(String name, T choiceValue, String help) { + choices.put(name, choiceValue); + choiceHelp.put(name, help); + if (choiceValue.equals(defaultValue)) { + defaultChoice = name; + } + return this; + } + + @Override + public String getUsage() { + StringBuilder sb = new StringBuilder(); + sb.append('{'); + String sep = ""; + for (String choice : choices.getKeys()) { + sb.append(sep); + sb.append(choice); + sep = ","; + } + sb.append('}'); + if (defaultChoice != null) { + sb.append(String.format(" (default: %s)", defaultChoice)); + } + return sb.toString(); + } + + @Override + public void printHelp(PrintWriter writer, int indentLevel) { + super.printHelp(writer, indentLevel); + var it = choiceHelp.getEntries(); + while (it.advance()) { + String help = String.format("%s: %s", it.getKey(), it.getValue()); + OptionValue.printIndented(writer, help, indentLevel + 1); + } + } +} diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/OptionValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/OptionValue.java similarity index 98% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/OptionValue.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/OptionValue.java index 5fd77db27978..3eb66bbf22fe 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/OptionValue.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/OptionValue.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; import java.io.PrintWriter; import java.util.List; @@ -42,7 +42,7 @@ public abstract class OptionValue { /** * Default value to return if no value was parsed. Can be null. */ - private final T defaultValue; + protected final T defaultValue; /** * Explanatory name for the option. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Program.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Program.java similarity index 96% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Program.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Program.java index f205fcd89525..c92dd3ca3f20 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/Program.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/Program.java @@ -22,9 +22,9 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; -import static org.graalvm.igvutil.args.OptionValue.INDENT; +import static jdk.graal.compiler.util.args.OptionValue.INDENT; import java.io.PrintWriter; diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/StringValue.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/StringValue.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/StringValue.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/StringValue.java index 2631d21d2a90..fb6b6ac6d997 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/StringValue.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/StringValue.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * "Parses" (effectively returns unaltered) a {@link String} from command line arguments. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/UnknownArgumentException.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/UnknownArgumentException.java similarity index 97% rename from compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/UnknownArgumentException.java rename to compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/UnknownArgumentException.java index 905cdd9069fc..f56e212273e3 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/args/UnknownArgumentException.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/util/args/UnknownArgumentException.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package org.graalvm.igvutil.args; +package jdk.graal.compiler.util.args; /** * Indicates that a value was provided for a program argument that was not configured. diff --git a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/IgvUtility.java b/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/IgvUtility.java index cfdcbc9cbf43..370a0b635de0 100644 --- a/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/IgvUtility.java +++ b/compiler/src/org.graalvm.igvutil/src/org/graalvm/igvutil/IgvUtility.java @@ -34,16 +34,15 @@ import java.util.Set; import java.util.zip.GZIPInputStream; -import org.graalvm.igvutil.args.Command; -import org.graalvm.igvutil.args.CommandGroup; -import org.graalvm.igvutil.args.OptionValue; -import org.graalvm.igvutil.args.Program; -import org.graalvm.igvutil.args.StringValue; - import jdk.graal.compiler.graphio.parsing.BinaryReader; import jdk.graal.compiler.graphio.parsing.ModelBuilder; import jdk.graal.compiler.graphio.parsing.StreamSource; import jdk.graal.compiler.graphio.parsing.model.GraphDocument; +import jdk.graal.compiler.util.args.Command; +import jdk.graal.compiler.util.args.CommandGroup; +import jdk.graal.compiler.util.args.OptionValue; +import jdk.graal.compiler.util.args.Program; +import jdk.graal.compiler.util.args.StringValue; import jdk.graal.compiler.util.json.JsonBuilder; import jdk.graal.compiler.util.json.JsonPrettyWriter; import jdk.graal.compiler.util.json.JsonWriter; diff --git a/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/BinaryReader.java b/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/BinaryReader.java index 9715bae19036..1cb784d353e5 100644 --- a/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/BinaryReader.java +++ b/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/BinaryReader.java @@ -240,10 +240,10 @@ private static String edges() { private final ErrorReporter reporter; - private abstract static class Member implements LengthToString { - final Klass holder; - final int accessFlags; - final String name; + public abstract static class Member implements LengthToString { + public final Klass holder; + public final int accessFlags; + public final String name; private Member(Klass holder, String name, int accessFlags) { this.holder = holder; @@ -279,10 +279,11 @@ public boolean equals(Object obj) { } public static final class Method extends Member { - final Signature signature; + public final Signature signature; public final byte[] code; - /* package-private */ Method(String name, Signature signature, byte[] code, Klass holder, int accessFlags) { + /* package-private */ + public Method(String name, Signature signature, byte[] code, Klass holder, int accessFlags) { super(holder, name, accessFlags); this.signature = signature; this.code = code; @@ -340,12 +341,12 @@ public boolean equals(Object obj) { } } - /* package-private */ static final class Signature { + public static final class Signature { public final String returnType; public final String[] argTypes; private final int hash; - Signature(String returnType, String[] argTypes) { + public Signature(String returnType, String[] argTypes) { this.returnType = returnType; this.argTypes = argTypes; this.hash = toString().hashCode(); @@ -380,10 +381,10 @@ public boolean equals(Object obj) { } } - /* package-private */ static final class Field extends Member { + public static final class Field extends Member { public final String type; - Field(String type, Klass holder, String name, int accessFlags) { + public Field(String type, Klass holder, String name, int accessFlags) { super(holder, name, accessFlags); this.type = type; } @@ -413,7 +414,7 @@ public static class Klass implements LengthToString { public final String simpleName; private final int hash; - Klass(String name) { + public Klass(String name) { this.name = name; String simple; try { @@ -467,10 +468,10 @@ public boolean equals(Object obj) { } - /* package-private */ static final class EnumKlass extends Klass { + public static final class EnumKlass extends Klass { public final String[] values; - EnumKlass(String name, String[] values) { + public EnumKlass(String name, String[] values) { super(name); this.values = values; } @@ -490,9 +491,9 @@ public boolean equals(Object obj) { } } - /* package-private */ static final class EnumValue implements LengthToString { - EnumKlass enumKlass; - int ordinal; + public static final class EnumValue implements LengthToString { + public EnumKlass enumKlass; + public int ordinal; EnumValue(EnumKlass enumKlass, int ordinal) { this.enumKlass = enumKlass; diff --git a/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/Builder.java b/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/Builder.java index c7934e456f30..2e1e46713004 100644 --- a/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/Builder.java +++ b/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/Builder.java @@ -183,7 +183,7 @@ public boolean equals(Object obj) { } final class TypedPort extends Port { - final EnumValue type; + public final EnumValue type; TypedPort(boolean isList, String name, EnumValue type) { super(isList, name); diff --git a/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java b/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java index 0ce172248b48..a428ea88e401 100644 --- a/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java +++ b/visualizer/IdealGraphVisualizer/Data/src/main/java/jdk/graal/compiler/graphio/parsing/LocationStackFrame.java @@ -79,7 +79,7 @@ public String getFullMethodName() { return method == null ? null : method.toString(Builder.Length.M); } - BinaryReader.Method getMethod() { + public BinaryReader.Method getMethod() { return method; }