android.databinding.tool.expr
Class Expr

java.lang.Object
  extended by android.databinding.tool.expr.Expr
All Implemented Interfaces:
VersionProvider, android.databinding.tool.processing.scopes.LocationScopeProvider, android.databinding.tool.processing.scopes.ScopeProvider
Direct Known Subclasses:
ArgListExpr, BitShiftExpr, BracketExpr, CastExpr, ComparisonExpr, FieldAccessExpr, GroupExpr, IdentifierExpr, InstanceOfExpr, ListenerExpr, MathExpr, MethodCallExpr, ResourceExpr, SymbolExpr, TernaryExpr, TwoWayListenerExpr, UnaryExpr

public abstract class Expr
extends java.lang.Object
implements VersionProvider, android.databinding.tool.processing.scopes.LocationScopeProvider


Field Summary
protected static java.lang.String KEY_JOIN
           
protected  java.util.List<Expr> mChildren
           
static int NO_ID
           
 
Method Summary
 void addLocation(android.databinding.tool.store.Location location)
           
protected  java.lang.String addTwoWay(java.lang.String uniqueKey)
           
protected  java.lang.String asPackage()
           
 void assertIsInvertible()
           
 boolean canBeEvaluatedToAVariable()
           
 boolean canBeInvalidated()
           
protected  java.lang.String computeChildrenKey()
           
protected  java.lang.String computeUniqueKey()
           
 boolean considerElevatingConditionals(Expr justRead)
           
protected abstract  java.util.List<Dependency> constructDependencies()
           
protected  java.util.List<Dependency> constructDynamicChildrenDependencies()
          Creates a dependency for each dynamic child.
 void enableDirectInvalidation()
           
protected abstract  android.databinding.tool.writer.KCode generateCode(boolean expand)
           
protected  android.databinding.tool.expr.Expr.Node getAllCalculationPaths()
          All flag paths that will result in calculation of this expression.
 java.util.List<Expr> getChildren()
           
 java.lang.String getDefaultValue()
           
 java.util.List<Dependency> getDependants()
           
 java.util.List<Dependency> getDependencies()
           
 int getId()
           
 java.util.BitSet getInvalidFlags()
           
protected abstract  java.lang.String getInvertibleError()
           
 java.util.List<android.databinding.tool.store.Location> getLocations()
           
 ExprModel getModel()
           
 java.util.List<Expr> getParents()
           
protected  java.util.BitSet getPredicateInvalidFlags()
           
 java.util.BitSet getReadSoFar()
           
 int getRequirementFlagIndex(boolean expectedOutput)
          This is called w/ a dependency of mine.
 int getRequirementId()
           
 ModelClass getResolvedType()
           
 java.util.BitSet getShouldReadFlags()
           
 java.util.BitSet getShouldReadFlagsWithConditionals()
           
 java.lang.String getUniqueKey()
          Returns a unique string key that can identify this expression.
 int getVersion()
           
 boolean hasConditionalDependant()
          This expression is the predicate for 1 or more ternary expressions.
 boolean hasId()
           
 boolean hasNestedCannotRead()
           
 void invalidateReadFlags()
           
 boolean isBindingExpression()
           
 boolean isConditional()
           
 boolean isDynamic()
          Whether the result of this expression can change or not.
 boolean isEqualityCheck()
           
 boolean isObservable()
           
 boolean isRead()
           
 boolean isTwoWay()
           
 boolean isUsed()
           
protected static java.lang.String join(java.util.List<Expr> items)
           
protected static java.lang.String join(java.lang.String... items)
           
 boolean markAsReadIfDone()
           
 void markFlagsAsRead(java.util.BitSet flags)
           
 void onSwappedWith(Expr existing)
           
 java.util.List<android.databinding.tool.store.Location> provideScopeLocation()
           
protected  void resetResolvedType()
           
 Expr resolveListeners(ModelClass valueType, Expr parent)
           
 Expr resolveTwoWayExpressions(Expr parent)
           
protected abstract  ModelClass resolveType(ModelAnalyzer modelAnalyzer)
           
 void setBindingExpression(boolean isBindingExpression)
           
 void setId(int id)
           
 void setIsUsed(boolean isUsed)
           
 void setModel(ExprModel model)
           
 void setRequirementId(int requirementId)
           
 void setTwoWay(boolean isTwoWay)
           
 boolean shouldReadNow(java.util.List<Expr> justRead)
          Used by code generation
 android.databinding.tool.writer.KCode toCode()
           
protected  android.databinding.tool.writer.KCode toCode(boolean expand)
           
 android.databinding.tool.writer.KCode toFullCode()
           
 android.databinding.tool.writer.KCode toInverseCode(android.databinding.tool.writer.KCode value)
           
 java.lang.String toString()
           
 void trimShouldReadFlags(java.util.BitSet bitSet)
           
 void updateExpr(ModelAnalyzer modelAnalyzer)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NO_ID

public static final int NO_ID
See Also:
Constant Field Values

mChildren

protected java.util.List<Expr> mChildren

KEY_JOIN

protected static final java.lang.String KEY_JOIN
See Also:
Constant Field Values
Method Detail

getId

public int getId()

setId

public void setId(int id)

addLocation

public void addLocation(android.databinding.tool.store.Location location)

