diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
index 28863f900152..23fb427f9660 100644
--- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
+++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsProjectLoader.java
@@ -83,15 +83,16 @@ public class JpsProjectLoader extends JpsLoaderBase {
new JpsProjectLoader(project, pathVariables, file.getParentFile()).loadFromIpr(file);
}
else {
+ File dotIdea = new File(file, PathMacroUtil.DIRECTORY_STORE_NAME);
File directory;
- if (file.isDirectory() && file.getName().equals(PathMacroUtil.DIRECTORY_STORE_NAME)) {
+ if (dotIdea.isDirectory()) {
+ directory = dotIdea;
+ }
+ else if (file.isDirectory() && file.getName().equals(PathMacroUtil.DIRECTORY_STORE_NAME)) {
directory = file;
}
else {
- directory = new File(file, PathMacroUtil.DIRECTORY_STORE_NAME);
- if (!directory.isDirectory()) {
- throw new IOException("Cannot find IntelliJ IDEA project files at " + projectPath);
- }
+ throw new IOException("Cannot find IntelliJ IDEA project files at " + projectPath);
}
new JpsProjectLoader(project, pathVariables, directory.getParentFile()).loadFromDirectory(directory);
}
diff --git a/jps/model-serialization/testData/matryoshka/.idea/.idea/misc.xml b/jps/model-serialization/testData/matryoshka/.idea/.idea/misc.xml
new file mode 100644
index 000000000000..dc7535439d30
--- /dev/null
+++ b/jps/model-serialization/testData/matryoshka/.idea/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/jps/model-serialization/testData/matryoshka/.idea/.idea/modules.xml b/jps/model-serialization/testData/matryoshka/.idea/.idea/modules.xml
new file mode 100644
index 000000000000..e1042fc80c7a
--- /dev/null
+++ b/jps/model-serialization/testData/matryoshka/.idea/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java
index 3ed4336709c4..2567927c87e9 100644
--- a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java
+++ b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java
@@ -23,10 +23,7 @@ import org.jetbrains.jps.model.JpsDummyElement;
import org.jetbrains.jps.model.JpsEncodingConfigurationService;
import org.jetbrains.jps.model.JpsEncodingProjectConfiguration;
import org.jetbrains.jps.model.artifact.JpsArtifactService;
-import org.jetbrains.jps.model.java.JpsJavaDependencyExtension;
-import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
-import org.jetbrains.jps.model.java.JpsJavaExtensionService;
-import org.jetbrains.jps.model.java.JpsJavaSdkType;
+import org.jetbrains.jps.model.java.*;
import org.jetbrains.jps.model.library.JpsLibrary;
import org.jetbrains.jps.model.library.JpsOrderRootType;
import org.jetbrains.jps.model.library.sdk.JpsSdkReference;
@@ -135,6 +132,13 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
assertSameElements(lib2.getRootUrls(JpsOrderRootType.COMPILED), getUrl("data/lib2"));
}
+ public void testDotIdeaUnderDotIdea() {
+ loadProject("/jps/model-serialization/testData/matryoshka/.idea");
+ JpsJavaProjectExtension extension = JpsJavaExtensionService.getInstance().getProjectExtension(myProject);
+ assertNotNull(extension);
+ assertEquals(getUrl("out"), extension.getOutputUrl());
+ }
+
public void testLoadEncoding() {
loadProject(SAMPLE_PROJECT_PATH);
JpsEncodingConfigurationService service = JpsEncodingConfigurationService.getInstance();