com.google.web.bindery.requestfactory.apt.ScannerBase Maven / Gradle / Ivy
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.web.bindery.requestfactory.apt;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.annotation.Annotation;
import java.util.List;
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.ExecutableType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.ElementScanner6;
/**
* Contains utility methods for traversing RequestFactory declarations.
*/
class ScannerBase extends ElementScanner6 {
/**
* Poisons the given type if one or more of the annotation values are
* non-null.
*/
protected static void poisonIfAnnotationPresent(State state, TypeElement x,
Annotation... annotations) {
for (Annotation a : annotations) {
if (a != null) {
state.poison(x, Messages.redundantAnnotation(a.annotationType().getSimpleName()));
}
}
}
protected static ExecutableType viewIn(TypeElement lookIn, ExecutableElement methodElement,
State state) {
// Do not use state.types.getDeclaredType, as we really want a
// "prototypical" type, and not a raw type.
// This is important when a proxy maps to a generic domain type:
// state.types.getDeclaredType without typeArgs would return the raw type,
// and asMemberOf would then return an ExecutableType using raw types too.
// For instance, if a class Foo contains a method whose return type is
// List (note it doesn't even make use of the T type parameter),
// then if we were to use raw types, the returned type of the ExecutableType
// would be the raw type java.util.List, and not List. Using
// asType(), we'd get the expected List though; and for a List,
// we'd get a List
© 2015 - 2024 Weber Informatics LLC | Privacy Policy