aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-12-20 14:49:13 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-20 14:50:47 -0800
commit0d55f4c3c754392a07e72f7146c484a8fb492d16 (patch)
treed4aaa848454014db64b1af7f7532f841dca693d9 /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
parent104cd41297856e168e252f3a6ee78fb29d4bae86 (diff)
Expose ObjcProtoAspect to Skylark.
RELNOTES: None. PiperOrigin-RevId: 179737025
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index adc0b344e5..f3d47e3763 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -51,6 +51,7 @@ import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.SkylarkAspect;
import com.google.devtools.build.lib.packages.SkylarkAspectClass;
+import com.google.devtools.build.lib.packages.SkylarkDefinedAspect;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.profiler.memory.CurrentRuleTracker;
import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey;
@@ -113,6 +114,30 @@ public final class AspectFunction implements SkyFunction {
}
/**
+ * Load Skylark-defined aspect from an extension file. Is to be called from a SkyFunction.
+ *
+ * @return {@code null} if dependencies cannot be satisfied.
+ * @throws AspectCreationException if the value loaded is not a {@link SkylarkDefinedAspect}.
+ */
+ @Nullable
+ static SkylarkDefinedAspect loadSkylarkDefinedAspect(
+ Environment env, SkylarkAspectClass skylarkAspectClass)
+ throws AspectCreationException, InterruptedException {
+ Label extensionLabel = skylarkAspectClass.getExtensionLabel();
+ String skylarkValueName = skylarkAspectClass.getExportedName();
+
+ SkylarkAspect skylarkAspect = loadSkylarkAspect(env, extensionLabel, skylarkValueName);
+ if (!(skylarkAspect instanceof SkylarkDefinedAspect)) {
+ throw new AspectCreationException(
+ String.format(
+ "%s from %s is not a skylark-defined aspect",
+ skylarkValueName, extensionLabel.toString()));
+ } else {
+ return (SkylarkDefinedAspect) skylarkAspect;
+ }
+ }
+
+ /**
* Load Skylark aspect from an extension file. Is to be called from a SkyFunction.
*
* @return {@code null} if dependencies cannot be satisfied.
@@ -164,11 +189,9 @@ public final class AspectFunction implements SkyFunction {
aspect = Aspect.forNative(nativeAspectClass, key.getParameters());
} else if (key.getAspectClass() instanceof SkylarkAspectClass) {
SkylarkAspectClass skylarkAspectClass = (SkylarkAspectClass) key.getAspectClass();
- SkylarkAspect skylarkAspect;
+ SkylarkDefinedAspect skylarkAspect;
try {
- skylarkAspect =
- loadSkylarkAspect(
- env, skylarkAspectClass.getExtensionLabel(), skylarkAspectClass.getExportedName());
+ skylarkAspect = loadSkylarkDefinedAspect(env, skylarkAspectClass);
} catch (AspectCreationException e) {
throw new AspectFunctionException(e);
}