Skip to content

Commit d0555b8

Browse files
committed
Give StarlarkValue#debugPrint access to the StarlarkThread
Since `debugPrint` is meant for emitting potentially non-deterministic, it is safe to give it access to `StarlarkThread` information. This will be used in a follow-up to let `print` and `fail` emit `Label`s in display form without having to track the reverse repo mapping for the sake of invalidation of repo rules or module extensions. Work towards bazelbuild#20486
1 parent 750a038 commit d0555b8

File tree

11 files changed

+34
-29
lines changed

11 files changed

+34
-29
lines changed

src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
import net.starlark.java.eval.Dict;
5555
import net.starlark.java.eval.Printer;
5656
import net.starlark.java.eval.Starlark;
57-
import net.starlark.java.eval.StarlarkSemantics;
57+
import net.starlark.java.eval.StarlarkThread;
5858

5959
/**
6060
* A {@link com.google.devtools.build.lib.analysis.ConfiguredTarget} that is produced by a rule.
@@ -249,7 +249,7 @@ public void repr(Printer printer) {
249249
}
250250

251251
@Override
252-
public void debugPrint(Printer printer, StarlarkSemantics semantics) {
252+
public void debugPrint(Printer printer, StarlarkThread thread) {
253253
// Show the names of the provider keys that this target propagates.
254254
// Provider key names might potentially be *private* information, and thus a comprehensive
255255
// list of provider keys should not be exposed in any way other than for debug information.

src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void repr(Printer printer) {
7171
}
7272

7373
@Override
74-
public void debugPrint(Printer printer, StarlarkSemantics semantics) {
74+
public void debugPrint(Printer printer, StarlarkThread thread) {
7575
try {
7676
printer.append(
7777
Joiner.on(" ").join(build(/* mainRepoMappingSupplier= */ () -> null).arguments()));

src/main/java/com/google/devtools/build/lib/bazel/bzlmod/TypeCheckedTag.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import net.starlark.java.annot.StarlarkBuiltin;
2525
import net.starlark.java.eval.EvalException;
2626
import net.starlark.java.eval.Printer;
27-
import net.starlark.java.eval.StarlarkSemantics;
27+
import net.starlark.java.eval.StarlarkThread;
2828
import net.starlark.java.eval.Structure;
2929
import net.starlark.java.spelling.SpellChecker;
3030
import net.starlark.java.syntax.Location;
@@ -150,7 +150,7 @@ public String getErrorMessageForUnknownField(String field) {
150150
}
151151

152152
@Override
153-
public void debugPrint(Printer printer, StarlarkSemantics semantics) {
153+
public void debugPrint(Printer printer, StarlarkThread thread) {
154154
printer.append(String.format("'%s' tag at %s", tagClassName, location));
155155
}
156156
}

src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -279,23 +279,23 @@ public Sequence<Linkstamp> getLinkstampsForStarlark() {
279279
}
280280

