/******************************************************************************* * Copyright (c) 2016 IBM Corporation and others. * 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 * *******************************************************************************/ package org.eclipse.jdt.compiler.apt.tests.processors.AnnotationProcessorTests; import java.util.Set; import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.ElementFilter; import org.eclipse.jdt.compiler.apt.tests.processors.base.BaseProcessor; /** * A processor that should not be invoked. Reports an error if invoked. */ @SupportedAnnotationTypes({"targets.AnnotationProcessorTests.bug317216.Gen"}) @SupportedSourceVersion(SourceVersion.RELEASE_6) public class Bug317216Proc extends BaseProcessor { @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { for (TypeElement typeElement : annotations) { if (typeElement.getQualifiedName().toString().equals("targets.AnnotationProcessorTests.bug317216.Gen")) { for (Element element : roundEnv.getElementsAnnotatedWith(typeElement)) { if (element.getKind() == ElementKind.CLASS) { printEntrySet((TypeElement) element); } } } } return true; } public void printEntrySet(TypeElement element) { ProcessingEnvironment pe = processingEnv; for (ExecutableElement method : ElementFilter.methodsIn(pe.getElementUtils().getAllMembers(element))) { if (!method.toString().contains("getFoo")) { continue; } TypeElement element2 = (TypeElement) pe.getTypeUtils().asElement(method.getReturnType()); // element2 == java.util.Map for (ExecutableElement method2 : ElementFilter.methodsIn(pe.getElementUtils().getAllMembers(element2))) { if (method2.getSimpleName().toString().contains("entrySet")) { TypeMirror s = method2.getReturnType(); DeclaredType st = (DeclaredType) s; TypeMirror e = st.getTypeArguments().get(0); DeclaredType de = (DeclaredType) e; TypeMirror[] eargs = new TypeMirror[2]; eargs[0] = de.getTypeArguments().get(0); eargs[1] = de.getTypeArguments().get(1); TypeMirror e2 = pe.getTypeUtils().getDeclaredType((TypeElement) de.asElement(), eargs); // e2.toString breaks without fix e2.toString(); TypeMirror[] sargs = new TypeMirror[1]; sargs[0] = e2; s = pe.getTypeUtils().getDeclaredType((TypeElement) st.asElement(), sargs); s.toString(); } } } } }