< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacRoundEnvironment.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 168,177 **** --- 168,189 ---- } } e.accept(this, annotation); return annotatedElements; } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Set<Element> visitModule(ModuleElement e, TypeElement annotation) { + // Do not scan a module + return annotatedElements; + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Set<Element> visitPackage(PackageElement e, TypeElement annotation) { + // Do not scan a package + return annotatedElements; + } } // Could be written as a local class inside getElementsAnnotatedWithAny private class AnnotationSetMultiScanner extends ElementScanningIncludingTypeParameters<Set<Element>, Set<TypeElement>> {
*** 191,200 **** --- 203,224 ---- } } e.accept(this, annotations); return annotatedElements; } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Set<Element> visitModule(ModuleElement e, Set<TypeElement> annotations) { + // Do not scan a module + return annotatedElements; + } + + @Override @DefinedBy(Api.LANGUAGE_MODEL) + public Set<Element> visitPackage(PackageElement e, Set<TypeElement> annotations) { + // Do not scan a package + return annotatedElements; + } } private static abstract class ElementScanningIncludingTypeParameters<R, P> extends ElementScanner9<R, P> {
*** 222,235 **** */ @DefinedBy(Api.ANNOTATION_PROCESSING) public Set<? extends Element> getElementsAnnotatedWith(Class<? extends Annotation> a) { throwIfNotAnnotation(a); String name = a.getCanonicalName(); if (name == null) return Collections.emptySet(); else { ! TypeElement annotationType = eltUtils.getTypeElement(name); if (annotationType == null) return Collections.emptySet(); else return getElementsAnnotatedWith(annotationType); } --- 246,261 ---- */ @DefinedBy(Api.ANNOTATION_PROCESSING) public Set<? extends Element> getElementsAnnotatedWith(Class<? extends Annotation> a) { throwIfNotAnnotation(a); String name = a.getCanonicalName(); + if (name == null) return Collections.emptySet(); else { ! TypeElement annotationType = annotationToElement(a); ! if (annotationType == null) return Collections.emptySet(); else return getElementsAnnotatedWith(annotationType); }
*** 242,257 **** for (Class<? extends Annotation> annotation : annotations) { throwIfNotAnnotation(annotation); String name = annotation.getCanonicalName(); if (name == null) continue; ! annotationsAsElements.add(eltUtils.getTypeElement(name)); } return getElementsAnnotatedWithAny(annotationsAsElements.toArray(new TypeElement[0])); } private Element mirrorAsElement(AnnotationMirror annotationMirror) { return annotationMirror.getAnnotationType().asElement(); } private static final String NOT_AN_ANNOTATION_TYPE = --- 268,300 ---- for (Class<? extends Annotation> annotation : annotations) { throwIfNotAnnotation(annotation); String name = annotation.getCanonicalName(); if (name == null) continue; ! annotationsAsElements.add(annotationToElement(annotation)); } return getElementsAnnotatedWithAny(annotationsAsElements.toArray(new TypeElement[0])); } + private TypeElement annotationToElement(Class<? extends Annotation> annotation) { + // First, try an element lookup based on the annotation's + // canonical name. If that fails or is ambiguous, try a lookup + // using a particular module, perhaps an unnamed one. This + // offers more compatibility for compiling in single-module + // mode where the runtime module of an annotation type may + // differ from the single module being compiled. + String name = annotation.getCanonicalName(); + TypeElement annotationElement = eltUtils.getTypeElement(name); + if (annotationElement != null) + return annotationElement; + else { + String moduleName = Objects.requireNonNullElse(annotation.getModule().getName(), ""); + return eltUtils.getTypeElement(eltUtils.getModuleElement(moduleName), name); + } + } + private Element mirrorAsElement(AnnotationMirror annotationMirror) { return annotationMirror.getAnnotationType().asElement(); } private static final String NOT_AN_ANNOTATION_TYPE =
< prev index next >