# Interface: com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression

Base interface for all `dexdec` IR expressions, such as IR instructions, fields/attributes, immediates, variables/identifiers, operations, etc.

## Method: asArrayElt
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDArrayElt`

Description: Cast this IR to an array element.
return: this IR as an [IDArrayElt](IDArrayElt)

## Method: asCallInfo
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDCallInfo`

Description: Cast this IR to call information.
return: this IR as an [IDCallInfo](IDCallInfo)

## Method: asImm
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Cast this IR to an immediate.
return: this IR as an [IDImm](IDImm)

## Method: asInstanceField
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstanceField`

Description: Cast this IR to an instance field expression.
return: this IR as an [IDInstanceField](IDInstanceField)

## Method: asInstruction
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Cast this IR to an instruction.
return: this IR as an [IDInstruction](IDInstruction)

## Method: asNewArrayInfo
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewArrayInfo`

Description: Cast this IR to new\-array information.
return: this IR as an [IDNewArrayInfo](IDNewArrayInfo)

## Method: asNewInfo
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewInfo`

Description: Cast this IR to new\-instance information.
return: this IR as an [IDNewInfo](IDNewInfo)

## Method: asOperation
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Cast this IR to an operation.
return: this IR as an [IDOperation](IDOperation)

## Method: asReferenceType
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDReferenceType`

Description: Cast this IR to a reference type expression.
return: this IR as an [IDReferenceType](IDReferenceType)

## Method: asStaticField
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDStaticField`

Description: Cast this IR to a static field expression.
return: this IR as an [IDStaticField](IDStaticField)

## Method: asVar
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Cast this IR to a variable.
return: this IR as an [IDVar](IDVar)

## Method: canThrow
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`
- return type: `boolean`

Description: Determine whether a hypothetical execution of this IR expression could throw. 

 This method is not fail\-safe, it works on a best\-effort basis.
parameter: ctx: mandatory method context
return: true if the expression may have side effects

## Method: checkType
- parameter: `wantedType`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `boolean`

Description: Determine whether the expression type matches an expected type.
parameter: wantedType: expected type
return: true if the type of the expression is as expected

## Method: collectAllPhysicalMethodIndices
- parameter: `physicalMethodIndices`, type: `java.util.Collection<java.lang.Integer>`

Description: Collect all low\-level dex method indices mapped to this IR element and its constituents.
parameter: physicalMethodIndices: sink for physical method indices

## Method: collectAllPhysicalOffsets
- parameter: `physicalOffsets`, type: `java.util.Collection<java.lang.Integer>`

Description: Gather all physical offsets for this element and all its constituents.
parameter: physicalOffsets: sink; it is recommended to provide a Set to avoid the collection of            duplicates

## Method: collectSubExpressions
- parameter: `sink`, type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`

Description: Collect all sub\-expressions of this expression, in evaluation order. If the full expression were to be evaluated at runtime, a sub\-expression at index `i` in the list would be evaluated before a sub\-expression at index `i+1`.
parameter: sink: collector for the sub\-expressions

## Method: collectVarIds
- parameter: `sink`, type: `java.util.Set<java.lang.Integer>`

Description: Recursively collect all the variable ids used and defined by this expression.
parameter: sink: collection receiving the variable ids

## Method: copy
- parameter: `opt`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DCopyOptions`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`


## Method: countVariable
- parameter: `var`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`
- return type: `int`

Description: Count how many times a given identifier is present in an expression. Matching is done using `same`.
parameter: var: a variable
return: the number of occurrences of this variable in this IR expression

