package com.dx168.fastdex.build.snapshoot.sourceset; import com.dx168.fastdex.build.snapshoot.api.DiffResultSet; import com.dx168.fastdex.build.snapshoot.api.Status; import com.dx168.fastdex.build.snapshoot.string.StringDiffInfo; import com.google.gson.annotations.Expose; import org.apache.tools.ant.taskdefs.condition.Os; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * Created by tong on 17/3/31. */ public class SourceSetDiffResultSet extends DiffResultSet<StringDiffInfo> { public Set<JavaFileDiffInfo> changedJavaFileDiffInfos = new HashSet<JavaFileDiffInfo>(); @Expose public Set<String> addOrModifiedClasses = new HashSet<>(); @Expose public Set<PathInfo> addOrModifiedPathInfos = new HashSet<>(); @Expose public Map<String,List<String>> addOrModifiedClassesMap = new HashMap<>(); public SourceSetDiffResultSet() { } public SourceSetDiffResultSet(SourceSetDiffResultSet resultSet) { super(resultSet); //from gson this.changedJavaFileDiffInfos.addAll(resultSet.changedJavaFileDiffInfos); this.addOrModifiedClasses.addAll(resultSet.addOrModifiedClasses); this.addOrModifiedPathInfos.addAll(resultSet.addOrModifiedPathInfos); } public boolean isJavaFileChanged() { return !addOrModifiedClasses.isEmpty(); } // public void addJavaFileDiffInfo(JavaFileDiffInfo diffInfo) { // if (diffInfo.status != Status.NOCHANGED) { // this.changedJavaFileDiffInfos.add(diffInfo); // } // } public void mergeJavaDirectoryResultSet(String path,JavaDirectoryDiffResultSet javaDirectoryResultSet) { List<String> addOrModifiedClassRelativePathList = addOrModifiedClassesMap.get(javaDirectoryResultSet.projectPath); if (addOrModifiedClassRelativePathList == null) { addOrModifiedClassRelativePathList = new ArrayList<>(); addOrModifiedClassesMap.put(javaDirectoryResultSet.projectPath,addOrModifiedClassRelativePathList); } for (JavaFileDiffInfo javaFileDiffInfo : javaDirectoryResultSet.changedDiffInfos) { switch (javaFileDiffInfo.status) { case ADDED: case MODIFIED: addOrModifiedPathInfos.add(new PathInfo(new File(path,javaFileDiffInfo.uniqueKey),javaFileDiffInfo.uniqueKey)); String classRelativePath = javaFileDiffInfo.uniqueKey.substring(0, javaFileDiffInfo.uniqueKey.length() - ".java".length()); // String entryName = classRelativePath; // if (entryName.contains("\\")) { // entryName = entryName.replace("\\", "/"); // } // entryName = entryName + ".class"; // addOrModifiedClassRelativePathList.add(entryName); addOrModifiedClassRelativePathList.add(classRelativePath + ".class"); addOrModifiedClassRelativePathList.add(classRelativePath + "$*.class"); classRelativePath = classRelativePath.replaceAll(Os.isFamily(Os.FAMILY_WINDOWS) ? "\\\\" : File.separator,"\\."); addOrModifiedClasses.add(classRelativePath); // addOrModifiedClasses.add(classRelativePath + ".class"); // addOrModifiedClasses.add(classRelativePath + "\\$\\S{0,}.class"); break; } } this.changedJavaFileDiffInfos.addAll(javaDirectoryResultSet.changedDiffInfos); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; SourceSetDiffResultSet resultSet = (SourceSetDiffResultSet) o; return changedJavaFileDiffInfos != null ? changedJavaFileDiffInfos.equals(resultSet.changedJavaFileDiffInfos) : resultSet.changedJavaFileDiffInfos == null; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (changedJavaFileDiffInfos != null ? changedJavaFileDiffInfos.hashCode() : 0); return result; } @Override public String toString() { return "SourceSetDiffResultSet{" + "changedJavaFileDiffInfos=" + changedJavaFileDiffInfos + ", addOrModifiedClasses=" + addOrModifiedClasses + ", addOrModifiedPathInfos=" + addOrModifiedPathInfos + '}'; } }