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
|
// 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.lang.types.ref.JetTypeName;
|
||||||
import org.jetbrains.jet.parsing.JetParsingTest;
|
import org.jetbrains.jet.parsing.JetParsingTest;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
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.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@@ -95,7 +96,7 @@ public class CodegenTestFiles {
|
|||||||
try {
|
try {
|
||||||
String content = JetTestUtils.doLoadFile(JetParsingTest.getTestDataDir() + "/codegen/", name);
|
String content = JetTestUtils.doLoadFile(JetParsingTest.getTestDataDir() + "/codegen/", name);
|
||||||
int i = name.lastIndexOf('/');
|
int i = name.lastIndexOf('/');
|
||||||
name = name.substring(i+1);
|
//name = name.substring(i+1);
|
||||||
JetFile file = JetTestUtils.createFile(name, content, project);
|
JetFile file = JetTestUtils.createFile(name, content, project);
|
||||||
files.add(file);
|
files.add(file);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -37,4 +37,8 @@ public class MultiFileGenTest extends CodegenTestCase {
|
|||||||
public void testNestedPackagesVisibility() {
|
public void testNestedPackagesVisibility() {
|
||||||
blackBoxMultiFile("/multi/nestedPackages/box.kt", "/multi/nestedPackages/a.kt");
|
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.io.FileUtil;
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.testFramework.PlatformTestCase;
|
import com.intellij.testFramework.PlatformTestCase;
|
||||||
import com.sun.jdi.*;
|
import com.sun.jdi.ReferenceType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
|
||||||
import org.jetbrains.jet.codegen.GenerationUtils;
|
import org.jetbrains.jet.codegen.GenerationUtils;
|
||||||
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.utils.ExceptionUtils;
|
import org.jetbrains.jet.utils.ExceptionUtils;
|
||||||
|
|
||||||
@@ -192,7 +192,10 @@ public abstract class PositionManagerTestCase extends PlatformTestCase {
|
|||||||
assertNotNull(classes);
|
assertNotNull(classes);
|
||||||
assertEquals(1, classes.size());
|
assertEquals(1, classes.size());
|
||||||
ReferenceType type = classes.get(0);
|
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 {
|
private static class Breakpoint {
|
||||||
|
|||||||
Reference in New Issue
Block a user