public AnnotationProcessorEnvironmentImpl(Collection<TypeDeclaration> spectypedecls,
                                              Collection<TypeDeclaration> typedecls,
                                              Map<String, String> origOptions,
                                              Context context) {
        // Safer to copy collections before applying unmodifiable
        // wrapper.
        this.spectypedecls = Collections.unmodifiableCollection(spectypedecls);
        this.typedecls = Collections.unmodifiableCollection(typedecls);
        this.origOptions = Collections.unmodifiableMap(origOptions);

        declMaker = DeclarationMaker.instance(context);
        declUtils = DeclarationsImpl.instance(context);
        typeUtils = TypesImpl.instance(context);
        messager = MessagerImpl.instance(context);
        filer = FilerImpl.instance(context);
        bark = Bark.instance(context);
        roundCompleteListeners = new LinkedHashSet<RoundCompleteListener>();
    }