Package android.databinding.tool.expr
Class Expr
- java.lang.Object
-
- android.databinding.tool.expr.Expr
-
- All Implemented Interfaces:
android.databinding.tool.expr.VersionProvider,android.databinding.tool.processing.scopes.LocationScopeProvider,android.databinding.tool.processing.scopes.ScopeProvider
- Direct Known Subclasses:
ArgListExpr,BitShiftExpr,BracketExpr,CastExpr,ComparisonExpr,FieldAssignmentExpr,IdentifierExpr,InstanceOfExpr,LambdaExpr,ListenerExpr,MathExpr,MethodBaseExpr,MethodCallExpr,ResourceExpr,SymbolExpr,TernaryExpr,TwoWayListenerExpr,UnaryExpr
public abstract class Expr extends java.lang.Object implements android.databinding.tool.expr.VersionProvider, android.databinding.tool.processing.scopes.LocationScopeProvider
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.StringKEY_ENDprotected static java.lang.StringKEY_JOINprotected static java.lang.StringKEY_JOIN_ENDprotected static java.lang.StringKEY_JOIN_STARTprotected static java.lang.StringKEY_STARTprotected java.util.List<Expr>mChildrenstatic intNO_ID
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected java.util.List<ExecutionPath>addJustMeToExecutionPath(java.util.List<ExecutionPath> paths)voidaddLocation(android.databinding.tool.store.Location location)protected java.lang.StringasPackage()voidassertIsInvertible()booleancanBeEvaluatedToAVariable()booleancanBeInvalidated()abstract ExprcloneToModel(ExprModel model)protected static java.util.List<Expr>cloneToModel(ExprModel model, java.util.List<Expr> exprs)protected abstract java.lang.StringcomputeUniqueKey()booleanconsiderElevatingConditionals(Expr justRead)protected abstract java.util.List<Dependency>constructDependencies()protected java.util.List<Dependency>constructDynamicChildrenDependencies()Creates a dependency for each dynamic child.voidenableDirectInvalidation()protected abstract android.databinding.tool.writer.KCodegenerateCode()ExprgenerateInverse(ExprModel model, Expr value, java.lang.String bindingClassName)protected android.databinding.tool.expr.Expr.NodegetAllCalculationPaths()All flag paths that will result in calculation of this expression.java.util.List<Expr>getChildren()java.lang.StringgetDefaultValue()java.util.List<Dependency>getDependants()java.util.List<Dependency>getDependencies()intgetId()java.util.BitSetgetInvalidFlags()protected abstract java.lang.StringgetInvertibleError()java.util.List<android.databinding.tool.store.Location>getLocations()ExprModelgetModel()java.util.List<Expr>getParents()protected java.util.BitSetgetPredicateInvalidFlags()java.util.BitSetgetReadSoFar()intgetRequirementFlagIndex(boolean expectedOutput)This is called w/ a dependency of mine.intgetRequirementId()android.databinding.tool.reflection.ModelClassgetResolvedType()java.util.BitSetgetShouldReadFlags()java.util.BitSetgetShouldReadFlagsWithConditionals()java.lang.StringgetUniqueKey()Returns a unique string key that can identify this expression.java.lang.StringgetUpdateRegistrationCall(int id, java.lang.String value)intgetVersion()booleanhasConditionalDependant()This expression is the predicate for 1 or more ternary expressions.booleanhasId()booleanhasNestedCannotRead()protected abstract voidinjectSafeUnboxing(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer, ExprModel model)Called after experiment model is sealed to avoid NPE problems caused by boxed primitives.voidinvalidateReadFlags()booleanisBindingExpression()booleanisConditional()booleanisDynamic()Whether the result of this expression can change or not.booleanisEqualityCheck()booleanisIsUsedInCallback()booleanisObservable()booleanisRead()booleanisUsed()protected static java.lang.Stringjoin(java.lang.Object... vals)protected static java.lang.Stringjoin(java.util.List<?> vals)voidmarkAsBindingExpression()booleanmarkAsReadIfDone()voidmarkAsUsed()voidmarkAsUsedInCallback()voidmarkFlagsAsRead(java.util.BitSet flags)voidonSwappedWith(Expr existing)java.util.List<android.databinding.tool.store.Location>provideScopeLocation()booleanrecursivelyInjectSafeUnboxing(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer, ExprModel model)protected voidresetResolvedType()ExprresolveListeners(android.databinding.tool.reflection.ModelClass valueType, Expr parent)ExprresolveTwoWayExpressions(Expr parent)protected abstract android.databinding.tool.reflection.ModelClassresolveType(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer)voidsafeUnboxChild(ExprModel model, Expr child)Tries to create a safe unbox method for the given expression.voidsetId(int id)voidsetModel(ExprModel model)voidsetRequirementId(int requirementId)voidsetUnwrapObservableFields(boolean unwrapObservableFields)booleanshouldReadNow(java.util.List<Expr> justRead)Used by code generationandroid.databinding.tool.writer.KCodetoCode()java.util.List<ExecutionPath>toExecutionPath(ExecutionPath path)java.util.List<ExecutionPath>toExecutionPath(java.util.List<ExecutionPath> paths)protected java.util.List<ExecutionPath>toExecutionPathInOrder(java.util.List<ExecutionPath> paths, Expr... order)protected java.util.List<ExecutionPath>toExecutionPathInOrder(java.util.List<ExecutionPath> paths, java.util.List<Expr> order)android.databinding.tool.writer.KCodetoFullCode()java.lang.StringtoString()voidtrimShouldReadFlags(java.util.BitSet bitSet)protected voidunwrapChildTo(int childIndex, android.databinding.tool.reflection.ModelClass type)Unwraps an observable field for a specific child.ExprunwrapObservableField()protected voidunwrapObservableFieldChildren()Iterates through all children and expands all ObservableFields to call "get()" on them instead.voidupdateExpr(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer)
-
-
-
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
-
KEY_JOIN_START
protected static final java.lang.String KEY_JOIN_START
- See Also:
- Constant Field Values
-
KEY_JOIN_END
protected static final java.lang.String KEY_JOIN_END
- See Also:
- Constant Field Values
-
KEY_START
protected static final java.lang.String KEY_START
- See Also:
- Constant Field Values
-
KEY_END
protected static final java.lang.String KEY_END
- 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()
-
markAsBindingExpression
public void markAsBindingExpression()
-
isBindingExpression
public boolean isBindingExpression()
-
canBeEvaluatedToAVariable
public boolean canBeEvaluatedToAVariable()
-
isObservable
public boolean isObservable()
-
getUpdateRegistrationCall
public java.lang.String getUpdateRegistrationCall(int id, java.lang.String value)
-
setUnwrapObservableFields
public void setUnwrapObservableFields(boolean unwrapObservableFields)
-
resolveListeners
public Expr resolveListeners(android.databinding.tool.reflection.ModelClass valueType, Expr parent)
-
safeUnboxChild
public void safeUnboxChild(ExprModel model, Expr child)
Tries to create a safe unbox method for the given expression.Sometimes, the child might be just any object (especially returned from bracket expressions where any value type might be unknown). In this case, child stays instact.
- Parameters:
model- ExprModelchild- The child that will be replaced with a safe unbox call.
-
resetResolvedType
protected void resetResolvedType()
-
getShouldReadFlags
public java.util.BitSet getShouldReadFlags()
-
getShouldReadFlagsWithConditionals
public java.util.BitSet getShouldReadFlagsWithConditionals()
-
setModel
public void setModel(ExprModel model)
-
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 final android.databinding.tool.reflection.ModelClass getResolvedType()
-
toExecutionPath
public final java.util.List<ExecutionPath> toExecutionPath(ExecutionPath path)
-
toExecutionPath
public java.util.List<ExecutionPath> toExecutionPath(java.util.List<ExecutionPath> paths)
-
addJustMeToExecutionPath
@NotNull protected final java.util.List<ExecutionPath> addJustMeToExecutionPath(java.util.List<ExecutionPath> paths)
-
toExecutionPathInOrder
protected final java.util.List<ExecutionPath> toExecutionPathInOrder(java.util.List<ExecutionPath> paths, Expr... order)
-
toExecutionPathInOrder
protected final java.util.List<ExecutionPath> toExecutionPathInOrder(java.util.List<ExecutionPath> paths, java.util.List<Expr> order)
-
resolveType
protected abstract android.databinding.tool.reflection.ModelClass resolveType(android.databinding.tool.reflection.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 abstract java.lang.String computeUniqueKey()
-
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:
getVersionin interfaceandroid.databinding.tool.expr.VersionProvider
-
hasNestedCannotRead
public boolean hasNestedCannotRead()
-
markAsReadIfDone
public boolean markAsReadIfDone()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.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()
-
markAsUsed
public void markAsUsed()
-
markAsUsedInCallback
public void markAsUsedInCallback()
-
isIsUsedInCallback
public boolean isIsUsedInCallback()
-
isUsed
public boolean isUsed()
-
updateExpr
public void updateExpr(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer)
-
join
protected static java.lang.String join(java.util.List<?> vals)
-
join
protected static java.lang.String join(java.lang.Object... vals)
-
asPackage
protected java.lang.String asPackage()
-
provideScopeLocation
public java.util.List<android.databinding.tool.store.Location> provideScopeLocation()
- Specified by:
provideScopeLocationin interfaceandroid.databinding.tool.processing.scopes.LocationScopeProvider
-
toCode
public android.databinding.tool.writer.KCode toCode()
-
toFullCode
public android.databinding.tool.writer.KCode toFullCode()
-
generateCode
protected abstract android.databinding.tool.writer.KCode generateCode()
-
generateInverse
public Expr generateInverse(ExprModel model, Expr value, java.lang.String bindingClassName)
-
cloneToModel
protected static java.util.List<Expr> cloneToModel(ExprModel model, java.util.List<Expr> exprs)
-
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.
-
recursivelyInjectSafeUnboxing
public final boolean recursivelyInjectSafeUnboxing(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer, ExprModel model)
-
unwrapObservableField
public Expr unwrapObservableField()
-
unwrapObservableFieldChildren
protected void unwrapObservableFieldChildren()
Iterates through all children and expands all ObservableFields to call "get()" on them instead.
-
unwrapChildTo
protected void unwrapChildTo(int childIndex, @Nullable android.databinding.tool.reflection.ModelClass type)Unwraps an observable field for a specific child.- Parameters:
childIndex- The index into mChildren of the child to unwraptype- The expected type or null if the child should be fully unwrapped.
-
injectSafeUnboxing
protected abstract void injectSafeUnboxing(android.databinding.tool.reflection.ModelAnalyzer modelAnalyzer, ExprModel model)Called after experiment model is sealed to avoid NPE problems caused by boxed primitives.
-
-