Class ByteCodeParser
- java.lang.Object
-
- org.jd.core.v1.service.converter.classfiletojavasyntax.util.ByteCodeParser
-
public class ByteCodeParser extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
ByteCodeParser.JsrReturnAddressExpression
private static class
ByteCodeParser.LambdaParameterNamesVisitor
private static class
ByteCodeParser.MemberVisitor
-
Field Summary
Fields Modifier and Type Field Description private AttributeBootstrapMethods
attributeBootstrapMethods
private ClassFileBodyDeclaration
bodyDeclaration
private java.lang.String
internalTypeName
private static ByteCodeParser.JsrReturnAddressExpression
JSR_RETURN_ADDRESS_EXPRESSION
private LocalVariableMaker
localVariableMaker
private ByteCodeParser.MemberVisitor
memberVisitor
private Type
returnedType
private SearchFirstLineNumberVisitor
searchFirstLineNumberVisitor
private java.util.Map<java.lang.String,BaseType>
typeBounds
private TypeMaker
typeMaker
private TypeParametersToTypeArgumentsBinder
typeParametersToTypeArgumentsBinder
-
Constructor Summary
Constructors Constructor Description ByteCodeParser(TypeMaker typeMaker, LocalVariableMaker localVariableMaker, ClassFile classFile, ClassFileBodyDeclaration bodyDeclaration, ClassFileConstructorOrMethodDeclaration comd)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static Expression
checkIfLastStatementIsAMultiAssignment(Statements statements, Expression parameter)
private static void
checkStack(DefaultStack<Expression> stack, byte[] code, int offset)
private static int
countMethodParameters(java.lang.String descriptor)
private static Expression
createAssignment(BinaryOperatorExpression boe, java.lang.String operator)
private void
createAssignment(Statements statements, DefaultStack<Expression> stack, int lineNumber, Expression leftExpression, Expression rightExpression)
static int
evalStackDepth(ConstantPool constants, byte[] code, BasicBlock bb)
static int
evalStackDepth(BasicBlock bb)
private BaseExpression
extractParametersFromStack(Statements statements, DefaultStack<Expression> stack, BaseType parameterTypes)
static int
getExceptionLocalVariableIndex(BasicBlock basicBlock)
private Expression
getFieldInstanceReference(Expression expression, ObjectType ot, java.lang.String name)
static int
getLastOpcode(BasicBlock basicBlock)
private static Expression
getLastRightExpression(BinaryOperatorExpression boe)
private AbstractLocalVariable
getLocalVariableInAssignment(int index, int offset, Expression value)
private Expression
getMethodInstanceReference(Expression expression, ObjectType ot, java.lang.String name, java.lang.String descriptor)
static boolean
isAssertCondition(java.lang.String internalTypeName, BasicBlock basicBlock)
private static boolean
isNegativeOne(Expression expression)
private static boolean
isPositiveOne(Expression expression)
private Expression
newIntegerBinaryOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
private Expression
newIntegerComparisonOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
private Expression
newIntegerOrBooleanBinaryOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
private Expression
newIntegerOrBooleanComparisonOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
private Expression
newNewExpression(int lineNumber, java.lang.String internalTypeName)
private Expression
newPostArithmeticOperatorExpression(int lineNumber, Expression expression, java.lang.String operator)
private Expression
newPreArithmeticOperatorExpression(int lineNumber, java.lang.String operator, Expression expression)
void
parse(BasicBlock basicBlock, Statements statements, DefaultStack<Expression> stack)
private void
parseASTORE(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable, Expression valueRef)
private void
parseGetField(DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
private void
parseGetStatic(DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
private void
parseIF(DefaultStack<Expression> stack, int lineNumber, BasicBlock basicBlock, java.lang.String operator1, java.lang.String operator2, int priority)
private void
parseIINC(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable, int count)
private static void
parseILOAD(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable)
private void
parseInvokeDynamic(Statements statements, DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
private void
parseLDC(DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, Constant constant)
private void
parsePUT(Statements statements, DefaultStack<Expression> stack, int lineNumber, FieldReferenceExpression fr, Expression valueRef)
private void
parsePutField(Statements statements, DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
private void
parsePutStatic(Statements statements, DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
private void
parseSTORE(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable, Expression valueRef)
private void
parseXRETURN(Statements statements, DefaultStack<Expression> stack, int lineNumber)
private static java.util.List<java.lang.String>
prepareLambdaParameters(BaseFormalParameter formalParameters, int parameterCount)
private static BaseStatement
prepareLambdaStatements(BaseStatement baseStatement)
private void
reduceIntegerLocalVariableType(Expression expression)
static int
searchNextOpcode(BasicBlock basicBlock, int maxOffset)
private static boolean
stackContainsFieldReference(DefaultStack<Expression> stack, FieldReferenceExpression fr)
private static boolean
stackContainsLocalVariableReference(DefaultStack<Expression> stack, AbstractLocalVariable localVariable)
-
-
-
Field Detail
-
JSR_RETURN_ADDRESS_EXPRESSION
private static final ByteCodeParser.JsrReturnAddressExpression JSR_RETURN_ADDRESS_EXPRESSION
-
memberVisitor
private ByteCodeParser.MemberVisitor memberVisitor
-
searchFirstLineNumberVisitor
private SearchFirstLineNumberVisitor searchFirstLineNumberVisitor
-
typeMaker
private TypeMaker typeMaker
-
localVariableMaker
private LocalVariableMaker localVariableMaker
-
internalTypeName
private java.lang.String internalTypeName
-
typeParametersToTypeArgumentsBinder
private TypeParametersToTypeArgumentsBinder typeParametersToTypeArgumentsBinder
-
attributeBootstrapMethods
private AttributeBootstrapMethods attributeBootstrapMethods
-
bodyDeclaration
private ClassFileBodyDeclaration bodyDeclaration
-
typeBounds
private java.util.Map<java.lang.String,BaseType> typeBounds
-
returnedType
private Type returnedType
-
-
Constructor Detail
-
ByteCodeParser
public ByteCodeParser(TypeMaker typeMaker, LocalVariableMaker localVariableMaker, ClassFile classFile, ClassFileBodyDeclaration bodyDeclaration, ClassFileConstructorOrMethodDeclaration comd)
-
-
Method Detail
-
parse
public void parse(BasicBlock basicBlock, Statements statements, DefaultStack<Expression> stack)
-
extractParametersFromStack
private BaseExpression extractParametersFromStack(Statements statements, DefaultStack<Expression> stack, BaseType parameterTypes)
-
checkIfLastStatementIsAMultiAssignment
private static Expression checkIfLastStatementIsAMultiAssignment(Statements statements, Expression parameter)
-
getLocalVariableInAssignment
private AbstractLocalVariable getLocalVariableInAssignment(int index, int offset, Expression value)
-
parseLDC
private void parseLDC(DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, Constant constant)
-
parseILOAD
private static void parseILOAD(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable)
-
parseSTORE
private void parseSTORE(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable, Expression valueRef)
-
stackContainsLocalVariableReference
private static boolean stackContainsLocalVariableReference(DefaultStack<Expression> stack, AbstractLocalVariable localVariable)
-
parsePUT
private void parsePUT(Statements statements, DefaultStack<Expression> stack, int lineNumber, FieldReferenceExpression fr, Expression valueRef)
-
parseInvokeDynamic
private void parseInvokeDynamic(Statements statements, DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
-
prepareLambdaParameters
private static java.util.List<java.lang.String> prepareLambdaParameters(BaseFormalParameter formalParameters, int parameterCount)
-
prepareLambdaStatements
private static BaseStatement prepareLambdaStatements(BaseStatement baseStatement)
-
stackContainsFieldReference
private static boolean stackContainsFieldReference(DefaultStack<Expression> stack, FieldReferenceExpression fr)
-
createAssignment
private static Expression createAssignment(BinaryOperatorExpression boe, java.lang.String operator)
-
isPositiveOne
private static boolean isPositiveOne(Expression expression)
-
isNegativeOne
private static boolean isNegativeOne(Expression expression)
-
parseASTORE
private void parseASTORE(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable, Expression valueRef)
-
createAssignment
private void createAssignment(Statements statements, DefaultStack<Expression> stack, int lineNumber, Expression leftExpression, Expression rightExpression)
-
parseIINC
private void parseIINC(Statements statements, DefaultStack<Expression> stack, int lineNumber, AbstractLocalVariable localVariable, int count)
-
parseIF
private void parseIF(DefaultStack<Expression> stack, int lineNumber, BasicBlock basicBlock, java.lang.String operator1, java.lang.String operator2, int priority)
-
parseXRETURN
private void parseXRETURN(Statements statements, DefaultStack<Expression> stack, int lineNumber)
-
parseGetStatic
private void parseGetStatic(DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
-
parsePutStatic
private void parsePutStatic(Statements statements, DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
-
parseGetField
private void parseGetField(DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
-
parsePutField
private void parsePutField(Statements statements, DefaultStack<Expression> stack, ConstantPool constants, int lineNumber, int index)
-
getLastRightExpression
private static Expression getLastRightExpression(BinaryOperatorExpression boe)
-
newNewExpression
private Expression newNewExpression(int lineNumber, java.lang.String internalTypeName)
-
newIntegerBinaryOperatorExpression
private Expression newIntegerBinaryOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
-
newIntegerOrBooleanBinaryOperatorExpression
private Expression newIntegerOrBooleanBinaryOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
-
newIntegerOrBooleanComparisonOperatorExpression
private Expression newIntegerOrBooleanComparisonOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
-
newIntegerComparisonOperatorExpression
private Expression newIntegerComparisonOperatorExpression(int lineNumber, Expression leftExpression, java.lang.String operator, Expression rightExpression, int priority)
-
newPreArithmeticOperatorExpression
private Expression newPreArithmeticOperatorExpression(int lineNumber, java.lang.String operator, Expression expression)
-
newPostArithmeticOperatorExpression
private Expression newPostArithmeticOperatorExpression(int lineNumber, Expression expression, java.lang.String operator)
-
reduceIntegerLocalVariableType
private void reduceIntegerLocalVariableType(Expression expression)
-
getFieldInstanceReference
private Expression getFieldInstanceReference(Expression expression, ObjectType ot, java.lang.String name)
- Returns:
- expression, 'this' or 'super'
-
getMethodInstanceReference
private Expression getMethodInstanceReference(Expression expression, ObjectType ot, java.lang.String name, java.lang.String descriptor)
- Returns:
- expression, 'this' or 'super'
-
checkStack
private static void checkStack(DefaultStack<Expression> stack, byte[] code, int offset)
-
isAssertCondition
public static boolean isAssertCondition(java.lang.String internalTypeName, BasicBlock basicBlock)
-
getExceptionLocalVariableIndex
public static int getExceptionLocalVariableIndex(BasicBlock basicBlock)
-
searchNextOpcode
public static int searchNextOpcode(BasicBlock basicBlock, int maxOffset)
-
getLastOpcode
public static int getLastOpcode(BasicBlock basicBlock)
-
evalStackDepth
public static int evalStackDepth(BasicBlock bb)
-
evalStackDepth
public static int evalStackDepth(ConstantPool constants, byte[] code, BasicBlock bb)
-
countMethodParameters
private static int countMethodParameters(java.lang.String descriptor)
-
-