BaseState — avoid primitive wrapping
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Fri, 22 Dec 2017 14:56:39 +0000 (15:56 +0100)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Fri, 22 Dec 2017 15:05:56 +0000 (16:05 +0100)
platform/projectModel-api/src/com/intellij/configurationStore/numberStoredProperties.kt [deleted file]
platform/projectModel-api/src/com/intellij/configurationStore/properties/CollectionStoredProperty.kt [moved from platform/projectModel-api/src/com/intellij/configurationStore/CollectionStoredProperty.kt with 98% similarity]
platform/projectModel-api/src/com/intellij/configurationStore/properties/FloatStoredProperty.kt [new file with mode: 0644]
platform/projectModel-api/src/com/intellij/configurationStore/properties/IntStoredProperty.kt [new file with mode: 0644]
platform/projectModel-api/src/com/intellij/configurationStore/properties/LongStoredProperty.kt [new file with mode: 0644]
platform/projectModel-api/src/com/intellij/configurationStore/properties/ObjectStoredProperty.kt [moved from platform/projectModel-api/src/com/intellij/configurationStore/ObjectStoredProperty.kt with 97% similarity]
platform/projectModel-api/src/com/intellij/configurationStore/properties/StringStoredProperty.kt [moved from platform/projectModel-api/src/com/intellij/configurationStore/StringStoredProperty.kt with 71% similarity]
platform/projectModel-api/src/com/intellij/openapi/components/BaseState.kt
platform/projectModel-api/src/com/intellij/openapi/components/StoredPropertyBase.kt

diff --git a/platform/projectModel-api/src/com/intellij/configurationStore/numberStoredProperties.kt b/platform/projectModel-api/src/com/intellij/configurationStore/numberStoredProperties.kt
deleted file mode 100644 (file)
index 6434fb1..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
- */
-package com.intellij.configurationStore
-
-import com.intellij.openapi.components.BaseState
-import com.intellij.openapi.components.PrimitiveStoredPropertyBase
-import com.intellij.openapi.components.StoredProperty
-import kotlin.reflect.KProperty
-
-internal class IntStoredProperty(override val defaultValue: Int) : PrimitiveStoredPropertyBase<Int>() {
-  override var value = defaultValue
-
-  override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
-
-  override fun setValue(thisRef: BaseState, property: KProperty<*>, value: Int) {
-    if (this.value != value) {
-      thisRef.ownModificationCount++
-      this.value = value
-    }
-  }
-
-  override fun equals(other: Any?) = this === other || (other is IntStoredProperty && value == other.value)
-
-  override fun hashCode() = value.hashCode()
-
-  override fun toString() = if (value == defaultValue) "" else value.toString()
-
-  override fun setValue(other: StoredProperty): Boolean {
-    val newValue = (other as IntStoredProperty).value
-    if (newValue == value) {
-      return false
-    }
-
-    value = newValue
-    return true
-  }
-}
-
-internal class LongStoredProperty(override val defaultValue: Long) : PrimitiveStoredPropertyBase<Long>() {
-  override var value = defaultValue
-
-  override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
-
-  override fun setValue(thisRef: BaseState, property: KProperty<*>, value: Long) {
-    if (this.value != value) {
-      thisRef.ownModificationCount++
-      this.value = value
-    }
-  }
-
-  override fun equals(other: Any?) = this === other || (other is LongStoredProperty && value == other.value)
-
-  override fun hashCode() = value.hashCode()
-
-  override fun toString() = if (value == defaultValue) "" else value.toString()
-
-  override fun setValue(other: StoredProperty): Boolean {
-    val newValue = (other as LongStoredProperty).value
-    if (newValue == value) {
-      return false
-    }
-
-    value = newValue
-    return true
-  }
-}
-
-internal class FloatStoredProperty(override val defaultValue: Float, private val valueNormalizer: ((value: Float) -> Float)?) : PrimitiveStoredPropertyBase<Float>() {
-  override var value = defaultValue
-
-  override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
-
-  override fun setValue(thisRef: BaseState, property: KProperty<*>, @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") rawNewValue: Float) {
-    val newValue = valueNormalizer?.invoke(value) ?: rawNewValue
-    if (value != newValue) {
-      thisRef.ownModificationCount++
-      value = newValue
-    }
-  }
-
-  override fun equals(other: Any?) = this === other || (other is FloatStoredProperty && value == other.value)
-
-  override fun hashCode() = value.hashCode()
-
-  override fun toString() = if (value == defaultValue) "" else value.toString()
-
-  override fun setValue(other: StoredProperty): Boolean {
-    val newValue = (other as FloatStoredProperty).value
-    if (newValue == value) {
-      return false
-    }
-
-    value = newValue
-    return true
-  }
-}
\ No newline at end of file
similarity index 98%
rename from platform/projectModel-api/src/com/intellij/configurationStore/CollectionStoredProperty.kt
rename to platform/projectModel-api/src/com/intellij/configurationStore/properties/CollectionStoredProperty.kt
index 98ed319ab8e9b23347284d3039c86969d501cbcf..b3c9e6f7e8c965f66a52340311c76377773b7029 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
  */
