From adc52dfad6a967e1cdb6297f60b98f227289adc1 Mon Sep 17 00:00:00 2001 From: brianneoberson Date: Tue, 28 Nov 2023 18:14:57 +0100 Subject: [PATCH 1/5] Add licence --signoff Signed-off-by: brianneoberson --- .github/workflows/test.yml | 26 ++++++++++--------- .../gradle/wrapper/gradle-wrapper.properties | 3 +++ pitmutationmate/gradlew | 2 ++ pitmutationmate/gradlew.bat | 3 +++ .../pitmutationmate/XMLParserTest.kt | 5 +++- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 71eb928d..34c1bffd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,14 +1,16 @@ +# SPDX-License-Identifier: MIT +# SPDX-FileCopyrightText: 2023 + name: Build and Test on: push: branches: - - main - + - main + jobs: build: runs-on: ubuntu-latest - steps: - name: Checkout Repository @@ -17,16 +19,16 @@ jobs: - name: Set up JDK uses: actions/setup-java@v2 with: - distribution: 'adopt' - java-version: '17' - + distribution: "adopt" + java-version: "17" + - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3 + uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3 - name: Build with Gradle - run: gradle build --no-daemon - working-directory: 'pitmutationmate' - + run: gradle build --no-daemon + working-directory: "pitmutationmate" + - name: Run Tests - run: gradle test --no-daemon - working-directory: 'pitmutationmate' + run: gradle test --no-daemon + working-directory: "pitmutationmate" diff --git a/pitmutationmate/gradle/wrapper/gradle-wrapper.properties b/pitmutationmate/gradle/wrapper/gradle-wrapper.properties index 62f495df..9146fc1a 100644 --- a/pitmutationmate/gradle/wrapper/gradle-wrapper.properties +++ b/pitmutationmate/gradle/wrapper/gradle-wrapper.properties @@ -1,3 +1,6 @@ +# SPDX-License-Identifier: MIT +# SPDX-FileCopyrightText: 2023 + distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip diff --git a/pitmutationmate/gradlew b/pitmutationmate/gradlew index fcb6fca1..cd2bbcc9 100755 --- a/pitmutationmate/gradlew +++ b/pitmutationmate/gradlew @@ -1,5 +1,7 @@ #!/bin/sh +# SPDX-License-Identifier: MIT +# SPDX-FileCopyrightText: 2023 # # Copyright © 2015-2021 the original authors. # diff --git a/pitmutationmate/gradlew.bat b/pitmutationmate/gradlew.bat index 6689b85b..c4cd0561 100644 --- a/pitmutationmate/gradlew.bat +++ b/pitmutationmate/gradlew.bat @@ -1,4 +1,7 @@ @rem +@rem SPDX-License-Identifier: MIT +@rem SPDX-FileCopyrightText: 2023 + @rem Copyright 2015 the original author or authors. @rem @rem Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/pitmutationmate/src/test/kotlin/com/amos/pitmutationmate/pitmutationmate/XMLParserTest.kt b/pitmutationmate/src/test/kotlin/com/amos/pitmutationmate/pitmutationmate/XMLParserTest.kt index dcfb264e..d375abec 100644 --- a/pitmutationmate/src/test/kotlin/com/amos/pitmutationmate/pitmutationmate/XMLParserTest.kt +++ b/pitmutationmate/src/test/kotlin/com/amos/pitmutationmate/pitmutationmate/XMLParserTest.kt @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT +// SPDX-FileCopyrightText: 2023 + package com.amos.pitmutationmate.pitmutationmate import org.junit.jupiter.api.Assertions.* @@ -49,4 +52,4 @@ class XMLParserTests{ assertTrue(actualResultData.mutationResults.isNotEmpty()) } -} \ No newline at end of file +} From 393c3c215cdcee669ede28bfdfb831add3d61170 Mon Sep 17 00:00:00 2001 From: brianneoberson Date: Tue, 28 Nov 2023 18:15:24 +0100 Subject: [PATCH 2/5] Update dependencies --signoff Signed-off-by: brianneoberson --- pitmutationmate/build.gradle.kts | 3 ++- pitmutationmate/src/main/resources/META-INF/plugin.xml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pitmutationmate/build.gradle.kts b/pitmutationmate/build.gradle.kts index c8598122..704d3cfa 100644 --- a/pitmutationmate/build.gradle.kts +++ b/pitmutationmate/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { implementation("org.jfree:jfreechart:1.0.19") // https://mvnrepository.com/artifact/jfree/jcommon implementation("org.jfree:jcommon:1.0.24") + implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0") } group = "com.amos.pitmutationmate" @@ -37,7 +38,7 @@ intellij { version.set("2022.2.5") type.set("IC") // Target IDE Platform - plugins.set(listOf(/* Plugin Dependencies */)) + plugins.set(listOf("org.jetbrains.kotlin", "com.intellij.java")) } tasks { diff --git a/pitmutationmate/src/main/resources/META-INF/plugin.xml b/pitmutationmate/src/main/resources/META-INF/plugin.xml index b3372eb9..4157a58e 100644 --- a/pitmutationmate/src/main/resources/META-INF/plugin.xml +++ b/pitmutationmate/src/main/resources/META-INF/plugin.xml @@ -24,7 +24,8 @@ - com.intellij.modules.platform + com.intellij.java + From a997070c9851bdb59ed42de6704d3a87582cbc25 Mon Sep 17 00:00:00 2001 From: brianneoberson Date: Tue, 28 Nov 2023 18:26:56 +0100 Subject: [PATCH 3/5] Add classFQN attribute --signoff Signed-off-by: brianneoberson --- .../pitmutationmate/GradleTaskExecutor.kt | 11 +++++++---- .../pitmutationmate/RunConfigurationAction.kt | 4 ++-- .../pitmutationmate/actions/ToolMenuAction.kt | 4 ++-- .../configuration/MutationMateRunConfiguration.kt | 10 ++++++++-- .../MutationMateRunConfigurationOptions.kt | 8 +++++++- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/GradleTaskExecutor.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/GradleTaskExecutor.kt index 552b6a92..fbcc557a 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/GradleTaskExecutor.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/GradleTaskExecutor.kt @@ -16,14 +16,16 @@ class GradleTaskExecutor { private var gradleExecutable: String? = null private val windowsGradleExecutable = "gradlew.bat" private val unixGradleExecutable = "gradlew" + private val classFQN: String? = null fun executeTask( projectDir: String, gradleExecutable: String?, - taskName: String? + taskName: String?, + classFQN: String? ): ProcessHandler { - println("GradeTaskExecutor executeTask") - val commandLine = buildCommandLine(gradleExecutable, taskName, projectDir) + println("GradeTaskExecutor: executeTask") + val commandLine = buildCommandLine(gradleExecutable, taskName, projectDir, classFQN) val processHandler = createProcessHandler(commandLine) ProcessTerminatedListener.attach(processHandler) return processHandler @@ -32,7 +34,8 @@ class GradleTaskExecutor { private fun buildCommandLine( gradleExecutable: String?, taskName: String?, - projectDir: String + projectDir: String, + classFQN: String? ): GeneralCommandLine { val commandLine = GeneralCommandLine() diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/RunConfigurationAction.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/RunConfigurationAction.kt index 6ec35df0..bf4177df 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/RunConfigurationAction.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/RunConfigurationAction.kt @@ -27,7 +27,7 @@ class RunConfigurationAction : AnAction() { val editor: Any? = e.getData(CommonDataKeys.EDITOR) println(editor) if (project != null && editor != null) { - project.basePath?.let { gradleTaskExecutor.executeTask(it, "", "pitest") } + project.basePath?.let { gradleTaskExecutor.executeTask(it, "", "pitest", null) } if (editor is Editor) { val markupModel: MarkupModel = editor.markupModel markupModel.removeAllHighlighters() @@ -61,4 +61,4 @@ class RunConfigurationAction : AnAction() { rangeHighlighter.gutterIconRenderer = barGutterRenderer } } -} \ No newline at end of file +} diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ToolMenuAction.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ToolMenuAction.kt index dc14e202..e3eed737 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ToolMenuAction.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ToolMenuAction.kt @@ -4,6 +4,7 @@ package com.amos.pitmutationmate.pitmutationmate.actions import HighlightGutterRenderer +import com.amos.pitmutationmate.pitmutationmate.GradleTaskExecutor import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent @@ -12,7 +13,6 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.colors.TextAttributesKey import com.intellij.openapi.editor.markup.MarkupModel import com.intellij.openapi.editor.markup.RangeHighlighter -import com.amos.pitmutationmate.pitmutationmate.GradleTaskExecutor import com.intellij.openapi.project.Project class ToolMenuAction : AnAction() { @@ -29,7 +29,7 @@ class ToolMenuAction : AnAction() { val editor: Any? = e.getData(CommonDataKeys.EDITOR) println(editor) if (project != null && editor != null) { - project.basePath?.let { gradleTaskExecutor.executeTask(it, "", "pitest") } + project.basePath?.let { gradleTaskExecutor.executeTask(it, "", "pitest", "") } if (editor is Editor) { val markupModel: MarkupModel = editor.markupModel markupModel.removeAllHighlighters() diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfiguration.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfiguration.kt index 11a3843e..f6984fa4 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfiguration.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfiguration.kt @@ -7,7 +7,6 @@ import com.amos.pitmutationmate.pitmutationmate.GradleTaskExecutor import com.intellij.execution.ExecutionException import com.intellij.execution.Executor import com.intellij.execution.configurations.* -import com.intellij.execution.configurations.RunConfiguration import com.intellij.execution.process.ProcessHandler import com.intellij.execution.runners.ExecutionEnvironment import com.intellij.openapi.options.SettingsEditor @@ -41,6 +40,13 @@ class MutationMateRunConfiguration( options.gradleExecutable = gradleExecutable } + var classFQN: String + get() = options.classFQN ?: "" + set(classFQN) { + options.classFQN = classFQN + println("MutationMateRunConfiguration: classFQN was updated to '$classFQN'.") + } + override fun getConfigurationEditor(): SettingsEditor { return MutationMateSettingsEditor() } @@ -54,7 +60,7 @@ class MutationMateRunConfiguration( @Throws(ExecutionException::class) override fun startProcess(): ProcessHandler { val gradleTaskExecutor = GradleTaskExecutor() - return gradleTaskExecutor.executeTask(projectDir, gradleExecutable, taskName) + return gradleTaskExecutor.executeTask(projectDir, gradleExecutable, taskName, classFQN) } } } diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfigurationOptions.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfigurationOptions.kt index a6734bed..5564fe0a 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfigurationOptions.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/configuration/MutationMateRunConfigurationOptions.kt @@ -4,7 +4,6 @@ package com.amos.pitmutationmate.pitmutationmate.configuration import com.intellij.execution.configurations.RunConfigurationOptions -import com.intellij.ide.util.PropertiesComponent import com.intellij.openapi.components.StoredProperty class MutationMateRunConfigurationOptions : RunConfigurationOptions() { @@ -15,6 +14,13 @@ class MutationMateRunConfigurationOptions : RunConfigurationOptions() { taskNameOption.setValue(this, value) } + private var classFQNOption: StoredProperty = string("").provideDelegate(this, "gradle.task") + var classFQN: String? + get() = classFQNOption.getValue(this) + set(value) { + classFQNOption.setValue(this, value) + } + private val gradleExecutableOption: StoredProperty = string("").provideDelegate(this, "gradle.executable") var gradleExecutable: String? get() = gradleExecutableOption.getValue(this) From fecff3327007c834ff0856b5e26860c7be6621a9 Mon Sep 17 00:00:00 2001 From: brianneoberson Date: Tue, 28 Nov 2023 18:27:35 +0100 Subject: [PATCH 4/5] Get classFQN and pass it on to MutationMateRunConfiguration --signoff Signed-off-by: brianneoberson --- .../actions/ContextMenuAction.kt | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt index a93c7226..b1839da4 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt @@ -3,29 +3,47 @@ package com.amos.pitmutationmate.pitmutationmate.actions -import com.amos.pitmutationmate.pitmutationmate.GradleTaskExecutor +import com.amos.pitmutationmate.pitmutationmate.configuration.MutationMateRunConfiguration +import com.amos.pitmutationmate.pitmutationmate.configuration.MutationMateRunConfigurationType +import com.intellij.execution.ExecutorRegistry +import com.intellij.execution.ProgramRunnerUtil +import com.intellij.execution.RunManager import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.project.Project +import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.PsiJavaFile + class ContextMenuAction: AnAction() { override fun actionPerformed(e: AnActionEvent) { - val context = e.getDataContext() - val file: VirtualFile? = context.getData("virtualFile") as VirtualFile? - println("ContextMenuAction actionPerformed for file ${file}") - - val project: Project? = e.project - val gradleTaskExecutor = GradleTaskExecutor() - if (project != null) { - project.basePath?.let { gradleTaskExecutor.executeTask(it, "", "pitest") } + val psiFile = e.getData(CommonDataKeys.PSI_FILE) + println("ContextMenuAction: actionPerformed for file $psiFile") + val psiClasses = (psiFile as PsiJavaFile).classes + val fqns = mutableListOf() + for (psiClass in psiClasses) { + val fqn = psiClass.qualifiedName + if (fqn != null) { + fqns.add(fqn) + println("ContextMenuAction: detected class '$fqn'") + } + } + val executor = ExecutorRegistry.getInstance().getExecutorById("Run") + + val runConfig = RunManager.getInstance(e.project!!).getConfigurationSettingsList( + MutationMateRunConfigurationType::class.java).first() + + runConfig.configuration.let { + val rc = it as MutationMateRunConfiguration + rc.classFQN = fqns.first() } + + ProgramRunnerUtil.executeConfiguration(runConfig, executor!!) } override fun update(e: AnActionEvent) { // Get the project and the file associated with the action event - val project: Project? = e.project - val file: VirtualFile? = e.getDataContext().getData("virtualFile") as VirtualFile? + val file: VirtualFile? = e.dataContext.getData("virtualFile") as VirtualFile? // Check your condition to determine whether to enable or disable the action val shouldEnable: Boolean = checkCondition(file) @@ -38,4 +56,8 @@ class ContextMenuAction: AnAction() { return file != null && (file.name.endsWith(".java") || file.name.endsWith(".kt")) } +// override fun getActionUpdateThread(): ActionUpdateThread { +// return +// } + } From a036c56dc1f1d405135052c6adf3c5431d83b321 Mon Sep 17 00:00:00 2001 From: brianneoberson Date: Tue, 28 Nov 2023 20:56:37 +0100 Subject: [PATCH 5/5] Remove comments --signoff Signed-off-by: brianneoberson --- .../pitmutationmate/actions/ContextMenuAction.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt index b1839da4..1181a1ad 100644 --- a/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt +++ b/pitmutationmate/src/main/kotlin/com/amos/pitmutationmate/pitmutationmate/actions/ContextMenuAction.kt @@ -56,8 +56,4 @@ class ContextMenuAction: AnAction() { return file != null && (file.name.endsWith(".java") || file.name.endsWith(".kt")) } -// override fun getActionUpdateThread(): ActionUpdateThread { -// return -// } - }