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

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

        int potentialProblemsCount = 0;
        int rangeUnboxingCount = 0;

        try {
            analyzer.analyze(owner, methodNode);

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

            for (int i = 0; i < insnNodes.length; i++) {

                if (frames[i] == null || frames[i].getStackSize() == 0) {
                    continue;
                }

                BasicValue topValue = frames[i].getStack(frames[i].getStackSize()-1);
                if (isUnboxing(insnNodes[i]) && topValue instanceof BoxedBasicValue) {

                    if (((BoxedBasicValue) topValue).isFromRange()) {
                        rangeUnboxingCount++;
                    }

                    potentialProblemsCount++;
                }

            }

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

        if (potentialProblemsCount > 0) {
            totalProblemsCount += potentialProblemsCount;
            totalRangeProblemsCount += rangeUnboxingCount;

            System.out.println(
                    potentialProblemsCount + "/" + rangeUnboxingCount +
                    " problems found in " +
                    owner + "." + methodNode.name + "(" + methodNode.signature + ")");
        }
    }