Merge remote-tracking branch 'origin/master'
authorKonstantin Bulenkov <kb@jetbrains.com>
Tue, 30 Oct 2012 09:24:43 +0000 (10:24 +0100)
committerKonstantin Bulenkov <kb@jetbrains.com>
Tue, 30 Oct 2012 09:24:43 +0000 (10:24 +0100)
26 files changed:
bin/log.xml
java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddModuleWizard.java
java/idea-ui/src/com/intellij/ide/util/projectWizard/JavaSettingsStep.java
java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectWizardStepFactoryImpl.java
java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java
java/idea-ui/src/com/intellij/ide/util/projectWizard/importSources/impl/ProjectFromSourcesBuilderImpl.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java
java/idea-ui/src/com/intellij/platform/templates/PlainModuleTemplatesFactory.java
java/java-impl/src/com/intellij/openapi/module/JavaModuleType.java
java/openapi/src/com/intellij/ide/util/projectWizard/JavaModuleBuilder.java
java/openapi/src/com/intellij/ide/util/projectWizard/ProjectWizardStepFactory.java
jps/jps-builders/src/org/jetbrains/jps/incremental/Utils.java
jps/model-api/src/org/jetbrains/jps/model/JpsProject.java
jps/model-impl/src/org/jetbrains/jps/model/impl/JpsProjectImpl.java
jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
jps/model-serialization/testData/sampleProject/.idea/.name
jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java
platform/lang-api/src/com/intellij/ide/util/projectWizard/ProjectBuilder.java
platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java
platform/platform-impl/src/com/intellij/platform/ProjectTemplate.java
platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java
plugins/android/src/org/jetbrains/android/newProject/AndroidModuleBuilder.java
plugins/devkit/src/module/PluginModuleBuilder.java
plugins/gradle/src/org/jetbrains/plugins/gradle/importing/GradleProjectImportBuilder.java
plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java
plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java

index 01e407ffbb8a8d28fd98b5188bccfb848515e904..2bdfeda7e5df04f3d8062e19cf3573bc796b7004 100644 (file)
@@ -45,6 +45,7 @@
 
   <appender name="CONTINUOUS_FILE" class="org.apache.log4j.FileAppender">
     <param name="File" value="$LOG_DIR$/continuous.log"/>
+    <param name="append" value="false"/>
     <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern" value="%d [%7r] %6p - %30.30c - %m \n"/>
     </layout>
index adb5310cfbaf50b4e9ef3bf9d0b06d1a59cc79ac..f121a6467bd2bb4b2628e771eb1dfcf3ed1c40cd 100644 (file)
@@ -288,7 +288,7 @@ public class AddModuleWizard extends AbstractWizard<ModuleWizardStep> {
       @Nullable final ProjectBuilder projectBuilder = context.getProjectBuilder();
       return ProjectJdkTable.getInstance().findMostRecentSdk(new Condition<Sdk>() {
         public boolean value(Sdk sdk) {
-          return projectBuilder == null || projectBuilder.isSuitableSdk(sdk);
+          return projectBuilder == null || projectBuilder.isSuitableSdkType(sdk.getSdkType());
         }
       });
     }
index 6028d4f5fec2087234d03224a5cb0459c951f5d7..a0d74f2dafa95fdc1291ab90c2c2967427968a3f 100644 (file)
@@ -18,7 +18,7 @@ package com.intellij.ide.util.projectWizard;
 import com.intellij.ide.IdeBundle;
 import com.intellij.ide.util.BrowseFilesListener;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.ui.ComponentWithBrowseButton;
 import com.intellij.openapi.ui.TextComponentAccessor;
 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
