Skip to content

Commit 7365998

Browse files
committed
upgraded core lib and added plugin refresh/clean actions to toolbar
1 parent 73ab3f4 commit 7365998

17 files changed

+179
-43
lines changed

.github/workflows/release.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@ jobs:
2424
shell: bash
2525
run: |
2626
PROPERTIES="$(./gradlew properties --console=plain -q)"
27+
NAME="$(echo "$PROPERTIES" | grep "^pluginName_:" | cut -f2- -d ' ')"
2728
IDE_VERSIONS="$(echo "$PROPERTIES" | grep "^pluginVerifierIdeVersions:" | base64)"
2829
CHANGELOG="$(./gradlew getChangelog --unreleased --no-header --console=plain -q)"
2930
CHANGELOG="${CHANGELOG//'%'/'%25'}"
3031
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
3132
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
32-
ARTIFACT="${NAME}-${VERSION}.zip"
33+
ARTIFACT="${NAME}-${{ github.event.inputs.version }}.zip"
3334
3435
echo "::set-output name=ideVersions::$IDE_VERSIONS"
3536
echo "::set-output name=pluginVerifierHomeDir::~/.pluginVerifier"
@@ -98,7 +99,7 @@ jobs:
9899
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
99100
with:
100101
upload_url: ${{ steps.createRelease.outputs.upload_url }}
101-
asset_path: ./${{ steps.properties.outputs.artifact }}
102+
asset_path: ./build/distributions/${{ steps.properties.outputs.artifact }}
102103
asset_name: ${{ steps.properties.outputs.artifact }}
103104
asset_content_type: application/zip
104105

CHANGELOG.md

+3-8
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,11 @@
44

55
## [Unreleased]
66
### Added
7+
- Action in `Tools` menu to refresh Project-Env.
8+
- Action in `Tools` menu to clean previous installed and now unused Project-Env tools.
79

810
### Changed
9-
10-
### Deprecated
11-
12-
### Removed
13-
14-
### Fixed
15-
16-
### Security
11+
- Updated Project-Env core library to version `2.0.0`.
1712

1813
## [1.1.1]
1914
### Changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Project-Env IntelliJ-Plugin
22

