diff --git a/plugins/eclipse/common-eclipse-util/src/EclipseProjectFinder.java b/plugins/eclipse/common-eclipse-util/src/EclipseProjectFinder.java index 24922f0565de..9b76c6ff7014 100644 --- a/plugins/eclipse/common-eclipse-util/src/EclipseProjectFinder.java +++ b/plugins/eclipse/common-eclipse-util/src/EclipseProjectFinder.java @@ -23,6 +23,7 @@ package org.jetbrains.idea.eclipse; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Processor; import org.jdom.Element; import org.jdom.JDOMException; @@ -32,6 +33,7 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Set; public class EclipseProjectFinder implements EclipseXml { public static void findModuleRoots(final List paths, final String rootPath, @Nullable Processor progressUpdater) { @@ -111,6 +113,25 @@ public class EclipseProjectFinder implements EclipseXml { return null; } + public static void collectUnknownNatures(String path, Set naturesNames) { + final File projectfile = new File(path, DOT_PROJECT_EXT); + try { + final Element natures = JDOMUtil.loadDocument(projectfile).getRootElement().getChild("natures"); + if (natures != null) { + final List naturesList = natures.getChildren("nature"); + for (Object nature : naturesList) { + final String natureName = ((Element)nature).getText(); + if (!StringUtil.isEmptyOrSpaces(natureName)) { + naturesNames.add(natureName); + } + } + } + } + catch (Exception ignore) { + } + naturesNames.remove("org.eclipse.jdt.core.javanature"); + } + public static class LinkedResource { private String myURI; private String myLocation; diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java index 856be2439d79..0bfebe87e442 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java @@ -15,7 +15,11 @@ */ package org.jetbrains.idea.eclipse.importWizard; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; +import com.intellij.notification.Notifications; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileChooser.FileChooser; @@ -166,6 +170,7 @@ public class EclipseImportBuilder extends ProjectImportBuilder implement public boolean validate(final Project currentProject, final Project dstProject) { final Ref refEx = new Ref(); final HashSet variables = new HashSet(); + final Set naturesNames = new HashSet(); ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() { public void run() { try { @@ -175,6 +180,7 @@ public class EclipseImportBuilder extends ProjectImportBuilder implement final Element classpathElement = JDOMUtil.loadDocument(classpathfile).getRootElement(); EclipseClasspathReader.collectVariables(variables, classpathElement, path); } + EclipseProjectFinder.collectUnknownNatures(path, naturesNames); } } catch (IOException e) { @@ -195,6 +201,17 @@ public class EclipseImportBuilder extends ProjectImportBuilder implement return false; } + final Runnable runnable = new Runnable() { + public void run() { + if (!naturesNames.isEmpty()) { + final String title = "Unknown Natures Detected"; + Notifications.Bus.notify(new Notification(title, title, "Imported projects contain unknown natures:
" + StringUtil.join(naturesNames, "
")+ "
" + + "Some settings may be lost after import.", NotificationType.WARNING)); + } + } + }; + ApplicationManager.getApplication().invokeLater(runnable, ModalityState.NON_MODAL); + return true; }