@@ -46,7 +46,7 @@ public class JavaSettingsStep extends SdkSettingsStep {
   private TextFieldWithBrowseButton mySourcePath;
   private JPanel myPanel;
 
-  public JavaSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, Condition<SdkType> sdkFilter) {
+  public JavaSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, Condition<SdkTypeId> sdkFilter) {
     super(settingsStep, sdkFilter);
     myModuleBuilder = moduleBuilder;
 
index af656cc37564bbef7bf9062f4e9f53d2faee64c3..6a205bbb5457b279c88f71995dc86a25fee0b1b0 100644 (file)
@@ -20,6 +20,7 @@ import com.intellij.ide.util.newProjectWizard.*;
 import com.intellij.ide.util.newProjectWizard.ProjectNameStep;
 import com.intellij.openapi.projectRoots.Sdk;
 import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
 import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
@@ -139,7 +140,7 @@ public class ProjectWizardStepFactoryImpl extends ProjectWizardStepFactory {
   }
 
   @Override
-  public ModuleWizardStep createJavaSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, Condition<SdkType> sdkFilter) {
+  public ModuleWizardStep createJavaSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, Condition<SdkTypeId> sdkFilter) {
    return new JavaSettingsStep(settingsStep, moduleBuilder, sdkFilter);
   }
 }
index e9050e2a69a8a98347929ec27853d1769b7a8cdf..3a6dd104e3c05367dc2aa5ff7482c4a0d86d1598 100644 (file)
@@ -18,7 +18,7 @@ package com.intellij.ide.util.projectWizard;
 import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ui.configuration.JdkComboBox;
 import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
 import com.intellij.openapi.util.Condition;
