void PluginAstConsumer::HandleTranslationUnit(clang::ASTContext &context) {

	llvm::raw_ostream& o = llvm::outs();

	for (clang::DeclContext::decl_iterator declIte =
	  context.getTranslationUnitDecl()->decls_begin(),
	  dEnd = context.getTranslationUnitDecl()->decls_end();
	  declIte != dEnd; ++declIte) {

	o << declIte->getDeclKindName();

	if (declIte->hasAttrs()) {
		o << "\nvia getAttr:\t";

		if (const clang::AnnotateAttr *AA =
		  declIte->getAttr<clang::AnnotateAttr>())
			o << '"' << AA->getAnnotation() << "\" [" <<
			  AA->getAnnotationLength() << "]\t";

		o << "\nvia attr_iterator:\t";

		for (clang::Decl::attr_iterator attr = declIte->attr_begin(),
			 aEnd = declIte->attr_end();
			 attr != aEnd; ++attr) {

			if (const clang::AnnotateAttr *aa =
			  dyn_cast<clang::AnnotateAttr>(attr)) {

				o << '"' << aa->getAnnotation() << "\" [" <<
				  aa->getAnnotationLength() << "]\t";
			}
		}
	}
	o << "\n\n";
	}
}
