Fixed completion for safe call

This commit is contained in:
Valentin Kipyatkov
2015-07-08 22:34:41 +03:00
parent 48b163758f
commit 9b3cbc6f25
4 changed files with 22 additions and 2 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.resolve.lazy.FileScopeProvider
import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
import org.jetbrains.kotlin.utils.addIfNotNull
import java.util.*
@@ -76,7 +77,7 @@ class SyntheticExtensionsScope(storageManager: StorageManager) : JetScope by Jet
override fun getSyntheticExtensionProperties(receiverType: JetType, name: Name): Collection<VariableDescriptor> {
if (name.isSpecial()) return emptyList()
if (name.getIdentifier()[0].isUpperCase()) return emptyList()
return collectSyntheticPropertiesByName(null, receiverType, name) ?: emptyList()
return collectSyntheticPropertiesByName(null, receiverType.makeNotNullable(), name) ?: emptyList()
}
private fun collectSyntheticPropertiesByName(result: SmartList<PropertyDescriptor>?, type: JetType, name: Name): SmartList<PropertyDescriptor>? {
@@ -96,7 +97,7 @@ class SyntheticExtensionsScope(storageManager: StorageManager) : JetScope by Jet
override fun getSyntheticExtensionProperties(receiverType: JetType): Collection<VariableDescriptor> {
val result = ArrayList<PropertyDescriptor>()
result.collectSyntheticProperties(receiverType)
result.collectSyntheticProperties(receiverType.makeNotNullable())
return result
}
@@ -0,0 +1,7 @@
import java.io.File
fun foo(file: File?) {
file?.<caret>
}
// EXIST_JAVA_ONLY: { lookupString: "absolutePath", itemText: "absolutePath", tailText: " for File", typeText: "String!" }
@@ -1221,6 +1221,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("SyntheticExtensionsSafeCall.kt")
public void testSyntheticExtensionsSafeCall() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/extensions/SyntheticExtensionsSafeCall.kt");
doTest(fileName);
}
@TestMetadata("WrongExplicitReceiver.kt")
public void testWrongExplicitReceiver() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/extensions/WrongExplicitReceiver.kt");
@@ -1221,6 +1221,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("SyntheticExtensionsSafeCall.kt")
public void testSyntheticExtensionsSafeCall() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/extensions/SyntheticExtensionsSafeCall.kt");
doTest(fileName);
}
@TestMetadata("WrongExplicitReceiver.kt")
public void testWrongExplicitReceiver() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/extensions/WrongExplicitReceiver.kt");