aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2016-04-21 17:01:24 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-04-22 11:48:52 +0000
commitdf7b05fdef63caaa218bda6e9d8013b06c7f6f33 (patch)
tree93065826c230a2ae6ae7d585dfeb446c899683bf /src/main/java/com/google
parent6169a9724c2b82c4c56344fc80b46006d7d68cbb (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.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java5
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()) {