Extraction Engine: Get rid of explicit element offset manipulation and use copyable user data instead
This commit is contained in:
@@ -560,6 +560,8 @@ public class KtPsiFactory(private val project: Project) {
|
||||
return this
|
||||
}
|
||||
|
||||
public fun transform(f: StringBuilder.() -> Unit) = sb.f()
|
||||
|
||||
public fun asString(): String {
|
||||
if (state != State.DONE) {
|
||||
state = State.DONE
|
||||
|
||||
@@ -21,13 +21,13 @@ 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>) {
|
||||
public class UserDataProperty<in R : UserDataHolder, T : Any>(val key: Key<T>) {
|
||||
operator fun getValue(thisRef: R, desc: KProperty<*>) = thisRef.getUserData(key)
|
||||
|
||||
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) {
|
||||
public class NotNullableUserDataProperty<in R : UserDataHolder, T : Any>(val key: Key<T>, val defaultValue: T) {
|
||||
operator fun getValue(thisRef: R, desc: KProperty<*>) = thisRef.getUserData(key) ?: defaultValue
|
||||
|
||||
operator fun setValue(thisRef: R, desc: KProperty<*>, value: T) {
|
||||
@@ -35,16 +35,25 @@ public class NotNullableUserDataProperty<in R: UserDataHolder, T : Any>(val key:
|
||||
}
|
||||
}
|
||||
|
||||
public class CopyableUserDataProperty<in R: PsiElement, T : Any>(val key: Key<T>) {
|
||||
public class CopyableUserDataProperty<in R : PsiElement, T : Any>(val key: Key<T>) {
|
||||
operator fun getValue(thisRef: R, property: KProperty<*>) = thisRef.getCopyableUserData(key)
|
||||
|
||||
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) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
public class NotNullableCopyableUserDataPropertyWithLazyDefault<in R : PsiElement, T : Any>(val key: Key<T>,
|
||||
val computeDefaultValue: () -> T) {
|
||||
private val delegate by lazy { NotNullableCopyableUserDataProperty<R, T>(key, computeDefaultValue()) }
|
||||
|
||||
operator fun getValue(thisRef: R, property: KProperty<*>) = delegate.getValue(thisRef, property)
|
||||
|
||||
operator fun setValue(thisRef: R, property: KProperty<*>, value: T) = delegate.setValue(thisRef, property, value)
|
||||
}
|
||||
Reference in New Issue
Block a user