void (ClassNode node, Map<ClassWrapper, MethodWrapper> map) { boolean noSynthFlag = DecompilerContext.getOption(IFernflowerPreferences.SYNTHETIC_NOT_SET); ClassWrapper wrapper = node.getWrapper(); for (MethodWrapper method : wrapper.getMethods()) { StructMethod mt = method.methodStruct; if ((noSynthFlag || mt.isSynthetic()) && mt.getDescriptor().equals("(Ljava/lang/String;)Ljava/lang/Class;") && mt.hasModifier(CodeConstants.ACC_STATIC)) { RootStatement root = method.root; if (root != null && root.getFirst().type == StatementType.TRY_CATCH) { CatchStatement cst = (CatchStatement)root.getFirst(); if (cst.getStats().size() == 2 && cst.getFirst().type == StatementType.BASIC_BLOCK && cst.getStats().get(1).type == StatementType.BASIC_BLOCK && cst.getVars().get(0).getVarType().equals(new VarType(CodeConstants.TYPE_OBJECT, 0, "java/lang/ClassNotFoundException"))) { BasicBlockStatement body = (BasicBlockStatement)cst.getFirst(); BasicBlockStatement handler = (BasicBlockStatement)cst.getStats().get(1); if (body.getExprents().size() == 1 && handler.getExprents().size() == 1) { if (BODY_EXPR.equals(body.getExprents().get(0)) && HANDLER_EXPR.equals(handler.getExprents().get(0))) { map.put(wrapper, method); break; } } } } } } // iterate nested classes for (ClassNode nd : node.nested) { mapClassMethods(nd, map); } }