diff --git a/java/idea-ui/src/com/intellij/ide/actions/ImportModuleAction.java b/java/idea-ui/src/com/intellij/ide/actions/ImportModuleAction.java index 9213668c2637..614ea7724435 100644 --- a/java/idea-ui/src/com/intellij/ide/actions/ImportModuleAction.java +++ b/java/idea-ui/src/com/intellij/ide/actions/ImportModuleAction.java @@ -21,7 +21,6 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.fileChooser.FileChooserDialog; import com.intellij.openapi.fileChooser.FileChooserFactory; import com.intellij.openapi.module.Module; @@ -80,7 +79,12 @@ public class ImportModuleAction extends AnAction { @Nullable public static AddModuleWizard selectFileAndCreateWizard(final Project project, Component dialogParent) { - FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFileOrFolderDescriptor(); + FileChooserDescriptor descriptor = new OpenProjectFileChooserDescriptor(true) { + @Override + public boolean isFileSelectable(VirtualFile file) { + return file.isDirectory() || isProjectFile(file); + } + }; descriptor.setTitle("Select File or Directory to Import"); ProjectImportProvider[] providers = ProjectImportProvider.PROJECT_IMPORT_PROVIDER.getExtensions(); String description = getFileChooserDescription(project); @@ -104,29 +108,23 @@ public class ImportModuleAction extends AnAction { return project != null || provider.canCreateNewProject(); } }); - StringBuilder builder = new StringBuilder("Select"); + StringBuilder builder = new StringBuilder("Select "); boolean first = true; if (list.size() > 1) { for (ProjectImportProvider provider : list) { String sample = provider.getFileSample(); if (sample != null) { if (!first) { - builder.append(','); + builder.append(",
"); } else { first = false; } - builder.append(" ").append(sample).append(""); - if (sample.contains("*")) { - builder.append(" file"); - } + builder.append(sample); } } } - if (!first) { - builder.append(" or"); - } - builder.append(" directory with existing sources to be imported."); + builder.append("."); return builder.toString(); } diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ImportFromSourcesProvider.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ImportFromSourcesProvider.java index b56b99a27ae6..78ad23c1ac32 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ImportFromSourcesProvider.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ImportFromSourcesProvider.java @@ -21,6 +21,7 @@ import com.intellij.ide.util.projectWizard.importSources.impl.ProjectFromSources import com.intellij.openapi.roots.ui.configuration.DefaultModulesProvider; import com.intellij.projectImport.ProjectImportBuilder; import com.intellij.projectImport.ProjectImportProvider; +import org.jetbrains.annotations.Nullable; /** * @author Dmitry Avdeev @@ -43,4 +44,10 @@ public class ImportFromSourcesProvider extends ProjectImportProvider { mode.addSteps(context, DefaultModulesProvider.createForProject(context.getProject()), sequence, getName()); myBuilder = (ProjectImportBuilder)mode.getModuleBuilder(); } + + @Nullable + @Override + public String getFileSample() { + return "directory with existing sources"; + } } diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ModuleImportProvider.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ModuleImportProvider.java index b1790775ab35..df5ab08f62ae 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ModuleImportProvider.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ModuleImportProvider.java @@ -53,6 +53,6 @@ public class ModuleImportProvider extends ProjectImportProvider { @Nullable @Override public String getFileSample() { - return "*.iml"; + return "Intellij IDEA module file (*.iml)"; } } diff --git a/java/idea-ui/src/com/intellij/projectImport/ProjectImportProvider.java b/java/idea-ui/src/com/intellij/projectImport/ProjectImportProvider.java index 16f16ba36add..8f79e2b39bc8 100644 --- a/java/idea-ui/src/com/intellij/projectImport/ProjectImportProvider.java +++ b/java/idea-ui/src/com/intellij/projectImport/ProjectImportProvider.java @@ -26,6 +26,7 @@ import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; +import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -97,6 +98,7 @@ public abstract class ProjectImportProvider { } @Nullable + @Language("HTML") public String getFileSample() { return null; } diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseProjectImportProvider.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseProjectImportProvider.java index 7a47a6caacb7..b83e6c1a36fe 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseProjectImportProvider.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseProjectImportProvider.java @@ -23,11 +23,17 @@ package org.jetbrains.idea.eclipse.importWizard; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory; import com.intellij.ide.util.projectWizard.WizardContext; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.projectImport.ProjectImportProvider; +import org.jetbrains.annotations.Nullable; public class EclipseProjectImportProvider extends ProjectImportProvider { + + private final EclipseProjectOpenProcessor myProcessor; + public EclipseProjectImportProvider(final EclipseImportBuilder builder) { super(builder); + myProcessor = new EclipseProjectOpenProcessor(builder); } public ModuleWizardStep[] createSteps(WizardContext context) { @@ -35,4 +41,15 @@ public class EclipseProjectImportProvider extends ProjectImportProvider { return new ModuleWizardStep[]{new EclipseWorkspaceRootStep(context), new SelectEclipseImportedProjectsStep(context), stepFactory.createProjectJdkStep(context)/*, stepFactory.createNameAndLocationStep(context)*/}; } + + @Override + protected boolean canImportFromFile(VirtualFile file) { + return myProcessor.canOpenProject(file); + } + + @Nullable + @Override + public String getFileSample() { + return "Eclipse project (.project) or classpath (.classpath) file"; + } } \ No newline at end of file diff --git a/plugins/eclipse/testData/import/.classpath b/plugins/eclipse/testData/import/.classpath new file mode 100644 index 000000000000..233be1d2c496 --- /dev/null +++ b/plugins/eclipse/testData/import/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/plugins/eclipse/testData/import/.project b/plugins/eclipse/testData/import/.project new file mode 100644 index 000000000000..f5a6693fe6c2 --- /dev/null +++ b/plugins/eclipse/testData/import/.project @@ -0,0 +1,17 @@ + + + root + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseImportWizardTest.java b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseImportWizardTest.java index 6f50d5899cc2..f40b72d89454 100644 --- a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseImportWizardTest.java +++ b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseImportWizardTest.java @@ -17,10 +17,14 @@ package org.jetbrains.idea.eclipse; import com.intellij.ide.projectWizard.ProjectWizardTestCase; import com.intellij.ide.util.projectWizard.ImportFromSourcesProvider; +import com.intellij.openapi.application.PluginPathManager; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.idea.eclipse.importWizard.EclipseImportBuilder; import org.jetbrains.idea.eclipse.importWizard.EclipseProjectImportProvider; import java.io.File; +import java.io.IOException; /** * @author Dmitry Avdeev @@ -28,6 +32,32 @@ import java.io.File; */ public class EclipseImportWizardTest extends ProjectWizardTestCase { + public void testImportProject() throws Exception { + Module module = doTest(".project"); + assertEquals("root", module.getName()); + } + + public void testImportClasspath() throws Exception { + Module module = doTest(".classpath"); + assertEquals("root", module.getName()); + } + + public void testImportFromDirectory() throws Exception { + Module module = doTest(""); + assertEquals("root", module.getName()); + } + + private Module doTest(final String fileName) throws IOException { + copyTestData(); + return importProjectFrom(getProject().getBaseDir().getPath() + "/" + fileName, null, + new EclipseProjectImportProvider(new EclipseImportBuilder())); + } + + private void copyTestData() throws IOException { + final File testRoot = new File(PluginPathManager.getPluginHomePath("eclipse") + "/testData", "import"); + FileUtil.copyDir(testRoot, new File(getProject().getBaseDir().getPath())); + } + public void testNothingToImport() throws Exception { try { File file = createTempFile("Foo.java", "class Foo {}"); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/manage/GradleProjectImportProvider.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/manage/GradleProjectImportProvider.java index 89b21efe0874..77f5639c0aa5 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/manage/GradleProjectImportProvider.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/manage/GradleProjectImportProvider.java @@ -38,6 +38,6 @@ public class GradleProjectImportProvider extends ProjectImportProvider { @Nullable @Override public String getFileSample() { - return "*.gradle"; + return "Gradle build script (*.gradle)"; } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java index db3f82234951..a6445abb71fa 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectImportProvider.java @@ -24,6 +24,7 @@ import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory; import com.intellij.ide.util.projectWizard.WizardContext; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.projectImport.ProjectImportProvider; @@ -49,7 +50,7 @@ public class MavenProjectImportProvider extends ProjectImportProvider { VirtualFile root = ((MavenProjectBuilder)getBuilder()).getRootDirectory(); if (root != null) { final String relPath = VfsUtilCore.getRelativePath(project.getDirectoryFile(), root, File.separatorChar); - if (relPath.length() != 0) { + if (StringUtil.isNotEmpty(relPath)) { stringBuilder.append(" [").append(relPath).append("]"); } } @@ -88,6 +89,6 @@ public class MavenProjectImportProvider extends ProjectImportProvider { @Nullable @Override public String getFileSample() { - return "pom.xml"; + return "Maven project file (pom.xml)"; } } \ No newline at end of file