package net.karneim.pojobuilder.testenv; import java.lang.annotation.Annotation; import java.util.Set; import javax.annotation.processing.RoundEnvironment; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; public class RoundEnvironmentAdaptor implements RoundEnvironment { private final ThreadLocal<RoundEnvironment> delegate = new ThreadLocal<RoundEnvironment>(); public RoundEnvironment getDelegate() { return delegate.get(); } public void setDelegate(RoundEnvironment delegate) { this.delegate.set(delegate); } @Override public boolean processingOver() { checkDelegateNotNull(); return getDelegate().processingOver(); } @Override public boolean errorRaised() { checkDelegateNotNull(); return getDelegate().errorRaised(); } @Override public Set<? extends Element> getRootElements() { checkDelegateNotNull(); return getDelegate().getRootElements(); } @Override public Set<? extends Element> getElementsAnnotatedWith(TypeElement a) { checkDelegateNotNull(); return getDelegate().getElementsAnnotatedWith(a); } @Override public Set<? extends Element> getElementsAnnotatedWith(Class<? extends Annotation> a) { checkDelegateNotNull(); return getDelegate().getElementsAnnotatedWith(a); } private void checkDelegateNotNull() { if (delegate.get() == null) { throw new IllegalStateException("Calling methods on RoundEnvironment is only supported inside test methods!"); } } }