boolean (Statement parent, IfStatement stat, String classname, String key) { boolean throwInIf = true; Statement ifstat = stat.getIfstat(); InvocationExprent throwError = isAssertionError(ifstat); if (throwError == null) { //check else: Statement elsestat = stat.getElsestat(); throwError = isAssertionError(elsestat); if (throwError == null) { return false; } else { throwInIf = false; } } Object[] exprres = getAssertionExprent(stat.getHeadexprent().getCondition().copy(), classname, key, throwInIf); if (!(Boolean)exprres[1]) { return false; } List<Exprent> lstParams = new ArrayList<>(); Exprent ascond = null, retcond = null; if (throwInIf) { if (exprres[0] != null) { ascond = new FunctionExprent(FunctionExprent.FUNCTION_BOOL_NOT, (Exprent)exprres[0], throwError.bytecode); retcond = SecondaryFunctionsHelper.propagateBoolNot(ascond); } } else { ascond = (Exprent) exprres[0]; retcond = ascond; } lstParams.add(retcond == null ? ascond : retcond); if (!throwError.getParameters().isEmpty()) { lstParams.add(throwError.getParameters().get(0)); } AssertExprent asexpr = new AssertExprent(lstParams); Statement newstat = new BasicBlockStatement(new BasicBlock( DecompilerContext.getCounterContainer().getCounterAndIncrement(CounterContainer.STATEMENT_COUNTER))); newstat.setExprents(Arrays.asList(new Exprent[]{asexpr})); Statement first = stat.getFirst(); if (stat.iftype == IfStatement.IFTYPE_IFELSE || (first.getExprents() != null && !first.getExprents().isEmpty())) { first.removeSuccessor(stat.getIfEdge()); first.removeSuccessor(stat.getElseEdge()); List<Statement> lstStatements = new ArrayList<>(); if (first.getExprents() != null && !first.getExprents().isEmpty()) { lstStatements.add(first); } lstStatements.add(newstat); if (stat.iftype == IfStatement.IFTYPE_IFELSE) { if (throwInIf) { lstStatements.add(stat.getElsestat()); } else { lstStatements.add(stat.getIfstat()); } } SequenceStatement sequence = new SequenceStatement(lstStatements); sequence.setAllParent(); for (int i = 0; i < sequence.getStats().size() - 1; i++) { sequence.getStats().get(i).addSuccessor(new StatEdge(EdgeType.REGULAR, sequence.getStats().get(i), sequence.getStats().get(i + 1))); } if (stat.iftype == IfStatement.IFTYPE_IFELSE || !throwInIf) { Statement stmts; if (throwInIf) { stmts = stat.getElsestat(); } else { stmts = stat.getIfstat(); } List<StatEdge> lstSuccs = stmts.getAllSuccessorEdges(); if (!lstSuccs.isEmpty()) { StatEdge endedge = lstSuccs.get(0); if (endedge.closure == stat) { sequence.addLabeledEdge(endedge); } } } newstat = sequence; } newstat.getVarDefinitions().addAll(stat.getVarDefinitions()); parent.replaceStatement(stat, newstat); return true; }