-package com.intellij.configurationStore
+package com.intellij.configurationStore.properties
 
 import com.intellij.openapi.components.BaseState
 import com.intellij.openapi.components.StoredProperty
diff --git a/platform/projectModel-api/src/com/intellij/configurationStore/properties/FloatStoredProperty.kt b/platform/projectModel-api/src/com/intellij/configurationStore/properties/FloatStoredProperty.kt
new file mode 100644 (file)
index 0000000..28494bb
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+ */
+package com.intellij.configurationStore.properties
+
+import com.intellij.openapi.components.BaseState
+import com.intellij.openapi.components.StoredProperty
+import com.intellij.openapi.components.StoredPropertyBase
+import kotlin.reflect.KProperty
+
+internal class FloatStoredProperty(private val defaultValue: Float, private val valueNormalizer: ((value: Float) -> Float)?) : StoredPropertyBase<Float>() {
+  private var value = defaultValue
+
+  override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
+
+  override fun setValue(thisRef: BaseState, property: KProperty<*>, value: Float) {
+    val newValue = valueNormalizer?.invoke(value) ?: value
+    if (this.value != newValue) {
+      thisRef.ownModificationCount++
+      this.value = newValue
+    }
+  }
+
+  override fun setValue(other: StoredProperty): Boolean {
+    val newValue = (other as FloatStoredProperty).value
+    if (newValue == value) {
+      return false
+    }
+
+    value = newValue
+    return true
+  }
+
+  override fun equals(other: Any?) = this === other || (other is FloatStoredProperty && value == other.value)
+
+  override fun hashCode() = value.hashCode()
+
+  override fun toString() = "$name = $value${if (value == defaultValue) " (default)" else ""}"
+
+  override fun isEqualToDefault() = value == defaultValue
+}
\ No newline at end of file
diff --git a/platform/projectModel-api/src/com/intellij/configurationStore/properties/IntStoredProperty.kt b/platform/projectModel-api/src/com/intellij/configurationStore/properties/IntStoredProperty.kt
new file mode 100644 (file)
index 0000000..5721253
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+ */
+package com.intellij.configurationStore.properties
+
+import com.intellij.openapi.components.BaseState
+import com.intellij.openapi.components.StoredProperty
+import com.intellij.openapi.components.StoredPropertyBase
+import kotlin.reflect.KProperty
+
+internal class IntStoredProperty(private val defaultValue: Int, private val valueNormalizer: ((value: Int) -> Int)?) : StoredPropertyBase<Int>() {
+  private var value = defaultValue
+
+  override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
+
+  override fun setValue(thisRef: BaseState, property: KProperty<*>, value: Int) {
+    val newValue = valueNormalizer?.invoke(value) ?: value
+    if (this.value != newValue) {
+      thisRef.ownModificationCount++
+      this.value = newValue
+    }
+  }
+
+  override fun setValue(other: StoredProperty): Boolean {
+    val newValue = (other as IntStoredProperty).value
+    if (newValue == value) {
+      return false
+    }
+
+    value = newValue
+    return true
+  }
+
+  override fun equals(other: Any?) = this === other || (other is IntStoredProperty && value == other.value)
+
+  override fun hashCode() = value.hashCode()
+
+  override fun toString() = "$name = $value${if (value == defaultValue) " (default)" else ""}"
+
+  override fun isEqualToDefault() = value == defaultValue
+}
\ No newline at end of file
diff --git a/platform/projectModel-api/src/com/intellij/configurationStore/properties/LongStoredProperty.kt b/platform/projectModel-api/src/com/intellij/configurationStore/properties/LongStoredProperty.kt
new file mode 100644 (file)
index 0000000..e03d5f2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+ */
+package com.intellij.configurationStore.properties
+
+import com.intellij.openapi.components.BaseState
+import com.intellij.openapi.components.StoredProperty
+import com.intellij.openapi.components.StoredPropertyBase
+import kotlin.reflect.KProperty
+
+internal class LongStoredProperty(private val defaultValue: Long, private val valueNormalizer: ((value: Long) -> Long)?) : StoredPropertyBase<Long>() {
+  private var value = defaultValue
+
+  override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
+
+  override fun setValue(thisRef: BaseState, property: KProperty<*>, value: Long) {
+    val newValue = valueNormalizer?.invoke(value) ?: value
+    if (this.value != newValue) {
+      thisRef.ownModificationCount++
+      this.value = newValue
+    }
+  }
+
+  override fun setValue(other: StoredProperty): Boolean {
+    val newValue = (other as LongStoredProperty).value
+    if (newValue == value) {
+      return false
+    }
+
+    value = newValue
+    return true
+  }
+
+  override fun equals(other: Any?) = this === other || (other is LongStoredProperty && value == other.value)
+
+  override fun hashCode() = value.hashCode()
+
+  override fun toString() = "$name = $value${if (value == defaultValue) " (default)" else ""}"
+
+  override fun isEqualToDefault() = value == defaultValue
+}
\ No newline at end of file
similarity index 97%
rename from platform/projectModel-api/src/com/intellij/configurationStore/ObjectStoredProperty.kt
rename to platform/projectModel-api/src/com/intellij/configurationStore/properties/ObjectStoredProperty.kt
index e30cb0c0ea047ffc5ade6fcf2b141012314562fe..9f6ea1c8fbe7be79eec90fdf65d1f15b7d7e19cd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
  */
