@Override
    public void transform(String owner, MethodNode methodNode) {
        MethodNode mn = methodNode;

        Analyzer<BasicValue> analyzer = new Analyzer<BasicValue>(new RedundantNullCheckInterpreter());

        int potentialProblemsCount = 0;
        int surelyRedundantCheck = 0;

        try {
            analyzer.analyze(owner, mn);

            Frame<BasicValue>[] frames = analyzer.getFrames();
            AbstractInsnNode[] insnNodes = mn.instructions.toArray();

            for (int i = 0; i < insnNodes.length; i++) {
                int opcode = insnNodes[i].getOpcode();
                if ((opcode == Opcodes.IFNULL || opcode == Opcodes.IFNONNULL)) {
                    BasicValue stackTop = frames[i].getStack(frames[i].getStackSize()-1);

                    if (stackTop == NULL_VALUE) {
                        surelyRedundantCheck++;
                    }

                    if (stackTop == MIXED_NULLABILITY_VALUE) {
                        potentialProblemsCount++;
                    }
                }
            }

        } catch (AnalyzerException e) {
            e.printStackTrace();
        }

        if (surelyRedundantCheck > 0) {
            System.out.println(Integer.valueOf(surelyRedundantCheck).toString() + " redundant checks found in " + owner + "." + mn.name + "(" + mn.signature + ")");
        }

        if (potentialProblemsCount > 0) {
            System.out.println(Integer.valueOf(potentialProblemsCount).toString() + " problems found in " + owner + "." + mn.name + "(" + mn.signature + ")");
        }
    }