281281
@Override
282-
public void debugPrint(Printer printer, StarlarkSemantics semantics) {
282+
public void debugPrint(Printer printer, StarlarkThread thread) {
283283
printer.append("<LinkerInput(owner=");
284284
if (owner == null) {
285285
printer.append("[null owner, uses old create_linking_context API]");
286286
} else {
287-
owner.debugPrint(printer, semantics);
287+
owner.debugPrint(printer, thread);
288288
}
289289
printer.append(", libraries=[");
290290
for (LibraryToLink libraryToLink : libraries) {
291-
libraryToLink.debugPrint(printer, semantics);
291+
libraryToLink.debugPrint(printer, thread);
292292
printer.append(", ");
293293
}
294294
printer.append("], userLinkFlags=[");
295295
printer.append(Joiner.on(", ").join(userLinkFlags));
296296
printer.append("], nonCodeInputs=[");
297297
for (Artifact nonCodeInput : nonCodeInputs) {
298-
nonCodeInput.debugPrint(printer, semantics);
298+
nonCodeInput.debugPrint(printer, thread);
299299
printer.append(", ");
300300
}
301301
// TODO(cparsons): Add debug repesentation of linkstamps.
@@ -394,10 +394,10 @@ public String toString() {
394394
@Nullable private final ExtraLinkTimeLibraries extraLinkTimeLibraries;
395395

396396
@Override
397-
public void debugPrint(Printer printer, StarlarkSemantics semantics) {
397+
public void debugPrint(Printer printer, StarlarkThread thread) {
398398
printer.append("<CcLinkingContext([");
399399
for (LinkerInput linkerInput : linkerInputs.toList()) {
400-
linkerInput.debugPrint(printer, semantics);
400+
linkerInput.debugPrint(printer, thread);
401401
printer.append(", ");
402402
}
403403
printer.append("])>");

src/main/java/com/google/devtools/build/lib/rules/cpp/FeatureConfigurationForStarlark.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public void str(Printer printer, StarlarkSemantics semantics) {
6262
}
6363

6464
@Override
65-
public void debugPrint(Printer printer, StarlarkSemantics semantics) {
65+
public void debugPrint(Printer printer, StarlarkThread thread) {
6666
printer.append("<FeatureConfiguration(");
6767
printer.append(Joiner.on(", ").join(featureConfiguration.getEnabledFeatureNames()));
6868
printer.append(")>");

src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import net.starlark.java.eval.Printer;
3232
import net.starlark.java.eval.Sequence;
3333
import net.starlark.java.eval.StarlarkList;
34-
import net.starlark.java.eval.StarlarkSemantics;
3534
import net.starlark.java.eval.StarlarkThread;
3635

3736
/** Encapsulates information for linking a library. */
@@ -224,7 +223,7 @@ LinkerInputs.LibraryToLink getInterfaceLibraryToLink() {
224223
abstract boolean getDisableWholeArchive();
225224

226225
@Override
227-
public final void debugPrint(Printer printer, StarlarkSemantics semantics) {
226+
public final void debugPrint(Printer printer, StarlarkThread thread) {
228227
printer.append("<LibraryToLink(");
229228
printer.append(
230229
Joiner.on(", ")

src/main/java/net/starlark/java/eval/MethodLibrary.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -834,14 +834,14 @@ public void fail(Object msg, Object attr, Tuple args, StarlarkThread thread)
834834
if (needSeparator) {
835835
printer.append(" ");
836836
}
837-
printer.debugPrint(msg, thread.getSemantics());
837+
printer.debugPrint(msg, thread);
838838
needSeparator = true;
839839
}
840840
for (Object arg : args) {
841841
if (needSeparator) {
842842
printer.append(" ");
843843
}
844-
printer.debugPrint(arg, thread.getSemantics());
844+
printer.debugPrint(arg, thread);
845845
needSeparator = true;
846846
}
847847
throw Starlark.errorf("%s", printer.toString());
@@ -875,7 +875,7 @@ public void print(String sep, Sequence<?> args, StarlarkThread thread) throws Ev
875875
String separator = "";
876876
for (Object x : args) {
877877
p.append(separator);
878-
p.debugPrint(x, thread.getSemantics());
878+
p.debugPrint(x, thread);
879879
separator = sep;
880880
}
881881
// The PRINT_TEST_MARKER key is used in tests to verify the effects of command-line options.

src/main/java/net/starlark/java/eval/Printer.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,13 @@ public final String toString() {
114114
*
115115
* <p>Implementations of StarlarkValue may define their own behavior of {@code debugPrint}.
116116
*/
117-
public Printer debugPrint(Object o, StarlarkSemantics semantics) {
117+
public Printer debugPrint(Object o, StarlarkThread thread) {
118118
if (o instanceof StarlarkValue) {
119-
((StarlarkValue) o).debugPrint(this, semantics);
119+
((StarlarkValue) o).debugPrint(this, thread);
120120
return this;
121121
}
122122

123-
return this.str(o, semantics);
123+
return this.str(o, thread.getSemantics());
124124
}
125125

126126
/**

src/main/java/net/starlark/java/eval/StarlarkValue.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ default void str(Printer printer, StarlarkSemantics semantics) {
5757
*
5858
* @param printer a printer to be used for formatting nested values.
5959
*/
60-
default void debugPrint(Printer printer, StarlarkSemantics semantics) {
61-
str(printer, semantics);
60+
default void debugPrint(Printer printer, StarlarkThread thread) {
61+
str(printer, thread.getSemantics());
6262
}
6363

6464
/** Returns the truth-value of this Starlark value. */

src/test/java/com/google/devtools/build/lib/starlark/StarlarkRuleImplementationFunctionsTest.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import net.starlark.java.annot.Param;
7575
import net.starlark.java.annot.StarlarkMethod;
7676
import net.starlark.java.eval.EvalException;
77+
import net.starlark.java.eval.Mutability;
7778
import net.starlark.java.eval.Printer;
7879
import net.starlark.java.eval.Sequence;
7980
import net.starlark.java.eval.Starlark;
@@ -3525,7 +3526,10 @@ public void testPrintArgs() throws Exception {
35253526
setRuleContext(createRuleContext("//foo:foo"));
35263527
ev.exec("args = ruleContext.actions.args()", "args.add_all(['--foo', '--bar'])");
35273528
Args args = (Args) ev.eval("args");
3528-
assertThat(new Printer().debugPrint(args, getStarlarkSemantics()).toString())
3529+
assertThat(
3530+
new Printer()
3531+
.debugPrint(args, new StarlarkThread(Mutability.IMMUTABLE, getStarlarkSemantics()))
3532+
.toString())
35293533
.isEqualTo("--foo --bar");
35303534
}
35313535

src/test/java/net/starlark/java/eval/StarlarkEvaluationTest.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ public Structure proxyMethodsObject(StarlarkThread thread)
377377
useStarlarkThread = true)
378378
public String withArgsAndThread(
379379
StarlarkInt pos1, boolean pos2, boolean named, Sequence<?> args, StarlarkThread thread) {
380-
String argsString = debugPrintArgs(args, thread.getSemantics());
380+
String argsString = debugPrintArgs(args, thread);
381381
return "with_args_and_thread("
382382
+ pos1
383383
+ ", "
@@ -416,9 +416,11 @@ public String withKwargs(boolean pos, boolean named, Dict<String, Object> kwargs
416416
@Param(name = "foo", named = true, positional = true),
417417
},
418418
extraPositionals = @Param(name = "args"),
419-
extraKeywords = @Param(name = "kwargs"))
420-
public String withArgsAndKwargs(String foo, Tuple args, Dict<String, Object> kwargs) {
421-
String argsString = debugPrintArgs(args, StarlarkSemantics.DEFAULT);
419+
extraKeywords = @Param(name = "kwargs"),
420+
useStarlarkThread = true)
421+
public String withArgsAndKwargs(
422+
String foo, Tuple args, Dict<String, Object> kwargs, StarlarkThread thread) {
423+
String argsString = debugPrintArgs(args, thread);
422424
String kwargsString =
423425
"kwargs("
424426
+ kwargs
@@ -436,12 +438,12 @@ public String toString() {
436438
}
437439
}
438440

439-
private static String debugPrintArgs(Iterable<?> args, StarlarkSemantics semantics) {
441+
private static String debugPrintArgs(Iterable<?> args, StarlarkThread thread) {
440442
Printer p = new Printer();
441443
p.append("args(");
442444
String sep = "";
443445
for (Object arg : args) {
444-
p.append(sep).debugPrint(arg, semantics);
446+
p.append(sep).debugPrint(arg, thread);
445447
sep = ", ";
446448
}
447449
return p.append(")").toString();

0 commit comments

Comments
 (0)