diff options
author | Irina Iancu <elenairina@google.com> | 2017-01-16 09:11:33 +0000 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-01-16 13:47:07 +0000 |
commit | e9674fb187b5b95136eb93058eab9d48dcfdbeca (patch) | |
tree | 450ff9f6a59166a0767a1f39ed60aee3ab3aa52c /src/main/java/com/google/devtools/build/lib/syntax | |
parent | 266bb166293c44cd6fb25d66fc2b2aff328ed69e (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.java | 18 |
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} |