假设我有这个:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Config {
}
@Config
public class ConfigA {
public static final String FOO_A = "A";
}
@Config
public class ConfigB {
public static final String FOO_B = "B";
public static final String SOMETHING_ELSE = "SE";
}
我想自动生成一个类似这样的类:
public class Result {
public static final String FOO_A = "A";
public static final String FOO_B = "B";
public static final String SOMETHING_ELSE = "SE";
}
忽略冲突的可能性我该如何实现?
最终目标是根据构建类型/风格自动生成带Gradle的Result,因为我正在使用Eclipse创建一个生成Result的构建器,以便能够使用源中的成员。 (就像Android项目中的R文件是从XML文件生成的,但我不想使用XML)
答案 0 :(得分:0)
我要做以下事情:
codegen
)以包含类生成逻辑。在那里,我使用Reflections扫描使用@Config
注释的类,将其所有成员添加到列表中,最后使用Velocity输出包含这些成员的类或类似的模板库。@Config
注释和您要注释的课程添加到他们自己的Gradle项目中,例如名为config
。processConfig
),该任务在#2生成的类上运行模板工具。solution
)取决于processConfig
,并将其输出添加到自定义SourceSet。只要您已正确配置了源集,并确保主源集依赖于您的中间源集,solution
构建的其余部分就可以正常工作。
或者,有更多涉及的方法使用ASM或cglib直接生成字节码也可以工作。