Skip to content

Commit 17986fd

Browse files
committed
Collect info about Invoke, Iterate, and Return sections #565
1 parent 3fa8cad commit 17986fd

File tree

2 files changed

+64
-52
lines changed

2 files changed

+64
-52
lines changed

utbot-summary/src/main/kotlin/org/utbot/summary/comment/CustomJavaDocComment.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ package org.utbot.summary.comment
44
* Represents a set of plugin's custom JavaDoc tags.
55
*/
66
data class CustomJavaDocComment(
7-
val classUnderTest: String,
8-
val methodUnderTest: String,
9-
val expectedResult: String?,
10-
val actualResult: String?,
11-
var executesCondition: String?,
12-
var invokes: String?,
13-
var iterates: String?,
14-
var returnsFrom: String?,
15-
var throwsException: String?
7+
val classUnderTest: String = "",
8+
val methodUnderTest: String = "",
9+
val expectedResult: String = "",
10+
val actualResult: String = "",
11+
var executesCondition: List<String> = listOf(),
12+
var invokes: List<String> = listOf(),
13+
var iterates: List<String> = listOf(),
14+
var returnsFrom: String = "",
15+
var throwsException: String = ""
1616
)

utbot-summary/src/main/kotlin/org/utbot/summary/comment/CustomJavaDocCommentBuilder.kt

Lines changed: 55 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,42 +23,51 @@ class CustomJavaDocCommentBuilder(
2323

2424
docStatementList += DocRegularStmt("@utbot.classUnderTest ${comment.classUnderTest}\n")
2525
docStatementList += DocRegularStmt("@utbot.methodUnderTest ${comment.methodUnderTest}\n")
26-
if (comment.expectedResult != null)
26+
27+
if (comment.expectedResult.isNotEmpty())
2728
docStatementList += DocRegularStmt("@utbot.expectedResult ${comment.expectedResult}\n")
28-
if (comment.actualResult != null)
29+
if (comment.actualResult.isNotEmpty())
2930
docStatementList += DocRegularStmt("@utbot.actualResult ${comment.actualResult}\n")
30-
if (comment.executesCondition != null)
31-
docStatementList += DocRegularStmt("@utbot.executesCondition ${comment.executesCondition}\n")
32-
if (comment.invokes != null)
33-
docStatementList += DocRegularStmt("@utbot.invokes ${comment.invokes}\n")
34-
if (comment.iterates != null)
35-
docStatementList += DocRegularStmt("@utbot.iterates ${comment.iterates}\n")
36-
if (comment.returnsFrom != null)
31+
if (comment.executesCondition.isNotEmpty()) {
32+
val statement =
33+
"@utbot.executesCondition ${comment.executesCondition.joinToString(separator = ",\n")}\n"
34+
docStatementList += DocRegularStmt(statement)
35+
}
36+
if (comment.invokes.isNotEmpty()) {
37+
val statement = "@utbot.invokes ${comment.invokes.joinToString(separator = ",\n")}\n"
38+
docStatementList += DocRegularStmt(statement)
39+
}
40+
if (comment.iterates.isNotEmpty()) {
41+
val statement = "@utbot.iterates ${comment.iterates.joinToString(separator = ",\n")}\n"
42+
docStatementList += DocRegularStmt(statement)
43+
}
44+
if (comment.returnsFrom.isNotEmpty())
3745
docStatementList += DocRegularStmt("@utbot.returnsFrom ${comment.returnsFrom}\n")
38-
if (comment.throwsException != null)
46+
if (comment.throwsException.isNotEmpty())
3947
docStatementList += DocRegularStmt("@utbot.throwsException ${comment.throwsException}")
4048

4149
return listOf<DocStatement>(DocPreTagStatement(docStatementList))
4250
}
4351

