    public String getMessage() {
        if (message != null)
            return message;
        String msg = (String) errorMessages.get(new Integer(id));
        if (msg == null)
            msg = ""; 
        if (arg != null) {
            msg = MessageFormat.format(msg, new Object[] { new String(arg) });
        }
        IASTNodeLocation [] locs = getNodeLocations();
        String file = null;
        int offset = 0;
        if( locs != null && locs.length > 0 ){
            file = ((IASTFileLocation) locs[0]).getFileName();
            offset = locs[0].getNodeOffset();
        } else {
            file = ""; 
            offset = 0;
        }
        Object[] args = new Object[] { msg, file, new Integer(offset) }; 
        message = ParserMessages.getFormattedString(AST_PROBLEM_PATTERN, args);
        return message;
    }

    public String getMessage() {
        if (message != null)
            return message;
        String msg = (String) errorMessages.get(new Integer(id));
        if (msg == null)
            msg = ""; 
        if (arg != null) {
            msg = MessageFormat.format(msg, new Object[] { new String(arg) });
        }
        IASTNodeLocation [] locs = getNodeLocations();
        String file = null;
        int offset = 0;
        if( locs != null && locs.length == 1 && locs[0] instanceof IASTFileLocation ){
            file = ((IASTFileLocation) locs[0]).getFileName();
            offset = locs[0].getNodeOffset();
        } else {
            IASTFileLocation f = getTranslationUnit().flattenLocationsToFile(locs);
            if( f == null )
            {
                file = ""; 
                offset = 0;
            }
            else
            {
                file = f.getFileName();
                offset = f.getNodeOffset();
            }
        }
        Object[] args = new Object[] { msg, file, new Integer(offset) }; 
        message = ParserMessages.getFormattedString(AST_PROBLEM_PATTERN, args);
        return message;
    }
