/******************************************************************************* * 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.annotations.mirrortest; import java.util.Collection; import org.eclipse.jdt.apt.tests.annotations.BaseProcessor; import com.sun.mirror.apt.AnnotationProcessorEnvironment; import com.sun.mirror.apt.Messager; import com.sun.mirror.declaration.AnnotationTypeDeclaration; import com.sun.mirror.declaration.AnnotationTypeElementDeclaration; import com.sun.mirror.declaration.Declaration; import com.sun.mirror.declaration.FieldDeclaration; import com.sun.mirror.declaration.MethodDeclaration; import com.sun.mirror.declaration.TypeDeclaration; import com.sun.mirror.type.DeclaredType; public class DefaultConstantProcessor extends BaseProcessor { public DefaultConstantProcessor(AnnotationProcessorEnvironment env){ super(env); } public void process() { final AnnotationTypeDeclaration trigger = (AnnotationTypeDeclaration)_env.getTypeDeclaration("test.Trigger"); final Messager msger = _env.getMessager(); if( trigger == null) msger.printError("cannot find test.Trigger"); final Collection decls = _env.getDeclarationsAnnotatedWith(trigger); for(Declaration decl : decls ){ if( decl instanceof TypeDeclaration ){ final TypeDeclaration typeDecl = (TypeDeclaration)decl; if( "test.EntryPoint".equals(typeDecl.getQualifiedName()) ){ final Collection fields = typeDecl.getFields(); for( FieldDeclaration field : fields ){ final String name = field.getSimpleName(); if( "nestedAnno".equals(name)){ final DeclaredType fieldType = (DeclaredType)field.getType(); final Collection nestedTypes = fieldType.getDeclaration().getNestedTypes(); for(TypeDeclaration nestedType : nestedTypes ){ if( "NestedAnnotation".equals(nestedType.getSimpleName()) ){ final Collection annotationMethods = nestedType.getMethods(); for( MethodDeclaration annotationMethod : annotationMethods ){ if( "value".equals(annotationMethod.getSimpleName()) ){ final AnnotationTypeElementDeclaration value = (AnnotationTypeElementDeclaration)annotationMethod; final String defaultString = value.getDefaultValue() == null ? "" : value.getDefaultValue().toString(); final String expected = "Eore"; if(!defaultString.equals(expected) ) msger.printError("expecting default=" + expected + " but got " +defaultString); } } } } final Collection nestedAnnoFields = fieldType.getDeclaration().getFields(); for(FieldDeclaration nestedAnnoField : nestedAnnoFields ){ if(nestedAnnoField.getSimpleName().equals("FOUR")){ final Object constant = nestedAnnoField.getConstantValue(); final String expected = "4"; final String constantStr = constant == null ? "" : constant.toString(); if(!constantStr.equals(expected) ) msger.printError("expecting constant=" + expected + " but got " + constantStr); } } continue; } else{ msger.printError("found unexpected field " + field ); } } continue; } } msger.printError("found unexpected declaration " + decl ); } } }