Skip to content

Commit a722705

Browse files
committed
Merge branch '2020.3'
2 parents 2fb5ab7 + 4750d57 commit a722705

File tree

9 files changed

+589
-376
lines changed

9 files changed

+589
-376
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
group 'net.zero9178'
8-
version '2020.3.4'
8+
version '2020.3.5'
99

1010
sourceCompatibility = 1.8
1111

src/main/kotlin/net/zero9178/cov/CoverageConfigurationExtension.kt

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,13 @@ import com.intellij.openapi.progress.Task
2020
import com.intellij.openapi.project.Project
2121
import com.intellij.openapi.roots.ModuleRootManager
2222
import com.intellij.openapi.util.Key
23-
import com.intellij.openapi.util.SystemInfo
2423
import com.intellij.openapi.util.UserDataHolder
2524
import com.intellij.openapi.vfs.VirtualFile
2625
import com.intellij.openapi.wm.ToolWindowManager
27-
import com.jetbrains.cidr.cpp.cmake.model.CMakeConfiguration
2826
import com.jetbrains.cidr.cpp.cmake.workspace.CMakeWorkspace
2927
import com.jetbrains.cidr.cpp.execution.CMakeAppRunConfiguration
3028
import com.jetbrains.cidr.cpp.execution.CMakeBuildProfileExecutionTarget
3129
import com.jetbrains.cidr.cpp.execution.coverage.CMakeCoverageBuildOptionsInstallerFactory
32-
import com.jetbrains.cidr.cpp.execution.testing.CMakeTestRunConfiguration
33-
import com.jetbrains.cidr.cpp.execution.testing.ctest.CidrCTestRunConfigurationData
3430
import com.jetbrains.cidr.cpp.toolchains.CPPEnvironment
3531
import com.jetbrains.cidr.execution.CidrBuildTarget
3632
import com.jetbrains.cidr.execution.CidrRunConfiguration
@@ -44,7 +40,7 @@ import net.zero9178.cov.data.*
4440
import net.zero9178.cov.editor.CoverageFileAccessProtector
4541
import net.zero9178.cov.editor.CoverageHighlighter
4642
import net.zero9178.cov.settings.CoverageGeneratorSettings
47-
import net.zero9178.cov.util.isCTestInstalled
43+
import net.zero9178.cov.util.getCMakeConfigurations
4844
import net.zero9178.cov.window.CoverageView
4945
import java.io.File
5046
import javax.swing.event.HyperlinkEvent
@@ -99,13 +95,15 @@ class CoverageConfigurationExtension : CidrRunConfigurationExtensionBase() {
9995
) {
10096
return
10197
}
102-
context.putUserData(EXECUTION_TARGET_USED, state.executionTarget)
98+
val executionTarget = state.executionTarget as? CMakeBuildProfileExecutionTarget ?: return
99+
context.putUserData(EXECUTION_TARGET_USED, executionTarget)
103100
val commandLine = context.getUserData(GENERAL_COMMAND_LINE) ?: return
104101
getCoverageGenerator(environment, configuration.project)?.patchEnvironment(
105102
configuration,
106103
environment,
107-
state.executionTarget,
108-
commandLine
104+
executionTarget,
105+
commandLine,
106+
context
109107
)
110108
}
111109

