[coverage] IDEA-340739 Wrap line breaks in the hint view

GitOrigin-RevId: 72753c272f1b4f46851ceb4981594d6836a03522
This commit is contained in:
Maksim Zuev
2024-01-17 15:21:31 +01:00
committed by intellij-monorepo-bot
parent 3d5000818f
commit cd23038dbb
11 changed files with 66 additions and 27 deletions

View File

@@ -79,6 +79,7 @@ import java.util.stream.IntStream;
public class JavaCoverageEngine extends CoverageEngine {
private static final Logger LOG = Logger.getInstance(JavaCoverageEngine.class.getName());
private static final String indent = " ";
private static final int MAX_EXPRESSION_LENGTH = 100;
public static JavaCoverageEngine getInstance() {
return EP_NAME.findExtensionOrFail(JavaCoverageEngine.class);
@@ -585,8 +586,17 @@ public class JavaCoverageEngine extends CoverageEngine {
return buf.toString();
}
/**
* Try to remove line breaks from expression for better visibility.
* As the resulting expression can become too long, the modification is made only for short expressions.
*/
private static String preprocessExpression(String expression) {
String preprocessed = expression.replaceAll("[\\s\n]+", " ");
return preprocessed.length() > MAX_EXPRESSION_LENGTH ? expression : preprocessed;
}
private static void addJumpDataInfo(StringBuilder buf, JumpData jumpData, ConditionCoverageExpression expression) {
buf.append("\n").append(indent).append(expression.getExpression());
buf.append("\n").append(indent).append(preprocessExpression(expression.getExpression()));
boolean reverse = expression.isReversed();
int trueHits = reverse ? jumpData.getFalseHits() : jumpData.getTrueHits();
buf.append("\n").append(indent).append(indent).append(PsiKeyword.TRUE).append(" ").append(CoverageBundle.message("hits.message", trueHits));
@@ -596,7 +606,7 @@ public class JavaCoverageEngine extends CoverageEngine {
}
private static void addSwitchDataInfo(StringBuilder buf, SwitchData switchData, SwitchCoverageExpression expression, int coverageStatus) {
buf.append("\n").append(indent).append(expression.getExpression());
buf.append("\n").append(indent).append(preprocessExpression(expression.getExpression()));
boolean allBranchesHit = true;
for (int i = 0; i < switchData.getKeys().length; i++) {
String key = expression.getCases() != null && i < expression.getCases().size()

View File

@@ -41,7 +41,7 @@ Line 24 coverage: FULL
Hits: 1
Line 31 coverage: PARTIAL
Hits: 1
y + /* comment */x
y + /* comment */x
case 1: 1
case 2: 0
default: 0

View File

@@ -14,9 +14,7 @@ Line 13 coverage: FULL
Hits: 1
Line 15 coverage: PARTIAL
Hits: 1
x
==
1
x == 1
true hits: 1
false hits: 0
Line 17 coverage: FULL
@@ -85,9 +83,7 @@ Line 49 coverage: FULL
Hits: 1
Line 51 coverage: PARTIAL
Hits: 1
0
until
n
0 until n
true hits: 1
false hits: 0
Line 58 coverage: FULL
@@ -104,9 +100,7 @@ Line 69 coverage: FULL
Hits: 1
Line 71 coverage: PARTIAL
Hits: 1
i
<
n
i < n
true hits: 0
false hits: 1
Line 79 coverage: FULL
@@ -117,9 +111,7 @@ Line 84 coverage: FULL
Hits: 1
Line 86 coverage: PARTIAL
Hits: 1
i++
<
n
i++ < n
true hits: 0
false hits: 1
Line 90 coverage: FULL
@@ -131,8 +123,7 @@ Hits: 1
a != null
true hits: 0
false hits: 1
a
?: b != null
a ?: b != null
true hits: 0
false hits: 1
Line 95 coverage: FULL
@@ -142,8 +133,7 @@ Hits: 2
h(a) != null
true hits: 0
false hits: 1
h(a)
?: h(b) != null
h(a) ?: h(b) != null
true hits: 0
false hits: 1
Line 98 coverage: FULL
@@ -160,8 +150,31 @@ Hits: 3
Unknown outcome: 2
Line 104 coverage: PARTIAL
Hits: 3
a
?.g() != null
a ?.g() != null
true hits: 1
false hits: 0
Unknown outcome: 2
Line 106 coverage: FULL
Hits: 3
Line 107 coverage: FULL
Hits: 1
Line 108 coverage: PARTIAL
Hits: 3
a != null
true hits: 1
false hits: 0
Unknown outcome: 2
Line 109 coverage: PARTIAL
Hits: 3
a ?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName() != null
true hits: 1
false hits: 0
Unknown outcome: 2
Line 110 coverage: PARTIAL
Hits: 3
a
?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName()
?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName() != null
true hits: 1
false hits: 0
Unknown outcome: 2

View File

@@ -70,9 +70,7 @@ Line 52 coverage: FULL
Hits: 1
Line 54 coverage: PARTIAL
Hits: 1
i
<
n
i < n
true hits: 0
false hits: 1
Line 64 coverage: PARTIAL
@@ -84,9 +82,7 @@ Line 70 coverage: FULL
Hits: 1
Line 72 coverage: PARTIAL
Hits: 1
i
<
n
i < n
true hits: 0
false hits: 1
Line 83 coverage: FULL

View File

@@ -118,3 +118,16 @@ Covered 1/2 branches
Line 104 coverage: PARTIAL
Hits: 1
Covered 1/2 branches
Line 106 coverage: FULL
Hits: 1
Line 107 coverage: FULL
Hits: 1
Line 108 coverage: PARTIAL
Hits: 1
Covered 1/2 branches
Line 109 coverage: PARTIAL
Hits: 1
Covered 1/2 branches
Line 110 coverage: PARTIAL
Hits: 1
Covered 1/2 branches

View File

@@ -102,4 +102,10 @@ class KtLineBreaks {
fun testSafeCallSequence(a: Int?) = a
?.g()
?.g()
private fun <T> T?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName(): T? = this
fun testSafeCallSequenceLongNames(a: Int?) = a
?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName()
?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName()
?.veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMethodName()
}

View File

@@ -34,5 +34,6 @@ public class LineBreaksTest extends TestCase {
l.testNullCheckVariables(null, null);
l.testNullCheckMethods(null, null);
l.testSafeCallSequence(1);
l.testSafeCallSequenceLongNames(1);
}
}