diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionBase.kt b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionBase.kt index 55e8512be5da..424f8ce159ec 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionBase.kt +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionBase.kt @@ -38,6 +38,7 @@ import com.intellij.openapi.roots.libraries.NewLibraryConfiguration import com.intellij.openapi.roots.libraries.ui.OrderRoot import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditorBase +import com.intellij.openapi.ui.DialogWrapper import com.intellij.openapi.ui.Messages import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.* @@ -91,10 +92,7 @@ abstract class ConvertToRepositoryLibraryActionBase(protected val context: Struc null) != Messages.YES) { return } - val coordinates = specifyMavenCoordinates(listOf(mavenCoordinates)) ?: return - ApplicationManager.getApplication().invokeLater { - downloadLibraryAndReplace(library, coordinates) - } + changeCoordinatesAndRetry(mavenCoordinates, library) return } @@ -104,11 +102,16 @@ abstract class ConvertToRepositoryLibraryActionBase(protected val context: Struc if (task.cancelled) return if (!task.filesAreTheSame) { - val ok = LibraryJarsDiffDialog(task.libraryFileToCompare, task.downloadedFileToCompare, mavenCoordinates, - LibraryUtil.getPresentableName(library), project).showAndGet() + val dialog = LibraryJarsDiffDialog(task.libraryFileToCompare, task.downloadedFileToCompare, mavenCoordinates, + LibraryUtil.getPresentableName(library), project) + dialog.show() task.deleteTemporaryFiles() - if (!ok) { - return + when (dialog.exitCode) { + DialogWrapper.CANCEL_EXIT_CODE -> return + LibraryJarsDiffDialog.CHANGE_COORDINATES_CODE -> { + changeCoordinatesAndRetry(mavenCoordinates, library) + return + } } } ApplicationManager.getApplication().invokeLater { @@ -121,6 +124,13 @@ abstract class ConvertToRepositoryLibraryActionBase(protected val context: Struc } } + private fun changeCoordinatesAndRetry(mavenCoordinates: JpsMavenRepositoryLibraryDescriptor, library: LibraryEx) { + val coordinates = specifyMavenCoordinates(listOf(mavenCoordinates)) ?: return + ApplicationManager.getApplication().invokeLater { + downloadLibraryAndReplace(library, coordinates) + } + } + private fun detectOrSpecifyMavenCoordinates(library: Library): JpsMavenRepositoryLibraryDescriptor? { val detectedCoordinates = detectMavenCoordinates(library.getFiles(OrderRootType.CLASSES)) LOG.debug("Maven coordinates for ${LibraryUtil.getPresentableName(library)} JARs: $detectedCoordinates") diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibraryJarsDiffDialog.kt b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibraryJarsDiffDialog.kt index 04bcca31ed2c..467c21c92b6d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibraryJarsDiffDialog.kt +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibraryJarsDiffDialog.kt @@ -26,6 +26,8 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.components.JBLabel import com.intellij.xml.util.XmlStringUtil import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor +import java.awt.event.ActionEvent +import javax.swing.Action /** * @author nik @@ -35,6 +37,9 @@ class LibraryJarsDiffDialog(libraryFile: VirtualFile, private val mavenCoordinates: JpsMavenRepositoryLibraryDescriptor, private val libraryName: String, project: Project) : DialogWrapper(project) { + companion object { + val CHANGE_COORDINATES_CODE = 2; + } private val panel: DiffRequestPanel @@ -53,4 +58,14 @@ class LibraryJarsDiffDialog(libraryFile: VirtualFile, override fun createCenterPanel() = panel.component override fun getPreferredFocusedComponent() = panel.preferredFocusedComponent + + override fun createActions(): Array { + return arrayOf(okAction, ChangeCoordinatesAction(), cancelAction) + } + + private inner class ChangeCoordinatesAction : DialogWrapperAction("Change Coordinates...") { + override fun doAction(e: ActionEvent?) { + close(CHANGE_COORDINATES_CODE) + } + } } \ No newline at end of file