diff options
author | Googler <noreply@google.com> | 2018-05-23 12:32:07 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-05-23 12:33:20 -0700 |
commit | 29eafdfe329b300dc42fddafde87bddae2f07a4c (patch) | |
tree | 7b20b5796aeb5c32ce66c3160ebdb8f56d32106e /src/main/java/com/google/devtools/build/lib/analysis | |
parent | 3e951fcb946b9f8efdef7a84a2fb0fe03ede010e (diff) |
Initial implementation of a Skylark debug server API.
I've pulled out the API for separate review. It includes all
hooks from blaze/skylark used by the debugger.
Debuggable thread contexts are currently declared in 3 places:
- BuildFileAST (top-level evaluation of BUILD files)
- SkylarkRuleConfiguredTargetUtil (rules)
- SkylarkAspectFactory (aspects)
The purpose of declaring these contexts is so that the debugger
can track currently-active threads (and stop tracking them when
the task is completed).
Details of the actual debugging server are in unknown commit.
PiperOrigin-RevId: 197770547
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java index 1cc7543472..5dd147985f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java @@ -43,6 +43,7 @@ import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.BaseFunction; import com.google.devtools.build.lib.syntax.ClassObject; +import com.google.devtools.build.lib.syntax.DebugServerUtils; import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalExceptionWithStackTrace; @@ -92,12 +93,19 @@ public final class SkylarkRuleConfiguredTargetUtil { .setEventHandler(ruleContext.getAnalysisEnvironment().getEventHandler()) .build(); // NB: loading phase functions are not available: this is analysis already, // so we do *not* setLoadingPhase(). + + final SkylarkRuleContext finalContext = skylarkRuleContext; Object target = - ruleImplementation.call( - /*args=*/ ImmutableList.of(skylarkRuleContext), - /*kwargs*/ ImmutableMap.of(), - /*ast=*/ null, - env); + DebugServerUtils.runWithDebuggingIfEnabled( + env, + () -> + String.format("Target %s", ruleContext.getTarget().getLabel().getCanonicalForm()), + () -> + ruleImplementation.call( + /*args=*/ ImmutableList.of(finalContext), + /*kwargs*/ ImmutableMap.of(), + /*ast=*/ null, + env)); if (ruleContext.hasErrors()) { return null; |