diff --git a/libraries/ReadMe.md b/libraries/ReadMe.md index c74443858b1..63b3ceb9ff2 100644 --- a/libraries/ReadMe.md +++ b/libraries/ReadMe.md @@ -46,20 +46,7 @@ If your maven build is failing with Out-Of-Memory errors, set JVM options for ma ## Kotlin serialization Gradle Plugin -To build it, first **build all the above** and then, `cd` to `tools/kotlin-serialization` -and run `mvn install` - -So, all build sequence will look like: - -```bash -# Assuming you are in the kotlin/libraries folder -./gradlew build install -mvn install -cd tools/gradle-tools -./gradlew clean install -cd ../kotlin-serialization -mvn install -``` +First, build all the above. Then run `./gradlew :kotlin-serialization:install` to install it to your local maven repository. When it is installed in local maven repository, you can add it as a dependency in buildscript classpath and apply it: @@ -73,7 +60,7 @@ buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1-SNAPSHOT" - classpath "org.jetbrains.kotlinx:kotlinx-serialization:1.1-SNAPSHOT" + classpath "org.jetbrains.kotlinx:kotlin-serialization:0.1" } } @@ -81,3 +68,5 @@ apply plugin: 'kotlin' apply plugin: 'kotlin-serialization' ``` + +You can also obtain it from bintray: https://bintray.com/kotlin/kotlinx/kotlinx.serialization \ No newline at end of file diff --git a/libraries/tools/kotlin-serialization/build.gradle b/libraries/tools/kotlin-serialization/build.gradle new file mode 100644 index 00000000000..5b9b1def0fc --- /dev/null +++ b/libraries/tools/kotlin-serialization/build.gradle @@ -0,0 +1,68 @@ +plugins { + id "com.jfrog.bintray" version "1.7.3" +} + +group = 'org.jetbrains.kotlinx' +version = '0.1' + +apply plugin: 'kotlin' + +configureJvmProject(project) + +compileJava { + sourceCompatibility = 1.8 + targetCompatibility = 1.8 + options.fork = false +} + +repositories { + mavenLocal() + jcenter() + maven { url 'http://repository.jetbrains.com/utils' } +} + +dependencies { + compileOnly project(':kotlin-gradle-plugin-api') + + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version" + + compileOnly 'org.jetbrains.kotlin:gradle-api:1.6' +} + +def originalSrc = "$kotlin_root/plugins/kotlin-serialization/kotlin-serialization-compiler/src" +def targetSrc = file("$buildDir/kotlin-serialization-target-src") + +task preprocessSources(type: Copy) { + from originalSrc + into targetSrc + filter { it.replaceAll('(? - - - 4.0.0 - - 3.0.4 - ${basedir}/../../../plugins/kotlin-serialization/kotlin-serialization-compiler/src - ${basedir}/src/main/kotlin - ${basedir}/src/main/resources - ${basedir}/target/src/main/kotlin - ${basedir}/target/resource - - - - org.jetbrains.kotlin - kotlin-project - 1.1-SNAPSHOT - ../../pom.xml - - - org.jetbrains.kotlinx - kotlinx-serialization - jar - - Serialization plugin for Gradle - - - - jetbrains-utils - http://repository.jetbrains.com/utils - - - - - - org.jetbrains.kotlin - kotlin-stdlib - ${project.version} - - - org.jetbrains.kotlin - kotlin-compiler-embeddable - ${project.version} - - - org.jetbrains.kotlin - kotlin-gradle-plugin-api - ${project.version} - provided - - - org.jetbrains.kotlin - gradle-api - 2.2 - provided - - - - - ${serialization.target-src} - - - ${serialization.target-resources} - - - - - - maven-resources-plugin - 3.0.0 - - - copy-sources - validate - - copy-resources - - - ${serialization.target-src} - - - ${serialization.src} - - - ${serialization.gradle.plugin.src} - - - - - - copy-resources - validate - - copy-resources - - - ${serialization.target-resources}/META-INF - - - ${serialization.src}/META-INF - - - ${serialization.gradle.plugin.resources}/META-INF - - - - - - - - com.google.code.maven-replacer-plugin - replacer - 1.5.3 - - - generate-sources - - replace - - - - - - ${serialization.target-src}/** - - - - (?<!\.)com\.intellij - org.jetbrains.kotlin.com.intellij - - - - - - kotlin-maven-plugin - org.jetbrains.kotlin - ${project.version} - - - - compile - compile - - compile - - - - ${serialization.target-src} - - - - - - - - diff --git a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt index 1a8bf46916f..ff204f061b3 100644 --- a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt +++ b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt @@ -38,7 +38,7 @@ class SerializationGradleSubplugin : Plugin { class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin { companion object { val SERIALIZATION_GROUP_NAME = "org.jetbrains.kotlinx" - val SERIALIZATION_ARTIFACT_NAME = "kotlinx-serialization" + val SERIALIZATION_ARTIFACT_NAME = "kotlin-serialization" } override fun isApplicable(project: Project, task: AbstractCompile) = SerializationGradleSubplugin.isEnabled(project) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle b/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle index 2cdb3a7e0db..cf5d58c3379 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/build.gradle @@ -1,6 +1,6 @@ buildscript { ext { - kotlin_root = "$rootDir/../../../" + kotlin_root = file("$rootDir/../../..") distDir = file("$kotlin_root/dist") bootstrapCompilerFile = file("$distDir/kotlin-compiler-for-maven.jar") kotlin_version = "1.1.3" @@ -57,7 +57,9 @@ jar { apply plugin: 'org.jetbrains.intellij' intellij { - localPath "$kotlin_root/ideaSDK" + if (findProperty("noIdeaSDK") == null) { + localPath "$kotlin_root/ideaSDK" + } pluginName 'Kotlin-serialization' downloadSources false } \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt index 18291a2417c..8bf1930e1e4 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializableJsTranslator.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.js.translate.general.Translation import org.jetbrains.kotlin.js.translate.utils.JsAstUtils import org.jetbrains.kotlin.js.translate.utils.TranslationUtils import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPureClassOrObject import org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializableCodegen import org.jetbrains.kotlinx.serialization.compiler.backend.common.anonymousInitializers @@ -83,7 +84,7 @@ class SerializableJsTranslator(val declaration: KtPureClassOrObject, //transient initializers and init blocks val serialDescs = properties.serializableProperties.map { it.descriptor } - (initMap - serialDescs).forEach { desc, expr -> + (initMap - serialDescs).forEach { (desc, expr) -> val e = requireNotNull(expr) {"transient without an initializer"} val initExpr = Translation.translateAsExpression(e, context) +TranslationUtils.assignmentToBackingField(context, desc, initExpr).makeStmt() diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt index 974f8650bf2..01ba9362d15 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.js.translate.declaration.DefaultPropertyTranslator import org.jetbrains.kotlin.js.translate.general.Translation import org.jetbrains.kotlin.js.translate.utils.JsAstUtils import org.jetbrains.kotlin.js.translate.utils.TranslationUtils -import org.jetbrains.kotlin.js.translate.utils.TranslationUtils.shouldBoxReturnValue import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtPureClassOrObject import org.jetbrains.kotlin.resolve.descriptorUtil.classId @@ -260,10 +259,10 @@ class SerializerJsTranslator(declaration: KtPureClassOrObject, ).makeStmt() } // char unboxing crutch - if (KotlinBuiltIns.isCharOrNullableChar(property.type) && !shouldBoxReturnValue(property.descriptor.getter)) { + if (KotlinBuiltIns.isCharOrNullableChar(property.type)) { +JsAstUtils.assignment( localProps[i], - Translation.unboxIfNeeded(context, localProps[i], true) + TranslationUtils.coerce(context, localProps[i], TranslationUtils.getReturnTypeForCoercion(property.descriptor.getter!!)) ).makeStmt() } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializableCodegenImpl.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializableCodegenImpl.kt index b1e6cf5dd2d..45d861a3bd0 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializableCodegenImpl.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializableCodegenImpl.kt @@ -150,9 +150,9 @@ class SerializableCodegenImpl( val serializedProps = properties.serializableProperties.map { it.descriptor } (descToProps - serializedProps) - .forEach { _, prop -> classCodegen.initializeProperty(exprCodegen, prop) } + .forEach { (_, prop) -> classCodegen.initializeProperty(exprCodegen, prop) } (paramsToProps - serializedProps) - .forEach { t, u -> exprCodegen.genInitParam(t, u) } + .forEach { (t, u) -> exprCodegen.genInitParam(t, u) } // init blocks // todo: proper order with other initializers