KT-6132 No smart completion for argument of java static method

#KT-6132 Fixed
This commit is contained in:
Svetlana Isakova
2014-10-31 14:48:13 +03:00
parent d4275e1110
commit fad4261448
5 changed files with 25 additions and 4 deletions
@@ -35,7 +35,7 @@ import org.jetbrains.jet.lang.psi.JetExpression
import org.jetbrains.jet.lang.resolve.bindingContextUtil.recordScopeAndDataFlowInfo import org.jetbrains.jet.lang.resolve.bindingContextUtil.recordScopeAndDataFlowInfo
import kotlin.properties.Delegates import kotlin.properties.Delegates
public trait Qualifier { public trait Qualifier: ReceiverValue {
public val expression: JetExpression public val expression: JetExpression
@@ -56,7 +56,7 @@ class QualifierReceiver (
val referenceExpression: JetSimpleNameExpression, val referenceExpression: JetSimpleNameExpression,
override val packageView: PackageViewDescriptor?, override val packageView: PackageViewDescriptor?,
override val classifier: ClassifierDescriptor? override val classifier: ClassifierDescriptor?
) : Qualifier, ReceiverValue { ) : Qualifier {
override val expression: JetExpression = referenceExpression.getTopmostParentQualifiedExpressionForSelector() ?: referenceExpression override val expression: JetExpression = referenceExpression.getTopmostParentQualifiedExpressionForSelector() ?: referenceExpression
@@ -68,6 +68,8 @@ import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
import org.jetbrains.jet.lang.descriptors.VariableDescriptor import org.jetbrains.jet.lang.descriptors.VariableDescriptor
import org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus import org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus
import org.jetbrains.jet.lang.resolve.scopes.receivers.Qualifier
import org.jetbrains.jet.lang.resolve.scopes.receivers.QualifierReceiver
enum class Tail { enum class Tail {
COMMA COMMA
@@ -132,12 +134,13 @@ class ExpectedInfos(val bindingContext: BindingContext, val resolveSession: Reso
if (parent is JetQualifiedExpression && callElement == parent.getSelectorExpression()) { if (parent is JetQualifiedExpression && callElement == parent.getSelectorExpression()) {
val receiverExpression = parent.getReceiverExpression() val receiverExpression = parent.getReceiverExpression()
val expressionType = bindingContext[BindingContext.EXPRESSION_TYPE, receiverExpression] val expressionType = bindingContext[BindingContext.EXPRESSION_TYPE, receiverExpression]
val qualifier = bindingContext[BindingContext.QUALIFIER, receiverExpression]
if (expressionType != null) { if (expressionType != null) {
receiver = ExpressionReceiver(receiverExpression, expressionType) receiver = ExpressionReceiver(receiverExpression, expressionType)
callOperationNode = parent.getOperationTokenNode() callOperationNode = parent.getOperationTokenNode()
} }
else if (bindingContext[BindingContext.QUALIFIER, receiverExpression] != null) { else if (qualifier != null) {
receiver = ReceiverValue.NO_RECEIVER receiver = qualifier
callOperationNode = null callOperationNode = null
} }
else { else {
@@ -0,0 +1,8 @@
package p1
fun test(s: String, i: Int) {
p2.foo(<caret>)
fun foo(i: Int) = i
// EXIST: s
@@ -0,0 +1,3 @@
package p2
fun foo(s: String) {}
@@ -19,6 +19,7 @@ package org.jetbrains.jet.completion;
import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestDataPath;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.jet.JUnit3RunnerWithInners;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata; import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -35,6 +36,12 @@ public class MultiFileSmartCompletionTestGenerated extends AbstractMultiFileSmar
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/completion/smartMultiFile"), Pattern.compile("^([^\\.]+)$"), false); JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/completion/smartMultiFile"), Pattern.compile("^([^\\.]+)$"), false);
} }
@TestMetadata("FunctionFromAnotherPackage")
public void testFunctionFromAnotherPackage() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smartMultiFile/FunctionFromAnotherPackage/");
doTest(fileName);
}
@TestMetadata("JavaStaticMethodArgument") @TestMetadata("JavaStaticMethodArgument")
public void testJavaStaticMethodArgument() throws Exception { public void testJavaStaticMethodArgument() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smartMultiFile/JavaStaticMethodArgument/"); String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smartMultiFile/JavaStaticMethodArgument/");