Shorten references: Do not lookup packages when searching for conflicting declarations

Minor: use JetTreeVisitor
This commit is contained in:
Pavel V. Talanov
2014-01-24 22:07:31 +04:00
parent 30f49f3c9a
commit 4638806d11
7 changed files with 27 additions and 20 deletions
@@ -442,7 +442,7 @@ fun main(args: Array<String>) {
}
testClass(javaClass<AbstractShortenRefsTest>()) {
model("shortenRefs")
model("shortenRefs", pattern = """^([^\.]+)\.kt$""")
}
testClass(javaClass<AbstractCompiledKotlinInJavaCompletionTest>()) {
@@ -44,16 +44,12 @@ public object ShortenReferences {
}
}
private class ResolveAllReferencesVisitor(file: JetFile) : JetVisitorVoid() {
private class ResolveAllReferencesVisitor(file: JetFile) : JetTreeVisitorVoid() {
private val resolveSession = AnalyzerFacadeWithCache.getLazyResolveSessionForFile(file)
private val resolveMap = HashMap<JetReferenceExpression, BindingContext>()
public val result: Map<JetReferenceExpression, BindingContext> = resolveMap
override fun visitJetElement(element : JetElement) {
element.acceptChildren(this)
}
override fun visitUserType(userType: JetUserType) {
userType.acceptChildren(this)
@@ -75,7 +71,7 @@ public object ShortenReferences {
}
}
private class ShortenTypesVisitor(val file: JetFile, val resolveMap: Map<JetReferenceExpression, BindingContext>) : JetVisitorVoid() {
private class ShortenTypesVisitor(val file: JetFile, val resolveMap: Map<JetReferenceExpression, BindingContext>) : JetTreeVisitorVoid() {
private val resolveSession : ResolveSessionForBodies
get() = AnalyzerFacadeWithCache.getLazyResolveSessionForFile(file)
@@ -89,10 +85,6 @@ public object ShortenReferences {
private fun bindingContext(expression: JetReferenceExpression): BindingContext = resolveMap[expression]!!
override fun visitJetElement(element : JetElement) {
element.acceptChildren(this)
}
override fun visitUserType(userType: JetUserType) {
userType.getTypeArgumentList()?.accept(this)
@@ -117,7 +109,7 @@ public object ShortenReferences {
val typeReference = PsiTreeUtil.getParentOfType(userType, javaClass<JetTypeReference>())!!
val scope = resolveSession.resolveToElement(typeReference).get(BindingContext.TYPE_RESOLUTION_SCOPE, typeReference)!!
val name = target.getName()
val targetByName = scope.getClassifier(name) ?: scope.getPackage(name)
val targetByName = scope.getClassifier(name)
if (targetByName == null) {
addImportIfNeeded(target, file)
return true
@@ -141,17 +133,13 @@ public object ShortenReferences {
}
}
private class ShortenQualifiedExpressionsVisitor(val file: JetFile, val resolveMap: Map<JetReferenceExpression, BindingContext>) : JetVisitorVoid() {
private class ShortenQualifiedExpressionsVisitor(val file: JetFile, val resolveMap: Map<JetReferenceExpression, BindingContext>) : JetTreeVisitorVoid() {
private val resolveSession : ResolveSessionForBodies
get() = AnalyzerFacadeWithCache.getLazyResolveSessionForFile(file)
private fun bindingContext(expression: JetReferenceExpression): BindingContext
= resolveMap[expression] ?: resolveSession.resolveToElement(expression) // binding context can be absent in the map if some references have been shortened already
override fun visitJetElement(element : JetElement) {
acceptChildren(element)
}
override fun visitDotQualifiedExpression(expression: JetDotQualifiedExpression) {
val resultElement = processDotQualifiedExpression(expression)
acceptChildren(resultElement)
@@ -0,0 +1,3 @@
package same
class same() {}
@@ -0,0 +1,2 @@
fun f(s: <selection>same.same</selection>) {
}
@@ -0,0 +1,4 @@
import same.same
fun f(s: same) {
}
@@ -32,6 +32,11 @@ abstract class AbstractShortenRefsTest : LightCodeInsightFixtureTestCase() {
protected fun doTest(testPath: String) {
val fixture = myFixture!!
val dependencyPath = testPath.replace(".kt", ".dependency.kt")
if (File(dependencyPath).exists()) {
fixture.configureByFile(dependencyPath)
}
fixture.configureByFile(testPath)
val file = fixture.getFile() as JetFile
@@ -34,7 +34,7 @@ import org.jetbrains.jet.shortenRefs.AbstractShortenRefsTest;
@InnerTestClasses({ShortenRefsTestGenerated.Constructor.class, ShortenRefsTestGenerated.Type.class})
public class ShortenRefsTestGenerated extends AbstractShortenRefsTest {
public void testAllFilesPresentInShortenRefs() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs"), Pattern.compile("^(.+)\\.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs"), Pattern.compile("^([^\\.]+)\\.kt$"), true);
}
@TestMetadata("JavaStaticMethod.kt")
@@ -45,7 +45,7 @@ public class ShortenRefsTestGenerated extends AbstractShortenRefsTest {
@TestMetadata("idea/testData/shortenRefs/constructor")
public static class Constructor extends AbstractShortenRefsTest {
public void testAllFilesPresentInConstructor() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs/constructor"), Pattern.compile("^(.+)\\.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs/constructor"), Pattern.compile("^([^\\.]+)\\.kt$"), true);
}
@TestMetadata("Ambiguous.kt")
@@ -108,7 +108,12 @@ public class ShortenRefsTestGenerated extends AbstractShortenRefsTest {
@TestMetadata("idea/testData/shortenRefs/type")
public static class Type extends AbstractShortenRefsTest {
public void testAllFilesPresentInType() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs/type"), Pattern.compile("^(.+)\\.kt$"), true);
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/shortenRefs/type"), Pattern.compile("^([^\\.]+)\\.kt$"), true);
}
@TestMetadata("ClassSameNameAsPackage.kt")
public void testClassSameNameAsPackage() throws Exception {
doTest("idea/testData/shortenRefs/type/ClassSameNameAsPackage.kt");
}
@TestMetadata("FunctionType.kt")