aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-05-23 12:32:07 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-23 12:33:20 -0700
commit29eafdfe329b300dc42fddafde87bddae2f07a4c (patch)
tree7b20b5796aeb5c32ce66c3160ebdb8f56d32106e /src/main/java/com/google/devtools/build/lib/analysis
parent3e951fcb946b9f8efdef7a84a2fb0fe03ede010e (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.java18
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;