Effects: add (de)serialization of contracts in metadata

- Introduce new definitions in descriptors.proto
- Add new corresponding values in Flags.java
- Introduce ContractSerializer and ContractDeserializer, responsible for
for conversion ContractDescription <-> ProtoBuf.Contract
- Add dependency of 'serialization' module on 'resolution' so that it
could see contracts model.

Note that here we do a lot of seemingly unnecessary hoops, which in fact
necessary to respect existing module system (in particular, to be able
to extract ContractDescription declarations from 'descriptors' module to
make them invisible from reflection)

==========
Effect System introduction: 8/18
This commit is contained in:
Dmitry Savvinov
2017-10-03 15:02:36 +03:00
parent 2c0ef592e6
commit 175d23155e
24 changed files with 8601 additions and 77 deletions
@@ -17,12 +17,13 @@
package org.jetbrains.kotlin.contracts.description
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.serialization.deserialization.ContractProvider
/**
* Essentially, this is a composition of two fields: value of type 'ContractDescription' and
* 'computation', which guarantees to initialize this field.
*/
class LazyContractProvider(private val computation: () -> Any?) {
class LazyContractProvider(private val computation: () -> Any?) : ContractProvider {
@Volatile
private var isComputed: Boolean = false