## Method: duplicate
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`


## Method: evaluate
- parameter: `state`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDState`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Evaluate this expression. 

 Note about evaluating instructions: When evaluating an [IDInstruction](IDInstruction), a context and frame must be present in the state. The value of PC is not directly updated after the execution of this instruction. Instead, the next expected PC is stored in the current frame, and can be retrieved via [IDEmuFrame#getNextPC()](IDEmuFrame#getNextPC()). Only the evaluation of `ASSIGN`, `RETURN`, `INVOKE` IR instructions may return a value; else, the method will return null. 

 To perform emulation of a stub of IR with full controls, use methods in [IDState](IDState) directly.
parameter: state: a machine state
return: the evaluated expression \(be careful, it may be a [reference\-immediate](IDImm#isRef())\!\)
throws: on evaluation error

## Method: evaluate
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience method: Evaluate this expression within the context of the provided method. 

 See important note in [#evaluate(IDState)](#evaluate(IDState)).
parameter: ctx: method context
return: the evaluated expression \(be careful, it may be a [reference\-immediate](IDImm#isRef())\!\)
throws: on evaluation error

## Method: evaluate
- parameter: `g`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDGlobalContext`
- parameter: `varmap`, type: `java.util.Map<java.lang.Integer,com.pnfsoftware.jeb.core.units.code.android.ir.IDImm>`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience method: evaluate a [non\-instruction](IDInstruction) IR expression using the provided set a variable values.
parameter: g: global IR context
parameter: varmap: a map of variable values to be used when evaluating the expression
return: the evaluation result \(be careful, it may be a [reference\-immediate](IDImm#isRef())\!\)
throws: on evaluation error

## Method: find
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `start`, type: `int`
- parameter: `comparisonMethod`, type: `int`
- parameter: `thisParent`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.util.base.Couple<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression,com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`

Description: Find the parent of the the provided child element.
parameter: elt: an IR element; if the element is `this`, the method will return null
parameter: start: count of instances of `elt` that should be skipped before returning the            parent element; this is useful is the element provided may not be unique within            the tree \(e.g. var\)
parameter: comparisonMethod: 0= identity, 1= equality, 2= type\-less equality
parameter: thisParent: optional parent of *this* IR element
return: if found, the pair \(parent, element\) parent; else, null

## Method: findByType
- parameter: `clazz`, type: `java.lang.Class<T>`
- return type: `T`

Description: Find the first child element by type.
parameter: T: expected element type
parameter: clazz: type of the element to be found; careful, if the type is the one of            `this`, then this object will be returned
return: the element or null

## Method: findByType
- parameter: `clazz`, type: `java.lang.Class<T>`
- parameter: `start`, type: `int`
- return type: `T`

Description: Find a child element by type.
parameter: T: expected element type
parameter: clazz: type of the element to be found; careful, if the type is the one of            `this`, then this object will be returned
parameter: start: count of matched elements that should be skipped before returning the element
return: the element or null

## Method: findParent
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`

Description: Find the parent of the first instance of the provided child element. The comparison is done by identity.
parameter: elt: an IR element; if the element is `this`, the method will return null
return: the parent or null

## Method: findParent
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `start`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`

Description: Find the parent of the the provided child element. The comparison is done by identity.
parameter: elt: an IR element; if the element is `this`, the method will return null
parameter: start: count of instances of `elt` that should be skipped before returning the            parent element; this is useful is the element provided may not be unique within            the tree \(e.g. var\)
return: the parent or null

## Method: generateAST
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaMethod`
- return type: `com.pnfsoftware.jeb.core.units.code.java.IJavaElement`

Description: Generate the Java AST element for this IR expression.
parameter: ctx: IR method context \(of which this IR element belongs\)
parameter: m: AST Method context \(of which the resulting AST element will belong\)
return: the generated AST element

## Method: getCustomCanThrow
- return type: `java.lang.Boolean`

Description: Retrieve the custom override set for [#canThrow(IDMethodContext)](#canThrow(IDMethodContext)). See [#setCustomCanThrow(Boolean)](#setCustomCanThrow(Boolean)) for details. 

 Note: Currently, the custom value is only supported by [IDArrayElt](IDArrayElt).
return: the custom value, or null if none was set

## Method: getData
- parameter: `key`, type: `java.lang.String`
- return type: `java.lang.Object`

Description: Retrieve a value from this IR element's data map.
parameter: key: mandatory key
return: value associated with the key, null if none

## Method: getOrigin
- return type: `java.lang.String`

Description: Retrieve the origin info string of this IR element, if there is one.
return: origin string, or null

## Method: getPhysicalMethodIndex
- return type: `int`

Description: Retrieve the low\-level dex method index mapping to this IR element.
return: a lower\-level method index, or \-1 to signify the default \(which is the         [IDMethodContext](IDMethodContext)'s dex method index\)

## Method: getPhysicalOffset
- return type: `int`

Description: Retrieve the physical offset \(dalvik\) associated with this IR.
return: a dalvik method offset \(in bytes\); \-1 if there is no offset associated with the IR

## Method: getSubExpressions
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`

Description: Convenience method used to retrieve all the sub\-expressions of this IR, in evaluation order. Uses [#collectSubExpressions(Collection)](#collectSubExpressions(Collection)).
return: a list of sub\-expressions

## Method: getType
- return type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`

Description: Get the IR expression type.
return: the expression type

## Method: getVarIds
- return type: `java.util.Set<java.lang.Integer>`

Description: Recursively collect all the variable ids used and defined by this expression.
return: a set of unique variable ids

## Method: hasSideEffects
- parameter: `ctx`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`
- parameter: `includeCanThrow`, type: `boolean`
- return type: `boolean`

Description: Determine whether a hypothetical execution of this IR expression would change the program internal state. 

 This method is not fail\-safe, it works on a best\-effort basis.
parameter: ctx: method context
parameter: includeCanThrow: if true, the possibility of this IR to raise exceptions is checked and            considered to be a side\-effect
return: true if the expression may throw

## Method: isArrayElt
- return type: `boolean`

Description: Determine whether this IR is an array element.
return: true if this IR is an [IDArrayElt](IDArrayElt)

## Method: isCallInfo
- return type: `boolean`

Description: Determine whether this IR is call information.
return: true if this IR is an [IDCallInfo](IDCallInfo) or its sub\-type [IDNewInfo](IDNewInfo)

## Method: isCallInfo
- parameter: `wantedMsig`, type: `java.lang.String`
- return type: `boolean`

Description: Determine whether this IR is call information for a method signature.
parameter: wantedMsig: wanted method signature
return: true if this IR is an [IDCallInfo](IDCallInfo) or its sub\-type [IDNewInfo](IDNewInfo) invoking         the provided method signature

## Method: isCastOperation
- return type: `boolean`

Description: Determine whether this IR is a cast operation.
return: true if this IR is a cast [operation](IDOperation)

## Method: isCastOperation
- parameter: `expectedCastType`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `boolean`

Description: Determine whether this IR is a cast operation to an expected type.
parameter: expectedCastType: wanted cast type
return: true if this IR is an [operation](IDOperation) casting to the wanted type

## Method: isConstantImm
- return type: `boolean`

Description: Determine whether this IR is a non\-reference immediate.
return: true if this IR is an [IDImm](IDImm) holding a non\-reference immediate, that is, a         primitive value or a pooled string. \(For references, including the null references,         this method will return false.\)

## Method: isConstantImm
- parameter: `expectedRawValue`, type: `long`
- return type: `boolean`

Description: Determine whether this IR is a non\-reference immediate with an expected raw value.
parameter: expectedRawValue: wanted value
return: true if this IR is an [IDImm](IDImm) holding a non\-reference immediate with the         provided raw value

## Method: isImm
- return type: `boolean`

Description: Determine whether this IR is an immediate.
return: true if this IR is an [IDImm](IDImm)

## Method: isInstanceField
- return type: `boolean`

Description: Determine whether this IR is an instance field expression.
return: true if this IR is an [IDInstanceField](IDInstanceField)

## Method: isInstruction
- return type: `boolean`

Description: Determine whether this IR is an instruction.
return: true if this IR is an [IDInstruction](IDInstruction)

## Method: isNewArrayInfo
- return type: `boolean`

Description: Determine whether this IR is new\-array information.
return: true if this IR is an [IDNewArrayInfo](IDNewArrayInfo)

## Method: isNewInfo
- return type: `boolean`

Description: Determine whether this IR is new\-instance information.
return: true if this IR is an [IDNewInfo](IDNewInfo)

## Method: isOperation
- return type: `boolean`

Description: Determine whether this IR is an operation.
return: true if this IR is an [IDOperation](IDOperation)

## Method: isOperation
- parameter: `expectedOperatorType`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- return type: `boolean`

Description: Determine whether this IR is an operation of the provided type.
parameter: expectedOperatorType: an operator type
return: true if this IR is an [operation](IDOperation) of the provided type

## Method: isOperation
- parameter: `expectedOperatorType1`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType2`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- return type: `boolean`

Description: Determine whether this IR is an operation of any of the provided types.
parameter: expectedOperatorType1: an operator type
parameter: expectedOperatorType2: an operator type
return: true if this IR is an [operation](IDOperation) of any of the provided types

## Method: isOperation
- parameter: `expectedOperatorType1`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType2`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType3`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- return type: `boolean`

Description: Determine whether this IR is an operation of any of the provided types.
parameter: expectedOperatorType1: an operator type
parameter: expectedOperatorType2: an operator type
parameter: expectedOperatorType3: an operator type
return: true if this IR is an [operation](IDOperation) of any of the provided types

## Method: isOperation
- parameter: `expectedOperatorType1`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType2`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType3`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType4`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- return type: `boolean`

Description: Determine whether this IR is an operation of any of the provided types.
parameter: expectedOperatorType1: an operator type
parameter: expectedOperatorType2: an operator type
parameter: expectedOperatorType3: an operator type
parameter: expectedOperatorType4: an operator type
return: true if this IR is an [operation](IDOperation) of any of the provided types

## Method: isOperation
- parameter: `expectedOperatorType1`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType2`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType3`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType4`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType5`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- return type: `boolean`

Description: Determine whether this IR is an operation of any of the provided types.
parameter: expectedOperatorType1: an operator type
parameter: expectedOperatorType2: an operator type
parameter: expectedOperatorType3: an operator type
parameter: expectedOperatorType4: an operator type
parameter: expectedOperatorType5: an operator type
return: true if this IR is an [operation](IDOperation) of any of the provided types

## Method: isOperation
- parameter: `expectedOperatorType1`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType2`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType3`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType4`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType5`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `expectedOperatorType6`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- return type: `boolean`

Description: Determine whether this IR is an operation of any of the provided types.
parameter: expectedOperatorType1: an operator type
parameter: expectedOperatorType2: an operator type
parameter: expectedOperatorType3: an operator type
parameter: expectedOperatorType4: an operator type
parameter: expectedOperatorType5: an operator type
parameter: expectedOperatorType6: an operator type
return: true if this IR is an [operation](IDOperation) of any of the provided types

## Method: isReferenceType
- return type: `boolean`

Description: Determine whether this IR is a reference type expression.
return: true if this IR is an [IDReferenceType](IDReferenceType)

## Method: isStaticField
- return type: `boolean`

Description: Determine whether this IR is a static field expression.
return: true if this IR is an [IDStaticField](IDStaticField)

## Method: isStringImm
- return type: `boolean`

Description: Determine whether this IR is a pooled string immediate.
return: true if this IR is an [IDImm](IDImm) holding a pooled String constant. \(String         references are not constants.\)

## Method: isVar
- return type: `boolean`

Description: Determine whether this IR is a variable.
return: true if this IR is an [IDVar](IDVar)

## Method: isVar
- parameter: `wantedVarId`, type: `int`
- return type: `boolean`

Description: Determine whether this IR is a variable with an expected id.
parameter: wantedVarId: a variable id
return: true if this IR is a [variable](IDVar) having the provided id

## Method: removeData
- parameter: `key`, type: `java.lang.String`

Description: Remove an entry from this IR element's data map.
parameter: key: mandatory key

## Method: replaceSubExpression
- parameter: `target`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `repl`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `boolean`

Description: Replace an expression of this IR. This method does not perform deep replacement. The target expression is compared by equality.
parameter: target: IR expression to be replaced
parameter: repl: replacement expression
return: true if the target was successfully replaced

## Method: replaceVariable
- parameter: `var`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`
- parameter: `repl`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `int`

Description: Deep replace all matching variables by the provided expression. Important notes:
 \- Matching is done by reference equality \([IDVar](IDVar) are factory\-created, no two variables created by the same context can have the same id\)
 \- When a replacement is to be performed, a [duplication](IDExpression#duplicate()) of `repl` is done and used as the replacement expression to avoid reuse.
 \- The exploration is recursive: the constituents are explored for replacement.
 \- If this expression is itself an identifier, it will not be replaced; only the constituents are matched for replacement.
parameter: var: target variable to be replaced
parameter: repl: expression that will replace the identifier
return: the number of replacements

## Method: setCustomCanThrow
- parameter: `elemenCanThrow`, type: `java.lang.Boolean`

Description: Set a custom override for [#canThrow(IDMethodContext)](#canThrow(IDMethodContext)). If one is set, [#canThrow(IDMethodContext)](#canThrow(IDMethodContext)) will return the override value instead of performing regular verifications to determine whether the IR element may raise. 

 Note: Currently, the custom value is only supported by [IDArrayElt](IDArrayElt).
parameter: elemenCanThrow: custom value, null to reset

## Method: setData
- parameter: `key`, type: `java.lang.String`
- parameter: `value`, type: `java.lang.Object`
- return type: `java.lang.Object`

Description: Store a key\-value pair in this IR element's data map.
parameter: key: mandatory key
parameter: value: mandatory value
return: the previous value associated with this key

## Method: setOrigin
- parameter: `origin`, type: `java.lang.String`

Description: Set an optional origin info string for this IR element. Note that the origin is stored as an entry in the data map.
parameter: origin: optional origin string

## Method: setPhysicalMethodIndex
- parameter: `physicalMethodIndex`, type: `int`

Description: Set a low\-level dex method index mapping to this IR element. This is useful to override the default \(owner [IDMethodContext](IDMethodContext)'s dex method\), such as when a method contains inlined code from another method.
parameter: physicalMethodIndex: a lower\-level dex method index, or \-1 to signify none or the            default

## Method: setPhysicalOffset
- parameter: `physicalOffset`, type: `int`

Description: Set the main physical offset associated with this IR.
parameter: physicalOffset: an offset, \-1 for none

## Method: setType
- parameter: `newType`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `boolean`

Description: Update the type of an expression.
parameter: newType: mandatory new type
return: true if the type was updated, false otherwise

## Method: setType
- parameter: `newType`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `ti`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DTypeInfo`
- return type: `boolean`

Description: Update the type of an expression.
parameter: newType: mandatory new type
parameter: ti: optional type information object, used to record type update results
return: true if the type was updated, false otherwise

## Method: setType
- parameter: `newType`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `ti`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DTypeInfo`
- parameter: `forceUpdate`, type: `boolean`
- return type: `boolean`

Description: Update the type of an expression.
parameter: newType: mandatory new type
parameter: ti: optional type information object, used to record type update results
parameter: forceUpdate: if true, the new type will always be set \(compatibility checks are            bypassed\)
return: true if the type was updated, false otherwise

## Method: spawn
- parameter: `rawvalue`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Create a new immediate IR with the provided 64\-bit raw value, and the type of this IR expression.
parameter: rawvalue: raw bits
return: the new immediate

## Method: transferMetadataFrom
- parameter: `srcExp`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`

Description: Transfer \(shallow copy\) metadata from a source IR to this IR. Currently, this includes the physical offset and the data map.
parameter: srcExp: source IR expression

## Method: updateAllPhysicalMethodIndices
- parameter: `physicalMethodIndex`, type: `int`

Description: Update the low\-level dex method index mapping for this IR element and its constituents.
parameter: physicalMethodIndex: new physical method index

## Method: updateAllPhysicalOffsets
- parameter: `physicalOffset`, type: `int`

Description: Update the physical offset of this element and all its constituents.
parameter: physicalOffset: new physical offset, \-1 to reset \(to none\)

## Method: updateTypes
- parameter: `ti`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DTypeInfo`

Description: Deep update the types of the constituents of this IR expression and update to determine the IR type as well.
parameter: ti: optional type information object, used to record type updates and conflicts

## Method: visitDepthPost
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVisitor`
- return type: `boolean`

Description: Visit this expression and its constituents, depth\-first post\-order.
parameter: visitor: visitor object
return: success indicator; true unless a different value was specified in         [DVisitResults](DVisitResults) when visiting an element

## Method: visitDepthPost
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVisitor`
- parameter: `parent`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `boolean`

Description: Visit this expression and its constituents, depth\-first post\-order.
parameter: visitor: visitor object
parameter: parent: the optional parent of this expression
return: success indicator; true unless a different value was specified in         [DVisitResults](DVisitResults) when visiting an element

## Method: visitDepthPost
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVisitor`
- parameter: `parent`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `results`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DVisitResults`
- return type: `boolean`

Description: Visit this expression and its constituents, depth\-first post\-order.
parameter: visitor: visitor object
parameter: parent: the optional parent of this expression
parameter: results: an optional result object provided to the visitor, containing flags used to            customize the visiting process
return: success indicator; true unless a different value was specified in         [DVisitResults](DVisitResults) when visiting an element

## Method: visitDepthPre
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVisitor`
- return type: `boolean`

Description: Visit this expression and its constituents, depth\-first pre\-order. 

 If the visitor replaces an element, the new element must be specified by calling `setReplacedNode()`.
parameter: visitor: visitor object
return: success indicator; true unless a different value was specified in         [DVisitResults](DVisitResults) when visiting an element

## Method: visitDepthPre
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVisitor`
- parameter: `parent`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `boolean`

Description: Visit this expression and its constituents, depth\-first pre\-order. 

 If the visitor replaces an element, the new element must be specified by calling `setReplacedNode()`.
parameter: visitor: visitor object
parameter: parent: the optional parent of this expression
return: success indicator; true unless a different value was specified in         [DVisitResults](DVisitResults) when visiting an element

## Method: visitDepthPre
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVisitor`
- parameter: `parent`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `results`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DVisitResults`
- return type: `boolean`

Description: Visit this expression and its constituents, depth\-first pre\-order. 

 If the visitor replaces an element, the new element must be specified by calling `setReplacedNode()`.
parameter: visitor: visitor object
parameter: parent: the optional parent of this expression
parameter: results: an optional result object provided to the visitor, containing flags used to            customize the visiting process
return: success indicator; true unless a different value was specified in         [DVisitResults](DVisitResults) when visiting an element

