summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--compiler/src/main/java/com/example/databinding/ExpressionVisitor.java167
-rw-r--r--compiler/src/main/kotlin/com/android/databinding/parser/expression_parser.kt7
-rw-r--r--compiler/src/main/kotlin/com/android/databinding/parser/expressions.kt50
-rw-r--r--compiler/src/main/kotlin/com/android/databinding/renderer/view_expr_binder_renderer.kt1
-rw-r--r--compiler/src/main/kotlin/com/android/databinding/util/class_analyzer.kt65
-rw-r--r--grammerBuilder/BindingExpression.g424
-rw-r--r--grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java64
-rw-r--r--grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java38
-rw-r--r--grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java76
-rw-r--r--grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java219
-rw-r--r--grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java44
12 files changed, 589 insertions, 168 deletions
diff --git a/build.gradle b/build.gradle
index 3c945c68..717b9a60 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,4 @@
-ext.kotlinVersion = '0.9.206'
+ext.kotlinVersion = '0.10.195'
ext.releaseVersion = "0.3"
ext.snapshotVersion = "0.3-SNAPSHOT"
diff --git a/compiler/src/main/java/com/example/databinding/ExpressionVisitor.java b/compiler/src/main/java/com/example/databinding/ExpressionVisitor.java
index 3b7bd902..74f389c1 100644
--- a/compiler/src/main/java/com/example/databinding/ExpressionVisitor.java
+++ b/compiler/src/main/java/com/example/databinding/ExpressionVisitor.java
@@ -17,10 +17,19 @@ package com.example.databinding;
import com.android.databinding.BindingExpressionBaseVisitor;
import com.android.databinding.BindingExpressionParser;
+import com.android.databinding.parser.AndOrOpExpr;
+import com.android.databinding.parser.BinaryOpExpr;
+import com.android.databinding.parser.ComparisonOpExpr;
import com.android.databinding.parser.Expr;
import com.android.databinding.parser.ExprModel;
+import com.android.databinding.parser.FieldExpr;
+import com.android.databinding.parser.MethodCallExpr;
+import com.android.databinding.parser.OpExpr;
+import com.android.databinding.parser.SymbolExpr;
+import com.android.databinding.parser.TernaryExpr;
import com.android.databinding.parser.VariableRef;
-import com.android.databinding.util.Log;
+import com.android.databinding.util.ClassAnalyzer;
+import static com.android.databinding.BindingExpressionParser.*;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ParseTree;
@@ -53,19 +62,7 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
javaString = ctx.DoubleQuoteString().getText();
}
- return new Expr() {
- @org.jetbrains.annotations.NotNull
- @Override
- public String toJava() {
- return javaString;
- }
-
- @org.jetbrains.annotations.NotNull
- @Override
- public String toReadableString() {
- return javaString;
- }
- };
+ return new SymbolExpr(javaString, String.class);
}
@Override
@@ -76,6 +73,13 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
return new Expr() {
@org.jetbrains.annotations.NotNull
@Override
+ public Class<? extends Object> resolveValueType(
+ @org.jetbrains.annotations.NotNull ClassAnalyzer classAnalyzer) {
+ return expression.getResolvedClass();
+ }
+
+ @org.jetbrains.annotations.NotNull
+ @Override
public String toJava() {
return expression.toJava();
}
@@ -106,6 +110,13 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
return new Expr() {
@org.jetbrains.annotations.NotNull
@Override
+ public Class<? extends Object> resolveValueType(
+ @org.jetbrains.annotations.NotNull ClassAnalyzer classAnalyzer) {
+ return variableRef.getVariable().getResolvedClass();
+ }
+
+ @org.jetbrains.annotations.NotNull
+ @Override
public String toReadableString() {
return variableRef.getFullName();
}
@@ -126,6 +137,14 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
return new Expr() {
@org.jetbrains.annotations.NotNull
@Override
+ public Class<? extends Object> resolveValueType(
+ @org.jetbrains.annotations.NotNull ClassAnalyzer classAnalyzer) {
+ return classAnalyzer.commonParentOf(nullCheckExpression.getResolvedClass(),
+ isNullExpression.getResolvedClass());
+ }
+
+ @org.jetbrains.annotations.NotNull
+ @Override
public String toJava() {
return "((" + nullCheckExpression.toJava() + " != null) ? (" +
nullCheckExpression.toJava() + ") : (" + isNullExpression.toJava() + "))";
@@ -145,19 +164,7 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
final VariableRef variableRef = mModel.getOrCreateVariable(identifier, null);
mAccessedVariables.add(variableRef);
- return new Expr() {
- @org.jetbrains.annotations.NotNull
- @Override
- public String toJava() {
- return identifier;
- }
-
- @org.jetbrains.annotations.NotNull
- @Override
- public String toReadableString() {
- return identifier;
- }
- };
+ return new FieldExpr(variableRef, new ArrayList<VariableRef>(0));
}
@Override
@@ -169,21 +176,58 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
}
@Override
+ public Expr visitTernaryOp(@NotNull TernaryOpContext ctx) {
+ return new TernaryExpr(ctx.left.accept(this), ctx.iftrue.accept(this), ctx.iffalse.accept(this));
+ }
+
+ @Override
public Expr visitTerminal(@NotNull TerminalNode node) {
- final String text = " " + node.getText() + " ";
- return new Expr() {
- @org.jetbrains.annotations.NotNull
- @Override
- public String toReadableString() {
- return text;
- }
- @org.jetbrains.annotations.NotNull
- @Override
- public String toJava() {
- return text;
- }
- };
+ final int type = node.getSymbol().getType();
+ switch (type) {
+ case IntegerLiteral:
+ return new SymbolExpr(node.getText(), Integer.class);
+ case FloatingPointLiteral:
+ return new SymbolExpr(node.getText(), Float.class);
+ case BooleanLiteral:
+ return new SymbolExpr(node.getText(), Boolean.class);
+ case CharacterLiteral:
+ return new SymbolExpr(node.getText(), Character.class);
+ case SingleQuoteString:
+ return new SymbolExpr(node.getText(), String.class);
+ case DoubleQuoteString:
+ return new SymbolExpr(node.getText(), String.class);
+ case NullLiteral:
+ return new SymbolExpr(node.getText(), Object.class);
+ default:
+ throw new RuntimeException("cannot create expression from terminal node " + node.toString());
+ }
+ }
+
+ @Override
+ public Expr visitMathOp(@NotNull MathOpContext ctx) {
+ // TODO must support upper cast
+ return new OpExpr(ctx.left.accept(this), ctx.op.getText(), ctx.right.accept(this));
+ }
+
+ @Override
+ public Expr visitBitShiftOp(@NotNull BitShiftOpContext ctx) {
+ return new BinaryOpExpr(ctx.left.accept(this), ctx.op.getText(), ctx.right.accept(this));
+ }
+
+ @Override
+ public Expr visitComparisonOp(@NotNull ComparisonOpContext ctx) {
+ return new ComparisonOpExpr(ctx.left.accept(this), ctx.op.getText(), ctx.right.accept(this));
+ }
+
+ @Override
+ public Expr visitBinaryOp(@NotNull BinaryOpContext ctx) {
+ return new BinaryOpExpr(ctx.left.accept(this), ctx.op.getText(), ctx.right.accept(this));
+ }
+
+ @Override
+ public Expr visitAndOrOp(@NotNull AndOrOpContext ctx) {
+ return new AndOrOpExpr(ctx.left.accept(this), ctx.op.getText(), ctx.right.accept(this));
}
@Override
@@ -194,6 +238,13 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
return new Expr() {
@org.jetbrains.annotations.NotNull
@Override
+ public Class<? extends Object> resolveValueType(
+ @org.jetbrains.annotations.NotNull ClassAnalyzer classAnalyzer) {
+ return classAnalyzer.commonParentOf(aggregate.getResolvedClass(), nextResult.getResolvedClass());
+ }
+
+ @org.jetbrains.annotations.NotNull
+ @Override
public String toReadableString() {
return aggregate.toReadableString() + ' ' + nextResult.toReadableString();
}
@@ -224,40 +275,6 @@ public class ExpressionVisitor extends BindingExpressionBaseVisitor<Expr> {
parameters.add(visit(parameter));
}
}
- return new Expr() {
- @org.jetbrains.annotations.NotNull
- @Override
- public String toJava() {
- StringBuilder sb = new StringBuilder();
- sb.append(expression.toJava())
- .append('.')
- .append(methodName)
- .append('(');
- for (int i = 0; i < parameters.size(); i++) {
- if (i != 0) {
- sb.append(", ");
- }
- sb.append(parameters.get(i).toJava());
- }
- sb.append(')');
- return sb.toString();
- }
-
- @org.jetbrains.annotations.NotNull
- @Override
- public String toReadableString() {
- StringBuilder sb = new StringBuilder();
- sb.append(expression.toReadableString())
- .append('(');
- for (int i = 0; i < parameters.size(); i++) {
- if (i != 0) {
- sb.append(", ");
- }
- sb.append(parameters.get(i).toReadableString());
- }
- sb.append(')');
- return sb.toString();
- }
- };
+ return new MethodCallExpr(expression, methodName, parameters);
}
}
diff --git a/compiler/src/main/kotlin/com/android/databinding/parser/expression_parser.kt b/compiler/src/main/kotlin/com/android/databinding/parser/expression_parser.kt
index 30de0215..f13af57c 100644
--- a/compiler/src/main/kotlin/com/android/databinding/parser/expression_parser.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/parser/expression_parser.kt
@@ -64,7 +64,7 @@ class ExprVisitor(val model : ExprModel) : DataBinderBaseVisitor<Expr>() {
}
override fun visitNilExpr(ctx: DataBinderParser.NilExprContext?): Expr? {
- return SymbolExpr("null")
+ return SymbolExpr("null", javaClass<Any>())
}
override fun visitTernaryExpr(ctx: DataBinderParser.TernaryExprContext): Expr {
@@ -117,10 +117,11 @@ class ExprVisitor(val model : ExprModel) : DataBinderBaseVisitor<Expr>() {
override fun visitHackyStringExpr(ctx: DataBinderParser.HackyStringExprContext): Expr? {
val s = ctx.getText()
- return SymbolExpr("\"${s.substring(1, s.size - 1)}\"");
+ return SymbolExpr("\"${s.substring(1, s.size - 1)}\"", javaClass<String>());
}
override fun visitSymbol(ctx: DataBinderParser.SymbolContext): Expr? {
- return SymbolExpr(ctx.getText())
+ // TODO need to know what this is.
+ return SymbolExpr(ctx.getText(), javaClass<String>())
}
} \ No newline at end of file
diff --git a/compiler/src/main/kotlin/com/android/databinding/parser/expressions.kt b/compiler/src/main/kotlin/com/android/databinding/parser/expressions.kt
index 48713350..5fbd3a49 100644
--- a/compiler/src/main/kotlin/com/android/databinding/parser/expressions.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/parser/expressions.kt
@@ -20,6 +20,7 @@ import kotlin.properties.Delegates
import java.util.HashSet
import com.android.databinding.vo.Variable
import com.android.databinding.util.Log
+import com.android.databinding.util.ClassAnalyzer
public open class ExprModel {
var start : Expr by Delegates.notNull()
@@ -45,6 +46,11 @@ public open class ExprModel {
abstract public class Expr {
// ordered by depth
var referencedVariables = arrayListOf<VariableRef>()
+
+ val resolvedClass by Delegates.lazy {
+ resolveValueType(ClassAnalyzer.instance)
+ }
+
fun setReferencedVariables(refs : Collection<VariableRef>) {
referencedVariables.clear()
refs.groupBy{it.depth}.toSortedMap().forEach { referencedVariables.addAll(it.value)}
@@ -52,6 +58,8 @@ abstract public class Expr {
abstract fun toReadableString() : String
abstract fun toJava() : String
+
+ abstract fun resolveValueType(classAnalyzer : ClassAnalyzer) : Class<*>
}
public class VariableRef(val id : Int, val fullName: String, val parent : VariableRef? = null) {
@@ -66,19 +74,29 @@ public class VariableRef(val id : Int, val fullName: String, val parent : Variab
override fun toString(): String = "VariableRef(id=$id name=$fullName hasParent:${parent != null})"
}
-public data class SymbolExpr(val text : String) : Expr() {
+public data class SymbolExpr(val text : String, val javaType : Class<out Any?>) : Expr() {
override fun toJava(): String = text
override fun toReadableString() = text
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> {
+ return javaType
+ }
}
public data class FieldExpr(val rootVariable : VariableRef, val subVariables : List<VariableRef>) : Expr() {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> =
+ if (subVariables.size == 0) rootVariable.variable.resolvedClass else subVariables.last!!.variable.resolvedClass
+
override fun toJava(): String = if (subVariables.size == 0) rootVariable.variable.localName else subVariables.last!!.variable.localName
override fun toReadableString(): String = if (subVariables.size == 0) rootVariable.fullName else subVariables.last!!.fullName
}
public data class GlobalMethodCallExpr(val methodName : String, val args : List<Expr>) : Expr() {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> {
+ throw UnsupportedOperationException()
+ }
+
override fun toJava(): String {
throw UnsupportedOperationException()
}
@@ -88,6 +106,10 @@ public data class GlobalMethodCallExpr(val methodName : String, val args : List<
}
public data class MethodCallExpr(val owner : Expr, val methodName : String, val args : List<Expr>) : Expr() {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> {
+ val method = classAnalyzer.findMethod(owner.resolvedClass, methodName, args)
+ return method.getReturnType()
+ }
override fun toJava(): String =
"${owner.toJava()}.$methodName(${args.map{it.toJava()}.join(", ")})"
@@ -96,15 +118,37 @@ public data class MethodCallExpr(val owner : Expr, val methodName : String, val
}
public data class TernaryExpr(val predicate : Expr, val ifTrue : Expr, val ifFalse : Expr) : Expr() {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> =
+ classAnalyzer.commonParentOf(ifTrue.resolvedClass, ifFalse.resolvedClass)
+
override fun toJava(): String = "${predicate.toJava()} ? ${ifTrue.toJava()} : ${ifFalse.toJava()}"
override fun toReadableString(): String = "${predicate.toReadableString()} ? ${ifTrue.toReadableString()} : ${ifFalse.toReadableString()}"
}
-public data class OpExpr(val left : Expr, val op : String, val right : Expr) : Expr() {
+public open data class OpExpr(val left : Expr, val op : String, val right : Expr) : Expr() {
override fun toJava(): String = "${left.toJava()} $op ${right.toJava()}"
override fun toReadableString(): String = "${left.toReadableString()} $op ${right.toReadableString()}"
-} \ No newline at end of file
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> {
+ return classAnalyzer.commonParentOf(left.resolvedClass, right.resolvedClass)
+ }
+}
+
+public data class BitShiftOpExpr(left : Expr, op : String, right : Expr) : OpExpr(left, op, right) {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> = left.resolvedClass
+}
+
+public data class BinaryOpExpr(left : Expr, op : String, right : Expr) : OpExpr(left, op, right) {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> = left.resolvedClass
+}
+
+public data class ComparisonOpExpr(left : Expr, op : String, right : Expr) : OpExpr(left, op, right) {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> = javaClass<Boolean>()
+}
+
+public data class AndOrOpExpr(left : Expr, op : String, right : Expr) : OpExpr(left, op, right) {
+ override fun resolveValueType(classAnalyzer: ClassAnalyzer): Class<out Any?> = javaClass<Boolean>()
+}
diff --git a/compiler/src/main/kotlin/com/android/databinding/renderer/view_expr_binder_renderer.kt b/compiler/src/main/kotlin/com/android/databinding/renderer/view_expr_binder_renderer.kt
index 421c04d1..0d05bd53 100644
--- a/compiler/src/main/kotlin/com/android/databinding/renderer/view_expr_binder_renderer.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/renderer/view_expr_binder_renderer.kt
@@ -148,6 +148,7 @@ ${lb.bindingTargets.filter { it.bindings.size > 0 }.map { """
${lb.bindings.map { binding -> """
if ( (dirty & (${binding.isDirtyName})) != 0 ) {
// ${binding.expr.toReadableString()}
+ // resolved type: ${binding.expr.resolvedClass.getCanonicalName()}
${binding.target.resolvedViewName}.${binding.setter}(${binding.expr.toJava()});
}"""}.joinIndented(2)}
}
diff --git a/compiler/src/main/kotlin/com/android/databinding/util/class_analyzer.kt b/compiler/src/main/kotlin/com/android/databinding/util/class_analyzer.kt
index cc2c0819..56ac2644 100644
--- a/compiler/src/main/kotlin/com/android/databinding/util/class_analyzer.kt
+++ b/compiler/src/main/kotlin/com/android/databinding/util/class_analyzer.kt
@@ -21,11 +21,31 @@ import kotlin.properties.Delegates
import com.android.databinding.ext.toCamelCase
import com.android.databinding.util.Log
import java.lang.reflect.Modifier
+import com.android.databinding.parser.Expr
+import java.lang.reflect.Method
+import kotlin.reflect.jvm.*
public fun Class<*>.isObservable() : Boolean = ClassAnalyzer.instance.observable.isAssignableFrom(this)
public fun Class<*>.getCodeName() : String = getName().replace("$", ".")
+public fun Method.canBeCalledWith(name : String, args : List<Class<*>>) : Boolean {
+ // TODO this is dumb, we need arg checking
+ if (name != getName()) {
+ return false
+ }
+ val params = getParameterTypes()
+ if (args.size() != params.size()) {
+ return false
+ }
+ return true
+}
+
+
+public fun Class<*>.findMethodWithAutoCasting(name : String, args : List<Class<*>>) : Method {
+ return getMethods().first { it.canBeCalledWith(name, args) }
+}
+
public fun Class<*>.getMethodOrField(identifier : String) : Pair<String, String> {
val getterName = "get${identifier.toCamelCase()}"
try {
@@ -53,6 +73,29 @@ class ClassAnalyzer(val classLoader : URLClassLoader) {
}
val loadedClasses = hashMapOf<String, Class<*>>()
val observable = loadClass("com.android.databinding.library.Observable");
+ val VOID by Delegates.lazy {
+ loadClass("java.lang.Void")
+ }
+
+ val STRING = javaClass<String>()
+
+ val LONG = javaClass<Long>()
+
+ val INTEGER = javaClass<Integer>()
+
+ val DOUBLE = javaClass<Double>()
+
+ val FLOAT = javaClass<Float>()
+
+ val pLONG = javaClass<kotlin.Long>()
+
+ val pINTEGER = javaClass<kotlin.Int>()
+
+ val pDOUBLE = javaClass<kotlin.Double>()
+
+ val pFLOAT = javaClass<kotlin.Float>()
+
+ private val CLASS_PRIORITY = arrayListOf(STRING, DOUBLE, pDOUBLE, FLOAT, pFLOAT, LONG, pLONG, INTEGER, pINTEGER)
class object {
var instance : ClassAnalyzer by Delegates.notNull()
@@ -74,7 +117,7 @@ class ClassAnalyzer(val classLoader : URLClassLoader) {
if("double".equals(className)) {
return javaClass<kotlin.Double>()
}
- if("boolean".equals(className)) {
+ if("boolean".equals(className) || "bool".equals(className)) {
return javaClass<kotlin.Boolean>()
}
return null
@@ -127,4 +170,24 @@ class ClassAnalyzer(val classLoader : URLClassLoader) {
return loadRecursively("${klassName.substring(0, lastIndexOfDot)}\$${klassName.substring(lastIndexOfDot + 1)}")
}
}
+
+ fun findMethod(klass: Class<out Any?>, methodName: String, args: List<Expr>): Method {
+ val argClasses = args.map { it.resolvedClass }
+
+ try {
+ return klass.findMethodWithAutoCasting(methodName, argClasses)
+ } catch(t:Throwable) {
+ val msg = "Could not find method with name $methodName and args $args as converted to ${argClasses.map { it }.joinToString(",")}"
+ Log.d(msg)
+ throw RuntimeException(msg)
+ }
+ }
+
+ fun commonParentOf(klass1 : Class<*>, klass2 : Class<*>): Class<*> {
+ val clazz = CLASS_PRIORITY.firstOrNull { klass1 == it || klass2 == it }
+ if (clazz == null) {
+ throw RuntimeException("cannot find common parent for $klass1 and $klass2")
+ }
+ return clazz
+ }
} \ No newline at end of file
diff --git a/grammerBuilder/BindingExpression.g4 b/grammerBuilder/BindingExpression.g4
index 723f13b1..b329faa5 100644
--- a/grammerBuilder/BindingExpression.g4
+++ b/grammerBuilder/BindingExpression.g4
@@ -40,19 +40,19 @@ expression
| '(' type ')' expression # CastOp
| ('+'|'-') expression # UnaryOp
| ('~'|'!') expression # UnaryOp
- | expression ('*'|'/'|'%') expression # BinaryOp
- | expression ('+'|'-') expression # BinaryOp
- | expression ('<<' | '>>>' | '>>') expression # BinaryOp
- | expression ('<=' | '>=' | '>' | '<') expression # BinaryOp
+ | left=expression op=('*'|'/'|'%') right=expression # MathOp
+ | left=expression op=('+'|'-') right=expression # MathOp
+ | left=expression op=('<<' | '>>>' | '>>') right=expression # BitShiftOp
+ | left=expression op=('<=' | '>=' | '>' | '<') right=expression # ComparisonOp
| expression 'instanceof' type # InstanceOfOp
- | expression ('==' | '!=') expression # BinaryOp
- | expression '&' expression # BinaryOp
- | expression '^' expression # BinaryOp
- | expression '|' expression # BinaryOp
- | expression '&&' expression # BinaryOp
- | expression '||' expression # BinaryOp
- | expression '?' expression ':' expression # TernaryOp
- | expression '??' expression # QuestionQuestionOp
+ | left=expression op=('==' | '!=') right=expression # ComparisonOp
+ | left=expression op='&' right=expression # BinaryOp
+ | left=expression op='^' right=expression # BinaryOp
+ | left=expression op='|' right=expression # BinaryOp
+ | left=expression op='&&' right=expression # AndOrOp
+ | left=expression op='||' right=expression # AndOrOp
+ | left=expression op='?' iftrue=expression ':' iffalse=expression # TernaryOp
+ | left=expression op='??' right=expression # QuestionQuestionOp
;
THIS
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java
index b683c655..ed390b47 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseListener.java
@@ -44,39 +44,39 @@ public class BindingExpressionBaseListener implements BindingExpressionListener
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterCastOp(@NotNull BindingExpressionParser.CastOpContext ctx) { }
+ @Override public void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx) { }
+ @Override public void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
+ @Override public void enterCastOp(@NotNull BindingExpressionParser.CastOpContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { }
+ @Override public void exitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { }
+ @Override public void enterAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { }
+ @Override public void exitAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx) { }
/**
* {@inheritDoc}
@@ -96,6 +96,19 @@ public class BindingExpressionBaseListener implements BindingExpressionListener
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { }
/**
* {@inheritDoc}
@@ -161,6 +174,19 @@ public class BindingExpressionBaseListener implements BindingExpressionListener
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterTernaryOp(@NotNull BindingExpressionParser.TernaryOpContext ctx) { }
/**
* {@inheritDoc}
@@ -213,6 +239,19 @@ public class BindingExpressionBaseListener implements BindingExpressionListener
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterBitShiftOp(@NotNull BindingExpressionParser.BitShiftOpContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitBitShiftOp(@NotNull BindingExpressionParser.BitShiftOpContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterInstanceOfOp(@NotNull BindingExpressionParser.InstanceOfOpContext ctx) { }
/**
* {@inheritDoc}
@@ -317,6 +356,19 @@ public class BindingExpressionBaseListener implements BindingExpressionListener
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterClassExtraction(@NotNull BindingExpressionParser.ClassExtractionContext ctx) { }
/**
* {@inheritDoc}
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java
index c13b41ff..aa91ac9c 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionBaseVisitor.java
@@ -35,7 +35,7 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx) { return visitChildren(ctx); }
+ @Override public Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
@@ -43,7 +43,7 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx) { return visitChildren(ctx); }
+ @Override public Result visitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
@@ -51,7 +51,7 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
- @Override public Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { return visitChildren(ctx); }
+ @Override public Result visitAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
@@ -67,6 +67,14 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
+ @Override public Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx) { return visitChildren(ctx); }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.</p>
+ */
@Override public Result visitClassOrInterfaceType(@NotNull BindingExpressionParser.ClassOrInterfaceTypeContext ctx) { return visitChildren(ctx); }
/**
@@ -107,6 +115,14 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
+ @Override public Result visitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx) { return visitChildren(ctx); }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.</p>
+ */
@Override public Result visitTernaryOp(@NotNull BindingExpressionParser.TernaryOpContext ctx) { return visitChildren(ctx); }
/**
@@ -139,6 +155,14 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
+ @Override public Result visitBitShiftOp(@NotNull BindingExpressionParser.BitShiftOpContext ctx) { return visitChildren(ctx); }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.</p>
+ */
@Override public Result visitInstanceOfOp(@NotNull BindingExpressionParser.InstanceOfOpContext ctx) { return visitChildren(ctx); }
/**
@@ -203,6 +227,14 @@ public class BindingExpressionBaseVisitor<Result> extends AbstractParseTreeVisit
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
+ @Override public Result visitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx) { return visitChildren(ctx); }
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.</p>
+ */
@Override public Result visitClassExtraction(@NotNull BindingExpressionParser.ClassExtractionContext ctx) { return visitChildren(ctx); }
/**
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java
index d3d1dbda..0b4c24a0 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionListener.java
@@ -34,43 +34,43 @@ public interface BindingExpressionListener extends ParseTreeListener {
void exitBracketOp(@NotNull BindingExpressionParser.BracketOpContext ctx);
/**
- * Enter a parse tree produced by the {@code CastOp}
+ * Enter a parse tree produced by the {@code UnaryOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
*/
- void enterCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
+ void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
/**
- * Exit a parse tree produced by the {@code CastOp}
+ * Exit a parse tree produced by the {@code UnaryOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
*/
- void exitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
+ void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
/**
- * Enter a parse tree produced by the {@code UnaryOp}
+ * Enter a parse tree produced by the {@code CastOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
*/
- void enterUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
+ void enterCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
/**
- * Exit a parse tree produced by the {@code UnaryOp}
+ * Exit a parse tree produced by the {@code CastOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
*/
- void exitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
+ void exitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
/**
- * Enter a parse tree produced by the {@code MethodInvocation}
+ * Enter a parse tree produced by the {@code AndOrOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
*/
- void enterMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
+ void enterAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx);
/**
- * Exit a parse tree produced by the {@code MethodInvocation}
+ * Exit a parse tree produced by the {@code AndOrOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
*/
- void exitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
+ void exitAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx);
/**
* Enter a parse tree produced by {@link BindingExpressionParser#expressionList}.
@@ -84,6 +84,19 @@ public interface BindingExpressionListener extends ParseTreeListener {
void exitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
/**
+ * Enter a parse tree produced by the {@code MethodInvocation}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void enterMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code MethodInvocation}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void exitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
+
+ /**
* Enter a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
* @param ctx the parse tree
*/
@@ -141,6 +154,19 @@ public interface BindingExpressionListener extends ParseTreeListener {
void exitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
/**
+ * Enter a parse tree produced by the {@code ComparisonOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void enterComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code ComparisonOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void exitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
+
+ /**
* Enter a parse tree produced by the {@code TernaryOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -189,6 +215,19 @@ public interface BindingExpressionListener extends ParseTreeListener {
void exitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
/**
+ * Enter a parse tree produced by the {@code BitShiftOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void enterBitShiftOp(@NotNull BindingExpressionParser.BitShiftOpContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code BitShiftOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void exitBitShiftOp(@NotNull BindingExpressionParser.BitShiftOpContext ctx);
+
+ /**
* Enter a parse tree produced by the {@code InstanceOfOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -289,6 +328,19 @@ public interface BindingExpressionListener extends ParseTreeListener {
void exitGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx);
/**
+ * Enter a parse tree produced by the {@code MathOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void enterMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code MathOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ */
+ void exitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+
+ /**
* Enter a parse tree produced by {@link BindingExpressionParser#classExtraction}.
* @param ctx the parse tree
*/
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java
index c20a7ba1..4d328371 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionParser.java
@@ -352,22 +352,20 @@ public class BindingExpressionParser extends Parser {
else return visitor.visitChildren(this);
}
}
- public static class UnaryOpContext extends ExpressionContext {
- public ExpressionContext expression() {
- return getRuleContext(ExpressionContext.class,0);
- }
- public UnaryOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+ public static class ResourceContext extends ExpressionContext {
+ public TerminalNode ResourceReference() { return getToken(BindingExpressionParser.ResourceReference, 0); }
+ public ResourceContext(ExpressionContext ctx) { copyFrom(ctx); }
@Override
public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterUnaryOp(this);
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterResource(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitUnaryOp(this);
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitResource(this);
}
@Override
public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
- if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitUnaryOp(this);
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitResource(this);
else return visitor.visitChildren(this);
}
}
@@ -393,20 +391,47 @@ public class BindingExpressionParser extends Parser {
else return visitor.visitChildren(this);
}
}
- public static class ResourceContext extends ExpressionContext {
- public TerminalNode ResourceReference() { return getToken(BindingExpressionParser.ResourceReference, 0); }
- public ResourceContext(ExpressionContext ctx) { copyFrom(ctx); }
+ public static class UnaryOpContext extends ExpressionContext {
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public UnaryOpContext(ExpressionContext ctx) { copyFrom(ctx); }
@Override
public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterResource(this);
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterUnaryOp(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitResource(this);
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitUnaryOp(this);
}
@Override
public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
- if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitResource(this);
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitUnaryOp(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class AndOrOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext right;
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public List<? extends ExpressionContext> expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public AndOrOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterAndOrOp(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitAndOrOp(this);
+ }
+ @Override
+ public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitAndOrOp(this);
else return visitor.visitChildren(this);
}
}
@@ -500,6 +525,10 @@ public class BindingExpressionParser extends Parser {
}
}
public static class TernaryOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext iftrue;
+ public ExpressionContext iffalse;
public ExpressionContext expression(int i) {
return getRuleContext(ExpressionContext.class,i);
}
@@ -521,6 +550,56 @@ public class BindingExpressionParser extends Parser {
else return visitor.visitChildren(this);
}
}
+ public static class ComparisonOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext right;
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public List<? extends ExpressionContext> expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ComparisonOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterComparisonOp(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitComparisonOp(this);
+ }
+ @Override
+ public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitComparisonOp(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+ public static class MathOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext right;
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public List<? extends ExpressionContext> expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public MathOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterMathOp(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitMathOp(this);
+ }
+ @Override
+ public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitMathOp(this);
+ else return visitor.visitChildren(this);
+ }
+ }
public static class DotOpContext extends ExpressionContext {
public TerminalNode Identifier() { return getToken(BindingExpressionParser.Identifier, 0); }
public ExpressionContext expression() {
@@ -566,7 +645,35 @@ public class BindingExpressionParser extends Parser {
else return visitor.visitChildren(this);
}
}
+ public static class BitShiftOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext right;
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public List<? extends ExpressionContext> expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public BitShiftOpContext(ExpressionContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).enterBitShiftOp(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof BindingExpressionListener ) ((BindingExpressionListener)listener).exitBitShiftOp(this);
+ }
+ @Override
+ public <Result> Result accept(ParseTreeVisitor<? extends Result> visitor) {
+ if ( visitor instanceof BindingExpressionVisitor<?> ) return ((BindingExpressionVisitor<? extends Result>)visitor).visitBitShiftOp(this);
+ else return visitor.visitChildren(this);
+ }
+ }
public static class QuestionQuestionOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext right;
public ExpressionContext expression(int i) {
return getRuleContext(ExpressionContext.class,i);
}
@@ -611,6 +718,9 @@ public class BindingExpressionParser extends Parser {
}
}
public static class BinaryOpContext extends ExpressionContext {
+ public ExpressionContext left;
+ public Token op;
+ public ExpressionContext right;
public ExpressionContext expression(int i) {
return getRuleContext(ExpressionContext.class,i);
}
@@ -780,160 +890,177 @@ public class BindingExpressionParser extends Parser {
switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new MathOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((MathOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(87);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
setState(88);
+ ((MathOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__18) | (1L << T__7))) != 0)) ) {
- _errHandler.recoverInline(this);
+ ((MathOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(89); expression(14);
+ setState(89); ((MathOpContext)_localctx).right = expression(14);
}
break;
case 2:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new MathOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((MathOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(90);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
setState(91);
+ ((MathOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__33 || _la==T__13) ) {
- _errHandler.recoverInline(this);
+ ((MathOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(92); expression(13);
+ setState(92); ((MathOpContext)_localctx).right = expression(13);
}
break;
case 3:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new BitShiftOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((BitShiftOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(93);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
setState(94);
+ ((BitShiftOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__41) | (1L << T__25) | (1L << T__20))) != 0)) ) {
- _errHandler.recoverInline(this);
+ ((BitShiftOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(95); expression(12);
+ setState(95); ((BitShiftOpContext)_localctx).right = expression(12);
}
break;
case 4:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new ComparisonOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((ComparisonOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(96);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
setState(97);
+ ((ComparisonOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__30) | (1L << T__27) | (1L << T__9) | (1L << T__4))) != 0)) ) {
- _errHandler.recoverInline(this);
+ ((ComparisonOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(98); expression(11);
+ setState(98); ((ComparisonOpContext)_localctx).right = expression(11);
}
break;
case 5:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new ComparisonOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((ComparisonOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(99);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
setState(100);
+ ((ComparisonOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__28 || _la==T__6) ) {
- _errHandler.recoverInline(this);
+ ((ComparisonOpContext)_localctx).op = _errHandler.recoverInline(this);
}
consume();
- setState(101); expression(9);
+ setState(101); ((ComparisonOpContext)_localctx).right = expression(9);
}
break;
case 6:
{
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(102);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(103); match(T__38);
- setState(104); expression(8);
+ setState(103); ((BinaryOpContext)_localctx).op = match(T__38);
+ setState(104); ((BinaryOpContext)_localctx).right = expression(8);
}
break;
case 7:
{
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(105);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(106); match(T__17);
- setState(107); expression(7);
+ setState(106); ((BinaryOpContext)_localctx).op = match(T__17);
+ setState(107); ((BinaryOpContext)_localctx).right = expression(7);
}
break;
case 8:
{
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(108);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(109); match(T__2);
- setState(110); expression(6);
+ setState(109); ((BinaryOpContext)_localctx).op = match(T__2);
+ setState(110); ((BinaryOpContext)_localctx).right = expression(6);
}
break;
case 9:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new AndOrOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((AndOrOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(111);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(112); match(T__11);
- setState(113); expression(5);
+ setState(112); ((AndOrOpContext)_localctx).op = match(T__11);
+ setState(113); ((AndOrOpContext)_localctx).right = expression(5);
}
break;
case 10:
{
- _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ _localctx = new AndOrOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((AndOrOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(114);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(115); match(T__10);
- setState(116); expression(4);
+ setState(115); ((AndOrOpContext)_localctx).op = match(T__10);
+ setState(116); ((AndOrOpContext)_localctx).right = expression(4);
}
break;
case 11:
{
_localctx = new TernaryOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((TernaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(117);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(118); match(T__26);
- setState(119); expression(0);
+ setState(118); ((TernaryOpContext)_localctx).op = match(T__26);
+ setState(119); ((TernaryOpContext)_localctx).iftrue = expression(0);
setState(120); match(T__31);
- setState(121); expression(3);
+ setState(121); ((TernaryOpContext)_localctx).iffalse = expression(3);
}
break;
case 12:
{
_localctx = new QuestionQuestionOpContext(new ExpressionContext(_parentctx, _parentState));
+ ((QuestionQuestionOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(123);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(124); match(T__8);
- setState(125); expression(2);
+ setState(124); ((QuestionQuestionOpContext)_localctx).op = match(T__8);
+ setState(125); ((QuestionQuestionOpContext)_localctx).right = expression(2);
}
break;
diff --git a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java
index f4beb0fb..70fb7d0f 100644
--- a/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java
+++ b/grammerBuilder/src/main/java-gen/com/android/databinding/BindingExpressionVisitor.java
@@ -28,28 +28,28 @@ public interface BindingExpressionVisitor<Result> extends ParseTreeVisitor<Resul
Result visitBracketOp(@NotNull BindingExpressionParser.BracketOpContext ctx);
/**
- * Visit a parse tree produced by the {@code CastOp}
+ * Visit a parse tree produced by the {@code UnaryOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
* @return the visitor result
*/
- Result visitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
+ Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
/**
- * Visit a parse tree produced by the {@code UnaryOp}
+ * Visit a parse tree produced by the {@code CastOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
* @return the visitor result
*/
- Result visitUnaryOp(@NotNull BindingExpressionParser.UnaryOpContext ctx);
+ Result visitCastOp(@NotNull BindingExpressionParser.CastOpContext ctx);
/**
- * Visit a parse tree produced by the {@code MethodInvocation}
+ * Visit a parse tree produced by the {@code AndOrOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
* @return the visitor result
*/
- Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
+ Result visitAndOrOp(@NotNull BindingExpressionParser.AndOrOpContext ctx);
/**
* Visit a parse tree produced by {@link BindingExpressionParser#expressionList}.
@@ -59,6 +59,14 @@ public interface BindingExpressionVisitor<Result> extends ParseTreeVisitor<Resul
Result visitExpressionList(@NotNull BindingExpressionParser.ExpressionListContext ctx);
/**
+ * Visit a parse tree produced by the {@code MethodInvocation}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ Result visitMethodInvocation(@NotNull BindingExpressionParser.MethodInvocationContext ctx);
+
+ /**
* Visit a parse tree produced by {@link BindingExpressionParser#classOrInterfaceType}.
* @param ctx the parse tree
* @return the visitor result
@@ -95,6 +103,14 @@ public interface BindingExpressionVisitor<Result> extends ParseTreeVisitor<Resul
Result visitBindingSyntax(@NotNull BindingExpressionParser.BindingSyntaxContext ctx);
/**
+ * Visit a parse tree produced by the {@code ComparisonOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ Result visitComparisonOp(@NotNull BindingExpressionParser.ComparisonOpContext ctx);
+
+ /**
* Visit a parse tree produced by the {@code TernaryOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -125,6 +141,14 @@ public interface BindingExpressionVisitor<Result> extends ParseTreeVisitor<Resul
Result visitDefaults(@NotNull BindingExpressionParser.DefaultsContext ctx);
/**
+ * Visit a parse tree produced by the {@code BitShiftOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ Result visitBitShiftOp(@NotNull BindingExpressionParser.BitShiftOpContext ctx);
+
+ /**
* Visit a parse tree produced by the {@code InstanceOfOp}
* labeled alternative in {@link BindingExpressionParser#expression}.
* @param ctx the parse tree
@@ -187,6 +211,14 @@ public interface BindingExpressionVisitor<Result> extends ParseTreeVisitor<Resul
Result visitGenericCall(@NotNull BindingExpressionParser.GenericCallContext ctx);
/**
+ * Visit a parse tree produced by the {@code MathOp}
+ * labeled alternative in {@link BindingExpressionParser#expression}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ Result visitMathOp(@NotNull BindingExpressionParser.MathOpContext ctx);
+
+ /**
* Visit a parse tree produced by {@link BindingExpressionParser#classExtraction}.
* @param ctx the parse tree
* @return the visitor result