/******************************************************************************* * Copyright (c) 2005 BEA Systems, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * tyeung@bea.com - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.apt.tests.external.annotations.batch; import java.util.Collection; import java.util.HashSet; import com.sun.mirror.apt.AnnotationProcessor; import com.sun.mirror.apt.AnnotationProcessorEnvironment; import com.sun.mirror.apt.Messager; import com.sun.mirror.declaration.AnnotationTypeDeclaration; import com.sun.mirror.declaration.Declaration; import com.sun.mirror.declaration.TypeDeclaration; public class BatchProcessor implements AnnotationProcessor { // Store how often we've been called in order to // test classloader resetting private static int TIMES_CALLED = 0; private final AnnotationProcessorEnvironment _env; BatchProcessor(AnnotationProcessorEnvironment env){ _env = env; } public void process() { final Messager msger = _env.getMessager(); if( TIMES_CALLED == 0 ){ final Collection<String> expectedList = new HashSet<String>(); expectedList.add("p1.A"); expectedList.add("p1.B"); expectedList.add("p1.C"); expectedList.add("p1.D"); final Collection<TypeDeclaration> allTypes = _env.getSpecifiedTypeDeclarations(); for( TypeDeclaration type : allTypes ){ expectedList.remove(type.getQualifiedName()); } if( !expectedList.isEmpty() ){ msger.printError("failed to find type " + expectedList); } final Collection<String> expectedAnnotated = new HashSet<String>(); expectedList.add("p1.A"); expectedList.add("p1.C"); final AnnotationTypeDeclaration batchAnnoDecl = (AnnotationTypeDeclaration)_env.getTypeDeclaration(Batch.class.getName()); final Collection<Declaration> decls = _env.getDeclarationsAnnotatedWith(batchAnnoDecl); for( Declaration decl : decls ){ if( decl instanceof TypeDeclaration ) expectedAnnotated.remove( ((TypeDeclaration)decl).getQualifiedName() ); } if( !expectedAnnotated.isEmpty() ){ msger.printError("failed to find annotated type " + expectedAnnotated ); } msger.printWarning("CompletedSuccessfully"); } else{ msger.printWarning("Called " + (TIMES_CALLED + 1) + " times."); } TIMES_CALLED++; } }