diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java
index 1bf5f9832ca2..3723d5591465 100644
--- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java
+++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java
@@ -155,6 +155,7 @@ public class EclipseClasspathReader {
}
else {
getContentEntry().addSourceFolder(VfsUtil.pathToUrl(myRootPath + "/" + path), testPattern != null && testPattern.length() > 0 && path.matches(testPattern));
+ rearrangeOrderEntryOfType(rootModel, ModuleSourceOrderEntry.class);
}
}
@@ -266,9 +267,7 @@ public class EclipseClasspathReader {
unknownJdks.add(jdkName);
}
}
- OrderEntry[] orderEntries = rootModel.getOrderEntries();
- orderEntries = ArrayUtil.append(orderEntries, orderEntries[0]);
- rootModel.rearrangeOrderEntries(ArrayUtil.remove(orderEntries, 0));
+ rearrangeOrderEntryOfType(rootModel, JdkOrderEntry.class);
}
else if (path.startsWith(EclipseXml.USER_LIBRARY)) {
addNamedLibrary(rootModel, unknownLibraries, exported, getPresentableName(path), LibraryTablesRegistrar.PROJECT_LEVEL);
@@ -289,6 +288,19 @@ public class EclipseClasspathReader {
}
}
+ private static void rearrangeOrderEntryOfType(ModifiableRootModel rootModel, Class extends OrderEntry> orderEntryClass) {
+ OrderEntry[] orderEntries = rootModel.getOrderEntries();
+ int moduleSourcesIdx = 0;
+ for (OrderEntry orderEntry : orderEntries) {
+ if (orderEntryClass.isAssignableFrom(orderEntry.getClass())) {
+ break;
+ }
+ moduleSourcesIdx++;
+ }
+ orderEntries = ArrayUtil.append(orderEntries, orderEntries[moduleSourcesIdx]);
+ rootModel.rearrangeOrderEntries(ArrayUtil.remove(orderEntries, moduleSourcesIdx));
+ }
+
public static void setupOutput(ModifiableRootModel rootModel, final String path) {
final CompilerModuleExtension compilerModuleExtension = rootModel.getModuleExtension(CompilerModuleExtension.class);
compilerModuleExtension.setCompilerOutputPath(VfsUtil.pathToUrl(path));
diff --git a/plugins/eclipse/testData/round/sourcesAfterAll/test/.classpath b/plugins/eclipse/testData/round/sourcesAfterAll/test/.classpath
new file mode 100644
index 000000000000..3f3893aff962
--- /dev/null
+++ b/plugins/eclipse/testData/round/sourcesAfterAll/test/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/plugins/eclipse/testData/round/sourcesAfterAll/test/.project b/plugins/eclipse/testData/round/sourcesAfterAll/test/.project
new file mode 100644
index 000000000000..f5a6693fe6c2
--- /dev/null
+++ b/plugins/eclipse/testData/round/sourcesAfterAll/test/.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/EclipseClasspathTest.java b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseClasspathTest.java
index 998c28b03a5c..2dc6c706c0c5 100644
--- a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseClasspathTest.java
+++ b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseClasspathTest.java
@@ -206,4 +206,9 @@ public class EclipseClasspathTest extends IdeaTestCase {
doTest();
}
+ public void testSourcesAfterAll() throws Exception {
+ doTest();
+ }
+
+
}