在一个Android项目中(原生的混合java /Kotlin),我们使用一个简单的注解处理器在构建过程中生成一个类。生成的类包含了项目中所有的Activity
类,这些类已经被特定的项目内部注解所注解,我们使用它来初始化Android设备上的一些特定硬件。
注解处理器工作正常,我们现在遇到了一个问题,一个Activity
类 * 没有 * 编译到生成的类中。我意识到这个Activity
是第二个用Kotlin实现的Activity
,也是第一个基于kotlin的Activity
。
因此,我深入注解处理器,检查了从RoundEnvironment
获得的注解文件集,实际上,在我们的处理器操作的集合中已经缺少Activity
类。
所以我的问题是
- 为什么基于Kotlin的
Activity
类不包含在环境中? - 或者我该怎么做才能把它包括进去?
下面是注解处理器的相关代码:
// [...]
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
// [...]
@SupportedAnnotationTypes(EnableScannerTypesAnnotationProcessor.ENABLE_SCANNER_ANNOTATION)
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SuppressWarnings("PMD.ConsecutiveLiteralAppends")
public class EnableScannerTypesAnnotationProcessor
extends AbstractProcessor {
// [...]
@Override
public synchronized void init(ProcessingEnvironment processingEnvironment) {
super.init(processingEnvironment);
// [...]
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement annotation : annotations) {
if (annotation.getQualifiedName().contentEquals(ENABLE_SCANNER_ANNOTATION)) {
final Set<? extends Element> annotatedTypes = roundEnv.getElementsAnnotatedWith(annotation);
// the processor now operates on the set `annotatedTypes`
// [...]
1条答案
按热度按时间6jjcrrmo1#
我们最终基于KSP而不是KAPT重新实现了注解处理器。这样,它确实也可以看到基于Kotlin的类。
重新实现非常简单。虽然我希望有一个更好的文档为KSP。