@@ -208,7 +206,8 @@ class CoverageConfigurationExtension : CidrRunConfigurationExtensionBase() {
208206
configuration,
209207
environment,
210208
executionTarget,
211-
indicator
209+
indicator,
210+
context
212211
)
213212
val root = DefaultMutableTreeNode("invisible-root")
214213
invokeLater {
@@ -268,32 +267,6 @@ class CoverageConfigurationExtension : CidrRunConfigurationExtensionBase() {
268267
return coverageGenerator
269268
}
270269

271-
private fun getCMakeConfigurations(
272-
configuration: CMakeAppRunConfiguration,
273-
executionTarget: CMakeBuildProfileExecutionTarget
274-
): Sequence<CMakeConfiguration> {
275-
return if (configuration is CMakeTestRunConfiguration && isCTestInstalled() && configuration.testData is CidrCTestRunConfigurationData) {
276-
val testData = configuration.testData as CidrCTestRunConfigurationData
277-
testData.infos?.mapNotNull {
278-
it?.command?.exePath
279-
}?.distinct()?.asSequence()?.mapNotNull { executable ->
280-
CMakeWorkspace.getInstance(configuration.project).modelTargets.asSequence().mapNotNull { target ->
281-
target.buildConfigurations.find { it.profileName == executionTarget.profileName }
282-
}.find {
283-
it.productFile?.name == executable.substringAfterLast(
284-
'/',
285-
if (SystemInfo.isWindows) executable.substringAfterLast('\\') else executable
286-
)
287-
}
288-
} ?: emptySequence()
289-
} else {
290-
val runConfiguration =
291-
configuration.getBuildAndRunConfigurations(executionTarget)?.buildConfiguration
292-
?: return emptySequence()
293-
sequenceOf(runConfiguration)
294-
}
295-
}
296-
297270
private fun hasCompilerFlags(
298271
configuration: CMakeAppRunConfiguration,
299272
executionTarget: CMakeBuildProfileExecutionTarget
@@ -337,23 +310,31 @@ class CoverageConfigurationExtension : CidrRunConfigurationExtensionBase() {
337310
}
338311
}
339312

313+
val previouslyChanged = mutableSetOf<String>()
340314
val map = mutableMapOf<String, ChosenName>()
341315
for ((_, value) in data.files) {
342316
var new = ChosenName(value.filePath.replace('\\', '/'), 1, value)
343317
val filename = new.getFilename()
344-
val existing = map[filename]
345-
if (existing == null) {
318+
var existing = map[filename]
319+
if (existing == null && !previouslyChanged.contains(filename)) {
346320
map[filename] = new
347321
continue
348322
}
349323
map.remove(filename)
350-
var nonNull: ChosenName = existing
351-
while (new.getFilename() == nonNull.getFilename()) {
324+
while (new.getFilename() == existing?.getFilename() || previouslyChanged.contains(new.getFilename())) {
325+
previouslyChanged.add(new.getFilename())
352326
new = new.copy(count = new.count + 1)
353-
nonNull = nonNull.copy(count = nonNull.count + 1)
327+
existing = existing?.copy(count = existing.count + 1)
328+
if (existing == null) {
329+
// If existing is null due to a filename being part of previouslyChanged, also attempt to find
330+
// existing files that might also have to be changed a long the way
331+
existing = map[new.getFilename()]
332+
}
354333
}
355334
map[new.getFilename()] = new
356-
map[nonNull.getFilename()] = nonNull
335+
existing?.let {
336+
map[it.getFilename()] = it
337+
}
357338
}
358339

359340
val fileDataToName = map.map {

src/main/kotlin/net/zero9178/cov/data/CoverageGenerator.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
package net.zero9178.cov.data
22

3-
import com.intellij.execution.ExecutionTarget
43
import com.intellij.execution.configurations.GeneralCommandLine
54
import com.intellij.openapi.progress.ProgressIndicator
65
import com.intellij.util.io.exists
76
import com.jetbrains.cidr.cpp.execution.CMakeAppRunConfiguration
7+
import com.jetbrains.cidr.cpp.execution.CMakeBuildProfileExecutionTarget
88
import com.jetbrains.cidr.cpp.toolchains.CPPEnvironment
99
import com.jetbrains.cidr.cpp.toolchains.WSL
10+
import com.jetbrains.cidr.execution.ConfigurationExtensionContext
1011
import java.nio.file.Paths
1112
import java.util.concurrent.TimeUnit
1213

1314
interface CoverageGenerator {
1415
fun patchEnvironment(
1516
configuration: CMakeAppRunConfiguration,
1617
environment: CPPEnvironment,
17-
executionTarget: ExecutionTarget,
18-
cmdLine: GeneralCommandLine
18+
executionTarget: CMakeBuildProfileExecutionTarget,
19+
cmdLine: GeneralCommandLine,
20+
context: ConfigurationExtensionContext
1921
) {
2022
}
2123

2224
fun generateCoverage(
2325
configuration: CMakeAppRunConfiguration,
2426
environment: CPPEnvironment,
25-
executionTarget: ExecutionTarget,
26-
indicator: ProgressIndicator
27+
executionTarget: CMakeBuildProfileExecutionTarget,
28+
indicator: ProgressIndicator,
29+
context: ConfigurationExtensionContext
2730
): CoverageData? {
2831
return null
2932
}

src/main/kotlin/net/zero9178/cov/data/GCCGCDACoverageGenerator.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.github.h0tk3y.betterParse.combinators.*
44
import com.github.h0tk3y.betterParse.grammar.Grammar
55
import com.github.h0tk3y.betterParse.grammar.parseToEnd
66
import com.github.h0tk3y.betterParse.parser.ParseException
7-
import com.intellij.execution.ExecutionTarget
87
import com.intellij.execution.configurations.GeneralCommandLine
98
import com.intellij.notification.NotificationGroupManager
109
import com.intellij.notification.NotificationType
@@ -13,7 +12,9 @@ import com.intellij.openapi.progress.ProgressManager
1312
import com.intellij.openapi.project.Project
1413
import com.jetbrains.cidr.cpp.cmake.workspace.CMakeWorkspace
1514
import com.jetbrains.cidr.cpp.execution.CMakeAppRunConfiguration
15+
import com.jetbrains.cidr.cpp.execution.CMakeBuildProfileExecutionTarget
1616
import com.jetbrains.cidr.cpp.toolchains.CPPEnvironment
17+
import com.jetbrains.cidr.execution.ConfigurationExtensionContext
1718
import net.zero9178.cov.settings.CoverageGeneratorSettings
1819
import net.zero9178.cov.util.toCP
1920
import java.nio.file.Files
@@ -210,8 +211,9 @@ class GCCGCDACoverageGenerator(private val myGcov: String, private val myMajorVe
210211
override fun generateCoverage(
211212
configuration: CMakeAppRunConfiguration,
212213
environment: CPPEnvironment,
213-
executionTarget: ExecutionTarget,
214-
indicator: ProgressIndicator
214+
executionTarget: CMakeBuildProfileExecutionTarget,
215+
indicator: ProgressIndicator,
216+
context: ConfigurationExtensionContext
215217
): CoverageData? {
216218
val config = CMakeWorkspace.getInstance(configuration.project).getCMakeConfigurationFor(
217219
configuration.getResolveConfiguration(executionTarget)

0 commit comments

Comments
 (0)