| /******************************************************************************* |
| * 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.tests.annotations.listener; |
| |
| import org.eclipse.jdt.apt.tests.annotations.BaseProcessor; |
| |
| import com.sun.mirror.apt.AnnotationProcessorEnvironment; |
| import com.sun.mirror.apt.RoundCompleteEvent; |
| import com.sun.mirror.apt.RoundCompleteListener; |
| |
| /** |
| * Ensure that the RoundCompleteListener does get called, and that it is possible |
| * to modify the listener list from within the callback (see bug 180595). |
| */ |
| public class ListenerProcessor extends BaseProcessor |
| { |
| private static int _calls = 0; |
| |
| private class Listener implements RoundCompleteListener { |
| public void roundComplete(RoundCompleteEvent event) { |
| if (event.getRoundState().finalRound()) { |
| ++_calls; |
| _env.removeListener(this); |
| // Only report success if we make it this far on both listeners |
| if (2 == _calls) { |
| ListenerProcessor.this.reportSuccess(ListenerProcessor.class); |
| } |
| } |
| } |
| } |
| |
| public ListenerProcessor(AnnotationProcessorEnvironment env) { |
| super(env); |
| env.addListener(new Listener()); |
| env.addListener(new Listener()); |
| } |
| |
| /* (non-Javadoc) |
| * @see com.sun.mirror.apt.AnnotationProcessor#process() |
| */ |
| public void process() |
| { |
| // do nothing |
| } |
| |
| } |