Change Signature: Implement improved call processing algorithm

#KT-8953 Fixed
 #KT-9525 Fixed
This commit is contained in:
Alexey Sedunov
2015-11-03 20:46:50 +03:00
parent b334f92748
commit 6ff955b66c
23 changed files with 471 additions and 204 deletions
@@ -21,7 +21,7 @@ import com.intellij.psi.PsiWhiteSpace
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.psiUtil.siblings
internal object EditCommaSeparatedListHelper {
object EditCommaSeparatedListHelper {
public fun <TItem: KtElement> addItem(list: KtElement, allItems: List<TItem>, item: TItem): TItem {
return addItemBefore(list, allItems, item, null)
}
@@ -345,7 +345,7 @@ public class KtPsiFactory(private val project: Project) {
createExpressionByPattern("if ($0) $1", condition, thenExpr)) as KtIfExpression
}
public fun createArgument(expression: KtExpression, name: Name? = null, isSpread: Boolean = false): KtValueArgument {
public fun createArgument(expression: KtExpression?, name: Name? = null, isSpread: Boolean = false): KtValueArgument {
val argumentList = buildByPattern({ pattern, args -> createByPattern(pattern, *args) { createCallArguments(it) } }) {
appendFixedText("(")
@@ -16,37 +16,35 @@
package org.jetbrains.kotlin.psi
import kotlin.properties.ReadWriteProperty
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.UserDataHolder
import com.intellij.psi.PsiElement
import kotlin.reflect.KProperty
public class UserDataProperty<in R: UserDataHolder, T : Any>(val key: Key<T>, val default: T? = null) {
fun getValue(thisRef: R, desc: kotlin.PropertyMetadata): T? {
return thisRef.getUserData(key)
}
public class UserDataProperty<in R: UserDataHolder, T : Any>(val key: Key<T>) {
operator fun getValue(thisRef: R, desc: KProperty<*>) = thisRef.getUserData(key)
fun setValue(thisRef: R, desc: kotlin.PropertyMetadata, value: T?) {
thisRef.putUserData(key, value)
}
operator fun setValue(thisRef: R, desc: KProperty<*>, value: T?) = thisRef.putUserData(key, value)
}
public class NotNullableUserDataProperty<in R: UserDataHolder, T : Any>(val key: Key<T>, val defaultValue: T) {
fun getValue(thisRef: R, desc: kotlin.PropertyMetadata): T {
return thisRef.getUserData(key) ?: defaultValue
}
operator fun getValue(thisRef: R, desc: KProperty<*>) = thisRef.getUserData(key) ?: defaultValue
fun setValue(thisRef: R, desc: kotlin.PropertyMetadata, value: T) {
thisRef.putUserData(key, value)
operator fun setValue(thisRef: R, desc: KProperty<*>, value: T) {
thisRef.putUserData(key, if (value != defaultValue) value else null)
}
}
public class CopyableUserDataProperty<in R: PsiElement, T : Any>(val key: Key<T>, val default: T? = null) {
fun getValue(thisRef: R, property: PropertyMetadata): T? {
return thisRef.getCopyableUserData(key)
}
public class CopyableUserDataProperty<in R: PsiElement, T : Any>(val key: Key<T>) {
operator fun getValue(thisRef: R, property: KProperty<*>) = thisRef.getCopyableUserData(key)
fun setValue(thisRef: R, property: PropertyMetadata, value: T?) {
thisRef.putCopyableUserData(key, value)
operator fun setValue(thisRef: R, property: KProperty<*>, value: T?) = thisRef.putCopyableUserData(key, value)
}
public class NotNullableCopyableUserDataProperty<in R: PsiElement, T : Any>(val key: Key<T>, val defaultValue: T) {
operator fun getValue(thisRef: R, property: KProperty<*>) = thisRef.getCopyableUserData(key) ?: defaultValue
operator fun setValue(thisRef: R, property: KProperty<*>, value: T) {
thisRef.putCopyableUserData(key, if (value != defaultValue) value else null)
}
}