我想知道如何制作一个注释处理器来标记使用类的构造函数而不需要后续调用特定方法。这与前一个问题"找到一个先前注释的方法"有关,但我需要分析引用类的表达式,而不仅仅是方法调用。
假设我有一个Interface RegistersListeners:
public interface RegistersListeners {
public void registerListeners();
}
...注释需要使用者:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface RequiresListerners {
public boolean enabled() default true;
}
......还有一个带注释的音乐家:
@RequiresListerners
public class Musician implements RegistersListeners {
private final AudienceListener audience;
private final ProListener professional;
public Musician(AudienceListener audience, ProListener professional) {
this.audience = audience;
this.professional = professional;
}
@Override
public void registerListeners() {
this.audience.listenTo(this);
this.professional.listenTo(this);
}
}
接下来,我在Venue类中使用Musician类:
class Venue {
Venue() {
AudienceListener smoe = new AudienceListener();
ProListener pro = new ProListener();
/***
* Processor should complain here that this constructor returns
* without calling registerListeners()
***/
Musician johnny = new Musician(smoe,pro);
}
}
现在我希望注释处理器报告Venue的构造函数从不调用johnny.registerListeners()。 我怎么能这样做?
我的注释处理器使用Compiler Tree API in tools.jar,并且我已经创建了像@Hervian这样的代码扫描程序。但是像上一个答案那样的扫描缺少评估表达式所需的类型信息。这就是我现在正在做的事情。