More clear code + better test

This commit is contained in:
Valentin Kipyatkov
2014-11-28 19:23:25 +03:00
parent 6502c44928
commit 9dc6a82fef
2 changed files with 13 additions and 6 deletions
@@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.types.TypeUtils import org.jetbrains.jet.lang.types.TypeUtils
import org.jetbrains.jet.lang.types.checker.JetTypeChecker import org.jetbrains.jet.lang.types.checker.JetTypeChecker
import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.lexer.JetTokens
import org.jetbrains.jet.lang.resolve.calls.callUtil.getCall
public class ReferenceVariantsHelper( public class ReferenceVariantsHelper(
private val context: BindingContext, private val context: BindingContext,
@@ -81,6 +82,11 @@ public class ReferenceVariantsHelper(
return resolutionScope.getDescriptorsFiltered(restrictedFilter, nameFilter) return resolutionScope.getDescriptorsFiltered(restrictedFilter, nameFilter)
} }
if (parent is JetUserType) {
val restrictedFilter = kindFilter.restrictedToKinds(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK) ?: return listOf()
return resolutionScope.getDescriptorsFiltered(restrictedFilter, nameFilter)
}
val pair = getReferenceVariantsReceiver(expression) val pair = getReferenceVariantsReceiver(expression)
if (pair != null) { if (pair != null) {
val (receiverExpression, callType) = pair val (receiverExpression, callType) = pair
@@ -159,12 +165,8 @@ public class ReferenceVariantsHelper(
} }
private fun getReferenceVariantsReceiver(expression: JetSimpleNameExpression): Pair<JetExpression, CallType>? { private fun getReferenceVariantsReceiver(expression: JetSimpleNameExpression): Pair<JetExpression, CallType>? {
val parent = expression.getParent()
val inPositionForCompletionWithReceiver = parent is JetCallExpression
|| parent is JetQualifiedExpression
|| parent is JetBinaryExpression
if (!inPositionForCompletionWithReceiver) return null
val receiverExpression = expression.getReceiverExpression() ?: return null val receiverExpression = expression.getReceiverExpression() ?: return null
val parent = expression.getParent()
val callType = when (parent) { val callType = when (parent) {
is JetBinaryExpression -> CallType.INFIX is JetBinaryExpression -> CallType.INFIX
@@ -182,7 +184,7 @@ public class ReferenceVariantsHelper(
CallType.NORMAL CallType.NORMAL
} }
else -> error("Unknown parent") else -> return null
} }
return receiverExpression to callType return receiverExpression to callType
} }
@@ -3,9 +3,14 @@ package Test.SubTest.AnotherTest
open class TestClass { open class TestClass {
} }
fun globalFun(){}
val globalProp: Int = 1
class A() : Test.SubTest.AnotherTest.Te<caret> { class A() : Test.SubTest.AnotherTest.Te<caret> {
public fun test() { public fun test() {
} }
} }
// EXIST: TestClass // EXIST: TestClass
// ABSENT: globalFun
// ABSENT: globalProp