mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
IDEA-109705 Gradle: on pressing "Attach Project" button in Gradle tool window, general "Select File or Directory to Import" dialog appears, and it allows to import whichever project (ant, maven, etc.)
This commit is contained in:
@@ -35,6 +35,7 @@ import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.projectImport.ProjectImportProvider;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -106,6 +107,15 @@ public class ImportModuleAction extends AnAction {
|
||||
String description = getFileChooserDescription(project);
|
||||
descriptor.setDescription(description);
|
||||
|
||||
return selectFileAndCreateWizard(project, dialogParent, descriptor, providers);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static AddModuleWizard selectFileAndCreateWizard(final Project project,
|
||||
@Nullable Component dialogParent,
|
||||
@NotNull FileChooserDescriptor descriptor,
|
||||
ProjectImportProvider[] providers)
|
||||
{
|
||||
FileChooserDialog chooser = FileChooserFactory.getInstance().createFileChooser(descriptor, project, dialogParent);
|
||||
VirtualFile toSelect = null;
|
||||
String lastLocation = PropertiesComponent.getInstance().getValue(LAST_IMPORTED_LOCATION);
|
||||
@@ -151,7 +161,7 @@ public class ImportModuleAction extends AnAction {
|
||||
}
|
||||
|
||||
public static AddModuleWizard createImportWizard(final Project project,
|
||||
Component dialogParent,
|
||||
@Nullable Component dialogParent,
|
||||
final VirtualFile file,
|
||||
ProjectImportProvider... providers) {
|
||||
List<ProjectImportProvider> available = ContainerUtil.filter(providers, new Condition<ProjectImportProvider>() {
|
||||
|
||||
@@ -17,17 +17,20 @@ package com.intellij.openapi.externalSystem.action;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.actions.ImportModuleAction;
|
||||
import com.intellij.ide.util.newProjectWizard.AddModuleWizard;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.externalSystem.ExternalSystemManager;
|
||||
import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys;
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
|
||||
import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalProjectImportProvider;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.SystemInfoRt;
|
||||
import com.intellij.projectImport.ProjectImportProvider;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
@@ -61,7 +64,23 @@ public class AttachExternalProjectAction extends AnAction implements DumbAware {
|
||||
if (project == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
ProjectImportProvider[] providers = new ProjectImportProvider[1];
|
||||
for (ProjectImportProvider provider : ProjectImportProvider.PROJECT_IMPORT_PROVIDER.getExtensions()) {
|
||||
if (provider instanceof AbstractExternalProjectImportProvider
|
||||
&& externalSystemId.equals(((AbstractExternalProjectImportProvider)provider).getExternalSystemId()))
|
||||
{
|
||||
providers[0] = provider;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (providers[0] == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
ImportModuleAction.doImport(project);
|
||||
AddModuleWizard wizard = ImportModuleAction.selectFileAndCreateWizard(project, null, manager.getExternalProjectDescriptor(), providers);
|
||||
if (wizard != null) {
|
||||
ImportModuleAction.createFromWizard(project, wizard);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@ package com.intellij.openapi.externalSystem.service.project.wizard;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||
import com.intellij.ide.util.projectWizard.WizardContext;
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.projectImport.ProjectImportBuilder;
|
||||
import com.intellij.projectImport.ProjectImportProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Provides 'import from external model' functionality.
|
||||
@@ -13,9 +15,17 @@ import com.intellij.projectImport.ProjectImportProvider;
|
||||
* @since 7/29/11 3:45 PM
|
||||
*/
|
||||
public abstract class AbstractExternalProjectImportProvider extends ProjectImportProvider {
|
||||
|
||||
public AbstractExternalProjectImportProvider(ProjectImportBuilder builder) {
|
||||
|
||||
@NotNull private final ProjectSystemId myExternalSystemId;
|
||||
|
||||
public AbstractExternalProjectImportProvider(ProjectImportBuilder builder, @NotNull ProjectSystemId externalSystemId) {
|
||||
super(builder);
|
||||
myExternalSystemId = externalSystemId;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ProjectSystemId getExternalSystemId() {
|
||||
return myExternalSystemId;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,7 +27,7 @@ import org.jetbrains.plugins.gradle.util.GradleConstants;
|
||||
public class GradleProjectImportProvider extends AbstractExternalProjectImportProvider {
|
||||
|
||||
public GradleProjectImportProvider(GradleProjectImportBuilder builder) {
|
||||
super(builder);
|
||||
super(builder, GradleConstants.SYSTEM_ID);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user