# Interface: com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext
- Super interfaces: `com.pnfsoftware.jeb.core.units.code.android.controlflow.IVariableInformationProvider`

`dexdec` IR method context. A method context holds all intermediate \(IR\) information  relative to the decompilation of a dex method, including factory methods to create IR  instructions and IR expressions.

## Abstract Method: addExtraComment
- parameter: `str`, type: `java.lang.String`

Description: Add an extra comment for this method.
parameter: str: comment text

## Abstract Method: clearVirtualVars

Description: Remove all virtual variables from this context.

## Abstract Method: copy
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`

Description: Create a copy of this context. This method is useful when optimizers need to operate and  modify in depth a context and its elements \(e.g. the CFG or exception\-flow data\), while the  optimizer's success is not guaranteed. On failure, the copied context may be destroyed. On  success, the context may be updated using the copied context, by using  [#load(IDMethodContext)](#load(IDMethodContext))
return: a new context, which is a deep duplication of this context

## Default Method: createArrayElt
- parameter: `array`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `index`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDArrayElt`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: array: array expression
parameter: index: element index expression
parameter: type: element type
return: array element expression

## Default Method: createArrayLength
- parameter: `instance`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstanceField`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: instance: array instance expression
return: array length field expression

## Abstract Method: createAssign
- parameter: `dst`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `src`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create an `assignment` instruction. Opcode: [DOpcodeType#IR_ASSIGN](DOpcodeType#IR_ASSIGN).
parameter: dst: destination expression
parameter: src: source expression
return: assignment instruction

## Default Method: createBoolean
- parameter: `value`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: boolean value
return: immediate constant

## Default Method: createByte
- parameter: `value`, type: `byte`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: byte value
return: immediate constant

## Default Method: createByteArray
- parameter: `bytes`, type: `byte[]`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewArrayInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: bytes: byte values
return: new\-array information

## Default Method: createCallInfo
- parameter: `methodindex`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `arguments`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression[]`
- parameter: `returntype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `methodsig`, type: `java.lang.String`
- parameter: `invoketype`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DInvokeType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDCallInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: methodindex: method index
parameter: arguments: call arguments
parameter: returntype: return type
parameter: methodsig: method signature
parameter: invoketype: invocation type
return: call information

## Default Method: createCallInfo
- parameter: `methodindex`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `arguments`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`
- parameter: `returntype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `methodsig`, type: `java.lang.String`
- parameter: `invoketype`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DInvokeType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDCallInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: methodindex: method index
parameter: arguments: call arguments
parameter: returntype: return type
parameter: methodsig: method signature
parameter: invoketype: invocation type
return: call information

## Default Method: createCallInfo
- parameter: `invoketype`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.DInvokeType`
- parameter: `methodindex`, type: `int`
- parameter: `arguments`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDCallInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: invoketype: invocation type
parameter: methodindex: method index
parameter: arguments: call arguments
return: call information

## Default Method: createCast
- parameter: `casttype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: casttype: target cast type
parameter: e: expression to cast
return: cast operation expression

## Default Method: createChar
- parameter: `value`, type: `char`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: char value
return: immediate constant

## Default Method: createClassObject
- parameter: `csig`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDStaticField`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: csig: class signature
return: class object static field expression

## Default Method: createConditional
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `pred`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `expTrue`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `expFalse`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: type: result type
parameter: pred: predicate expression
parameter: expTrue: expression evaluated when the predicate is true
parameter: expFalse: expression evaluated when the predicate is false
return: conditional operation expression

