private static Artifact getExecutable(RuleContext ruleContext, Object target)
     throws EvalException {
   Artifact executable =
       ruleContext.getRule().getRuleClassObject().outputsDefaultExecutable()
           // This doesn't actually create a new Artifact just returns the one
           // created in SkylarkruleContext.
           ? ruleContext.createOutputArtifact()
           : null;
   if (target instanceof SkylarkClassObject) {
     SkylarkClassObject struct = (SkylarkClassObject) target;
     if (struct.getValue("executable") != null) {
       // We need this because of genrule.bzl. This overrides the default executable.
       executable = cast("executable", struct, Artifact.class, struct.getCreationLoc());
     }
   }
   return executable;
 }