我想在我的android应用程序中获取类的参数名称。向help()
方法提供输入,该方法将打印所有可用方法及其参数类型和名称。要获取参数名称,我正在尝试使用paranamer jar。我添加了paranamer.jar作为模块库,我可以导入和使用它。但是不知道如何插入gradle以便生成参数名称数据。有人帮忙吗?
Java代码 -
public void help() {
Method[] declaredMethods = myclass.class.getDeclaredMethods();
Paranamer paranamer = new CachingParanamer();
for (Method declaredMethod : declaredMethods) {
String[] parameterNames = paranamer.lookupParameterNames(declaredMethod, false);
//process paranamer.
}
}
答案 0 :(得分:1)
使用他们的Ant任务,Ant整齐地集成在Gradle中:https://docs.gradle.org/current/userguide/userguide_single.html#sec:using_custom_ant_tasks
应该像
configurations {
paranamer
}
dependencies {
paranamer 'com.thoughtworks.paranamer:paranamer-ant:2.8'
}
compileJava.doLast {
ant.taskdef name: 'paranamer',
classname: 'com.thoughtworks.paranamer.ant.ParanamerTask',
classpath: configurations.paranamer.asPath
ant.paranamer(classdir: destinationDir) {
source.addToAntBuilder ant, 'fileset', FileCollection.AntType.FileSet
}
}
我没有测试过这个,我没有使用paranamer,我只是从文档和源代码中做出来的。 destinationDir
和source
不能被实际字符串替换,而是编译任务的字段。
我将此作为compileJava
任务的附加操作而不是自己的任务,因为它修改了编译任务就地生成的类文件,并且单独的任务将涉及复制类文件某处,运行paranamer,然后关心修改后的文件是打包而不是原始文件。如果paranamer任务将就地修改compileJava
任务的结果,那么它将破坏增量构建,因为compileJava
任务将始终是过时的并且每次都运行。我建议的方式,它是compileJava
任务的一部分,因此在最新的检查逻辑之前完成,因此在这方面应该完美无缺。
如果您有多个源集或自定义JavaCompile
任务,并且想要修改所有这些任务,则会改为:
tasks.withType(JavaCompile) {
it.doLast {
...
}
}