33
![Build](https://github.com/Project-Env/project-env-intellij-plugin/workflows/Build/badge.svg)
4+
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Project-Env_project-env-intellij-plugin&metric=alert_status)](https://sonarcloud.io/dashboard?id=Project-Env_project-env-intellij-plugin)
45
[![Version](https://img.shields.io/jetbrains/plugin/v/15746-project-env.svg)](https://plugins.jetbrains.com/plugin/15746-project-env)
56
[![Downloads](https://img.shields.io/jetbrains/plugin/d/15746-project-env.svg)](https://plugins.jetbrains.com/plugin/15746-project-env)
67

@@ -18,7 +19,8 @@ Currently, the following project settings are configured automatically if the to
1819
* Makes all environment variables of all declared tools available to Gradle executions
1920
* Node: Adds a new interpreter and set it as project default interpreter
2021

21-
Please note that changes in this file are only loaded once after opening the project.
22+
Please note that changes in this file are only loaded once after opening the project. Afterwards, the Project-Env must be manually refreshed by using the action under <kbd>Tools</kbd> > <kbd>Project-Env</kbd> > <kbd>Refresh️</kbd>.
23+
2224
<!-- Plugin description end -->
2325

2426
## Installation

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ repositories {
4747
}
4848
}
4949
dependencies {
50-
implementation("io.projectenv:core:1.1.2")
50+
implementation("io.projectenv:core:2.0.0")
5151
testImplementation("org.assertj:assertj-core:3.19.0")
5252
}
5353

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pluginUntilBuild = 211.*
1111
pluginVerifierIdeVersions = 2021.1
1212

1313
platformType = IU
14-
platformVersion = LATEST-EAP-SNAPSHOT
14+
platformVersion = 2020.3
1515
platformDownloadSources = true
1616
# Plugin Dependencies -> https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html
1717
# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package icons
2+
3+
import com.intellij.openapi.util.IconLoader
4+
5+
object ProjectEnvPluginIcons {
6+
7+
@JvmField
8+
val Default = IconLoader.getIcon("/icons/default.svg", javaClass)
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.projectenv.intellijplugin.actions
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import com.intellij.openapi.components.service
6+
import io.projectenv.intellijplugin.services.ProjectEnvService
7+
8+
class CleanProjectEnvAction : AnAction() {
9+
10+
override fun actionPerformed(e: AnActionEvent) {
11+
e.project?.service<ProjectEnvService>()?.cleanProjectEnv()
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.projectenv.intellijplugin.actions
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import com.intellij.openapi.components.service
6+
import io.projectenv.intellijplugin.services.ProjectEnvService
7+
8+
class ReloadProjectEnvAction : AnAction() {
9+
10+
override fun actionPerformed(e: AnActionEvent) {
11+
e.project?.service<ProjectEnvService>()?.refreshProjectEnv()
12+
}
13+
}

src/main/kotlin/io/projectenv/intellijplugin/configurers/ToolConfigurer.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.projectenv.intellijplugin.configurers
22

33
import com.intellij.openapi.Disposable
4-
import io.projectenv.core.toolinfo.ToolInfo
4+
import io.projectenv.core.tools.info.ToolInfo
55

66
interface ToolConfigurer<ToolInfoType : ToolInfo> : Disposable {
77

src/main/kotlin/io/projectenv/intellijplugin/configurers/gradle/GradleConfigurer.kt

+27-17
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,49 @@ package io.projectenv.intellijplugin.configurers.gradle
22

33
import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListenerAdapter
44
import com.intellij.openapi.project.Project
5-
import io.projectenv.core.toolinfo.GradleInfo
6-
import io.projectenv.core.toolinfo.ToolInfo
5+
import io.projectenv.core.tools.info.GradleInfo
6+
import io.projectenv.core.tools.info.ToolInfo
77
import io.projectenv.intellijplugin.configurers.ToolConfigurer
88
import org.jetbrains.plugins.gradle.settings.DistributionType
99
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
1010
import org.jetbrains.plugins.gradle.settings.GradleSettings
1111

12-
class GradleConfigurer(val project: Project) : ToolConfigurer<GradleInfo> {
12+
class GradleConfigurer(project: Project) : ToolConfigurer<GradleInfo>,
13+
ExternalSystemSettingsListenerAdapter<GradleProjectSettings>() {
14+
15+
private var toolInfo: ToolInfo? = null
16+
17+
init {
18+
GradleSettings.getInstance(project).subscribe(this, this)
19+
}
1320

1421
override fun supportsType(toolInfo: ToolInfo): Boolean {
1522
return toolInfo is GradleInfo
1623
}
1724

1825
override fun configureTool(toolInfo: GradleInfo) {
19-
GradleSettings.getInstance(project)
20-
.subscribe(GradleSettingsListener(toolInfo), this)
26+
this.toolInfo = toolInfo
2127
}
2228

23-
private class GradleSettingsListener(val toolInfo: GradleInfo) :
24-
ExternalSystemSettingsListenerAdapter<GradleProjectSettings>() {
29+
override fun onProjectsLinked(settings: MutableCollection<GradleProjectSettings>) {
30+
if (toolInfo == null) {
31+
return
32+
}
33+
34+
for (projectSettings in settings) {
35+
projectSettings.distributionType = DistributionType.LOCAL
36+
projectSettings.gradleHome = toolInfo!!.location.canonicalPath
37+
}
38+
}
2539

26-
override fun onProjectsLinked(settings: MutableCollection<GradleProjectSettings>) {
27-
for (projectSettings in settings) {
28-
projectSettings.distributionType = DistributionType.LOCAL
29-
projectSettings.gradleHome = toolInfo.location.canonicalPath
30-
}
40+
override fun onProjectsLoaded(settings: MutableCollection<GradleProjectSettings>) {
41+
if (toolInfo == null) {
42+
return
3143
}
3244

33-
override fun onProjectsLoaded(settings: MutableCollection<GradleProjectSettings>) {
34-
for (projectSettings in settings) {
35-
projectSettings.distributionType = DistributionType.LOCAL
36-
projectSettings.gradleHome = toolInfo.location.canonicalPath
37-
}
45+
for (projectSettings in settings) {
46+
projectSettings.distributionType = DistributionType.LOCAL
47+
projectSettings.gradleHome = toolInfo!!.location.canonicalPath
3848
}
3949
}
4050
}

src/main/kotlin/io/projectenv/intellijplugin/configurers/jdk/JdkConfigurer.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import com.intellij.openapi.project.Project
55
import com.intellij.openapi.projectRoots.JavaSdk
66
import com.intellij.openapi.projectRoots.ProjectJdkTable
77
import com.intellij.openapi.roots.ProjectRootManager
8-
import io.projectenv.core.toolinfo.JdkInfo
9-
import io.projectenv.core.toolinfo.ToolInfo
8+
import io.projectenv.core.tools.info.JdkInfo
9+
import io.projectenv.core.tools.info.ToolInfo
1010
import io.projectenv.intellijplugin.configurers.ToolConfigurer
1111

1212
class JdkConfigurer(val project: Project) : ToolConfigurer<JdkInfo> {

src/main/kotlin/io/projectenv/intellijplugin/configurers/maven/MavenConfigurer.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package io.projectenv.intellijplugin.configurers.maven
33
import com.intellij.openapi.application.ApplicationManager
44
import com.intellij.openapi.components.service
55
import com.intellij.openapi.project.Project
6-
import io.projectenv.core.toolinfo.MavenInfo
7-
import io.projectenv.core.toolinfo.ToolInfo
6+
import io.projectenv.core.tools.info.MavenInfo
7+
import io.projectenv.core.tools.info.ToolInfo
88
import io.projectenv.intellijplugin.configurers.ToolConfigurer
99
import io.projectenv.intellijplugin.services.ExecutionEnvironmentService
1010
import org.jetbrains.idea.maven.execution.MavenRunner

src/main/kotlin/io/projectenv/intellijplugin/configurers/node/NodeConfigurer.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreter
55
import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreterManager
66
import com.intellij.openapi.application.ApplicationManager
77
import com.intellij.openapi.project.Project
8-
import io.projectenv.core.toolinfo.NodeInfo
9-
import io.projectenv.core.toolinfo.ToolInfo
8+
import io.projectenv.core.tools.info.NodeInfo
9+
import io.projectenv.core.tools.info.ToolInfo
1010
import io.projectenv.intellijplugin.configurers.ToolConfigurer
1111

1212
class NodeConfigurer(val project: Project) : ToolConfigurer<NodeInfo> {

src/main/kotlin/io/projectenv/intellijplugin/services/ProjectEnvService.kt

+2
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ package io.projectenv.intellijplugin.services
33
interface ProjectEnvService {
44

55
fun refreshProjectEnv()
6+
7+
fun cleanProjectEnv()
68
}

src/main/kotlin/io/projectenv/intellijplugin/services/impl/ProjectEnvServiceImpl.kt

+43-6
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import com.intellij.openapi.progress.ProgressManager
77
import com.intellij.openapi.project.Project
88
import io.projectenv.core.configuration.ProjectEnvConfiguration
99
import io.projectenv.core.configuration.ProjectEnvConfigurationFactory
10-
import io.projectenv.core.installer.ToolInstallers
11-
import io.projectenv.core.toolinfo.ToolInfo
10+
import io.projectenv.core.tools.info.ToolInfo
11+
import io.projectenv.core.tools.repository.ToolsRepositoryFactory
1212
import io.projectenv.intellijplugin.configurers.ToolConfigurer
1313
import io.projectenv.intellijplugin.services.ExecutionEnvironmentService
1414
import io.projectenv.intellijplugin.services.ProjectEnvService
@@ -17,16 +17,18 @@ import java.io.File
1717

1818
class ProjectEnvServiceImpl(val project: Project) : ProjectEnvService {
1919

20-
private val logger = LoggerFactory.getLogger(this.javaClass)
21-
2220
private val toolConfigurerExtensionPoint: ProjectExtensionPointName<ToolConfigurer<ToolInfo>> =
2321
ProjectExtensionPointName("ch.repolevedavaj.projectenv.intellijplugin.toolConfigurer")
2422

23+
private val logger = LoggerFactory.getLogger(this.javaClass)
24+
25+
private val projectRoot = File(project.basePath)
26+
2527
override fun refreshProjectEnv() {
2628
ProgressManager.getInstance().runProcessWithProgressSynchronously(
2729
{
2830
try {
29-
val configurationFile = File(project.basePath, "project-env.yml")
31+
val configurationFile = getProjectEnvConfiguration()
3032
if (configurationFile.exists()) {
3133
val projectEnvConfiguration: ProjectEnvConfiguration =
3234
ProjectEnvConfigurationFactory.createFromFile(configurationFile)
@@ -48,8 +50,43 @@ class ProjectEnvServiceImpl(val project: Project) : ProjectEnvService {
4850
)
4951
}
5052

53+
override fun cleanProjectEnv() {
54+
ProgressManager.getInstance().runProcessWithProgressSynchronously(
55+
{
56+
try {
57+
val configurationFile = getProjectEnvConfiguration()
58+
if (configurationFile.exists()) {
59+
val projectEnvConfiguration: ProjectEnvConfiguration =
60+
ProjectEnvConfigurationFactory.createFromFile(configurationFile)
61+
62+
cleanTools(projectEnvConfiguration)
63+
}
64+
} catch (exception: Exception) {
65+
logger.error("failed to clean Project-Env", exception)
66+
}
67+
},
68+
"Cleaning Project-Env",
69+
false,
70+
project
71+
)
72+
}
73+
74+
private fun getProjectEnvConfiguration(): File {
75+
return File(project.basePath, "project-env.yml")
76+
}
77+
5178
private fun installTools(projectEnvConfiguration: ProjectEnvConfiguration): List<ToolInfo> {
52-
return ToolInstallers.installAllTools(projectEnvConfiguration, File(project.basePath))
79+
val toolsConfiguration = projectEnvConfiguration.toolsConfiguration
80+
81+
return ToolsRepositoryFactory.createToolRepository(File(projectRoot, toolsConfiguration.toolsDirectory))
82+
.requestTools(toolsConfiguration.allToolConfigurations, projectRoot)
83+
}
84+
85+
private fun cleanTools(projectEnvConfiguration: ProjectEnvConfiguration) {
86+
val toolsConfiguration = projectEnvConfiguration.toolsConfiguration
87+
88+
ToolsRepositoryFactory.createToolRepository(File(projectRoot, toolsConfiguration.toolsDirectory))
89+
.cleanAllToolsOfCurrentOSExcluding(toolsConfiguration.allToolConfigurations)
5390
}
5491

5592
private fun configureExecutionEnvironment(toolInfos: List<ToolInfo>) {

src/main/resources/META-INF/plugin.xml

+19
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,25 @@
2727
topic="com.intellij.openapi.project.ProjectManagerListener"/>
2828
</applicationListeners>
2929

30+
<actions>
31+
<group id="ch.projectenv.actions"
32+
text="Project-Env"
33+
popup="true"
34+
icon="ProjectEnvPluginIcons.Default">
35+
<add-to-group group-id="ToolsMenu"/>
36+
</group>
37+
<action id="io.projectenv.intellijplugin.actions.CleanProjectEnvAction"
38+
class="io.projectenv.intellijplugin.actions.CleanProjectEnvAction"
39+
text="Clean">
40+
<add-to-group group-id="ch.projectenv.actions"/>
41+
</action>
42+
<action id="io.projectenv.intellijplugin.actions.ReloadProjectEnvAction"
43+
class="io.projectenv.intellijplugin.actions.ReloadProjectEnvAction"
44+
text="Reload">
45+
<add-to-group group-id="ch.projectenv.actions"/>
46+
</action>
47+
</actions>
48+
3049
<depends optional="true" config-file="plugin-jdk.xml">com.intellij.java</depends>
3150
<depends optional="true" config-file="plugin-maven.xml">org.jetbrains.idea.maven</depends>
3251
<depends optional="true" config-file="plugin-gradle.xml">com.intellij.gradle</depends>

src/main/resources/icons/default.svg

+35
Loading

0 commit comments

Comments
 (0)