Compiler中Processor的Process 先排序后遍历
cocpublic opened this issue · 0 comments
cocpublic commented
public class PageAnnotationProcessor extends BaseProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
....
for (Element element : env.getElementsAnnotatedWith(RouterPage.class)) {
}
}
这段apt生成文件的逻辑中,env.getElementsAnnotatedWith(RouterPage.class)返回的set不能保证有序,而文件名中的md5是遍历的第一个元素生成的。
相同或微调的代码,在两次编译中,router生成的相关类可能差异较大,再做一些增量工作(例如Tinker 补丁包)时,会导致差异偏大。
目前做了一个简单的排序
public static Set<? extends Element> sort(Set<? extends Element> set) {
TreeSet treeSet = new TreeSet<>(new Comparator<Element>() {
@Override
public int compare(Element o1, Element o2) {
return o1.toString().compareTo(o2.toString());
}
});
treeSet.addAll(set);
return treeSet;
}
auto组件中warning也有提到https://github.com/google/auto/blob/master/value/userguide/index.md#warnings