io.helidon.codegen.CodegenEventBlueprint Maven / Gradle / Ivy
/*
* Copyright (c) 2023, 2024 Oracle and/or its affiliates.
*
* 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 io.helidon.codegen;
import java.util.List;
import java.util.Optional;
/**
* An event happening during code gen. This is not a fast solution, it is only to be used when processing code, where
* we can have a bit of an overhead!
*/
interface CodegenEventBlueprint {
/**
* Level can be used directly (command line tools), mapped to Maven level (maven plugins),
* or mapped to diagnostics kind (annotation processing).
*
* Mapping table:
*
* Level mappings
*
* Level
* Maven log level
* APT Diagnostic.Kind
*
*
* ERROR
* error
* ERROR
*
*
* WARNING
* warn
* WARNING
*
*
* INFO
* info
* NOTE
*
*
* DEBUG, TRACE
* debug
* N/A - only logged to logger
*
*
*
* @return level to use, defaults to INFO
*/
System.Logger.Level level();
/**
* Message to be delivered to the user.
*
* @return the message
*/
String message();
/**
* Throwable if available.
*
* @return throwable
*/
Optional throwable();
/**
* Additional information, such as source elements.
* These may or may not be ignored by the final log destination.
*
* Expected supported types:
*
* - APT: {@code Element}, {@code AnnotationMirror}, {@code AnnotationValue}
* - Classpath scanning: {@code ClassInfo}, {@code MethodInfo} etc.
* - Any environment: {@link io.helidon.common.types.TypeName},
* {@link io.helidon.common.types.TypeInfo},
* or {@link io.helidon.common.types.TypedElementInfo}
*
* @return list of objects causing this event to happen
*/
List