4452
private fun buildCustomJavaDocComment(currentMethod: SootMethod): CustomJavaDocComment {
45-
val methodReference =
46-
getMethodReference(currentMethod.declaringClass.name, currentMethod.name, currentMethod.parameterTypes)
53+
val methodReference = getMethodReference(
54+
currentMethod.declaringClass.name,
55+
currentMethod.name,
56+
currentMethod.parameterTypes
57+
)
4758
val classReference = getClassReference(currentMethod.declaringClass.javaStyleName)
4859

4960
val customJavaDocComment = CustomJavaDocComment(
5061
classUnderTest = classReference,
5162
methodUnderTest = methodReference,
52-
expectedResult = null,
53-
actualResult = null,
54-
executesCondition = null,
55-
invokes = null,
56-
iterates = null,
57-
returnsFrom = null,
58-
throwsException = null
5963
)
6064

61-
// build throws exception section
65+
val rootSentenceBlock = SimpleSentenceBlock(stringTemplates = stringTemplates)
66+
skippedIterations()
67+
buildSentenceBlock(traceTag.rootStatementTag, rootSentenceBlock, currentMethod)
68+
rootSentenceBlock.squashStmtText()
69+
70+
// builds Throws exception section
6271
val thrownException = traceTag.result.exceptionOrNull()
6372
val exceptionThrow: String? = if (thrownException == null) {
6473
traceTag.result.exceptionOrNull()?.let { it::class.qualifiedName }
@@ -67,40 +76,43 @@ class CustomJavaDocCommentBuilder(
6776
val reason = findExceptionReason(currentMethod, thrownException)
6877
"{@link $exceptionName} $reason"
6978
}
70-
customJavaDocComment.throwsException = exceptionThrow
71-
72-
val rootSentenceBlock = SimpleSentenceBlock(stringTemplates = stringTemplates)
73-
skippedIterations()
74-
buildSentenceBlock(traceTag.rootStatementTag, rootSentenceBlock, currentMethod)
79+
if (exceptionThrow != null) {
80+
customJavaDocComment.throwsException = exceptionThrow
81+
}
7582

76-
// builds iterates section
83+
// builds Iterates section
7784
rootSentenceBlock.iterationSentenceBlocks.forEach { (loopDesc, sentenceBlocks) ->
78-
customJavaDocComment.iterates = stringTemplates.iterationSentence.format(
85+
customJavaDocComment.iterates += stringTemplates.iterationSentence.format(
7986
stringTemplates.codeSentence.format(loopDesc),
8087
numberOccurrencesToText(
8188
sentenceBlocks.size
8289
)
8390
)
8491
}
8592

86-
// build invokes, executes, and returns from sections
87-
for (stmtDescription: StmtDescription in rootSentenceBlock.stmtTexts) {
88-
when (stmtDescription.stmtType.name) {
89-
//TODO: support multiple invokes (calls)
90-
"Invoke" -> {
91-
val info = stmtDescription.description
92-
customJavaDocComment.invokes = "{@code $info}"
93-
}
94-
"Return" -> {
95-
val info = stmtDescription.description
96-
customJavaDocComment.returnsFrom = "{@code $info}"
97-
}
98-
//TODO: support multiple conditions
99-
"Condition" -> {
100-
val info = stmtDescription.description
101-
customJavaDocComment.executesCondition = "{@code $info}"
93+
// builds Invoke, Execute, Return sections
94+
var currentBlock: SimpleSentenceBlock? = rootSentenceBlock
95+
while (currentBlock != null) {
96+
for (statement in currentBlock.stmtTexts) {
97+
when (statement.stmtType) {
98+
StmtType.Invoke -> {
99+
val info = statement.description
100+
customJavaDocComment.invokes += "{@code $info}"
101+
}
102+
StmtType.Condition -> {
103+
val info = statement.description
104+
customJavaDocComment.executesCondition += "{@code $info}"
105+
}
106+
StmtType.Return -> {
107+
val info = statement.description
108+
customJavaDocComment.returnsFrom = "{@code $info}"
109+
}
110+
else -> {
111+
//TODO
112+
}
102113
}
103114
}
115+
currentBlock = currentBlock.nextBlock
104116
}
105117

106118
return customJavaDocComment

0 commit comments

Comments
 (0)