getLocations

public java.util.List<android.databinding.tool.store.Location> getLocations()

getModel

public ExprModel getModel()

getInvalidFlags

public java.util.BitSet getInvalidFlags()

setBindingExpression

public void setBindingExpression(boolean isBindingExpression)

isBindingExpression

public boolean isBindingExpression()

canBeEvaluatedToAVariable

public boolean canBeEvaluatedToAVariable()

isObservable

public boolean isObservable()

resolveListeners

public Expr resolveListeners(ModelClass valueType,
                             Expr parent)

resolveTwoWayExpressions

public Expr resolveTwoWayExpressions(Expr parent)

resetResolvedType

protected void resetResolvedType()

getShouldReadFlags

public java.util.BitSet getShouldReadFlags()

getShouldReadFlagsWithConditionals

public java.util.BitSet getShouldReadFlagsWithConditionals()

setModel

public void setModel(ExprModel model)

setTwoWay

public void setTwoWay(boolean isTwoWay)

isTwoWay

public boolean isTwoWay()

addTwoWay

protected java.lang.String addTwoWay(java.lang.String uniqueKey)

onSwappedWith

public void onSwappedWith(Expr existing)

getChildren

public java.util.List<Expr> getChildren()

getParents

public java.util.List<Expr> getParents()

isDynamic

public boolean isDynamic()
Whether the result of this expression can change or not. For example, 3 + 5 can not change vs 3 + x may change. Default implementations checks children and returns true if any of them returns true

Returns:
True if the result of this expression may change due to variables

getResolvedType

public ModelClass getResolvedType()

resolveType

protected abstract ModelClass resolveType(ModelAnalyzer modelAnalyzer)

constructDependencies

protected abstract java.util.List<Dependency> constructDependencies()

constructDynamicChildrenDependencies

protected java.util.List<Dependency> constructDynamicChildrenDependencies()
Creates a dependency for each dynamic child. Should work for any expression besides conditionals.


getDependencies

public final java.util.List<Dependency> getDependencies()

getDependants

public java.util.List<Dependency> getDependants()

getUniqueKey

public final java.lang.String getUniqueKey()
Returns a unique string key that can identify this expression. It must take into account any dependencies

Returns:
A unique identifier for this expression

computeUniqueKey

protected java.lang.String computeUniqueKey()

computeChildrenKey

protected final java.lang.String computeChildrenKey()

enableDirectInvalidation

public void enableDirectInvalidation()

canBeInvalidated

public boolean canBeInvalidated()

trimShouldReadFlags

public void trimShouldReadFlags(java.util.BitSet bitSet)

isConditional

public boolean isConditional()

getRequirementId

public int getRequirementId()

setRequirementId

public void setRequirementId(int requirementId)

getRequirementFlagIndex

public int getRequirementFlagIndex(boolean expectedOutput)
This is called w/ a dependency of mine. Base method should thr


hasId

public boolean hasId()

markFlagsAsRead

public void markFlagsAsRead(java.util.BitSet flags)

isRead

public boolean isRead()

considerElevatingConditionals

public boolean considerElevatingConditionals(Expr justRead)

invalidateReadFlags

public void invalidateReadFlags()

getVersion

public int getVersion()
Specified by:
getVersion in interface VersionProvider

hasNestedCannotRead

public boolean hasNestedCannotRead()

markAsReadIfDone

public boolean markAsReadIfDone()

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

getReadSoFar

public java.util.BitSet getReadSoFar()

getAllCalculationPaths

protected android.databinding.tool.expr.Expr.Node getAllCalculationPaths()
All flag paths that will result in calculation of this expression.


getDefaultValue

public java.lang.String getDefaultValue()

getPredicateInvalidFlags

protected java.util.BitSet getPredicateInvalidFlags()

shouldReadNow

public boolean shouldReadNow(java.util.List<Expr> justRead)
Used by code generation


isEqualityCheck

public boolean isEqualityCheck()

setIsUsed

public void setIsUsed(boolean isUsed)

isUsed

public boolean isUsed()

updateExpr

public void updateExpr(ModelAnalyzer modelAnalyzer)

join

protected static java.lang.String join(java.lang.String... items)

join

protected static java.lang.String join(java.util.List<Expr> items)

asPackage

protected java.lang.String asPackage()

provideScopeLocation

public java.util.List<android.databinding.tool.store.Location> provideScopeLocation()
Specified by:
provideScopeLocation in interface android.databinding.tool.processing.scopes.LocationScopeProvider

toCode

public android.databinding.tool.writer.KCode toCode()

toCode

protected android.databinding.tool.writer.KCode toCode(boolean expand)

toFullCode

public android.databinding.tool.writer.KCode toFullCode()

generateCode

protected abstract android.databinding.tool.writer.KCode generateCode(boolean expand)

toInverseCode

public android.databinding.tool.writer.KCode toInverseCode(android.databinding.tool.writer.KCode value)

assertIsInvertible

public void assertIsInvertible()

getInvertibleError

protected abstract java.lang.String getInvertibleError()
Returns:
The reason the expression wasn't invertible or null if it was invertible.

hasConditionalDependant

public boolean hasConditionalDependant()
This expression is the predicate for 1 or more ternary expressions.