diff options
author | 2016-04-21 17:01:24 +0000 | |
---|---|---|
committer | 2016-04-22 11:48:52 +0000 | |
commit | df7b05fdef63caaa218bda6e9d8013b06c7f6f33 (patch) | |
tree | 93065826c230a2ae6ae7d585dfeb446c899683bf /src/main/java/com/google | |
parent | 6169a9724c2b82c4c56344fc80b46006d7d68cbb (diff) |
DotExpressions can evaluate fields of java.lang.Class instances in addition to actual instances.
This allows global namespaces registered in the RuleClassProvider to have structField SkylarkCallables.
TESTED: Using the new functionality for AppleSkylarkCommon.getKeys()
--
MOS_MIGRATED_REVID=120455804
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java | 3 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java | 5 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index 4de5488e59..00b2c665d7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -37,7 +37,8 @@ public class AppleSkylarkCommon { @SkylarkCallable( name = "keys", - doc = "Retrieves ObjcProvider keys" + doc = "Retrieves ObjcProvider keys", + structField = true ) public static SkylarkKeyStore getKeys() { return new SkylarkKeyStore(); diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java index 76e8ba0243..88c0e3ffb9 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java @@ -106,8 +106,9 @@ public final class DotExpression extends Expression { } } - List<MethodDescriptor> methods = - FuncallExpression.getMethods(objValue.getClass(), name, 0, loc); + List<MethodDescriptor> methods = objValue instanceof Class<?> + ? FuncallExpression.getMethods((Class<?>) objValue, name, 0, loc) + : FuncallExpression.getMethods(objValue.getClass(), name, 0, loc); if (methods != null && !methods.isEmpty()) { MethodDescriptor method = Iterables.getOnlyElement(methods); if (method.getAnnotation().structField()) { |