diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index c5dfe41f1e7..4a37aab485c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -301,6 +301,7 @@ public class NamespaceCodegen extends GenerationStateAware { } // dollar sign in the end is to prevent synthetic class from having "Test" or other parseable suffix - return namespaceInternalName + "$src$" + name.substring(substringFrom, substringTo) + "$"; + // path hashCode to prevent same name / different path collision + return namespaceInternalName + "$src$" + name.substring(substringFrom, substringTo) + "$" + file.getVirtualFile().getCanonicalPath().hashCode(); } } diff --git a/compiler/testData/codegen/multi/same/1/box.kt b/compiler/testData/codegen/multi/same/1/box.kt new file mode 100644 index 00000000000..cf4b866e5a5 --- /dev/null +++ b/compiler/testData/codegen/multi/same/1/box.kt @@ -0,0 +1 @@ +fun box() = box1() + "K" \ No newline at end of file diff --git a/compiler/testData/codegen/multi/same/2/box.kt b/compiler/testData/codegen/multi/same/2/box.kt new file mode 100644 index 00000000000..010c49d3b80 --- /dev/null +++ b/compiler/testData/codegen/multi/same/2/box.kt @@ -0,0 +1 @@ +fun box1() = "O" \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestFiles.java b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestFiles.java index 168c1dd0d82..eeb1ba15611 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestFiles.java +++ b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestFiles.java @@ -27,9 +27,10 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.ref.JetTypeName; import org.jetbrains.jet.parsing.JetParsingTest; -import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -95,7 +96,7 @@ public class CodegenTestFiles { try { String content = JetTestUtils.doLoadFile(JetParsingTest.getTestDataDir() + "/codegen/", name); int i = name.lastIndexOf('/'); - name = name.substring(i+1); + //name = name.substring(i+1); JetFile file = JetTestUtils.createFile(name, content, project); files.add(file); } catch (IOException e) { diff --git a/compiler/tests/org/jetbrains/jet/codegen/MultiFileGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/MultiFileGenTest.java index f12c5b96c3c..52477122f32 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/MultiFileGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/MultiFileGenTest.java @@ -37,4 +37,8 @@ public class MultiFileGenTest extends CodegenTestCase { public void testNestedPackagesVisibility() { blackBoxMultiFile("/multi/nestedPackages/box.kt", "/multi/nestedPackages/a.kt"); } + + public void testSameNames() { + blackBoxMultiFile("/multi/same/1/box.kt", "/multi/same/2/box.kt"); + } } diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java b/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java index 700c6f72904..2ae11c2342e 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java @@ -28,12 +28,12 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.testFramework.PlatformTestCase; -import com.sun.jdi.*; +import com.sun.jdi.ReferenceType; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.codegen.ClassFileFactory; -import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.GenerationUtils; +import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.utils.ExceptionUtils; @@ -192,7 +192,10 @@ public abstract class PositionManagerTestCase extends PlatformTestCase { assertNotNull(classes); assertEquals(1, classes.size()); ReferenceType type = classes.get(0); - assertEquals(className, type.name()); + if (!className.contains("$src$")) // don't want to deal with hashCodes in test + assertEquals(className, type.name()); + else + assertTrue(type.name().startsWith(className)); } private static class Breakpoint {