## Abstract Method: createConstruct
- parameter: `info`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewInfo`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `new Object(...)` instruction. Opcode: [DOpcodeType#IR_INVOKE](DOpcodeType#IR_INVOKE).
parameter: info: new\-instance invocation information
return: construction instruction

## Abstract Method: createCopyVar
- parameter: `srcVar`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Create a copy\-variable. If the source variable has a [preferred name](IDVar#getPreferredName()), it is copied to the newly\-created variable.
parameter: srcVar: a primary variable, whose id is in \[0, 0xFFFF\] or \[0x10000, 0x1FFFE\]
return: a variable representing a copy of the provided variable

## Default Method: createDouble
- parameter: `value`, type: `double`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: double value
return: immediate constant

## Default Method: createFloat
- parameter: `value`, type: `float`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: float value
return: immediate constant

## Default Method: createImm
- parameter: `rawvalue`, type: `long`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: This convenience IR factory method wraps around  [IDGlobalContext#createImm(long, IJavaType)](IDGlobalContext#createImm(long, IJavaType)).
parameter: rawvalue: raw constant value
parameter: type: constant type
return: immediate constant

## Default Method: createIndex
- parameter: `value`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: index value
return: index object

## Default Method: createInstanceField
- parameter: `instance`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `index`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `fieldtype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `fieldname`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstanceField`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: instance: object instance expression
parameter: index: field index
parameter: fieldtype: field type
parameter: fieldname: field name
return: instance field expression

## Default Method: createInt
- parameter: `value`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: int value
return: immediate constant

## Abstract Method: createInvoke
- parameter: `info`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDCallInfo`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create an `invocation` instruction. Opcode: [DOpcodeType#IR_INVOKE](DOpcodeType#IR_INVOKE).
parameter: info: call information
return: invocation instruction

## Abstract Method: createJcond
- parameter: `irTargetOffset`, type: `int`
- parameter: `cond`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `jcond` \(conditional jump\) instruction. Opcode: [DOpcodeType#IR_JCOND](DOpcodeType#IR_JCOND).
parameter: irTargetOffset: target IR offset
parameter: cond: jump condition
return: conditional jump instruction

## Abstract Method: createJump
- parameter: `irTargetOffset`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `goto` \(unconditional jump\) instruction. Opcode: [DOpcodeType#IR_JUMP](DOpcodeType#IR_JUMP).
parameter: irTargetOffset: target IR offset
return: jump instruction

## Default Method: createLong
- parameter: `value`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: long value
return: immediate constant

## Abstract Method: createMonitorEnter
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `monitor-enter` instruction. Opcode: [DOpcodeType#IR_MONITOR_ENTER](DOpcodeType#IR_MONITOR_ENTER).
parameter: exp: monitor expression
return: monitor\-enter instruction

## Abstract Method: createMonitorExit
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `monitor-exit` instruction. Opcode: [DOpcodeType#IR_MONITOR_EXIT](DOpcodeType#IR_MONITOR_EXIT).
parameter: exp: monitor expression
return: monitor\-exit instruction

## Abstract Method: createNewArray
- parameter: `info`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewArrayInfo`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `new array` instruction. Opcode: [DOpcodeType#IR_INVOKE](DOpcodeType#IR_INVOKE).
parameter: info: new\-array information
return: new\-array instruction

## Default Method: createNewArrayInfo
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `size`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `initvals`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewArrayInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: type: array type
parameter: size: array size expression
parameter: initvals: optional initial values
return: new\-array information

## Default Method: createNewInfo
- parameter: `constructorSig`, type: `java.lang.String`
- parameter: `arguments`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression[]`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: constructorSig: constructor signature
parameter: arguments: constructor arguments
return: new\-instance information

## Default Method: createNewInfo
- parameter: `objecttype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `constclasstype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `constructorindex`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `arguments`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression[]`
- parameter: `methodsig`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: objecttype: created object type
parameter: constclasstype: constructor class type
parameter: constructorindex: constructor index
parameter: arguments: constructor arguments
parameter: methodsig: constructor method signature
return: new\-instance information

## Default Method: createNewInfo
- parameter: `objecttype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `constclasstype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `constructorindex`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `arguments`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression>`
- parameter: `methodsig`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDNewInfo`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: objecttype: created object type
parameter: constclasstype: constructor class type
parameter: constructorindex: constructor index
parameter: arguments: constructor arguments
parameter: methodsig: constructor method signature
return: new\-instance information

## Abstract Method: createNop
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `no-operation` instruction. Opcode: [DOpcodeType#IR_NOP](DOpcodeType#IR_NOP).
return: no\-operation instruction

## Default Method: createNull
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
return: null immediate constant

## Default Method: createOperation
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `optype`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `opnd1`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `opnd2`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: type: operation type
parameter: optype: operator type
parameter: opnd1: first operand
parameter: opnd2: optional second operand
return: operation expression

## Default Method: createOperation
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `left`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `operator`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaOperator`
- parameter: `right`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: type: operation type
parameter: left: left operand
parameter: operator: operator
parameter: right: right operand
return: operation expression

## Default Method: createPredicate
- parameter: `optype`, type: `com.pnfsoftware.jeb.core.units.code.java.JavaOperatorType`
- parameter: `opnd1`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `opnd2`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: optype: operator type
parameter: opnd1: first operand
parameter: opnd2: optional second operand
return: predicate operation expression

## Default Method: createPredicate
- parameter: `left`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `operator`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaOperator`
- parameter: `right`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOperation`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: left: left operand
parameter: operator: operator
parameter: right: right operand
return: predicate operation expression

## Default Method: createReferenceType
- parameter: `cindex`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `ctype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDReferenceType`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: cindex: class type index
parameter: ctype: class type
return: reference type expression

## Default Method: createReferenceType
- parameter: `csig`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDReferenceType`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: csig: class signature
return: reference type expression

## Abstract Method: createRegisterVar
- parameter: `regnum`, type: `int`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Create a variable mapping to a physical Dalvik register \(or pair of registers\). This method  is used during the initial decompilation phase when the bytecode is converted to low\-level  IR.
parameter: regnum: dalvik register number \(first register in the case of a pair\)
parameter: type: variable type
return: a variable

## Abstract Method: createReturn
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `return` instruction. Opcode: [DOpcodeType#IR_RETURN](DOpcodeType#IR_RETURN).
parameter: exp: optional returned expression
return: return instruction

## Default Method: createShort
- parameter: `value`, type: `short`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: short value
return: immediate constant

## Default Method: createStaticField
- parameter: `index`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- parameter: `fieldtype`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `csig`, type: `java.lang.String`
- parameter: `fieldname`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDStaticField`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: index: field index
parameter: fieldtype: field type
parameter: csig: owner class signature
parameter: fieldname: field name
return: static field expression

## Abstract Method: createStoreException
- parameter: `ident`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create an `exception-store` instruction. Opcode:  [DOpcodeType#IR_STORE_EXCEPTION](DOpcodeType#IR_STORE_EXCEPTION).
parameter: ident: exception variable
return: store\-exception instruction

## Default Method: createString
- parameter: `value`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: value: string value
return: immediate constant

## Default Method: createString
- parameter: `stringIndex`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDIndex`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: stringIndex: Dex string pool index
return: immediate constant

## Abstract Method: createSwitch
- parameter: `swexp`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- parameter: `data`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDSwitchData`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `switch` instruction. Opcode: [DOpcodeType#IR_SWITCH](DOpcodeType#IR_SWITCH).
parameter: swexp: switch expression
parameter: data: switch data
return: switch instruction

## Default Method: createSwitchData
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDSwitchData`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
return: empty switch data element

## Default Method: createTarget
- parameter: `offset`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDTarget`

Description: Convenience IR factory method wrapping around [#getGlobalContext()](#getGlobalContext()).
parameter: offset: target offset
return: target expression

## Abstract Method: createThrow
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction`

Description: Create a `throw` instruction. Opcode: [DOpcodeType#IR_THROW](DOpcodeType#IR_THROW).
parameter: exp: thrown expression
return: throw instruction

## Abstract Method: createVar
- parameter: `id`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Create or retrieve a variable.
parameter: id: variable id \(not to be confused with Dalvik register number\)
return: a variable

## Abstract Method: createVar
- parameter: `id`, type: `int`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Create or retrieve a variable. Caution: if the variable with the provided id already exists,  it will be returned by this method without performing type check: the requested type at  creation may not be the type of the returned \(already existing\) variable.
parameter: id: variable id \(not to be confused with Dalvik register number\)
parameter: type: mandatory type
return: a variable

## Abstract Method: createVar
- parameter: `id`, type: `int`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `performTypeCheckIfExists`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Create or retrieve a variable.
parameter: id: variable id \(not to be confused with Dalvik register number\)
parameter: type: mandatory type
parameter: performTypeCheckIfExists: if false: if the variable with the provided id already             exists, it will be returned by this method without performing type check: the             requested type may not be the type of the returned \(already existing\) variable; if             true: this method will throw an [IllegalArgumentException](java.lang.IllegalArgumentException) if an already             existing variable does not have the requested type
return: a variable

## Abstract Method: createVirtualVar
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Create a virtual variable. A virtual variable does not map back to physical registers.
parameter: type: variable type
return: the created variable

## Abstract Method: evaluate
- parameter: `arguments`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm[]`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`
- throws: `com.pnfsoftware.jeb.core.units.code.android.ir.DexDecEvaluationException`

Description: Evaluate this method with the provided immediate arguments.
parameter: arguments: method arguments
return: evaluation result
throws: on evaluation error

## Abstract Method: evaluate
- parameter: `state`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDState`
- parameter: `arguments`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDImm>`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDImm`
- throws: `com.pnfsoftware.jeb.core.units.code.android.ir.DexDecEvaluationException`

Description: Evaluate this method using the provided state and arguments.
parameter: state: evaluation state
parameter: arguments: method arguments
return: evaluation result
throws: on evaluation error

## Abstract Method: getCfg
- return type: `com.pnfsoftware.jeb.core.units.code.android.controlflow.CFG<com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction>`

Description: Get the current IR \(intermediate representation\) CFG of the decompiled method. As the method  advances in the decompilation pipeline, the IR gets refined. When it is fully refined, the  final IR is converted to a Java AST.
return: current IR CFG

## Abstract Method: getChildrenContexts
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext>`

Description: Retrieve child contexts created from this context.
return: child contexts

## Abstract Method: getCopiesContexts
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext>`

Description: Retrieve contexts copied from this context.
return: copied contexts

## Abstract Method: getData
- parameter: `key`, type: `java.lang.String`
- return type: `java.lang.Object`

Description: Retrieve an arbitrary object in this context.
parameter: key: non\-null key
return: the value associated with the key, or null

## Abstract Method: getDataKeys
- return type: `java.util.Set<java.lang.String>`

Description: Retrieve the set of objects keys for data elements stored using  [setData](#setData(String, Object)).
return: a read\-only collection

## Abstract Method: getDecompilationFlags
- return type: `int`

Description: Retrieve the decompilation flags provided by the engine to decompile this method. Refer to  `IDecompilerUnit#FLAG_xxx` constants.
return: decompilation flags

## Abstract Method: getDeobfuscationScore
- return type: `int`

Description: Retrieve the deobfuscation score for this method.
return: current deobfuscation score

## Abstract Method: getDex
- return type: `com.pnfsoftware.jeb.core.units.code.android.IDexUnit`

Description: Retrieve the underlying dex unit.
return: underlying Dex unit

## Abstract Method: getExceptionData
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDTryData`

Description: Retrieve the exception information for the current IR, if the [exception information](#isParseExceptions()) were parsed when the Dalvik method was converted to IR.
return: an exception information object, which may be empty if the method is unprotected or          if [#isParseExceptions()](#isParseExceptions()) was false when this object as built

## Abstract Method: getExtraComments
- return type: `java.util.Collection<java.lang.String>`

Description: Retrieve extra comments for this method.
return: extra comments

## Abstract Method: getGlobalContext
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDGlobalContext`

Description: Retrieve the global IR context, shared by all IR method contexts. The global context \(also  referred to as 'intermediate context'\) is managed by the decompiler.
return: global IR context

## Abstract Method: getMethod
- return type: `com.pnfsoftware.jeb.core.units.code.android.dex.IDexMethod`

Description: Retrieve a reference to the dex method being decompiled.
return: Dex method being decompiled

## Abstract Method: getMethodSignature
- return type: `java.lang.String`

Description: Retrieve the original signature of the method being decompiled.
return: original method signature

## Abstract Method: getOperatorFactory
- return type: `com.pnfsoftware.jeb.core.units.code.java.IJavaOperatorFactory`

Description: Retrieve the global high\-level operator factory. The type factory can be used to create all  operators, including conditionals, string concatenation, and create cast operators.
return: high\-level operator factory

## Abstract Method: getParameterVariables
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.android.ir.IDVar>`

Description: Retrieve the list of variables that hold the method parameters. If the method is non\-static,  the first entry represents `this`.
return: a list of variables

## Abstract Method: getParametersTypeMap
- return type: `java.util.SortedMap<java.lang.Integer,com.pnfsoftware.jeb.core.units.code.java.IJavaType>`

Description: Retrieve the type map for the decompiled method. The map keys are Dalvik input slot indices.  The special index \-1 indicates the return value type, if the method returns a value. The  first entry is `this`, if the method is non\-static. Although types `long` and  `double` use two slots, only the first slot number is returned. Other primitives and  reference type objects use a single slot.  

  \- Example: virtual method f\(\) of class A using 10 registers:
  `int f(char, double, String)` =\> map=  `(-1:int, 5:ref_A, 6:char, 7:double, 9:String)`
  

  \- Example: static method g\(\) of class B using 20 registers:
  void g\(long, long, Object, boolean\) =\> map=  `(14:long, 16:long, 18:Object, 19:boolean)`
return: parameter type map

## Abstract Method: getParentContext
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`

Description: Retrieve the parent context, if this context was created from another method context.
return: parent context, or null

## Abstract Method: getTypeFactory
- return type: `com.pnfsoftware.jeb.core.units.code.java.IJavaTypeFactory`

Description: Retrieve the global high\-level type factory.
return: high\-level type factory

## Abstract Method: getTypeInfoProvider
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDTypeInfoProvider`

Description: Retrieve the type information provider. This provider can access additional, user\-provided  libraries \(jar, dex\) to retrieve information on types referenced but not defined in the  underlying dex unit.
return: type information provider

## Abstract Method: getVar
- parameter: `id`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Retrieve a [variable](com.pnfsoftware.jeb.core.units.code.android.ir.IDVar.md) by [id](IDVar#getId()). This method may return null.
parameter: id: a variable id \(not to be confused with Dalvik register number\)
return: a variable, or null if no variable with the provided id exists

## Abstract Method: getVar
- parameter: `name`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Retrieve a [variable](com.pnfsoftware.jeb.core.units.code.android.ir.IDVar.md) by name. This method may return null.
parameter: name: a variable name \(standard name, or custom name\)
return: a variable, or null if no variable with the provided name exists

## Abstract Method: getVariableMap
- return type: `java.util.SortedMap<java.lang.Integer,com.pnfsoftware.jeb.core.units.code.android.ir.IDVar>`

Description: Retrieve a read\-only map of all variables created by this context.
return: read\-only map of variables by id

## Abstract Method: getVars
- return type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.android.ir.IDVar>`

Description: Retrieve all variables created in this context.
return: variables in this context

## Abstract Method: getWatchdog
- return type: `com.pnfsoftware.jeb.util.concurrent.Watchdog`

Description: Retrieve the optional decompilation watchdog. The watchdog embeds timing information and can  be queried by decompilation components: a component can request a self\-verification, which  will result in an exception being thrown \(and decompilation aborted\) if the timeout is  exceeded.
return: optional decompilation watchdog

## Abstract Method: incrementDeobfuscationScore
- parameter: `delta`, type: `int`

Description: Update the deobfuscation score for this method. Note that the score is automatically updated  by the master optimizer for single\-method IR optimizers \(that is, the majority of them\). For  optimizers working on a collection of IRs, right now, the score must be adjusted manually the  optimizer itself.
parameter: delta: score increment

## Default Method: isBatchDecompilation
- return type: `boolean`

Description: Convenience method checking for [IDecompilerUnit#FLAG_BATCH_DECOMPILATION](IDecompilerUnit#FLAG_BATCH_DECOMPILATION).
return: true if this context is for batch decompilation

## Abstract Method: isParseDebugInfo
- return type: `boolean`

Description: Determine whether debug information \(in particular, variable names\) will be ported over  [variables](com.pnfsoftware.jeb.core.units.code.android.ir.IDVar.md) created during the conversion to Intermediate Representation.
return: true if debug information is parsed

## Abstract Method: isParseExceptions
- return type: `boolean`

Description: Determine whether exception information will be parsed and integrated within the initial  Intermediate Representation, when the Dalvik code is converted to IR.
return: true if exception information is parsed

## Abstract Method: isSSA
- return type: `boolean`

Description: Determine whether the CFG was [converted to an SSA form](#makeSSA()).
return: true if the CFG was SSA'ed

## Abstract Method: isStaticMethod
- return type: `boolean`

Description: Determine whether the dalvik method in this IR context is static or non\-static.
return: true if this context is for a static method, false otherwise

## Abstract Method: load
- parameter: `sourceContext`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDMethodContext`

Description: Load the constituents of a source context into this context. This method is to be used in  conjunction with [#copy()](#copy()).
parameter: sourceContext: a source context

## Abstract Method: makeSSA

Description: Convert this CFG to SSA \(static single assignment\) form. An SSA form should be generated  before attempting to apply types. This method is reserved for internal use.

## Abstract Method: popWorkingOptimizer
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOptimizer`

Description: Pop the current optimizer from the working optimizer stack.
return: popped optimizer

## Abstract Method: propagateTypes

Description: Perform type determination and propagation on the CFG. The CFG should be in SSA form before  doing so. This method is reserved for internal use.

## Abstract Method: pushWorkingOptimizer
- parameter: `optimizer`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDOptimizer`

Description: Push an optimizer on the working optimizer stack.
parameter: optimizer: optimizer being run

## Abstract Method: removeExtraComment
- parameter: `str`, type: `java.lang.String`
- return type: `boolean`

Description: Remove an extra comment for this method.
parameter: str: comment text
return: true if a comment was removed

## Abstract Method: removeVar
- parameter: `varid`, type: `int`
- return type: `boolean`

Description: Remove a variable from this context.
parameter: varid: variable id
return: true if the variable was removed

## Abstract Method: replace
- parameter: `replCfg`, type: `com.pnfsoftware.jeb.core.units.code.android.controlflow.CFG<com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction>`
- parameter: `replExdata`, type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDTryData`

Description: Replace the current IR by a new CFG and exception information.  

  This method should be seldom called; most times, modifying the CFG itself is sufficient.  However, in some cases, a full replacement may be necessary.
parameter: replCfg: new CFG
parameter: replExdata: new exception data \(may be null\)

## Abstract Method: replaceCFG
- parameter: `cfg2`, type: `com.pnfsoftware.jeb.core.units.code.android.controlflow.CFG<com.pnfsoftware.jeb.core.units.code.android.ir.IDInstruction>`
- parameter: `oldToNewOffsets`, type: `java.util.Map<java.lang.Integer,java.lang.Integer>`

Description: Replace the current IR by a new CFG and exception information. **It is recommended to use  [#replace(CFG, IDTryData)](#replace(CFG, IDTryData)) instead.**  

  This method should be seldom called; most times, modifying the CFG itself is sufficient.  However, in some cases, a full replacement may be necessary.
parameter: cfg2: new CFG
parameter: oldToNewOffsets: mandatory map map specifying a correspondence "old IR offset to new IR             offset" for each instruction of the CFG \(this map is currently used to update             various internal structures as well as IR exception information\)

## Abstract Method: resetDeobfuscationScore

Description: Reset the deobfuscation score for this method.

## Abstract Method: retrievePhysicalRegisterId
- parameter: `varid`, type: `int`
- return type: `int`

Description: Retrieve the underlying register used by a variable. If the variable uses a long type, the  first register of the pair is returned. If the variable is virtual, \-1 is returned.
parameter: varid: a variable id
return: a register id in \[0, 0xFFFF\] if the variable is backed or indirectly backed by a          physical register; \-1 if the variable is "virtual", not backed by a register

## Abstract Method: retrievePrimaryVariableId
- parameter: `varid`, type: `int`
- return type: `int`

Description: Retrieve the primary variable id from a variable. If the variable directly maps a register or  pair of registers, or is virtual, its id is simply returned. If the variable is a copy of  another variable, the id of the copied variable is provided.
parameter: varid: a variable id
return: the original \(non\-copied\) variable id, which may be the provided id itself

## Abstract Method: retrieveTemporaryVariable
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Retrieve or create a temporary variable.
parameter: type: temporary variable type
return: temporary variable

## Abstract Method: retrieveTemporaryVariable
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.java.IJavaType`
- parameter: `idx`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.android.ir.IDVar`

Description: Retrieve or create a temporary variable with an explicit index.
parameter: type: temporary variable type
parameter: idx: temporary variable index
return: temporary variable

## Abstract Method: setData
- parameter: `key`, type: `java.lang.String`
- parameter: `value`, type: `java.lang.Object`
- return type: `java.lang.Object`

Description: Store an arbitrary object in this context.
parameter: key: non\-null key
parameter: value: null means remove the entry
return: the previous value associated with the key

## Abstract Method: verify
- throws: `java.lang.IllegalStateException`

Description: Self\-verification. This method performs several consistency checks on the IR. On failure, the  method will throw and an attempt will be made to dump the current IR CFG to a file named  "failed.dot".
throws: thrown on verification failure

