private void queue(String className, long timestamp) {
        log("Processing "+className,Project.MSG_VERBOSE);
        Class ann;
        try {
            ann = userLoader.loadClass(className);
        } catch (ClassNotFoundException e) {
            throw new BuildException(e);
        }

        if(!Annotation.class.isAssignableFrom(ann)) {
            log("Skipping "+className+". Not an annotation",Project.MSG_WARN);
            return;
        }

        JDefinedClass w;
        try {
            w = pkg._class(JMod.PUBLIC,getShortName(className)+"Writer",ClassType.INTERFACE);
        } catch (JClassAlreadyExistsException e) {
            throw new BuildException("Class name collision on "+className, e);
        }

        // up to date check
        String name = pkg.name();
        if(name.length()==0)    name = getShortName(className);
        else                    name += '.'+getShortName(className);

        File dst = new File(output,name.replace('.',File.separatorChar)+"Writer.java");
        if(dst.exists() && dst.lastModified() > timestamp ) {
            log("Skipping "+className+". Up to date.",Project.MSG_VERBOSE);
            w.hide();
        }

        queue.put(ann,w);
    }