From e978c42e521d9775b38433c3836f11df0108906f Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 26 Dec 2017 02:10:24 +0900 Subject: [PATCH] SamWithReceiver: Add Maven/Gradle importers for SamWithReceiver --- ...mWithReceiverGradleProjectImportHandler.kt | 39 ++++++++++++++ ...amWithReceiverMavenProjectImportHandler.kt | 54 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverGradleProjectImportHandler.kt create mode 100644 plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverMavenProjectImportHandler.kt diff --git a/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverGradleProjectImportHandler.kt b/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverGradleProjectImportHandler.kt new file mode 100644 index 00000000000..5967d493853 --- /dev/null +++ b/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverGradleProjectImportHandler.kt @@ -0,0 +1,39 @@ +/* + * 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.samWithReceiver.ide + +import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverCommandLineProcessor +import org.jetbrains.kotlin.annotation.plugin.ide.AbstractGradleImportHandler +import org.jetbrains.kotlin.utils.PathUtil + +class SamWithReceiverGradleProjectImportHandler : AbstractGradleImportHandler() { + override val compilerPluginId = SamWithReceiverCommandLineProcessor.PLUGIN_ID + override val pluginName = "sam-with-receiver" + override val annotationOptionName = SamWithReceiverCommandLineProcessor.ANNOTATION_OPTION.name + override val dataStorageTaskName = "samWithReceiverDataStorageTask" + override val pluginJarFileFromIdea = PathUtil.kotlinPathsForIdeaPlugin.samWithReceiverJarPath + + override fun getAnnotationsForPreset(presetName: String): List { + for ((name, annotations) in SamWithReceiverCommandLineProcessor.SUPPORTED_PRESETS.entries) { + if (presetName == name) { + return annotations + } + } + + return super.getAnnotationsForPreset(presetName) + } +} diff --git a/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverMavenProjectImportHandler.kt b/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverMavenProjectImportHandler.kt new file mode 100644 index 00000000000..915712085d2 --- /dev/null +++ b/plugins/sam-with-receiver/sam-with-receiver-cli/src/SamWithReceiverMavenProjectImportHandler.kt @@ -0,0 +1,54 @@ +/* + * 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.samWithReceiver.ide + +import org.jetbrains.kotlin.samWithReceiver.SamWithReceiverCommandLineProcessor +import org.jetbrains.kotlin.annotation.plugin.ide.AbstractMavenImportHandler +import org.jetbrains.kotlin.annotation.plugin.ide.AnnotationBasedCompilerPluginSetup.PluginOption +import org.jetbrains.kotlin.utils.PathUtil + +class SamWithReceiverMavenProjectImportHandler : AbstractMavenImportHandler() { + private companion object { + val ANNOTATION_PARAMETER_PREFIX = "sam-with-receiver:${SamWithReceiverCommandLineProcessor.ANNOTATION_OPTION.name}=" + } + + override val compilerPluginId = SamWithReceiverCommandLineProcessor.PLUGIN_ID + override val pluginName = "sam-with-receiver" + override val mavenPluginArtifactName = "kotlin-maven-sam-with-receiver" + override val pluginJarFileFromIdea = PathUtil.kotlinPathsForIdeaPlugin.samWithReceiverJarPath + + override fun getOptions(enabledCompilerPlugins: List, compilerPluginOptions: List): List? { + if ("sam-with-receiver" !in enabledCompilerPlugins) { + return null + } + + val annotations = mutableListOf() + + for ((presetName, presetAnnotations) in SamWithReceiverCommandLineProcessor.SUPPORTED_PRESETS) { + if (presetName in enabledCompilerPlugins) { + annotations.addAll(presetAnnotations) + } + } + + annotations.addAll(compilerPluginOptions.mapNotNull { text -> + if (!text.startsWith(ANNOTATION_PARAMETER_PREFIX)) return@mapNotNull null + text.substring(ANNOTATION_PARAMETER_PREFIX.length) + }) + + return annotations.map { PluginOption(SamWithReceiverCommandLineProcessor.ANNOTATION_OPTION.name, it) } + } +}