public void addError()

in commons-digester3-core/src/main/java/org/apache/commons/digester3/binder/DefaultRulesBinder.java [63:106]


    public void addError( String messagePattern, final Object... arguments )
    {
        final StackTraceElement[] stackTrace = new Exception().getStackTrace();
        StackTraceElement element = null;

        int stackIndex = stackTrace.length - 1;
        while ( element == null && stackIndex > 0 ) // O(n) there's no better way
        {
            Class<?> moduleClass;
            try
            {
                // check if the set ClassLoader resolves the Class in the StackTrace
                moduleClass = Class.forName( stackTrace[stackIndex].getClassName(), false, this.classLoader );
            }
            catch ( final ClassNotFoundException e )
            {
                try
                {
                    // try otherwise with current ClassLoader
                    moduleClass =
                        Class.forName( stackTrace[stackIndex].getClassName(), false, this.getClass().getClassLoader() );
                }
                catch ( final ClassNotFoundException e1 )
                {
                    // Class in the StackTrace can't be found, don't write the file name:line number detail in the
                    // message
                    moduleClass = null;
                }
            }

            if ( moduleClass != null && RulesModule.class.isAssignableFrom( moduleClass ) )
            {
                element = stackTrace[stackIndex];
            }

            stackIndex--;
        }

        if ( element != null )
        {
            messagePattern = format( "%s (%s:%s)", messagePattern, element.getFileName(), element.getLineNumber() );
        }
        addError( new ErrorMessage( messagePattern, arguments ) );
    }