diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/userDataUtil.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/userDataUtil.kt index 62f58fd0bfb..1b50a645bcd 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/userDataUtil.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/userDataUtil.kt @@ -18,13 +18,24 @@ package org.jetbrains.jet.lang.psi import kotlin.properties.ReadWriteProperty import com.intellij.openapi.util.Key +import com.intellij.openapi.util.UserDataHolder -public class UserDataProperty(val key: Key) : ReadWriteProperty { - override fun get(thisRef: JetFile, desc: kotlin.PropertyMetadata): T? { +public class UserDataProperty(val key: Key, val default: T? = null) : ReadWriteProperty { + override fun get(thisRef: R, desc: kotlin.PropertyMetadata): T? { return thisRef.getUserData(key) } - override fun set(thisRef: JetFile, desc: kotlin.PropertyMetadata, value: T?) { + override fun set(thisRef: R, desc: kotlin.PropertyMetadata, value: T?) { + thisRef.putUserData(key, value) + } +} + +public class NotNullableUserDataProperty(val key: Key, val defaultValue: T) : ReadWriteProperty { + override fun get(thisRef: R, desc: kotlin.PropertyMetadata): T { + return thisRef.getUserData(key) ?: defaultValue + } + + override fun set(thisRef: R, desc: kotlin.PropertyMetadata, value: T) { thisRef.putUserData(key, value) } } \ No newline at end of file