Skip to content

Commit 787e354

Browse files
committed
Provide NativeImageSystemIOWrappers output sink customization
1 parent 87a53b7 commit 787e354

File tree

10 files changed

+36
-38
lines changed

10 files changed

+36
-38
lines changed

substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/hosted/GraalFeature.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import java.util.function.Function;
4343
import java.util.function.Predicate;
4444

45-
import com.oracle.graal.pointsto.meta.PointsToAnalysisMethod;
4645
import org.graalvm.compiler.api.replacements.Fold;
4746
import org.graalvm.compiler.api.runtime.GraalRuntime;
4847
import org.graalvm.compiler.core.common.spi.MetaAccessExtensionProvider;
@@ -90,6 +89,7 @@
9089
import com.oracle.graal.pointsto.meta.AnalysisMethod;
9190
import com.oracle.graal.pointsto.meta.AnalysisType;
9291
import com.oracle.graal.pointsto.meta.HostedProviders;
92+
import com.oracle.graal.pointsto.meta.PointsToAnalysisMethod;
9393
import com.oracle.graal.pointsto.util.GraalAccess;
9494
import com.oracle.svm.core.ParsingReason;
9595
import com.oracle.svm.core.SubstrateOptions;
@@ -121,6 +121,7 @@
121121
import com.oracle.svm.hosted.FeatureImpl.DuringAnalysisAccessImpl;
122122
import com.oracle.svm.hosted.FeatureImpl.DuringSetupAccessImpl;
123123
import com.oracle.svm.hosted.NativeImageGenerator;
124+
import com.oracle.svm.hosted.ProgressReporter;
124125
import com.oracle.svm.hosted.analysis.Inflation;
125126
import com.oracle.svm.hosted.classinitialization.ClassInitializationSupport;
126127
import com.oracle.svm.hosted.code.CompilationInfoSupport;
@@ -133,7 +134,6 @@
133134
import com.oracle.svm.hosted.phases.StrengthenStampsPhase;
134135
import com.oracle.svm.hosted.phases.SubstrateClassInitializationPlugin;
135136
import com.oracle.svm.hosted.phases.SubstrateGraphBuilderPhase;
136-
import com.oracle.svm.hosted.reporting.ProgressReporter;
137137
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
138138

139139
import jdk.vm.ci.meta.DeoptimizationAction;

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGenerator.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@
5656
import java.util.function.BooleanSupplier;
5757
import java.util.stream.Collectors;
5858

