Python stubs: remove 3.6.8 version and add 3.9.0
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / components / StoredPropertyBase.kt
1 // Copyright 2000-2019 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.
2 package com.intellij.openapi.components
3
4 import kotlin.properties.ReadWriteProperty
5 import kotlin.reflect.KProperty
6
7 interface StoredProperty<T> {
8   var name: String?
9
10   val jsonType: JsonSchemaType
11
12   fun getValue(thisRef: BaseState): T
13   fun setValue(thisRef: BaseState, value: T)
14
15   // true if changed
16   fun setValue(other: StoredProperty<T>): Boolean
17
18   fun isEqualToDefault(): Boolean
19
20   fun getModificationCount(): Long = 0
21 }
22
23 interface ScalarProperty {
24   // mod count not changed
25   fun parseAndSetValue(rawValue: String?)
26 }
27
28 // type must be exposed otherwise `provideDelegate` doesn't work
29 abstract class StoredPropertyBase<T> : StoredProperty<T>, ReadWriteProperty<BaseState, T> {
30   override var name: String? = null
31
32   operator fun provideDelegate(thisRef: Any, property: KProperty<*>): ReadWriteProperty<BaseState, T> {
33     name = property.name
34     return this
35   }
36
37   fun provideDelegate(thisRef: Any, propertyName: String): StoredProperty<T> {
38     name = propertyName
39     return this
40   }
41
42   override operator fun getValue(thisRef: BaseState, property: KProperty<*>): T = getValue(thisRef)
43   override operator fun setValue(thisRef: BaseState, property: KProperty<*>, value: T) = setValue(thisRef, value)
44 }
45
46 enum class JsonSchemaType(val jsonName: String) {
47   OBJECT("object"),
48   ARRAY("array"),
49
50   STRING("string"),
51
52   INTEGER("integer"),
53   NUMBER("number"),
54
55   BOOLEAN("boolean");
56
57   val isScalar: Boolean
58     get() = this != OBJECT && this !== ARRAY
59 }