Skip to content

Commit

Permalink
[GR-48439] Convert igvutil.args to common utility
Browse files Browse the repository at this point in the history
PullRequest: graal/18665
  • Loading branch information
c-refice committed Oct 4, 2024
2 parents 16ca5f6 + 59d2d92 commit 0076315
Show file tree
Hide file tree
Showing 29 changed files with 271 additions and 107 deletions.
1 change: 1 addition & 0 deletions compiler/mx.compiler/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -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" : [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<TestEnum> 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<List<String>> option = new StringValue("REPEATED", "").repeated();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,16 +242,14 @@ static String constantArrayToString(Object array, Set<Object> 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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down
Loading

0 comments on commit 0076315

Please sign in to comment.