aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar Irina Iancu <elenairina@google.com>2017-01-16 09:11:33 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-01-16 13:47:07 +0000
commite9674fb187b5b95136eb93058eab9d48dcfdbeca (patch)
tree450ff9f6a59166a0767a1f39ed60aee3ab3aa52c /src/main/java/com/google/devtools/build/lib/syntax
parent266bb166293c44cd6fb25d66fc2b2aff328ed69e (diff)
Adding Java compilation to java_lite_proto_library Skylark version.
-- PiperOrigin-RevId: 144608820 MOS_MIGRATED_REVID=144608820
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index bb859c90c6..387b565e44 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -157,12 +157,28 @@ public final class EvalUtils {
|| c.equals(String.class) // basic values
|| c.equals(Integer.class)
|| c.equals(Boolean.class)
- || c.isAnnotationPresent(SkylarkModule.class) // registered Skylark class
+ // there is a registered Skylark ancestor class (useful e.g. when using AutoValue)
+ || hasSkylarkAcceptableAncestor(c)
|| ImmutableMap.class.isAssignableFrom(c) // will be converted to SkylarkDict
|| NestedSet.class.isAssignableFrom(c) // will be converted to SkylarkNestedSet
|| c.equals(PathFragment.class); // other known class
}
+ private static boolean hasSkylarkAcceptableAncestor(Class<?> c) {
+ if (c == null) {
+ return false;
+ }
+ if (c.isAnnotationPresent(SkylarkModule.class)) {
+ return true;
+ }
+ for (Class<?> inter : c.getInterfaces()) {
+ if (hasSkylarkAcceptableAncestor(inter)) {
+ return true;
+ }
+ }
+ return hasSkylarkAcceptableAncestor(c.getSuperclass());
+ }
+
// TODO(bazel-team): move the following few type-related functions to SkylarkType
/**
* Return the Skylark-type of {@code c}