@@ -35,7 +35,7 @@ public class SdkSettingsStep extends ModuleWizardStep {
   protected final WizardContext myWizardContext;
   protected final ProjectSdksModel myModel;
 
-  public SdkSettingsStep(SettingsStep settingsStep, Condition<SdkType> sdkFilter) {
+  public SdkSettingsStep(SettingsStep settingsStep, Condition<SdkTypeId> sdkFilter) {
 
     myWizardContext = settingsStep.getContext();
     myModel = new ProjectSdksModel();
index 7a671c5e146f9eef6a65d3b8d43e5270308218e0..13bce1532a456b71c86d085def8263519cb40264 100644 (file)
@@ -36,7 +36,7 @@ import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.module.*;
 import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.project.Project;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.*;
 import com.intellij.openapi.roots.libraries.Library;
 import com.intellij.openapi.roots.libraries.LibraryTable;
@@ -363,12 +363,12 @@ public class ProjectFromSourcesBuilderImpl extends ProjectBuilder implements Pro
   }
 
   @Override
-  public boolean isSuitableSdk(final Sdk sdk) {
+  public boolean isSuitableSdkType(final SdkTypeId sdkTypeId) {
     for (ProjectDescriptor projectDescriptor : getSelectedDescriptors()) {
       for (ModuleDescriptor moduleDescriptor : projectDescriptor.getModules()) {
         try {
           final ModuleType moduleType = getModuleType(moduleDescriptor);
-          if (moduleType != null && !moduleType.createModuleBuilder().isSuitableSdk(sdk)) return false;
+          if (moduleType != null && !moduleType.createModuleBuilder().isSuitableSdkType(sdkTypeId)) return false;
         }
         catch (Exception ignore) {
         }
index c0088b6c420116d1e01c8cfa85115cfbdb593754..efcf8497d1553553b9b7a87a7261cb821e06fab3 100644 (file)
@@ -51,22 +51,22 @@ import java.util.List;
 public class JdkComboBox extends ComboBoxWithWidePopup {
 
   @Nullable
-  private final Condition<SdkType> myFilter;
+  private final Condition<SdkTypeId> myFilter;
   @Nullable
-  private final Condition<SdkType> myCreationFilter;
+  private final Condition<SdkTypeId> myCreationFilter;
 
   public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) {
     this(jdkModel, null, null);
   }
 
   public JdkComboBox(@NotNull final ProjectSdksModel jdkModel,
-                     Condition<SdkType> filter) {
+                     Condition<SdkTypeId> filter) {
     this(jdkModel, filter, filter);
   }
 
   public JdkComboBox(@NotNull final ProjectSdksModel jdkModel,
-                     @Nullable Condition<SdkType> filter,
-                     @Nullable Condition<SdkType> creationFilter) {
+                     @Nullable Condition<SdkTypeId> filter,
+                     @Nullable Condition<SdkTypeId> creationFilter) {
     super(new JdkComboBoxModel(jdkModel, getSdkFilter(filter)));
     myFilter = filter;
     myCreationFilter = creationFilter;
@@ -299,12 +299,11 @@ public class JdkComboBox extends ComboBoxWithWidePopup {
     }
   }
 
-  private static Condition<Sdk> getSdkFilter(@Nullable final Condition<SdkType> filter) {
+  private static Condition<Sdk> getSdkFilter(@Nullable final Condition<SdkTypeId> filter) {
     return filter == null ? Conditions.<Sdk>alwaysTrue() : new Condition<Sdk>() {
       @Override
       public boolean value(Sdk sdk) {
-        SdkTypeId type = sdk.getSdkType();
-        return type instanceof SdkType && filter.value((SdkType)type);
+        return filter.value(sdk.getSdkType());
       }
     };
   }
index ec0c0ba61838acbcd869b50e04d31b5dd9945555..778d83d7eb9d9d5e5ac6388c21cdaf6d77698ad4 100644 (file)
@@ -23,6 +23,7 @@ import com.intellij.platform.ProjectTemplate;
 import com.intellij.platform.ProjectTemplatesFactory;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.Function;
+import com.intellij.util.NullableFunction;
 import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -51,11 +52,7 @@ public class PlainModuleTemplatesFactory implements ProjectTemplatesFactory {
 
   @NotNull
   @Override
-  public ProjectTemplate[] createTemplates(String group, WizardContext context) {
-    ModuleBuilder[] builders = context.getAllBuilders();
-    for (ModuleBuilder builder : builders) {
-      if (builder.getGroupName().equals(group)) return new ProjectTemplate[] {new PlainModuleTemplate(builder)};
-    }
+  public ProjectTemplate[] createTemplates(final String group, WizardContext context) {
     if (OTHER_GROUP.equals(group)) {
       return new ProjectTemplate[] { new PlainModuleTemplate(new EmptyModuleBuilder() {
         @Override
@@ -69,7 +66,14 @@ public class PlainModuleTemplatesFactory implements ProjectTemplatesFactory {
         }
       })};
     }
-    return new ProjectTemplate[0];
+    ModuleBuilder[] builders = context.getAllBuilders();
+    return ContainerUtil.mapNotNull(builders, new NullableFunction<ModuleBuilder, ProjectTemplate>() {
+      @Nullable
+      @Override
+      public ProjectTemplate fun(ModuleBuilder builder) {
+        return builder.getGroupName().equals(group) ? new PlainModuleTemplate(builder) : null;
+      }
+    }, ProjectTemplate.EMPTY_ARRAY);
   }
 
   private static class PlainModuleTemplate implements ProjectTemplate {
index 96416c2d3f5d966b2a73f5f0cb237c6c9ce59947..9fd12932449ed104b1cb67a840ceba3669952c66 100644 (file)
@@ -18,10 +18,7 @@ package com.intellij.openapi.module;
 import com.intellij.icons.AllIcons;
 import com.intellij.ide.util.projectWizard.*;
 import com.intellij.openapi.project.ProjectBundle;
-import com.intellij.openapi.projectRoots.JavaSdk;
-import com.intellij.openapi.projectRoots.JavaSdkType;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.*;
 import com.intellij.openapi.roots.ModuleRootManager;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.util.Computable;
@@ -104,9 +101,9 @@ public class JavaModuleType extends ModuleType<JavaModuleBuilder> {
   @Nullable
   @Override
   public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder) {
-    return ProjectWizardStepFactory.getInstance().createJavaSettingsStep(settingsStep, moduleBuilder, new Condition<SdkType>() {
+    return ProjectWizardStepFactory.getInstance().createJavaSettingsStep(settingsStep, moduleBuilder, new Condition<SdkTypeId>() {
           @Override
-          public boolean value(SdkType sdk) {
+          public boolean value(SdkTypeId sdk) {
             return sdk instanceof JavaSdkType;
           }
         });
index e1c118660e6c45ef9eae2d4d02a587b31b2404d9..6d4d1e2715dfdbc67c35b975c2edaa9021df1e16 100644 (file)
@@ -21,14 +21,14 @@ import com.intellij.openapi.module.StdModuleTypes;
 import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.projectRoots.JavaSdk;
 import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.CompilerModuleExtension;
 import com.intellij.openapi.roots.ContentEntry;
 import com.intellij.openapi.roots.ModifiableRootModel;
 import com.intellij.openapi.roots.OrderRootType;
 import com.intellij.openapi.roots.libraries.Library;
 import com.intellij.openapi.roots.libraries.LibraryTable;
-import com.intellij.openapi.util.Conditions;
+import com.intellij.openapi.util.Condition;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.openapi.vfs.LocalFileSystem;
@@ -83,7 +83,12 @@ public class JavaModuleBuilder extends ModuleBuilder implements SourcePathsBuild
   @Nullable
   @Override
   public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep) {
-    return ProjectWizardStepFactory.getInstance().createJavaSettingsStep(settingsStep, this, Conditions.<SdkType>alwaysTrue());
+    return ProjectWizardStepFactory.getInstance().createJavaSettingsStep(settingsStep, this, new Condition<SdkTypeId>() {
+      @Override
+      public boolean value(SdkTypeId sdkType) {
+        return isSuitableSdkType(sdkType);
+      }
+    });
   }
 
   public void setupRootModel(ModifiableRootModel rootModel) throws ConfigurationException {
@@ -164,7 +169,7 @@ public class JavaModuleBuilder extends ModuleBuilder implements SourcePathsBuild
   }
 
   @Override
-  public boolean isSuitableSdk(final Sdk sdk) {
-    return sdk.getSdkType() == JavaSdk.getInstance();
+  public boolean isSuitableSdkType(SdkTypeId sdkType) {
+    return sdkType == JavaSdk.getInstance();
   }
 }
index 4a904f4e566a00943e1894f3ef8901c003edb4c5..ee18af999805c89bc26ab7796c6dc36c28403ba4 100644 (file)
@@ -18,6 +18,7 @@ package com.intellij.ide.util.projectWizard;
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.projectRoots.Sdk;
 import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.Condition;
@@ -72,5 +73,5 @@ public abstract class ProjectWizardStepFactory {
   @Nullable
   public abstract ModuleWizardStep createSupportForFrameworksStep(WizardContext context, ModuleBuilder builder, ModulesProvider modulesProvider);
 
-  public abstract ModuleWizardStep createJavaSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, Condition<SdkType> sdkFilter);
+  public abstract ModuleWizardStep createJavaSettingsStep(SettingsStep settingsStep, ModuleBuilder moduleBuilder, Condition<SdkTypeId> sdkFilter);
 }
index a61bc1263bdb5d846d8a2a667750c75628a929c5..6f3ebec037e937b729eb4cdd565001a911f21ebe 100644 (file)
@@ -6,9 +6,9 @@ import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.openapi.util.text.StringUtil;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.jps.model.module.JpsModule;
+import org.jetbrains.jps.model.serialization.JpsProjectLoader;
 
 import java.io.File;
-import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.*;
@@ -69,27 +69,13 @@ public class Utils {
       if (directoryBased == null) {
         return null;
       }
-      try {
-        name = getDirectoryBaseProjectName(directoryBased);
-      }
-      catch (IOException e) {
-        e.printStackTrace();
-        return null;
-      }
+      name = JpsProjectLoader.getDirectoryBaseProjectName(directoryBased);
       locationHash = directoryBased.getPath().hashCode();
     }
 
     return new File(systemRoot, name.toLowerCase(Locale.US) + "_" + Integer.toHexString(locationHash));
   }
 
-  private static String getDirectoryBaseProjectName(File dir) throws IOException {
-    File nameFile = new File(dir, ".name");
-    if (nameFile.isFile()) {
-      return FileUtil.loadFile(nameFile).trim();
-    }
-    return StringUtil.replace(dir.getParentFile().getName(), ":", "");
-  }
-
 
   public static URI toURI(String localPath) {
     return toURI(localPath, true);
index 709bdab57eed5e3c70c7023e1d2fa2dadaa47c5f..16ea595874c99ba59a9ec96a871eafbb26eebe85 100644 (file)
@@ -48,4 +48,8 @@ public interface JpsProject extends JpsCompositeElement, JpsReferenceableElement
   @NotNull
   <P extends JpsElement>
   JpsTypedRunConfiguration<P> addRunConfiguration(@NotNull String name, @NotNull JpsRunConfigurationType<P> type, @NotNull P properties);
+
+  @NotNull String getName();
+
+  void setName(@NotNull String name);
 }
index 9c8b7dfaf8808a5bd56668808cc9f755d7062f36..b405c1bbf56f423985e3dc841eebee0e3bf44a3d 100644 (file)
@@ -1,5 +1,6 @@
 package org.jetbrains.jps.model.impl;
 
+import com.intellij.openapi.util.Comparing;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.jps.model.*;
 import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
@@ -31,6 +32,7 @@ public class JpsProjectImpl extends JpsRootElementBase<JpsProjectImpl> implement
     JpsElementCollectionRole.create(JpsElementChildRoleBase.<JpsElementReference<?>>create("external reference"));
   private static final JpsElementCollectionRole<JpsRunConfiguration> RUN_CONFIGURATIONS_ROLE = JpsElementCollectionRole.create(JpsElementChildRoleBase.<JpsRunConfiguration>create("run configuration"));
   private final JpsLibraryCollection myLibraryCollection;
+  private String myName = "";
 
   public JpsProjectImpl(JpsModel model, JpsEventDispatcher eventDispatcher) {
     super(model, eventDispatcher);
@@ -46,6 +48,20 @@ public class JpsProjectImpl extends JpsRootElementBase<JpsProjectImpl> implement
     myLibraryCollection = new JpsLibraryCollectionImpl(myContainer.getChild(JpsLibraryRole.LIBRARIES_COLLECTION_ROLE));
   }
 
+  @NotNull
+  @Override
+  public String getName() {
+    return myName;
+  }
+
+  @Override
+  public void setName(@NotNull String name) {
+    if (!Comparing.equal(myName, name)) {
+      myName = name;
+      fireElementChanged();
+    }
+  }
+
   public void addExternalReference(@NotNull JpsElementReference<?> reference) {
     myContainer.getChild(EXTERNAL_REFERENCES_COLLECTION_ROLE).addChild(reference);
   }
index 17a4586b4f96e5cd8f7c5a314f87c741957bd87f..6661a63ddd59340b09e9c93230a5fa86807bc285 100644 (file)
@@ -3,6 +3,8 @@ package org.jetbrains.jps.model.serialization;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.util.JDOMUtil;
 import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.util.io.FileUtilRt;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.concurrency.BoundedTaskExecutor;
 import org.jdom.Element;
@@ -77,7 +79,20 @@ public class JpsProjectLoader extends JpsLoaderBase {
     }
   }
 
+  public static String getDirectoryBaseProjectName(File dir) {
+    File nameFile = new File(dir, ".name");
+    if (nameFile.isFile()) {
+      try {
+        return FileUtilRt.loadFile(nameFile).trim();
+      }
+      catch (IOException ignored) {
+      }
+    }
+    return StringUtil.replace(dir.getParentFile().getName(), ":", "");
+  }
+
   private void loadFromDirectory(File dir) {
+    myProject.setName(getDirectoryBaseProjectName(dir));
     JpsSdkType<?> projectSdkType = loadProjectRoot(loadRootElement(new File(dir, "misc.xml")));
     for (JpsModelSerializerExtension extension : JpsModelSerializerExtension.getExtensions()) {
       for (JpsProjectExtensionSerializer serializer : extension.getProjectExtensionSerializers()) {
@@ -127,7 +142,9 @@ public class JpsProjectLoader extends JpsLoaderBase {
   private void loadFromIpr(File iprFile) {
     final Element iprRoot = loadRootElement(iprFile);
 
-    File iwsFile = new File(iprFile.getParent(), FileUtil.getNameWithoutExtension(iprFile) + ".iws");
+    String projectName = FileUtil.getNameWithoutExtension(iprFile);
+    myProject.setName(projectName);
+    File iwsFile = new File(iprFile.getParent(), projectName + ".iws");
     Element iwsRoot = iwsFile.exists() ? loadRootElement(iwsFile) : null;
 
     JpsSdkType<?> projectSdkType = loadProjectRoot(iprRoot);
index 56df8c9ebb3c46075e7a356a809a4ba594e8da1e..697c385c871b360fdbc1743258b36dbba3c84931 100644 (file)
@@ -1 +1 @@
-sampleProject
+sampleProjectName
index c657954814c3b6b39a017b6bddf2afee6571267f..d2de1fd15886aa005ab81c1e7b086f5e37a59d03 100644 (file)
@@ -28,6 +28,7 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
 
   public void testLoadProject() {
     loadProject(SAMPLE_PROJECT_PATH);
+    assertEquals("sampleProjectName", myProject.getName());
     List<JpsModule> modules = myProject.getModules();
     assertEquals(3, modules.size());
     JpsModule main = modules.get(0);
@@ -60,6 +61,16 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
     assertEquals(getUrl("xxx/output"), JpsJavaExtensionService.getInstance().getOutputUrl(xxx, false));
   }
 
+  public void testFileBasedProjectName() {
+    loadProject("/jps/model-serialization/testData/run-configurations/run-configurations.ipr");
+    assertEquals("run-configurations", myProject.getName());
+  }
+
+  public void testDirectoryBasedProjectName() {
+    loadProject("/jps/model-serialization/testData/run-configurations-dir");
+    assertEquals("run-configurations-dir", myProject.getName());
+  }
+
   public void testLoadEncoding() {
     loadProject(SAMPLE_PROJECT_PATH);
     JpsEncodingConfigurationService service = JpsEncodingConfigurationService.getInstance();
index af3863b2a87975ad3e987c453523d13f23ffd606..bd9e558fa08198330b286be45c0216b1807c102e 100644 (file)
@@ -25,6 +25,7 @@ import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
 import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import org.jetbrains.annotations.Nullable;
 
@@ -48,6 +49,8 @@ public abstract class ProjectBuilder {
   }
 
   /**
+   * Deprecated. Use {@link #isSuitableSdkType(com.intellij.openapi.projectRoots.SdkTypeId)} instead.
+   *
    * Used for automatically assigning an SDK to the project when it gets created.
    * If no SDK is specified in the template project and there is no specific SDK chooser step,
    * the SDK which is set for the project is the highest version SDK for which
@@ -56,10 +59,16 @@ public abstract class ProjectBuilder {
    * @param sdk the candidate SDK
    * @return true if the SDK can be used for this project type, false otherwise
    */
+  @Deprecated
   public boolean isSuitableSdk(Sdk sdk) {
     return true;
   }
 
+  public boolean isSuitableSdkType(SdkTypeId sdkType) {
+    return true;
+  }
+
+
   @Nullable
   public Project createProject(String name, String path) {
     return ProjectManager.getInstance().createProject(name, path);
index 3f95c3ea3882d4ee0adce63770af74630814bb7b..ce6965e4c8481d3f99499a986accc12c6bcab1e6 100644 (file)
@@ -33,7 +33,7 @@ import com.intellij.openapi.ui.MasterDetailsComponent;
 import com.intellij.openapi.ui.Messages;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Condition;
-import com.intellij.util.ArrayUtil;
+import com.intellij.util.ArrayUtilRt;
 import com.intellij.util.Consumer;
 import com.intellij.util.EventDispatcher;
 import org.jetbrains.annotations.Nullable;
@@ -56,6 +56,7 @@ public class ProjectSdksModel implements SdkModel {
 
   private Sdk myProjectSdk;
   private boolean myInitialized = false;
+  private Condition<SdkTypeId> myFilter;
 
   @Override
   public Listener getMulticaster() {
@@ -86,13 +87,14 @@ public class ProjectSdksModel implements SdkModel {
     mySdkEventsDispatcher.removeListener(listener);
   }
 
-  public void reset(@Nullable Project project, @Nullable Condition<SdkType> filter) {
+  public void reset(@Nullable Project project, @Nullable Condition<SdkTypeId> filter) {
     myProjectSdks.clear();
+    myFilter = filter;
     final Sdk[] projectSdks = ProjectJdkTable.getInstance().getAllJdks();
     for (Sdk sdk : projectSdks) {
       try {
         SdkTypeId type = sdk.getSdkType();
-        if (filter == null || (type instanceof SdkType && filter.value((SdkType)type))) {
+        if (acceptSdkType(type)) {
           myProjectSdks.put(sdk, (Sdk)sdk.clone());
         }
       }
@@ -107,6 +109,10 @@ public class ProjectSdksModel implements SdkModel {
     myInitialized = true;
   }
 
+  private boolean acceptSdkType(SdkTypeId type) {
+    return myFilter == null || myFilter.value(type);
+  }
+
   public void reset(@Nullable Project project) {
     reset(project, null);
   }
@@ -144,7 +150,7 @@ public class ProjectSdksModel implements SdkModel {
           if (myProjectSdks.containsKey(tableItem)) {
             itemsInTable.add(tableItem);
           }
-          else {
+          else if (acceptSdkType(tableItem.getSdkType())){
             jdkTable.removeJdk(tableItem);
           }
         }
@@ -164,7 +170,7 @@ public class ProjectSdksModel implements SdkModel {
         final Sdk[] allJdks = jdkTable.getAllJdks();
         for (final Sdk projectJdk : myProjectSdks.keySet()) {
           LOG.assertTrue(projectJdk != null);
-          if (ArrayUtil.find(allJdks, projectJdk) == -1) {
+          if (ArrayUtilRt.find(allJdks, projectJdk) == -1) {
             jdkTable.addJdk(projectJdk);
           }
         }
@@ -235,7 +241,7 @@ public class ProjectSdksModel implements SdkModel {
   public void createAddActions(DefaultActionGroup group,
                                final JComponent parent,
                                final Consumer<Sdk> updateTree,
-                               @Nullable Condition<SdkType> filter) {
+                               @Nullable Condition<SdkTypeId> filter) {
     final SdkType[] types = SdkType.getAllTypes();
     for (final SdkType type : types) {
       if (filter != null && !filter.value(type)) continue;
index f6ef13859f1f90b13dc0b604d272d7a17b2e96f9..010e588778a6e62de56c7d7fe66813fdf4ee81d9 100644 (file)
@@ -26,6 +26,8 @@ import org.jetbrains.annotations.Nullable;
  */
 public interface ProjectTemplate {
 
+  ProjectTemplate[] EMPTY_ARRAY = new ProjectTemplate[0];
+
   @NotNull
   String getName();
 
index fbbb7b484725a463e3d7f53fd0fdeed7390035de..22185ea93045cb4ea0b910db81d08fab4c13e9f4 100644 (file)
@@ -65,7 +65,6 @@ import com.intellij.psi.codeStyle.CodeStyleSchemes;
 import com.intellij.psi.codeStyle.CodeStyleSettings;
 import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
 import com.intellij.psi.impl.DocumentCommitThread;
-import com.intellij.psi.impl.PsiDocumentManagerImpl;
 import com.intellij.psi.impl.PsiManagerEx;
 import com.intellij.psi.impl.source.tree.injected.InjectedLanguageManagerImpl;
 import com.intellij.util.PatchedWeakReference;
@@ -569,6 +568,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro
     }
   }
 
+  @Nullable
   protected Sdk getTestProjectJdk() {
     return null;
   }
index e498b0fefde59bdd515cebcde7156be2d84172f9..5dc859d4dec09903964aaef44c9c2c61cab27a4b 100644 (file)
@@ -42,14 +42,13 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.projectRoots.JavaSdk;
 import com.intellij.openapi.projectRoots.ProjectJdkTable;
 import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.projectRoots.SdkType;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.*;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.startup.StartupManager;
 import com.intellij.openapi.ui.Messages;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.Conditions;
 import com.intellij.openapi.util.Pair;
 import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.openapi.vfs.VirtualFile;
@@ -744,12 +743,6 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
     return getClass().getName();
   }
 
-  @Nullable
-  @Override
-  public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep) {
-    return ProjectWizardStepFactory.getInstance().createJavaSettingsStep(settingsStep, this, Conditions.<SdkType>is(AndroidSdkType.getInstance()));
-  }
-
   private static boolean hasAppropriateJdk() {
     for (Sdk sdk : ProjectJdkTable.getInstance().getAllJdks()) {
       if (AndroidSdkUtils.isApplicableJdk(sdk)) {
@@ -775,4 +768,9 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
     }
     return Pair.create(result, success);
   }
+
+  @Override
+  public boolean isSuitableSdkType(SdkTypeId sdkType) {
+    return AndroidSdkType.getInstance() == sdkType;
+  }
 }
index e1a3a4d65aa9caec73f84de8a8a9747e7a7a0735..618f879ddbcfd16038f39dbfc83be687755ecd4e 100644 (file)
 package org.jetbrains.idea.devkit.module;
 
 import com.intellij.ide.util.projectWizard.JavaModuleBuilder;
-import com.intellij.openapi.module.ModuleType;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleType;
 import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ModifiableRootModel;
+import com.intellij.openapi.startup.StartupManager;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.startup.StartupManager;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.idea.devkit.build.PluginBuildConfiguration;
 import org.jetbrains.idea.devkit.projectRoots.IdeaJdk;
@@ -52,8 +52,9 @@ public class PluginModuleBuilder extends JavaModuleBuilder{
     }
   }
 
-  public boolean isSuitableSdk(Sdk sdk) {
-    return sdk.getSdkType() == IdeaJdk.getInstance();
+  @Override
+  public boolean isSuitableSdkType(SdkTypeId sdk) {
+    return sdk == IdeaJdk.getInstance();
   }
 
   @Override
index 82346b01730b21251ba9843c5a5d91b4ea8116bc..e8d10349bd45cd21356428581bf472df7cef069b 100644 (file)
@@ -8,8 +8,7 @@ import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
 import com.intellij.openapi.projectRoots.JavaSdk;
-import com.intellij.openapi.projectRoots.JavaSdkVersion;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.LanguageLevelProjectExtension;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.startup.StartupManager;
@@ -201,19 +200,8 @@ public class GradleProjectImportBuilder extends ProjectImportBuilder<GradleProje
   }
 
   @Override
-  public boolean isSuitableSdk(Sdk sdk) {
-    JavaSdk javaSdk = JavaSdk.getInstance();
-    if (sdk == null || sdk.getSdkType() != javaSdk) {
-      return false;
-    }
-    if (myGradleProject == null) {
-      return true;
-    }
-    JavaSdkVersion version = javaSdk.getVersion(sdk);
-    if (version == null) {
-      return false;
-    } 
-    return version.getMaxLanguageLevel().isAtLeast(myGradleProject.getLanguageLevel());
+  public boolean isSuitableSdkType(SdkTypeId sdk) {
+    return sdk == JavaSdk.getInstance();
   }
 
   /**
index 0baffbbf0f28cd4a7ee8f0a3051883a70095173c..4f3ef0dd408c41026050404e829cb8e12949b497 100644 (file)
@@ -23,7 +23,7 @@ import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.project.DumbAwareRunnable;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.projectRoots.JavaSdk;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ModifiableRootModel;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.util.Pair;
@@ -104,8 +104,8 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil
   }
 
   @Override
-  public boolean isSuitableSdk(Sdk sdk) {
-    return sdk.getSdkType() == JavaSdk.getInstance();
+  public boolean isSuitableSdkType(SdkTypeId sdk) {
+    return sdk == JavaSdk.getInstance();
   }
 
   @Override
index 118d7916e529ccef601720b281af87f8be89e1d5..dca26e47d7f5555f960a52fd235ec1ea8f62cb27 100644 (file)
@@ -23,7 +23,7 @@ import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
 import com.intellij.openapi.projectRoots.JavaSdk;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.projectRoots.SdkTypeId;
 import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
 import com.intellij.openapi.vfs.LocalFileSystem;
@@ -74,8 +74,8 @@ public class MavenProjectBuilder extends ProjectImportBuilder<MavenProject> {
   }
 
   @Override
-  public boolean isSuitableSdk(Sdk sdk) {
-    return sdk.getSdkType() == JavaSdk.getInstance();
+  public boolean isSuitableSdkType(SdkTypeId sdk) {
+    return sdk == JavaSdk.getInstance();
   }
 
   private Parameters getParameters() {