IDEA-CR-52830 IDEA-221682 - replaced baloon with build tool window event

GitOrigin-RevId: 3ec9a7f0957bef494056e1f8bb1a44cc501a4419
This commit is contained in:
Alexander Bubenchikov
2019-10-02 12:32:48 +00:00
committed by intellij-monorepo-bot
parent adbbcef28a
commit 01d7728d21
6 changed files with 95 additions and 14 deletions
@@ -9,12 +9,16 @@ import com.intellij.build.events.EventResult
import com.intellij.build.events.MessageEvent
import com.intellij.build.events.MessageEventResult
import com.intellij.build.events.impl.*
import com.intellij.build.issue.BuildIssue
import com.intellij.build.issue.BuildIssueQuickFix
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.idea.maven.buildtool.quickfix.OpenMavenSettingsQuickFix
import org.jetbrains.idea.maven.buildtool.quickfix.UseBundledMavenQuickFix
import org.jetbrains.idea.maven.execution.SyncBundle
import org.jetbrains.idea.maven.server.MavenServerProgressIndicator
import org.jetbrains.idea.maven.utils.MavenLog
@@ -172,6 +176,7 @@ class MavenSyncConsole(private val myProject: Project) {
completeTask(downloadString, downloadArtifactString, SuccessResultImpl(false))
}
@Synchronized
private fun downloadEventFailed(keyPrefix: String, dependency: String, error: String, stackTrace: String?) = doIfImportInProcess{
val downloadString = SyncBundle.message("${keyPrefix}.download")
@@ -201,6 +206,18 @@ class MavenSyncConsole(private val myProject: Project) {
}
}
@Synchronized
fun showQuickFixBadMaven(message: String, kind: MessageEvent.Kind) {
mySyncView.onEvent(mySyncId, BuildIssueEventImpl(mySyncId, object : BuildIssue {
override val title = "Bad maven version"
override val description: String = "${message}\n" +
"- <a href=\"${OpenMavenSettingsQuickFix.ID}\">Open Settings</a>\n" +
"- <a href=\"${UseBundledMavenQuickFix.ID}\">Use Bundled</a>\n"
override val quickFixes: List<BuildIssueQuickFix> = listOf(OpenMavenSettingsQuickFix(), UseBundledMavenQuickFix())
}, kind))
}
private fun isJavadocOrSource(dependency: String): Boolean {
val split = dependency.split(':')
if (split.size < 4) {
@@ -215,7 +232,6 @@ class MavenSyncConsole(private val myProject: Project) {
action.invoke()
}
private inner class ArtifactSyncListenerImpl(val keyPrefix: String) : ArtifactSyncListener {
override fun downloadStarted(dependency: String) {
downloadEventStarted(keyPrefix, dependency)
@@ -0,0 +1,25 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.idea.maven.buildtool.quickfix
import com.intellij.build.issue.BuildIssueQuickFix
import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.options.ShowSettingsUtil
import com.intellij.openapi.project.Project
import org.jetbrains.idea.maven.utils.MavenSettings
import java.util.concurrent.CompletableFuture
class OpenMavenSettingsQuickFix : BuildIssueQuickFix {
override val id: String = ID
override fun runQuickFix(project: Project, dataProvider: DataProvider): CompletableFuture<*> {
ApplicationManager.getApplication().invokeLater {
ShowSettingsUtil.getInstance().showSettingsDialog(project, MavenSettings.DISPLAY_NAME)
}
return CompletableFuture.completedFuture(null)
}
companion object {
const val ID = "open_maven_settings_quick_fix"
}
}
@@ -0,0 +1,33 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.idea.maven.buildtool.quickfix
import com.intellij.build.issue.BuildIssueQuickFix
import com.intellij.ide.actions.ShowSettingsUtilImpl
import com.intellij.notification.Notification
import com.intellij.notification.NotificationType
import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.options.ShowSettingsUtil
import com.intellij.openapi.project.Project
import org.jetbrains.idea.maven.project.MavenGeneralSettings
import org.jetbrains.idea.maven.project.MavenWorkspaceSettings
import org.jetbrains.idea.maven.project.MavenWorkspaceSettingsComponent
import org.jetbrains.idea.maven.server.MavenServerManager
import org.jetbrains.idea.maven.utils.MavenSettings
import org.jetbrains.idea.maven.utils.MavenUtil
import java.util.concurrent.CompletableFuture
class UseBundledMavenQuickFix: BuildIssueQuickFix {
override val id: String = ID
override fun runQuickFix(project: Project, dataProvider: DataProvider): CompletableFuture<*> {
MavenWorkspaceSettingsComponent.getInstance(project).settings.generalSettings.mavenHome = MavenServerManager.BUNDLED_MAVEN_3
Notification(MavenUtil.MAVEN_NOTIFICATION_GROUP, "", "Maven version changed to ${MavenServerManager.getInstance().currentMavenVersion}", NotificationType.INFORMATION).notify(null)
return CompletableFuture.completedFuture(null)
}
companion object {
const val ID = "use_bundled_maven_quick_fix"
}
}
@@ -59,6 +59,7 @@ import org.jetbrains.idea.maven.importing.MavenProjectImporter;
import org.jetbrains.idea.maven.model.*;
import org.jetbrains.idea.maven.project.MavenArtifactDownloader.DownloadResult;
import org.jetbrains.idea.maven.server.MavenEmbedderWrapper;
import org.jetbrains.idea.maven.server.MavenServerManager;
import org.jetbrains.idea.maven.server.MavenServerProgressIndicator;
import org.jetbrains.idea.maven.server.NativeMavenProjectHolder;
import org.jetbrains.idea.maven.utils.*;
@@ -884,6 +885,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
public Promise<List<Module>> scheduleImportAndResolve(boolean fromAutoImport) {
getSyncConsole().startImport(myProgressListener, fromAutoImport);
MavenServerManager.getInstance().showMavenNotifications(getSyncConsole());
MavenSyncConsole console = getSyncConsole();
AsyncPromise<List<Module>> promise = scheduleResolve();
promise.onProcessed(m -> {
@@ -1,6 +1,7 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.idea.maven.server;
import com.intellij.build.events.MessageEvent;
import com.intellij.execution.DefaultExecutionResult;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionResult;
@@ -37,7 +38,6 @@ import com.intellij.util.EnvironmentUtil;
import com.intellij.util.PathUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.io.BaseOutputReader;
import com.intellij.util.text.VersionComparatorUtil;
import com.intellij.util.xmlb.Converter;
import com.intellij.util.xmlb.annotations.Attribute;
import gnu.trove.THashMap;
@@ -48,9 +48,11 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.idea.maven.buildtool.MavenSyncConsole;
import org.jetbrains.idea.maven.execution.MavenExecutionOptions;
import org.jetbrains.idea.maven.execution.MavenRunnerSettings;
import org.jetbrains.idea.maven.execution.RunnerBundle;
import org.jetbrains.idea.maven.execution.SyncBundle;
import org.jetbrains.idea.maven.model.MavenExplicitProfiles;
import org.jetbrains.idea.maven.model.MavenModel;
import org.jetbrains.idea.maven.project.MavenGeneralSettings;
@@ -100,6 +102,17 @@ public class MavenServerManager extends MavenRemoteObjectWrapper<MavenServer> im
private boolean myDownloadListenerExported;
private State myState = new State();
public void showMavenNotifications(MavenSyncConsole console) {
String mavenVersion = getCurrentMavenVersion();
if (mavenVersion == null) {
console.showQuickFixBadMaven(SyncBundle.message("maven.sync.quickfixes.nomaven"), MessageEvent.Kind.ERROR);
}
if (StringUtil.compareVersionNumbers(mavenVersion, "3.6.0") == 0) {
console.showQuickFixBadMaven(SyncBundle.message("maven.sync.quickfixes.maven360"), MessageEvent.Kind.WARNING);
}
}
private static class BundledMavenPathHolder {
private static final File myBundledMaven2Home;
private static final File myBundledMaven3Home;
@@ -308,15 +321,6 @@ public class MavenServerManager extends MavenRemoteObjectWrapper<MavenServer> im
}
}
private static void showNofificationIfMaven360(@NotNull String mavenVersion, @NotNull String sdkConfigLocation) {
if(StringUtil.compareVersionNumbers(mavenVersion, "3.6.0") == 0) {
new Notification(MavenUtil.MAVEN_NOTIFICATION_GROUP, "",
"You use Maven 3.6.0, there could be issues importing multimodule project.<br>" +
"It is recommended to upgrade or downgrade Maven version at <br>" +
sdkConfigLocation,
NotificationType.WARNING).notify(null);
}
}
public static File getMavenEventListener() {
return BundledMavenPathHolder.eventListenerJar;
@@ -725,8 +729,6 @@ public class MavenServerManager extends MavenRemoteObjectWrapper<MavenServer> im
String sdkConfigLocation = "Settings | Build, Execution, Deployment | Build Tools | Maven | Importing | JDK for Importer";
verifyMavenSdkRequirements(jdk, mavenVersion, sdkConfigLocation);
showNofificationIfMaven360(mavenVersion,sdkConfigLocation);
final List<String> classPath = new ArrayList<>();
classPath.add(PathUtil.getJarPathForClass(org.apache.log4j.Logger.class));
if (StringUtil.compareVersionNumbers(mavenVersion, "3.1") < 0) {
@@ -6,4 +6,7 @@ maven.sync.plugins.artifact.download=Downloading {0}
maven.sync.dependencies.resolve=Resolve dependencies
maven.sync.dependencies.resolve.error=Cannot resolve {0}
maven.sync.dependencies.download=Downloading dependencies
maven.sync.dependencies.artifact.download=Downloading {0}
maven.sync.dependencies.artifact.download=Downloading {0}
maven.sync.quickfixes.nomaven=Maven version not defined
maven.sync.quickfixes.maven360=You use Maven 3.6.0, there could be issues importing multimodule project. It is recommended to upgrade or downgrade Maven version