name clash when several files of the same package has different paths but the same name #KT-2713 Fixed
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fun box() = box1() + "K"
|
||||
@@ -0,0 +1 @@
|
||||
fun box1() = "O"
|
||||
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user