diff options
author | 2017-12-20 14:49:13 -0800 | |
---|---|---|
committer | 2017-12-20 14:50:47 -0800 | |
commit | 0d55f4c3c754392a07e72f7146c484a8fb492d16 (patch) | |
tree | d4aaa848454014db64b1af7f7532f841dca693d9 /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | |
parent | 104cd41297856e168e252f3a6ee78fb29d4bae86 (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.java | 31 |
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); } |