| /******************************************************************************* |
| * Copyright (c) 2007 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: |
| * wharley@bea.com - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.jdt.apt.pluggable.tests.processors.message6; |
| |
| import java.util.Set; |
| |
| import javax.annotation.processing.AbstractProcessor; |
| import javax.annotation.processing.Messager; |
| import javax.annotation.processing.ProcessingEnvironment; |
| import javax.annotation.processing.RoundEnvironment; |
| import javax.lang.model.element.Element; |
| import javax.lang.model.element.TypeElement; |
| import javax.tools.Diagnostic; |
| |
| import org.eclipse.jdt.apt.pluggable.tests.annotations.Message6; |
| |
| /** |
| * A processor that reads the Message6 annotation and sends output via the Messager API |
| */ |
| public class Message6Proc extends AbstractProcessor { |
| |
| private ProcessingEnvironment _processingEnv; |
| private Messager _messager; |
| |
| /* (non-Javadoc) |
| * @see javax.annotation.processing.AbstractProcessor#init(javax.annotation.processing.ProcessingEnvironment) |
| */ |
| @Override |
| public synchronized void init(ProcessingEnvironment processingEnv) { |
| super.init(processingEnv); |
| _processingEnv = processingEnv; |
| _messager = _processingEnv.getMessager(); |
| } |
| /* (non-Javadoc) |
| * @see javax.annotation.processing.AbstractProcessor#process(java.util.Set, javax.annotation.processing.RoundEnvironment) |
| */ |
| @Override |
| public boolean process(Set<? extends TypeElement> annotations, |
| RoundEnvironment roundEnv) |
| { |
| if (!annotations.isEmpty()) { |
| round(annotations, roundEnv); |
| } |
| return true; |
| } |
| |
| /** |
| * Perform a round of processing |
| */ |
| private void round(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { |
| TypeElement genClassAnno = annotations.iterator().next(); |
| Set<? extends Element> annotatedEls = roundEnv.getElementsAnnotatedWith(genClassAnno); |
| for (Element annotatedEl : annotatedEls) { |
| Message6 messageMirror = annotatedEl.getAnnotation(Message6.class); |
| Diagnostic.Kind kind = Diagnostic.Kind.OTHER; |
| String text = null; |
| try { |
| kind = messageMirror.value(); |
| text = messageMirror.text(); |
| } catch (Exception e) { |
| // Do nothing: compiler will have put up a syntax error on the annotation already |
| return; |
| } |
| if (kind != Diagnostic.Kind.OTHER) { |
| _messager.printMessage(kind, text, annotatedEl); |
| } |
| } |
| } |
| |
| } |