name clash when several files of the same package has different paths but the same name #KT-2713 Fixed

This commit is contained in:
Alex Tkachman
2012-09-11 17:05:23 +03:00
parent ec549895e8
commit 6a0e4d1593
6 changed files with 18 additions and 7 deletions
@@ -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 {