From 41dcc9ad4d2a28ea812ae9c55bc2860fa6da10af Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Tue, 10 Apr 2018 13:47:35 +0300 Subject: [PATCH] jps: minor: refine kotlin.jps.model package (cherry picked from commit 2a31e78) --- .../jps/build/AbstractIncrementalJpsTest.kt | 3 - .../kotlin/jps/build/KotlinJpsBuildTest.kt | 2 +- .../build/KotlinJpsBuildTestIncremental.kt | 2 +- .../jetbrains/kotlin/jps/build/JpsUtils.java | 3 +- .../kotlin/jps/build/KotlinBuilder.kt | 2 +- .../BaseJpsCompilerSettingsSerializer.kt | 44 ------- .../JpsKotlinFacetConfigurationSerializer.kt | 47 -------- .../model/JpsKotlinFacetModuleExtension.kt | 43 ------- .../Kotlin2JsCompilerArgumentsSerializer.kt | 31 ----- .../Kotlin2JvmCompilerArgumentsSerializer.kt | 31 ----- ...KotlinCommonCompilerArgumentsSerializer.kt | 34 ------ .../model/KotlinCompilerSettingsSerializer.kt | 31 ----- .../model/KotlinModelSerializerService.java | 43 ------- .../kotlin/jps/{ => model}/ModuleSettings.kt | 37 ++++-- .../kotlin/jps/{ => model}/ProjectSettings.kt | 2 +- .../jetbrains/kotlin/jps/model/Serializer.kt | 108 ++++++++++++++++++ .../KotlinCommonModuleBuildTarget.kt | 4 +- .../platforms/KotlinJsModuleBuildTarget.kt | 5 +- .../platforms/KotlinJvmModuleBuildTarget.kt | 4 +- .../platforms/KotlinModuleBuilderTarget.kt | 10 +- .../kotlin/jps/platforms/TargetPlatform.kt | 2 +- 21 files changed, 156 insertions(+), 332 deletions(-) delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetConfigurationSerializer.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetModuleExtension.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt delete mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinModelSerializerService.java rename jps-plugin/src/org/jetbrains/kotlin/jps/{ => model}/ModuleSettings.kt (57%) rename jps-plugin/src/org/jetbrains/kotlin/jps/{ => model}/ProjectSettings.kt (98%) create mode 100644 jps-plugin/src/org/jetbrains/kotlin/jps/model/Serializer.kt diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt index e0aee4d9a99..a0d96b7afe1 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -40,7 +40,6 @@ import org.jetbrains.jps.cmdline.ProjectDescriptor import org.jetbrains.jps.incremental.* import org.jetbrains.jps.incremental.messages.BuildMessage import org.jetbrains.jps.model.JpsModuleRootModificationUtil -import org.jetbrains.jps.model.java.JpsJavaDependencyScope import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.config.IncrementalCompilation @@ -51,8 +50,6 @@ import org.jetbrains.kotlin.incremental.testingUtils.* import org.jetbrains.kotlin.jps.incremental.getKotlinCache import org.jetbrains.kotlin.jps.incremental.withLookupStorage import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension -import org.jetbrains.kotlin.jps.model.kotlinFacetExtension -import org.jetbrains.kotlin.jps.platforms.clearKotlinModuleBuildTargetDataBindings import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.keysToMap diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index a0bfa595162..4327b2f7b35 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -60,7 +60,7 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion.TEST_IS_PRE_RELEASE_SYS import org.jetbrains.kotlin.incremental.CacheVersion import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.withIC -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings +import org.jetbrains.kotlin.jps.model.JpsKotlinCompilerSettings import org.jetbrains.kotlin.jps.build.KotlinJpsBuildTest.LibraryDependency.* import org.jetbrains.kotlin.jps.platforms.KotlinJsModuleBuildTarget import org.jetbrains.kotlin.jps.platforms.clearKotlinModuleBuildTargetDataBindings diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt index 92e4dec5ee2..78979a269b5 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt @@ -22,7 +22,7 @@ import org.jetbrains.jps.builders.JpsBuildTestCase import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings +import org.jetbrains.kotlin.jps.model.JpsKotlinCompilerSettings import kotlin.reflect.KMutableProperty1 import org.jetbrains.kotlin.daemon.common.COMPILE_DAEMON_CUSTOM_RUN_FILES_PATH_FOR_TESTS import org.jetbrains.kotlin.daemon.common.COMPILE_DAEMON_ENABLED_PROPERTY diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java b/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java index a1c3d0c0551..b19a9117d30 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsUtils.java @@ -27,8 +27,7 @@ import org.jetbrains.jps.model.library.JpsLibraryRoot; import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.kotlin.config.TargetPlatformKind; -import org.jetbrains.kotlin.jps.ModuleSettingsKt; -import org.jetbrains.kotlin.jps.ProjectSettingsKt; +import org.jetbrains.kotlin.jps.model.ModuleSettingsKt; import org.jetbrains.kotlin.utils.LibraryUtils; import java.util.Map; diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 3f3e5481c85..08290ab1142 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -54,7 +54,7 @@ import org.jetbrains.kotlin.config.CompilerRunnerConstants.INTERNAL_ERROR_PREFIX import org.jetbrains.kotlin.daemon.common.isDaemonEnabled import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.jps.kotlinCompilerArguments +import org.jetbrains.kotlin.jps.model.kotlinCompilerArguments import org.jetbrains.kotlin.jps.incremental.* import org.jetbrains.kotlin.jps.platforms.KotlinJsModuleBuildTarget import org.jetbrains.kotlin.jps.platforms.kotlinData diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt deleted file mode 100644 index e262a0edc92..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import com.intellij.util.xmlb.XmlSerializer -import org.jdom.Element -import org.jetbrains.jps.model.JpsProject -import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer -import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.config.SettingConstants - -abstract class BaseJpsCompilerSettingsSerializer( - componentName: String, - private val settingsFactory: () -> T -) : JpsProjectExtensionSerializer(SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE, componentName) { - protected abstract fun onLoad(project: JpsProject, settings: T) - - override fun loadExtension(project: JpsProject, componentTag: Element) { - val settings = settingsFactory().apply { - if (this is CommonCompilerArguments) { - freeArgs = ArrayList() - } - } - XmlSerializer.deserializeInto(settings, componentTag) - onLoad(project, settings) - } - - override fun saveExtension(project: JpsProject, componentTag: Element) { - } -} \ No newline at end of file diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetConfigurationSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetConfigurationSerializer.kt deleted file mode 100644 index f2d05e9f9a8..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetConfigurationSerializer.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import org.jdom.Element -import org.jetbrains.jps.model.JpsElement -import org.jetbrains.jps.model.module.JpsModule -import org.jetbrains.jps.model.serialization.facet.JpsFacetConfigurationSerializer -import org.jetbrains.kotlin.config.deserializeFacetSettings -import org.jetbrains.kotlin.config.serializeFacetSettings - -object JpsKotlinFacetConfigurationSerializer : JpsFacetConfigurationSerializer( - JpsKotlinFacetModuleExtension.KIND, - JpsKotlinFacetModuleExtension.FACET_TYPE_ID, - JpsKotlinFacetModuleExtension.FACET_NAME -) { - override fun loadExtension( - facetConfigurationElement: Element, - name: String, - parent: JpsElement?, - module: JpsModule - ): JpsKotlinFacetModuleExtension { - return JpsKotlinFacetModuleExtension(deserializeFacetSettings(facetConfigurationElement)) - } - - override fun saveExtension( - extension: JpsKotlinFacetModuleExtension?, - facetConfigurationTag: Element, - module: JpsModule - ) { - (extension as JpsKotlinFacetModuleExtension).settings.serializeFacetSettings(facetConfigurationTag) - } -} \ No newline at end of file diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetModuleExtension.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetModuleExtension.kt deleted file mode 100644 index 0add54661f4..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/JpsKotlinFacetModuleExtension.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import org.jetbrains.jps.model.ex.JpsElementBase -import org.jetbrains.jps.model.ex.JpsElementChildRoleBase -import org.jetbrains.jps.model.module.JpsModule -import org.jetbrains.kotlin.config.KotlinFacetSettings - -class JpsKotlinFacetModuleExtension(settings: KotlinFacetSettings) : JpsElementBase() { - var settings = settings - private set - - companion object { - val KIND = JpsElementChildRoleBase.create("kotlin facet extension") - // These must be changed in sync with KotlinFacetType.TYPE_ID and KotlinFacetType.NAME - val FACET_TYPE_ID = "kotlin-language" - val FACET_NAME = "Kotlin" - } - - override fun createCopy() = JpsKotlinFacetModuleExtension(settings) - - override fun applyChanges(modified: JpsKotlinFacetModuleExtension) { - this.settings = modified.settings - } -} - -val JpsModule.kotlinFacetExtension: JpsKotlinFacetModuleExtension? - get() = container.getChild(JpsKotlinFacetModuleExtension.KIND) \ No newline at end of file diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt deleted file mode 100644 index 3e99dfb09f5..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import org.jetbrains.jps.model.JpsProject -import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -import org.jetbrains.kotlin.jps.k2JsCompilerArguments - -internal class Kotlin2JsCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( - KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION, ::K2JSCompilerArguments -) { - override fun onLoad(project: JpsProject, settings: K2JSCompilerArguments) { - project.k2JsCompilerArguments = settings - } -} diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt deleted file mode 100644 index 52c73a904df..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import org.jetbrains.jps.model.JpsProject -import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -import org.jetbrains.kotlin.jps.k2JvmCompilerArguments - -internal class Kotlin2JvmCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( - KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION, ::K2JVMCompilerArguments -) { - override fun onLoad(project: JpsProject, settings: K2JVMCompilerArguments) { - project.k2JvmCompilerArguments = settings - } -} diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt deleted file mode 100644 index f50dfaf98b3..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import com.intellij.util.text.VersionComparatorUtil -import org.jetbrains.jps.model.JpsProject -import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.cli.common.arguments.setApiVersionToLanguageVersionIfNeeded -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -import org.jetbrains.kotlin.jps.kotlinCommonCompilerArguments - -internal class KotlinCommonCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( - KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION, CommonCompilerArguments::DummyImpl -) { - override fun onLoad(project: JpsProject, settings: CommonCompilerArguments.DummyImpl) { - settings.setApiVersionToLanguageVersionIfNeeded() - project.kotlinCommonCompilerArguments = settings - } -} diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt deleted file mode 100644 index 5dd48230116..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model - -import org.jetbrains.jps.model.JpsProject -import org.jetbrains.kotlin.config.CompilerSettings -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_SECTION -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -import org.jetbrains.kotlin.jps.kotlinCompilerSettings - -internal class KotlinCompilerSettingsSerializer : BaseJpsCompilerSettingsSerializer( - KOTLIN_COMPILER_SETTINGS_SECTION, ::CompilerSettings -) { - override fun onLoad(project: JpsProject, settings: CompilerSettings) { - project.kotlinCompilerSettings = settings - } -} diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinModelSerializerService.java b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinModelSerializerService.java deleted file mode 100644 index 1e12e3e6db9..00000000000 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinModelSerializerService.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.jps.model; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension; -import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer; -import org.jetbrains.jps.model.serialization.facet.JpsFacetConfigurationSerializer; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class KotlinModelSerializerService extends JpsModelSerializerExtension { - @NotNull - @Override - public List getProjectExtensionSerializers() { - return Arrays.asList(new KotlinCommonCompilerArgumentsSerializer(), - new Kotlin2JvmCompilerArgumentsSerializer(), - new Kotlin2JsCompilerArgumentsSerializer(), - new KotlinCompilerSettingsSerializer()); - } - - @NotNull - @Override - public List> getFacetConfigurationSerializers() { - return Collections.singletonList(JpsKotlinFacetConfigurationSerializer.INSTANCE); - } -} diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/ModuleSettings.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt similarity index 57% rename from jps-plugin/src/org/jetbrains/kotlin/jps/ModuleSettings.kt rename to jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt index d85c4b8af3e..7d7faf3d48f 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/ModuleSettings.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt @@ -3,27 +3,32 @@ * that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.jps +package org.jetbrains.kotlin.jps.model +import org.jetbrains.jps.model.ex.JpsElementBase +import org.jetbrains.jps.model.ex.JpsElementChildRoleBase import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.config.CompilerSettings +import org.jetbrains.kotlin.config.KotlinFacetSettings import org.jetbrains.kotlin.config.TargetPlatformKind -import org.jetbrains.kotlin.jps.model.kotlinFacetExtension + +val JpsModule.kotlinFacet: JpsKotlinFacetModuleExtension? + get() = container.getChild(JpsKotlinFacetModuleExtension.KIND) val JpsModule.targetPlatform: TargetPlatformKind<*>? - get() = kotlinFacetExtension?.settings?.targetPlatformKind + get() = kotlinFacet?.settings?.targetPlatformKind val JpsModule.productionOutputFilePath: String? get() { - val facetSettings = kotlinFacetExtension?.settings ?: return null + val facetSettings = kotlinFacet?.settings ?: return null if (facetSettings.useProjectSettings) return null return facetSettings.productionOutputPath } val JpsModule.testOutputFilePath: String? get() { - val facetSettings = kotlinFacetExtension?.settings ?: return null + val facetSettings = kotlinFacet?.settings ?: return null if (facetSettings.useProjectSettings) return null return facetSettings.testOutputPath } @@ -31,7 +36,7 @@ val JpsModule.testOutputFilePath: String? val JpsModule.kotlinCompilerSettings: CompilerSettings get() { val defaultSettings = copyBean(project.kotlinCompilerSettings) - val facetSettings = kotlinFacetExtension?.settings ?: return defaultSettings + val facetSettings = kotlinFacet?.settings ?: return defaultSettings if (facetSettings.useProjectSettings) return defaultSettings return facetSettings.compilerSettings ?: defaultSettings } @@ -52,7 +57,25 @@ private inline fun JpsModule.getCompilerAr val projectSettings = project.kotlinCompilerSettingsContainer[T::class.java] val projectSettingsCopy = copyBean(projectSettings) - val facetSettings = kotlinFacetExtension?.settings ?: return projectSettingsCopy + val facetSettings = kotlinFacet?.settings ?: return projectSettingsCopy if (facetSettings.useProjectSettings) return projectSettingsCopy return facetSettings.compilerArguments as? T ?: projectSettingsCopy +} + +class JpsKotlinFacetModuleExtension(settings: KotlinFacetSettings) : JpsElementBase() { + var settings = settings + private set + + companion object { + val KIND = JpsElementChildRoleBase.create("kotlin facet extension") + // These must be changed in sync with KotlinFacetType.TYPE_ID and KotlinFacetType.NAME + val FACET_TYPE_ID = "kotlin-language" + val FACET_NAME = "Kotlin" + } + + override fun createCopy() = JpsKotlinFacetModuleExtension(settings) + + override fun applyChanges(modified: JpsKotlinFacetModuleExtension) { + this.settings = modified.settings + } } \ No newline at end of file diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/ProjectSettings.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/ProjectSettings.kt similarity index 98% rename from jps-plugin/src/org/jetbrains/kotlin/jps/ProjectSettings.kt rename to jps-plugin/src/org/jetbrains/kotlin/jps/model/ProjectSettings.kt index ebfe8eab250..a82891a6aac 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/ProjectSettings.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/ProjectSettings.kt @@ -3,7 +3,7 @@ * that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.jps +package org.jetbrains.kotlin.jps.model import org.jetbrains.jps.model.JpsProject import org.jetbrains.jps.model.ex.JpsElementBase diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Serializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Serializer.kt new file mode 100644 index 00000000000..77e9bec53bf --- /dev/null +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Serializer.kt @@ -0,0 +1,108 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.jps.model + +import com.intellij.util.xmlb.XmlSerializer +import org.jdom.Element +import org.jetbrains.jps.model.JpsElement +import org.jetbrains.jps.model.JpsProject +import org.jetbrains.jps.model.module.JpsModule +import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension +import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer +import org.jetbrains.jps.model.serialization.facet.JpsFacetConfigurationSerializer +import org.jetbrains.kotlin.cli.common.arguments.* +import org.jetbrains.kotlin.config.CompilerSettings +import org.jetbrains.kotlin.config.SettingConstants +import org.jetbrains.kotlin.config.deserializeFacetSettings +import org.jetbrains.kotlin.config.serializeFacetSettings +import java.util.* + +class KotlinModelSerializerService : JpsModelSerializerExtension() { + override fun getProjectExtensionSerializers() = listOf( + KotlinCommonCompilerArgumentsSerializer(), + Kotlin2JvmCompilerArgumentsSerializer(), + Kotlin2JsCompilerArgumentsSerializer(), + KotlinCompilerSettingsSerializer() + ) + + override fun getFacetConfigurationSerializers() = listOf(JpsKotlinFacetConfigurationSerializer) +} + +object JpsKotlinFacetConfigurationSerializer : JpsFacetConfigurationSerializer( + JpsKotlinFacetModuleExtension.KIND, + JpsKotlinFacetModuleExtension.FACET_TYPE_ID, + JpsKotlinFacetModuleExtension.FACET_NAME +) { + override fun loadExtension( + facetConfigurationElement: Element, + name: String, + parent: JpsElement?, + module: JpsModule + ): JpsKotlinFacetModuleExtension { + return JpsKotlinFacetModuleExtension(deserializeFacetSettings(facetConfigurationElement)) + } + + override fun saveExtension( + extension: JpsKotlinFacetModuleExtension?, + facetConfigurationTag: Element, + module: JpsModule + ) { + (extension as JpsKotlinFacetModuleExtension).settings.serializeFacetSettings(facetConfigurationTag) + } +} + +abstract class BaseJpsCompilerSettingsSerializer( + componentName: String, + private val settingsFactory: () -> T +) : JpsProjectExtensionSerializer(SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE, componentName) { + protected abstract fun onLoad(project: JpsProject, settings: T) + + override fun loadExtension(project: JpsProject, componentTag: Element) { + val settings = settingsFactory().apply { + if (this is CommonCompilerArguments) { + freeArgs = ArrayList() + } + } + XmlSerializer.deserializeInto(settings, componentTag) + onLoad(project, settings) + } + + override fun saveExtension(project: JpsProject, componentTag: Element) { + } +} + +internal class KotlinCompilerSettingsSerializer : BaseJpsCompilerSettingsSerializer( + SettingConstants.KOTLIN_COMPILER_SETTINGS_SECTION, ::CompilerSettings +) { + override fun onLoad(project: JpsProject, settings: CompilerSettings) { + project.kotlinCompilerSettings = settings + } +} + +internal class KotlinCommonCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( + SettingConstants.KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION, CommonCompilerArguments::DummyImpl +) { + override fun onLoad(project: JpsProject, settings: CommonCompilerArguments.DummyImpl) { + settings.setApiVersionToLanguageVersionIfNeeded() + project.kotlinCommonCompilerArguments = settings + } +} + +internal class Kotlin2JsCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( + SettingConstants.KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION, ::K2JSCompilerArguments +) { + override fun onLoad(project: JpsProject, settings: K2JSCompilerArguments) { + project.k2JsCompilerArguments = settings + } +} + +internal class Kotlin2JvmCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( + SettingConstants.KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION, ::K2JVMCompilerArguments +) { + override fun onLoad(project: JpsProject, settings: K2JVMCompilerArguments) { + project.k2JvmCompilerArguments = settings + } +} \ No newline at end of file diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt index 5bd1f84de02..7af99cc71db 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt @@ -14,8 +14,8 @@ import org.jetbrains.jps.incremental.ModuleBuildTarget import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner -import org.jetbrains.kotlin.jps.k2MetadataCompilerArguments -import org.jetbrains.kotlin.jps.kotlinCompilerSettings +import org.jetbrains.kotlin.jps.model.k2MetadataCompilerArguments +import org.jetbrains.kotlin.jps.model.kotlinCompilerSettings import java.io.File class KotlinCommonModuleBuildTarget(jpsModuleBuildTarget: ModuleBuildTarget) : diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt index e8b31d4ad0b..3038bba089b 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt @@ -17,7 +17,10 @@ import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner -import org.jetbrains.kotlin.jps.* +import org.jetbrains.kotlin.jps.model.k2JsCompilerArguments +import org.jetbrains.kotlin.jps.model.kotlinCompilerSettings +import org.jetbrains.kotlin.jps.model.productionOutputFilePath +import org.jetbrains.kotlin.jps.model.testOutputFilePath import org.jetbrains.kotlin.utils.JsLibraryUtils import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils.JS_EXT import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils.META_JS_SUFFIX diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt index 2774f24dc38..3528964c1da 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt @@ -25,8 +25,8 @@ import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.jps.build.* -import org.jetbrains.kotlin.jps.k2JvmCompilerArguments -import org.jetbrains.kotlin.jps.kotlinCompilerSettings +import org.jetbrains.kotlin.jps.model.k2JvmCompilerArguments +import org.jetbrains.kotlin.jps.model.kotlinCompilerSettings import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder import java.io.File import java.io.IOException diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuilderTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuilderTarget.kt index 77bd36c7eb7..e90b80e9f3f 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuilderTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuilderTarget.kt @@ -21,12 +21,10 @@ import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment -import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings import org.jetbrains.kotlin.jps.build.KotlinSourceFileCollector -import org.jetbrains.kotlin.jps.kotlinCompilerSettings -import org.jetbrains.kotlin.jps.model.kotlinFacetExtension -import org.jetbrains.kotlin.jps.productionOutputFilePath -import org.jetbrains.kotlin.jps.testOutputFilePath +import org.jetbrains.kotlin.jps.model.kotlinFacet +import org.jetbrains.kotlin.jps.model.productionOutputFilePath +import org.jetbrains.kotlin.jps.model.testOutputFilePath import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.utils.addIfNotNull import java.io.File @@ -88,7 +86,7 @@ abstract class KotlinModuleBuilderTarget(val jpsModuleBuildTarget: ModuleBuildTa val expectedBy by lazy(::findExpectedBy) private fun findExpectedBy(): List { - val kotlinFacetExtension = module.kotlinFacetExtension + val kotlinFacetExtension = module.kotlinFacet val implementedModuleNames = kotlinFacetExtension?.settings?.implementedModuleNames ?: return listOf() if (implementedModuleNames.isEmpty()) return listOf() diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/TargetPlatform.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/TargetPlatform.kt index 8ed20ebf977..abfa780eb53 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/TargetPlatform.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/TargetPlatform.kt @@ -13,7 +13,7 @@ import org.jetbrains.jps.model.library.JpsOrderRootType import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.config.TargetPlatformKind -import org.jetbrains.kotlin.jps.targetPlatform +import org.jetbrains.kotlin.jps.model.targetPlatform import org.jetbrains.kotlin.utils.LibraryUtils import java.util.concurrent.ConcurrentHashMap