From b09ba0f86d200f97030fb94bf269aaa51929edcf Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 14 Mar 2013 21:29:14 +0400 Subject: [PATCH] jps: fix loading project when project directory is named '.idea' (ZD-62) --- .../jps/model/serialization/JpsProjectLoader.java | 11 ++++++----- .../testData/matryoshka/.idea/.idea/misc.xml | 7 +++++++ .../testData/matryoshka/.idea/.idea/modules.xml | 8 ++++++++ .../serialization/JpsProjectSerializationTest.java | 12 ++++++++---- 4 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 jps/model-serialization/testData/matryoshka/.idea/.idea/misc.xml create mode 100644 jps/model-serialization/testData/matryoshka/.idea/.idea/modules.xml 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();