boolean (List<Exprent> list, StructClass cl) { boolean res = false; int index = 0; while (index < list.size()) { Exprent current = list.get(index); Exprent ret = isSimpleConstructorInvocation(current); if (ret != null) { list.set(index, ret); res = true; continue; } // lambda expression (Java 8) ret = isLambda(current, cl); if (ret != null) { list.set(index, ret); res = true; continue; } // remove monitor exit if (isMonitorExit(current)) { list.remove(index); res = true; continue; } // trivial assignment of a stack variable if (isTrivialStackAssignment(current)) { list.remove(index); res = true; continue; } if (index == list.size() - 1) { break; } Exprent next = list.get(index + 1); // constructor invocation if (isConstructorInvocationRemote(list, index)) { list.remove(index); res = true; continue; } // remove getClass() invocation, which is part of a qualified new if (DecompilerContext.getOption(IFernflowerPreferences.REMOVE_GET_CLASS_NEW)) { if (isQualifiedNewGetClass(current, next)) { list.remove(index); res = true; continue; } } // direct initialization of an array int arrCount = isArrayInitializer(list, index); if (arrCount > 0) { for (int i = 0; i < arrCount; i++) { list.remove(index + 1); } res = true; continue; } // add array initializer expression if (addArrayInitializer(current, next)) { list.remove(index + 1); res = true; continue; } // integer ++expr and --expr (except for vars!) Exprent func = isPPIorMMI(current); if (func != null) { list.set(index, func); res = true; continue; } // expr++ and expr-- if (isIPPorIMM(current, next) || isIPPorIMM2(current, next)) { list.remove(index + 1); res = true; continue; } // assignment on stack if (isStackAssignment(current, next)) { list.remove(index + 1); res = true; continue; } if (!firstInvocation && isStackAssignment2(current, next)) { list.remove(index + 1); res = true; continue; } index++; } return res; }