59-
import com.oracle.graal.pointsto.PointsToAnalysis;
60-
import com.oracle.graal.pointsto.meta.PointsToAnalysisFactory;
61-
import com.oracle.graal.pointsto.meta.PointsToAnalysisMethod;
6259
import org.graalvm.collections.EconomicSet;
6360
import org.graalvm.collections.Pair;
6461
import org.graalvm.compiler.api.replacements.Fold;
@@ -135,6 +132,7 @@
135132
import com.oracle.graal.pointsto.BigBang;
136133
import com.oracle.graal.pointsto.BytecodeSensitiveAnalysisPolicy;
137134
import com.oracle.graal.pointsto.DefaultAnalysisPolicy;
135+
import com.oracle.graal.pointsto.PointsToAnalysis;
138136
import com.oracle.graal.pointsto.api.PointstoOptions;
139137
import com.oracle.graal.pointsto.constraints.UnsupportedFeatureException;
140138
import com.oracle.graal.pointsto.infrastructure.SubstitutionProcessor;
@@ -146,6 +144,8 @@
146144
import com.oracle.graal.pointsto.meta.AnalysisType;
147145
import com.oracle.graal.pointsto.meta.AnalysisUniverse;
148146
import com.oracle.graal.pointsto.meta.HostedProviders;
147+
import com.oracle.graal.pointsto.meta.PointsToAnalysisFactory;
148+
import com.oracle.graal.pointsto.meta.PointsToAnalysisMethod;
149149
import com.oracle.graal.pointsto.reports.AnalysisReporter;
150150
import com.oracle.graal.pointsto.typestate.TypeState;
151151
import com.oracle.graal.pointsto.util.AnalysisError;
@@ -220,6 +220,7 @@
220220
import com.oracle.svm.hosted.FeatureImpl.BeforeUniverseBuildingAccessImpl;
221221
import com.oracle.svm.hosted.FeatureImpl.DuringAnalysisAccessImpl;
222222
import com.oracle.svm.hosted.FeatureImpl.OnAnalysisExitAccessImpl;
223+
import com.oracle.svm.hosted.ProgressReporter.ReporterClosable;
223224
import com.oracle.svm.hosted.ameta.AnalysisConstantFieldProvider;
224225
import com.oracle.svm.hosted.ameta.AnalysisConstantReflectionProvider;
225226
import com.oracle.svm.hosted.analysis.Inflation;
@@ -270,8 +271,6 @@
270271
import com.oracle.svm.hosted.phases.SubstrateClassInitializationPlugin;
271272
import com.oracle.svm.hosted.phases.VerifyDeoptFrameStatesLIRPhase;
272273
import com.oracle.svm.hosted.phases.VerifyNoGuardsPhase;
273-
import com.oracle.svm.hosted.reporting.ProgressReporter;
274-
import com.oracle.svm.hosted.reporting.ProgressReporter.ReporterClosable;
275274
import com.oracle.svm.hosted.snippets.SubstrateGraphBuilderPlugins;
276275
import com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor;
277276
import com.oracle.svm.hosted.substitute.DeletedFieldsPlugin;

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGeneratorRunner.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@
7272
import com.oracle.svm.hosted.code.CEntryPointData;
7373
import com.oracle.svm.hosted.image.AbstractImage.NativeImageKind;
7474
import com.oracle.svm.hosted.option.HostedOptionParser;
75-
import com.oracle.svm.hosted.reporting.ProgressReporter;
7675
import com.oracle.svm.util.ClassUtil;
7776
import com.oracle.svm.util.ModuleSupport;
7877
import com.oracle.svm.util.ReflectionUtil;

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageSystemClassLoader.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@
5252
public final class NativeImageSystemClassLoader extends SecureClassLoader {
5353

5454
public final ClassLoader defaultSystemClassLoader;
55-
56-
NativeImageSystemIOWrappers systemIOWrappers;
55+
final NativeImageSystemIOWrappers systemIOWrappers;
5756

5857
private volatile ClassLoader nativeImageClassLoader = null;
5958

@@ -62,10 +61,6 @@ public final class NativeImageSystemClassLoader extends SecureClassLoader {
6261
public NativeImageSystemClassLoader(ClassLoader defaultSystemClassLoader) {
6362
super(defaultSystemClassLoader);
6463
this.defaultSystemClassLoader = defaultSystemClassLoader;
65-
resetSystemIOWrappers();
66-
}
67-
68-
private void resetSystemIOWrappers() {
6964
systemIOWrappers = new NativeImageSystemIOWrappers();
7065
/* Image building console output requires custom System.out and System.err */
7166
systemIOWrappers.replaceSystemOutErr();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageSystemIOWrappers.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import java.io.ByteArrayOutputStream;
2929
import java.io.PrintStream;
30+
import java.util.Objects;
3031

3132
import com.oracle.svm.core.util.UserError;
3233

@@ -35,7 +36,7 @@ public class NativeImageSystemIOWrappers {
3536
final CapturingStdioWrapper outWrapper;
3637
final CapturingStdioWrapper errWrapper;
3738

38-
public boolean useCapturing;
39+
boolean useCapturing;
3940

4041
NativeImageSystemIOWrappers() {
4142
outWrapper = new CapturingStdioWrapper(System.out, new ByteArrayOutputStream(128));
@@ -53,14 +54,22 @@ public void verifySystemOutErrReplacement() {
5354
UserError.guarantee(System.err == errWrapper, "System.err" + msg);
5455
}
5556

56-
public PrintStream originalOut() {
57+
public PrintStream getOut() {
5758
return outWrapper.delegate;
5859
}
5960

60-
public PrintStream originalErr() {
61+
public void setOut(PrintStream customOut) {
62+
outWrapper.delegate = Objects.requireNonNull(customOut);
63+
}
64+
65+
public PrintStream getErr() {
6166
return errWrapper.delegate;
6267
}
6368

69+
public void setErr(PrintStream customErr) {
70+
errWrapper.delegate = Objects.requireNonNull(customErr);
71+
}
72+
6473
public void flushCapturedContent() {
6574
outWrapper.flushCapturedContent();
6675
errWrapper.flushCapturedContent();
@@ -76,7 +85,7 @@ void replaceSystemOutErr() {
7685
*/
7786
private final class CapturingStdioWrapper extends PrintStream {
7887
private final ByteArrayOutputStream buffer;
79-
private final PrintStream delegate;
88+
private PrintStream delegate;
8089

8190
private CapturingStdioWrapper(PrintStream delegate, ByteArrayOutputStream buffer) {
8291
super(buffer);
Lines changed: 8 additions & 11 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 com.oracle.svm.hosted.reporting;
25+
package com.oracle.svm.hosted;
2626

2727
import java.io.File;
2828
import java.io.PrintWriter;
@@ -66,9 +66,6 @@
6666
import com.oracle.svm.core.annotate.AutomaticFeature;
6767
import com.oracle.svm.core.option.HostedOptionValues;
6868
import com.oracle.svm.core.reflect.MethodMetadataDecoder;
69-
import com.oracle.svm.hosted.NativeImageGenerator;
70-
import com.oracle.svm.hosted.NativeImageSystemIOWrappers;
71-
import com.oracle.svm.hosted.StringAccess;
7269
import com.oracle.svm.hosted.code.CompileQueue.CompileTask;
7370
import com.oracle.svm.hosted.image.NativeImageHeap.ObjectInfo;
7471
import com.oracle.svm.util.ImageBuildStatistics;
@@ -638,7 +635,7 @@ private void checkForExcessiveGarbageCollection() {
638635
*/
639636

640637
private static void resetANSIMode() {
641-
NativeImageSystemIOWrappers.singleton().originalOut().print(ANSIColors.RESET);
638+
NativeImageSystemIOWrappers.singleton().getOut().print(ANSIColors.RESET);
642639
}
643640

644641
private static String stringFilledWith(int size, String fill) {
@@ -838,7 +835,7 @@ private void flush() {
838835
if (printBuffer != null) {
839836
textBuffer.forEach(printBuffer::append);
840837
} else {
841-
textBuffer.forEach(builderIO.originalOut()::print);
838+
textBuffer.forEach(builderIO.getOut()::print);
842839
}
843840
textBuffer.clear();
844841
}
@@ -850,7 +847,7 @@ private void printRaw(char value) {
850847
if (printBuffer != null) {
851848
printBuffer.append(value);
852849
} else {
853-
builderIO.originalOut().print(value);
850+
builderIO.getOut().print(value);
854851
}
855852
}
856853

@@ -863,15 +860,15 @@ private void flushln(boolean useOutputPrefix) {
863860
return;
864861
}
865862
if (useOutputPrefix) {
866-
builderIO.originalOut().print(outputPrefix);
863+
builderIO.getOut().print(outputPrefix);
867864
}
868865
if (printBuffer != null) {
869-
builderIO.originalOut().print(printBuffer);
866+
builderIO.getOut().print(printBuffer);
870867
printBuffer.setLength(0); // Clear buffer.
871868
}
872-
textBuffer.forEach(builderIO.originalOut()::print);
869+
textBuffer.forEach(builderIO.getOut()::print);
873870
textBuffer.clear();
874-
builderIO.originalOut().println();
871+
builderIO.getOut().println();
875872
}
876873

877874
private void flushCenteredln() {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* questions.
2424
*/
2525

26-
package com.oracle.svm.hosted.reporting;
26+
package com.oracle.svm.hosted;
2727

2828
import java.nio.file.Files;
2929
import java.nio.file.Path;
@@ -33,7 +33,7 @@
3333

3434
public final class ProgressReporterCHelper {
3535
private static final int DEFAULT_CHARACTERS_PER_LINE = 80;
36-
public static final int MAX_CHARACTERS_PER_LINE = 120;
36+
static final int MAX_CHARACTERS_PER_LINE = 120;
3737

3838
static {
3939
loadCHelperLibrary();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/code/CompileQueue.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@
157157
import com.oracle.svm.hosted.FeatureHandler;
158158
import com.oracle.svm.hosted.NativeImageGenerator;
159159
import com.oracle.svm.hosted.NativeImageOptions;
160+
import com.oracle.svm.hosted.ProgressReporter;
160161
import com.oracle.svm.hosted.meta.HostedField;
161162
import com.oracle.svm.hosted.meta.HostedMethod;
162163
import com.oracle.svm.hosted.meta.HostedType;
@@ -166,8 +167,6 @@
166167
import com.oracle.svm.hosted.phases.ImageBuildStatisticsCounterPhase;
167168
import com.oracle.svm.hosted.phases.ImplicitAssertionsPhase;
168169
import com.oracle.svm.hosted.phases.StrengthenStampsPhase;
169-
import com.oracle.svm.hosted.reporting.ProgressReporter;
170-
import com.oracle.svm.hosted.reporting.ProgressReporter.ReporterClosable;
171170
import com.oracle.svm.hosted.substitute.DeletedMethod;
172171
import com.oracle.svm.util.ImageBuildStatistics;
173172

@@ -372,7 +371,7 @@ public void finish(DebugContext debug) {
372371
ProgressReporter reporter = ProgressReporter.singleton();
373372
try {
374373
String imageName = universe.getBigBang().getHostVM().getImageName();
375-
try (ReporterClosable ac = reporter.printParsing(new Timer(imageName, "(parse)"))) {
374+
try (ProgressReporter.ReporterClosable ac = reporter.printParsing(new Timer(imageName, "(parse)"))) {
376375
parseAll();
377376
}
378377
// Checking @Uninterruptible annotations does not take long enough to justify a timer.
@@ -391,7 +390,7 @@ public void finish(DebugContext debug) {
391390
}
392391

393392
if (SubstrateOptions.AOTInline.getValue() && SubstrateOptions.AOTTrivialInline.getValue()) {
394-
try (ReporterClosable ac = reporter.printInlining(new Timer(imageName, "(inline)"))) {
393+
try (ProgressReporter.ReporterClosable ac = reporter.printInlining(new Timer(imageName, "(inline)"))) {
395394
inlineTrivialMethods(debug);
396395
}
397396
} else {
@@ -400,7 +399,7 @@ public void finish(DebugContext debug) {
400399

401400
assert suitesNotCreated();
402401
createSuites();
403-
try (ReporterClosable ac = reporter.printCompiling(new Timer(imageName, "(compile)"))) {
402+
try (ProgressReporter.ReporterClosable ac = reporter.printCompiling(new Timer(imageName, "(compile)"))) {
404403
compileAll();
405404
}
406405
} catch (InterruptedException ie) {

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
import com.oracle.svm.core.util.UserError;
103103
import com.oracle.svm.hosted.FeatureImpl;
104104
import com.oracle.svm.hosted.NativeImageOptions;
105+
import com.oracle.svm.hosted.ProgressReporter;
105106
import com.oracle.svm.hosted.c.CGlobalDataFeature;
106107
import com.oracle.svm.hosted.c.NativeLibraries;
107108
import com.oracle.svm.hosted.c.codegen.CSourceCodeWriter;
@@ -114,7 +115,6 @@
114115
import com.oracle.svm.hosted.meta.HostedMetaAccess;
115116
import com.oracle.svm.hosted.meta.HostedMethod;
116117
import com.oracle.svm.hosted.meta.HostedUniverse;
117-
import com.oracle.svm.hosted.reporting.ProgressReporter;
118118
import com.oracle.svm.util.ReflectionUtil;
119119
import com.oracle.svm.util.ReflectionUtil.ReflectionUtilError;
120120

substratevm/src/com.oracle.svm.jni/src/com/oracle/svm/jni/access/JNIAccessFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@
6060
import com.oracle.svm.hosted.FeatureImpl.BeforeAnalysisAccessImpl;
6161
import com.oracle.svm.hosted.FeatureImpl.CompilationAccessImpl;
6262
import com.oracle.svm.hosted.FeatureImpl.DuringAnalysisAccessImpl;
63+
import com.oracle.svm.hosted.ProgressReporter;
6364
import com.oracle.svm.hosted.c.NativeLibraries;
6465
import com.oracle.svm.hosted.code.CEntryPointData;
6566
import com.oracle.svm.hosted.config.ConfigurationParserUtils;
6667
import com.oracle.svm.hosted.meta.MaterializedConstantFields;
67-
import com.oracle.svm.hosted.reporting.ProgressReporter;
6868
import com.oracle.svm.hosted.substitute.SubstitutionReflectivityFilter;
6969
import com.oracle.svm.jni.JNIJavaCallWrappers;
7070
import com.oracle.svm.jni.JNISupport;

0 commit comments

Comments
 (0)