private void collectSubscribers(Set<? extends TypeElement> annotations, RoundEnvironment env, Messager messager) {
for (TypeElement annotation : annotations) {
Set<? extends Element> elements = env.getElementsAnnotatedWith(annotation);
for (Element element : elements) {
if (element instanceof ExecutableElement) {
ExecutableElement method = (ExecutableElement) element;
if (checkHasNoErrors(method, messager)) {
TypeElement classElement = (TypeElement) method.getEnclosingElement();
methodsByClass.putElement(classElement, method);
}
} else {
messager.printMessage(Diagnostic.Kind.ERROR, "@Subscribe is only valid for methods", element);
}
}
}
}
java类javax.annotation.processing.Messager的实例源码
EventBusAnnotationProcessor.java 文件源码
项目:GitHub
阅读 25
收藏 0
点赞 0
评论 0
CodeGenerator.java 文件源码
项目:Barricade
阅读 25
收藏 0
点赞 0
评论 0
private static MethodSpec.Builder generateConstructorBuilder(
HashMap<String, BarricadeResponseSet> values, Messager messager) {
MethodSpec.Builder methodBuilder = MethodSpec.constructorBuilder().addModifiers(PUBLIC);
methodBuilder.addStatement("configs = new HashMap<>()");
for (Map.Entry<String, BarricadeResponseSet> entry : values.entrySet()) {
BarricadeResponseSet barricadeResponseSet = entry.getValue();
String listName = "barricadeResponsesFor" + entry.getKey();
methodBuilder.addStatement("$T<$T> " + listName + " = new $T<>()", List.class,
BarricadeResponse.class, ArrayList.class);
for (BarricadeResponse barricadeResponse : barricadeResponseSet.responses) {
methodBuilder.addStatement(listName + ".add(new $T($L, $S, $S))", BarricadeResponse.class,
barricadeResponse.statusCode, barricadeResponse.responseFileName,
barricadeResponse.contentType);
}
methodBuilder.addStatement(
"configs.put($S, new $T(" + listName + ", " + barricadeResponseSet.defaultIndex + "))",
entry.getKey(), TYPE_BARRICADE_RESPONSE_SET);
}
return methodBuilder;
}
AnnotatedClass.java 文件源码
项目:AnnotationProcessorStarter
阅读 26
收藏 0
点赞 0
评论 0
public void writeInto(final Filer pFiler, final Messager pMessager) {
// prepare generated class
final GeneratedClass lGeneratedClass = new GeneratedClass(mEnclosingClass, mMethods);
final TypeSpec lTypeSpecGeneratedClass = lGeneratedClass.buildTypeSpec();
final String lPackageName = lGeneratedClass.packageName();
// create generated class to a file
try {
JavaFile.builder(lPackageName, lTypeSpecGeneratedClass)
.build()
.writeTo(pFiler);
} catch (IOException pE) {
logError(pMessager, mEnclosingClass, "error while writing generated class");
}
}
SpecParser.java 文件源码
项目:dataenum
阅读 22
收藏 0
点赞 0
评论 0
public static Spec parse(Element element, ProcessingEnvironment processingEnv) {
Messager messager = processingEnv.getMessager();
if (element.getKind() != ElementKind.INTERFACE) {
messager.printMessage(
Diagnostic.Kind.ERROR, "@DataEnum can only be used on interfaces.", element);
return null;
}
TypeElement dataEnum = (TypeElement) element;
List<TypeVariableName> typeVariableNames = new ArrayList<>();
for (TypeParameterElement typeParameterElement : dataEnum.getTypeParameters()) {
typeVariableNames.add(TypeVariableName.get(typeParameterElement));
}
List<Value> values = ValuesParser.parse(dataEnum, processingEnv);
if (values == null) {
return null;
}
ClassName enumInterface = ClassName.get(dataEnum);
return new Spec(enumInterface, typeVariableNames, values);
}
SpringAnnotationParser.java 文件源码
项目:AptSpring
阅读 21
收藏 0
点赞 0
评论 0
private boolean parseBeanMethod(ExecutableElement beanMethod, String[] beanNames, Messager messager) {
boolean valid = true;
if (beanNames.length == 0) {
valid = false;
messager.printMessage(Kind.ERROR, "All @Bean annotations must define at least one name for a bean.", beanMethod);
}
if (beanMethod.getReturnType().getKind() != TypeKind.DECLARED) {
valid = false;
messager.printMessage(Kind.ERROR, "@Bean methods must return an Object", beanMethod);
}
if (!beanMethod.getModifiers().contains(Modifier.PUBLIC)) {
valid = false;
messager.printMessage(Kind.ERROR, "@Bean methods must be marked public", beanMethod);
}
List<Modifier> illegalModifiers = getIllegalModifiers(beanMethod.getModifiers(), DISALLOWED_ON_METHOD);
if (illegalModifiers.size() != 0) {
valid = false;
messager.printMessage(Kind.ERROR, "Illegal modifiers found on spring @Bean method: "
+ illegalModifiers.stream().map(m -> m.name()).collect(Collectors.joining(", ")),
beanMethod);
}
return valid;
}
AnnotationProcessing.java 文件源码
项目:openjdk-jdk10
阅读 24
收藏 0
点赞 0
评论 0
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
if (processingEnv.getElementUtils().getModuleElement("m1x") == null) {
throw new AssertionError("No m1x module found.");
}
Messager messager = processingEnv.getMessager();
for (TypeElement clazz : ElementFilter.typesIn(roundEnv.getRootElements())) {
for (VariableElement field : ElementFilter.fieldsIn(clazz.getEnclosedElements())) {
messager.printMessage(Kind.NOTE, "field: " + field.getSimpleName());
}
}
return false;
}
TSModuleHandlerTest.java 文件源码
项目:jtsgen
阅读 24
收藏 0
点赞 0
评论 0
@Before
public void init() {
Messager messenger = mock(Messager.class);
this.annotationValue = mock(AnnotationValue.class);
this.annotationTypeMirror = mock(TypeMirror.class);
this.executableElement = mock(ExecutableElement.class);
this.annotationElement = mock(TypeElement.class);
when(this.annotationElement.asType()).thenReturn(this.annotationTypeMirror);
this.elementUtils = mock(Elements.class);
when(this.elementUtils.getTypeElement(any())).thenReturn(this.annotationElement);
this.processingEnv = mock(ProcessingEnvironment.class);
when(processingEnv.getMessager()).thenReturn(messenger);
when(processingEnv.getElementUtils()).thenReturn(this.elementUtils);
// finally....
this.testee = new TSModuleHandler(processingEnv);
}
Settings.java 文件源码
项目:EgTest
阅读 29
收藏 0
点赞 0
评论 0
static Settings instance(Messager messager, Map<String,String> options) {
String targetDirStr = options.getOrDefault(TARGET_DIR_KEY, "");
if (targetDirStr.equals("")) {
return illegalInstance("initialization failed; no "+TARGET_DIR_KEY+"; options are "+options);
}
String onDirExistsStr = options.get(DIR_EXISTS_BEHAVIOR_KEY);
AlreadyExistsBehavior targetDirExistsBehavior = AlreadyExistsBehavior.OVERWRITE;
if (onDirExistsStr != null) {
try {
targetDirExistsBehavior = AlreadyExistsBehavior.valueOf(onDirExistsStr);
}
catch (IllegalArgumentException ex) {
return handleBadDirExistsBehavior(messager, onDirExistsStr);
}
}
EgLanguage language = EgLanguage.valueOf(options.getOrDefault(TARGET_LANGUAGE_KEY, "JAVA"));
boolean failOnUnsupported = booleanOption(options.get(FAIL_ON_UNSUPPORTED_KEY), true);
boolean selfTest = booleanOption(options.get(SELF_TEST_KEY), false);
return new Settings(language, new File(targetDirStr), targetDirExistsBehavior, failOnUnsupported, selfTest);
}
ImmuCompilerTest.java 文件源码
项目:immu
阅读 29
收藏 0
点赞 0
评论 0
@Test
public void write_withIOException() throws Exception {
final ProcessingEnvironment env = mock(ProcessingEnvironment.class);
final Messager messager = mock(Messager.class);
final Filer filer = mock(Filer.class);
when(env.getMessager()).thenReturn(messager);
when(env.getFiler()).thenReturn(filer);
compiler.init(env);
final JavaFile javaFile = mock(JavaFile.class);
doThrow(IOException.class).when(javaFile).writeTo(any(Filer.class));
compiler.writeSource(javaFile);
verify(messager, times(1)).printMessage(eq(Diagnostic.Kind.ERROR), any());
}
BindingManager.java 文件源码
项目:remoter
阅读 27
收藏 0
点赞 0
评论 0
/**
* Initialize with the given details from the annotation processing enviornment
*/
public BindingManager(Elements elementUtils, Filer filer, Messager messager, Types typeUtils) {
this.elementUtils = elementUtils;
this.filer = filer;
this.messager = messager;
this.typeUtils = typeUtils;
this.typeBuilderMap = new HashMap<>();
stringTypeMirror = getType("java.lang.String");
listTypeMirror = getType("java.util.List");
mapTypeMirror = getType("java.util.Map");
charSequenceTypeMirror = getType("java.lang.CharSequence");
parcellableTypeMirror = getType("android.os.Parcelable");
try {
parcelClass = Class.forName("org.parceler.Parcel");
} catch (ClassNotFoundException ignored) {
}
}
ProcessorModule.java 文件源码
项目:java-code-templates
阅读 21
收藏 0
点赞 0
评论 0
@Provides @Singleton @Named(DESCRIPTOR_KEY)
static Inventory provideDescriptorInventory(@Named(DESCRIPTOR_KEY) final TypeElement descriptorElement,
final ClassName outputClassName, final Types types, final Elements elements, final Trees trees,
final Messager messager, @Named(TEMPLATE_KEY) Inventory templateInventory,
final ImmutableSet<TypeElement> typesToReceiveAnnotations) {
return new Inventory(descriptorElement, outputClassName, types, elements, trees, messager, true,
templateInventory.rawTypeNameSubstitutions(), typesToReceiveAnnotations);
}
AutoJacksonProcessor.java 文件源码
项目:autojackson
阅读 29
收藏 0
点赞 0
评论 0
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
final Types typeUtils = processingEnv.getTypeUtils();
final Elements elementUtils = processingEnv.getElementUtils();
final Filer filer = processingEnv.getFiler();
final Messager messager = processingEnv.getMessager();
this.processorUtil = new ProcessorUtil(elementUtils, messager);
this.implementationCreator = new ImplementationCreator(typeUtils, elementUtils, filer, this.processorUtil);
this.simpleDeserializerCreator = new SimpleDeserializerCreator(typeUtils, elementUtils, filer, this.processorUtil);
this.complexDeserializerCreator = new ComplexDeserializerCreator(typeUtils, elementUtils, filer, this.processorUtil);
this.setupCreator = new SetupCreator(filer, this.processorUtil);
}
EventBusAnnotationProcessor.java 文件源码
项目:GitHub
阅读 23
收藏 0
点赞 0
评论 0
private TypeMirror getParamTypeMirror(VariableElement param, Messager messager) {
TypeMirror typeMirror = param.asType();
// Check for generic type
if (typeMirror instanceof TypeVariable) {
TypeMirror upperBound = ((TypeVariable) typeMirror).getUpperBound();
if (upperBound instanceof DeclaredType) {
if (messager != null) {
messager.printMessage(Diagnostic.Kind.NOTE, "Using upper bound type " + upperBound +
" for generic parameter", param);
}
typeMirror = upperBound;
}
}
return typeMirror;
}
LoggerTest.java 文件源码
项目:andcouchbaseentity
阅读 29
收藏 0
点赞 0
评论 0
@Before
public void init() {
mMock = Mockito.mock(ProcessingEnvironment.class);
mMessagerMock = Mockito.mock(Messager.class);
Mockito.when(mMock.getMessager()).thenReturn(mMessagerMock);
}
MessagerDiags.java 文件源码
项目:openjdk-jdk10
阅读 20
收藏 0
点赞 0
评论 0
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
Messager messager = processingEnv.getMessager();
for (Element e : roundEnv.getRootElements()) {
messager.printMessage(WARNING, WRN_NO_SOURCE);
messager.printMessage(WARNING, WRN_WITH_SOURCE, e);
messager.printMessage(WARNING, WRN_NO_SOURCE);
}
return false;
}
CodeGenerator.java 文件源码
项目:Barricade
阅读 27
收藏 0
点赞 0
评论 0
/**
* Generates the code for the Barricade configuration based on the annotations found.
*
* @param processingEnv Processing environment
* @param configs Configuration detected by annotation processing
* @param messager Messager to print logs
* @throws IOException
*/
static void generateClass(ProcessingEnvironment processingEnv,
HashMap<String, BarricadeResponseSet> configs, Messager messager) throws IOException {
messager.printMessage(Diagnostic.Kind.NOTE, "Generating configuration code...");
TypeSpec.Builder classBuilder = classBuilder(CLASS_NAME).addModifiers(PUBLIC, FINAL);
FieldSpec valuesField = FieldSpec.builder(TYPE_CONFIG, "configs").addModifiers(PRIVATE).build();
FieldSpec instanceField =
FieldSpec.builder(ClassName.get(PACKAGE_NAME, CLASS_NAME), "barricadeConfig")
.addModifiers(PRIVATE, STATIC)
.build();
MethodSpec.Builder instanceMethodBuilder = generateGetInstanceMethodBuilder();
MethodSpec.Builder constructorMethodBuilder = generateConstructorBuilder(configs, messager);
MethodSpec.Builder valuesMethod = generateGetConfigsMethodBuilder();
MethodSpec.Builder getResponseMethodBuilder = generateGetResponseMethodBuilder();
classBuilder.addType(generateEndpointsInnerClass(configs.keySet()));
classBuilder.addType(generateResponsesInnerClass(configs));
classBuilder.addField(instanceField);
classBuilder.addField(valuesField);
classBuilder.addMethod(instanceMethodBuilder.build());
classBuilder.addMethod(constructorMethodBuilder.build());
classBuilder.addMethod(valuesMethod.build());
classBuilder.addMethod(getResponseMethodBuilder.build());
classBuilder.addSuperinterface(IBarricadeConfig.class);
JavaFile.Builder javaFileBuilder = builder(PACKAGE_NAME, classBuilder.build());
JavaFile javaFile = javaFileBuilder.build();
javaFile.writeTo(processingEnv.getFiler());
messager.printMessage(Diagnostic.Kind.NOTE, "Code generation complete!");
}
ProcessorException.java 文件源码
项目:java-code-templates
阅读 20
收藏 0
点赞 0
评论 0
public void emitError(final Messager messager) {
if (troubleMaker.isPresent()) {
messager.printMessage(ERROR, getMessage(), troubleMaker.get());
} else {
messager.printMessage(ERROR, getMessage());
}
}
SpringAnnotationParser.java 文件源码
项目:AptSpring
阅读 20
收藏 0
点赞 0
评论 0
/**
* Read a TypeElement to get application structure.
*
* @param te definition type element.
* @param messager presents error messages for the compiler to pass to the user.
* @return the {@link DefinitionModel} parsed from a properly annotated {@link TypeElement}
*/
public DefinitionModel extractDefinition(TypeElement te, Messager messager) {
Verified verified = te.getAnnotation(Verified.class);
DefinitionModel model = new DefinitionModel(te, verified == null ? false : verified.root());
errorIfInvalidClass(te, messager);
model.addDependencyNames(getImportsTypes(te));
String[] configurationBeanNames = AnnotationValueExtractor
.getAnnotationValue(te, CONFIGURATION_TYPE, DEFAULT_ANNOTATION_VALUE);
String[] componentBeanNames = AnnotationValueExtractor
.getAnnotationValue(te, COMPONENT_TYPE, DEFAULT_ANNOTATION_VALUE);
if (configurationBeanNames != null) {
for (Element enclosed : te.getEnclosedElements()) {
handleEnclosedElements(messager, model, enclosed);
}
} else {
if (componentBeanNames != null) {
addModelsFromComponent(te, model, componentBeanNames, messager);
} else {
messager.printMessage(Kind.ERROR, "@Verified annotation must only be used on @Configuration or @Component classes", te);
}
}
for (String expectedBean : verified.expectedBeans()) {
model.addDefinition(new ExpectedModel(expectedBean, te));
}
return model;
}
AnnotatedModel.java 文件源码
项目:auto-adapter
阅读 25
收藏 0
点赞 0
评论 0
AnnotatedModel(final TypeElement model, final Types typeUtils, final Elements elementUtils, final Messager messager,
final Optional<AnnotationValue> annotationValue, Set<Integer> viewIds) {
this.annotationValue = annotationValue;
this.typeUtils = typeUtils;
this.elementUtils = elementUtils;
this.messager = messager;
this.viewHolderFactoryClassName = getViewHolderFactoryClassName(model);
this.model = model;
this.viewBinderClassName = getViewBinderClassName(model);
this.viewIds = viewIds;
}
SpringAnnotationParser.java 文件源码
项目:AptSpring
阅读 23
收藏 0
点赞 0
评论 0
/**
* Builds an instance model by finding the autowired constructor of an @Component model as well as
*
* @param te the TypeElement corresponding to the @Component class.
* @param dm the definitionModel built from the @Component.
* @param names the list if names in an @Component annotation. Users must explicitly define one.
* @param messager errors are added to this APT messager.
*/
private void addModelsFromComponent(TypeElement te, DefinitionModel dm, String[] names, Messager messager) {
List<InstanceDependencyModel> dependencies = new ArrayList<>();
ExecutableElement chosenConstructor = findAutowiredConstructor(extractConstructorsFromComponent(te));
if (chosenConstructor == null) {
messager.printMessage(Kind.ERROR, "No single default constructor or single @Autowired constructor", te);
} else {
dependencies = execElementDependency(messager, dm, chosenConstructor);
//dm.getExpectedDefinitions()
}
te.getEnclosedElements().stream()
.filter(el -> el instanceof VariableElement)
.map(el -> (VariableElement) el)
.filter(ve -> !staticPrivateFinalLiteralField.test(ve) && !privateFinalField.test(ve))
.forEach(ve -> messager
.printMessage(Kind.ERROR, "@Component classes my only have static final constant fields or final private fields", ve));
InstanceModel model = new InstanceModel(names[0],
dm.getIdentity(),
chosenConstructor,
te.getQualifiedName().toString(),
dependencies,
new ArrayList<>());
dm.addDefinition(model);
for (InstanceDependencyModel dep : dependencies) {
ExpectedModel expectedModel = new ExpectedModel(dep.getIdentity());
expectedModel.addDefinitionReferenceToType(model.getIdentity(), dep.getType());
dm.addDefinition(expectedModel);
}
}
SpringAnnotationParser.java 文件源码
项目:AptSpring
阅读 22
收藏 0
点赞 0
评论 0
private void errorIfInvalidClass(TypeElement te, Messager messager) {
if (te.getEnclosingElement().getKind() != ElementKind.PACKAGE) {
messager.printMessage(Kind.ERROR, "The class must be a top level class, not an internal class", te);
}
if (AnnotationValueExtractor.getAnnotationValue(te, COMPONENTSCAN_TYPE, "basePackages") != null
|| AnnotationValueExtractor.getAnnotationValue(te, COMPONENTSCANS_TYPE, "basePackages") != null) {
messager.printMessage(Kind.ERROR, "You may not use @ComponentScan(s) on @Verified classes", te);
}
}
AptParsingContext.java 文件源码
项目:AptSpring
阅读 21
收藏 0
点赞 0
评论 0
/**
* Gives user feedback as info/warnings/errors during compilation (works in m2e with takari-lifecycle).
*
* @param messager APT round handler for user messages
*/
public void outputErrors(Messager messager) {
Iterable<ErrorModel> errors = checkAndStoreValid();
for (ErrorModel error : errors) {
for (AbstractModel model : error.getInvolved()) {
if (model.getSourceElement().isPresent()) {
messager.printMessage(Kind.ERROR, error.getMessageOn(model, k -> getMessageFormats().getMessage(k)),
getCorrespondingElement(elementUtils, model.getSourceElement().get()));
}
}
}
}
AstSubstitutionProcessor.java 文件源码
项目:java-code-templates
阅读 27
收藏 0
点赞 0
评论 0
AstSubstitutionProcessor(final Trees trees
, final Inventory substitutionInventory // To identify when we have found a substitution
, final Inventory fieldsInventory // Provides fields to use as replacements
, final Messager messager
)
{
this.trees = trees;
this.substitutionInventory = substitutionInventory;
this.fields = fieldsInventory.beanProperties().stream().map(BeanProperty::propertyName).collect(toImmutableSet());
this.messager = messager;
}
ProcessorElement.java 文件源码
项目:domino
阅读 20
收藏 0
点赞 0
评论 0
public ProcessorElement(Element element, Elements elementUtils, Types typeUtils,
Messager messager) {
this.element = element;
this.elementUtils = elementUtils;
this.typeUtils = typeUtils;
this.messager = messager;
}
PresentersCollector.java 文件源码
项目:domino
阅读 21
收藏 0
点赞 0
评论 0
public PresentersCollector(Messager messager, Types typeUtils, Elements elementUtils,
BaseProcessor.ElementFactory elementFactory, Set<String> presenters) {
this.messager = messager;
this.typeUtils = typeUtils;
this.elementUtils = elementUtils;
this.elementFactory = elementFactory;
this.presenters = presenters;
}
Register.java 文件源码
项目:domino
阅读 29
收藏 0
点赞 0
评论 0
public Register(String fileName, Set<String> items, Messager messager,
ProcessingEnvironment processingEnv) {
this.items = items;
this.messager = messager;
this.processingEnv = processingEnv;
this.fileName=fileName;
}
CommandsCollector.java 文件源码
项目:domino
阅读 21
收藏 0
点赞 0
评论 0
public CommandsCollector(Messager messager, Types typeUtils,
BaseProcessor.ElementFactory elementFactory, Set<String> requests) {
this.messager = messager;
this.typeUtils = typeUtils;
this.elementFactory = elementFactory;
this.requests = requests;
}
IlluminatiPropertiesHelper.java 文件源码
项目:illuminati
阅读 18
收藏 0
点赞 0
评论 0
public static IlluminatiProperties getIlluminatiProperties(final Class<? extends IlluminatiProperties> clazz, Messager messager, final String configPropertiesFileName) {
IlluminatiProperties illuminatiProperties = null;
for (String extension : CONFIG_FILE_EXTENSTIONS) {
String dotBeforeExtension = ".";
if (StringObjectUtils.isValid(PROFILES_PHASE)) {
dotBeforeExtension = "-" + PROFILES_PHASE + ".";
}
final String fullFileName = configPropertiesFileName + dotBeforeExtension + extension;
illuminatiProperties = getIlluminatiPropertiesByFile(clazz, messager, fullFileName);
if (illuminatiProperties != null) {
break;
}
}
if (illuminatiProperties == null) {
illuminatiProperties = getIlluminatiPropertiesFromBasicFiles(clazz, messager);
}
if (illuminatiProperties == null) {
if (messager != null) {
messager.printMessage(Diagnostic.Kind.WARNING, "Sorry, unable to find " + configPropertiesFileName);
}
IlluminatiPropertiesHelper.FILEUTIL_LOGGER.debug("Sorry, unable to find " + configPropertiesFileName);
}
return illuminatiProperties;
}
IlluminatiPropertiesHelper.java 文件源码
项目:illuminati
阅读 18
收藏 0
点赞 0
评论 0
private static IlluminatiProperties getIlluminatiPropertiesFromBasicFiles(final Class<? extends IlluminatiProperties> clazz, Messager messager) {
IlluminatiProperties illuminatiProperties = null;
for (String fileName : BASIC_CONFIG_FILES) {
illuminatiProperties = getIlluminatiPropertiesByFile(clazz, messager, fileName);
if (illuminatiProperties != null) {
return illuminatiProperties;
}
}
return null;
}
TsGenProcessorNoAbortTest.java 文件源码
项目:jtsgen
阅读 19
收藏 0
点赞 0
评论 0
@Test
public void test_Exception_process() throws Exception {
TsGenProcessor testee=new TsGenProcessor();
ProcessingEnvironment processingEnvMock = mock(ProcessingEnvironment.class);
Messager messenger = mock(Messager.class);
when(processingEnvMock.getMessager()).thenReturn(messenger);
testee.init(processingEnvMock);
testee.process(new HashSet<>(),null);
verify(messenger).printMessage(any(),any());
}