Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/45 get the scope information to mutation mate run configuration.kt #83

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pitmutationmate/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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 {
Expand Down
3 changes: 3 additions & 0 deletions pitmutationmate/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 2 additions & 0 deletions pitmutationmate/gradlew
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/sh

# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2023
#
# Copyright © 2015-2021 the original authors.
#
Expand Down
3 changes: 3 additions & 0 deletions pitmutationmate/gradlew.bat
Original file line number Diff line number Diff line change
@@ -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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -32,7 +34,8 @@ class GradleTaskExecutor {
private fun buildCommandLine(
gradleExecutable: String?,
taskName: String?,
projectDir: String
projectDir: String,
classFQN: String?
): GeneralCommandLine {
val commandLine = GeneralCommandLine()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -61,4 +61,4 @@ class RunConfigurationAction : AnAction() {
rangeHighlighter.gutterIconRenderer = barGutterRenderer
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>()
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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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() {
Expand All @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<out RunConfiguration> {
return MutationMateSettingsEditor()
}
Expand All @@ -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)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -15,6 +14,13 @@ class MutationMateRunConfigurationOptions : RunConfigurationOptions() {
taskNameOption.setValue(this, value)
}

private var classFQNOption: StoredProperty<String?> = string("").provideDelegate(this, "gradle.task")
var classFQN: String?
get() = classFQNOption.getValue(this)
set(value) {
classFQNOption.setValue(this, value)
}

private val gradleExecutableOption: StoredProperty<String?> = string("").provideDelegate(this, "gradle.executable")
var gradleExecutable: String?
get() = gradleExecutableOption.getValue(this)
Expand Down
3 changes: 2 additions & 1 deletion pitmutationmate/src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@

<!-- Product and plugin compatibility requirements.
Read more: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
<depends>com.intellij.modules.platform</depends>
<depends>com.intellij.java</depends>


<!-- Extension points defined by the plugin.
Read more: https://plugins.jetbrains.com/docs/intellij/plugin-extension-points.html -->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2023

package com.amos.pitmutationmate.pitmutationmate

import com.amos.pitmutationmate.pitmutationmate.reporting.XMLParser
Expand Down