diff --git a/plugins/coverage-common/src/com/intellij/coverage/CoverageSuite.java b/plugins/coverage-common/src/com/intellij/coverage/CoverageSuite.java index 432ecf6531d1..36e6ff65bc80 100644 --- a/plugins/coverage-common/src/com/intellij/coverage/CoverageSuite.java +++ b/plugins/coverage-common/src/com/intellij/coverage/CoverageSuite.java @@ -71,7 +71,10 @@ public interface CoverageSuite extends JDOMExternalizable { return; } } - FileUtil.delete(new File(fileName)); + File file = new File(fileName); + if (file.exists()) { + FileUtil.delete(file); + } getCoverageEngine().deleteAssociatedTraces(this); } } diff --git a/plugins/coverage/coverage_rt/src/listeners/CoverageListener.java b/plugins/coverage/coverage_rt/src/listeners/CoverageListener.java index 4a7366d10833..ee72fafd134b 100644 --- a/plugins/coverage/coverage_rt/src/listeners/CoverageListener.java +++ b/plugins/coverage/coverage_rt/src/listeners/CoverageListener.java @@ -5,10 +5,10 @@ public abstract class CoverageListener { private Object myProjectData; protected static String sanitize(String className, String methodName) { - return className + "," + sanitize(methodName); + return className + "," + sanitize(methodName, className.length()); } - public static String sanitize(String name) { + public static String sanitize(String name, int length) { StringBuilder result = new StringBuilder(); for (int i = 0; i < name.length(); i++) { final char ch = name.charAt(i); @@ -24,6 +24,12 @@ public abstract class CoverageListener { } + int methodNameLimit = 250 - length; + if (result.length() >= methodNameLimit) { + String hash = String.valueOf(result.toString().hashCode()); + return (methodNameLimit > hash.length() ? result.substring(0, methodNameLimit - hash.length()) : "") + hash; + } + return result.toString(); } diff --git a/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java b/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java index 4710fd2c62c4..c1b636fc9671 100644 --- a/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java +++ b/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java @@ -198,7 +198,10 @@ public class JavaCoverageEngine extends CoverageEngine { @Override protected void deleteAssociatedTraces(CoverageSuite suite) { if (suite.isTracingEnabled()) { - FileUtil.delete(getTracesDirectory(suite)); + File tracesDirectory = getTracesDirectory(suite); + if (tracesDirectory.exists()) { + FileUtil.delete(tracesDirectory); + } } } @@ -581,7 +584,7 @@ public class JavaCoverageEngine extends CoverageEngine { if (aClass != null) { String qualifiedName = ClassUtil.getJVMClassName(aClass); if (qualifiedName != null) { - return qualifiedName + "," + CoverageListener.sanitize(method.getName()); + return qualifiedName + "," + CoverageListener.sanitize(method.getName(), qualifiedName.length()); } } } @@ -595,23 +598,24 @@ public class JavaCoverageEngine extends CoverageEngine { final List elements = new ArrayList<>(); PsiManager psiManager = PsiManager.getInstance(project); for (String testName : testNames) { - int lastIdx = testName.indexOf(","); - if (lastIdx <= 0) return elements; - PsiClass psiClass = ClassUtil.findPsiClass(psiManager, testName.substring(0, lastIdx)); - if (psiClass != null) { - collectTestsByName(elements, testName, psiClass, lastIdx); - } + int index = testName.indexOf(","); + if (index <= 0) return elements; + collectTestsByName(elements, testName.substring(index + 1), testName.substring(0, index), psiManager); } return elements; } - private static void collectTestsByName(List elements, String testName, PsiClass psiClass, int lastIdx) { + private static void collectTestsByName(List elements, + String testName, + String className, + PsiManager psiManager) { + PsiClass psiClass = ClassUtil.findPsiClass(psiManager, className); + if (psiClass == null) return; TestFramework testFramework = TestFrameworks.detectFramework(psiClass); if (testFramework == null) return; - String sanitized = testName.substring(lastIdx + 1); Arrays.stream(psiClass.getAllMethods()) .filter(method -> testFramework.isTestMethod(method) && - sanitized.equals(CoverageListener.sanitize(method.getName()))) + testName.equals(CoverageListener.sanitize(method.getName(), className.length()))) .forEach(elements::add); }