private void setLineNumber(SourceInfo info) {
            if (info != null) {
                int line = info.getLine();
                if (line != mLastLine) {
                    mLastLine = line;
                    mBuilder.mapLineNumber(line);
                }
            }
        }
    }

    /*
     * Check context to see if profiling is enabled by checking
     * the observer mode in the context.  Generate inline profiling
     * calls to the observer if it is expecting events to be external
     * to the MergedClass.
     */
    private boolean isProfilingEnabled() {
        Class<?> mergedClass = mUnit.getRuntimeContext();
        boolean profilingEnabled = true;

        try {
            Method a = mergedClass.getDeclaredMethod("getObserverMode");
            int observerMode = ((Integer) a.invoke(null)).intValue();
            profilingEnabled = (observerMode & MergedClass.OBSERVER_ENABLED) != 0 &&
                (observerMode & MergedClass.OBSERVER_EXTERNAL) != 0;
        }
        catch (Exception ex) { profilingEnabled = false; }
        return profilingEnabled;
    }


    private static class GuardHandler {
        final Label tryStart;
        final Label tryEnd;
        final Statement replacement;

        public GuardHandler(Label tryStart, Label tryEnd,
                            Statement replacement) {
            this.tryStart = tryStart;
            this.tryEnd = tryEnd;
            this.replacement = replacement;
        }
    }

    private static class DetailException extends RuntimeException {
        private static final long serialVersionUID = 1L;

        private Exception mException;

        public DetailException(Exception e, String detail) {
            super(e.getMessage() + ' ' + detail);
            mException = e;
        }

        public String toString() {
            return mException.getClass().getName() + ": " + getMessage();
        }

        public void printStackTrace() {
            mException.printStackTrace();
        }

        public void printStackTrace(java.io.PrintStream ps) {
            mException.printStackTrace(ps);
        }

        public void printStackTrace(java.io.PrintWriter pw) {
            mException.printStackTrace(pw);
        }
    }

    private static class BreakAndContinueLabels {
        Label mBreakLabel = null;
        Label mContinueLabel = null;

        public BreakAndContinueLabels(Label breakLabel) {
            mBreakLabel = breakLabel;
        }

        public Label getBreakLabel() { return mBreakLabel; }
        public void setContinueLabel(Label continueLabel) { mContinueLabel = continueLabel; }
        public Label getContinueLabel() { return mContinueLabel; }
    }