-package com.intellij.configurationStore
+package com.intellij.configurationStore.properties
 
 import com.intellij.openapi.components.BaseState
 import com.intellij.openapi.components.StoredProperty
similarity index 71%
rename from platform/projectModel-api/src/com/intellij/configurationStore/StringStoredProperty.kt
rename to platform/projectModel-api/src/com/intellij/configurationStore/properties/StringStoredProperty.kt
index 68f3e436a9876ddf1224431f1b6a82de39c17acf..1ff733d8128cf20918007008a506dd822ced7329 100644 (file)
@@ -1,15 +1,15 @@
 /*
  * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
  */
-package com.intellij.configurationStore
+package com.intellij.configurationStore.properties
 
 import com.intellij.openapi.components.BaseState
-import com.intellij.openapi.components.PrimitiveStoredPropertyBase
 import com.intellij.openapi.components.StoredProperty
+import com.intellij.openapi.components.StoredPropertyBase
 import kotlin.reflect.KProperty
 
-internal class NormalizedStringStoredProperty(override val defaultValue: String?) : PrimitiveStoredPropertyBase<String?>() {
-  override var value = defaultValue
+internal class NormalizedStringStoredProperty(private val defaultValue: String?) : StoredPropertyBase<String?>() {
+  private var value = defaultValue
 
   override operator fun getValue(thisRef: BaseState, property: KProperty<*>) = value
 
@@ -21,12 +21,6 @@ internal class NormalizedStringStoredProperty(override val defaultValue: String?
     }
   }
 
-  override fun equals(other: Any?) = this === other || (other is NormalizedStringStoredProperty && value == other.value)
-
-  override fun hashCode() = value?.hashCode() ?: 0
-
-  override fun toString() ="$name = ${if (isEqualToDefault()) "" else value ?: super.toString()}"
-
   override fun setValue(other: StoredProperty): Boolean {
     val newValue = (other as NormalizedStringStoredProperty).value
     if (newValue == value) {
@@ -36,4 +30,12 @@ internal class NormalizedStringStoredProperty(override val defaultValue: String?
     value = newValue
     return true
   }
+
+  override fun equals(other: Any?) = this === other || (other is NormalizedStringStoredProperty && value == other.value)
+
+  override fun hashCode() = value?.hashCode() ?: 0
+
+  override fun isEqualToDefault() = value == defaultValue
+
+  override fun toString() = "$name = $value${if (value == defaultValue) " (default)" else ""}"
 }
\ No newline at end of file
index b0913775a2bd76276a12360232ab3d40c65059da..13ecee88573d75d441e82665e729150e1db0125f 100644 (file)
@@ -3,7 +3,7 @@
  */
 package com.intellij.openapi.components
 
-import com.intellij.configurationStore.*
+import com.intellij.configurationStore.properties.*
 import com.intellij.openapi.diagnostic.logger
 import com.intellij.openapi.util.ModificationTracker
 import com.intellij.util.SmartList
@@ -115,13 +115,13 @@ abstract class BaseState : SerializationFilter, ModificationTracker {
   }
 
   fun property(defaultValue: Int = 0): StoredPropertyBase<Int> {
-    val result = IntStoredProperty(defaultValue)
+    val result = IntStoredProperty(defaultValue, null)
     properties.add(result)
     return result
   }
 
   fun property(defaultValue: Long = 0): StoredPropertyBase<Long> {
-    val result = LongStoredProperty(defaultValue)
+    val result = LongStoredProperty(defaultValue, null)
     properties.add(result)
     return result
   }
index 2e9c7d6d6dc9e0b37fa7fdb015734446134d5e5a..3070fb54fed0eb7394acc83677d07b16d3d1844e 100644 (file)
@@ -25,12 +25,4 @@ abstract class StoredPropertyBase<T> : ReadWriteProperty<BaseState, T>, StoredPr
     name = property.name
     return this
   }
-}
-
-internal abstract class PrimitiveStoredPropertyBase<T> : StoredPropertyBase<T>() {
-  abstract val value: Any?
-
-  protected abstract val defaultValue: Any?
-
-  override fun isEqualToDefault() = value == defaultValue
 }
\ No newline at end of file