From c66f4450d8df53f68ebbd27611e0fedffaf8e102 Mon Sep 17 00:00:00 2001 From: NitroG42 Date: Tue, 8 Mar 2016 17:03:01 +0100 Subject: [PATCH] Add new expressions to template Added two missing expressions for live-templates, the className(), and the functionName() --- Changelog.md | 3 +- .../macro/KotlinClassNameMacro.kt | 34 ++++++++++++++++++ .../macro/KotlinFunctionNameMacro.kt | 36 +++++++++++++++++++ idea/src/META-INF/plugin.xml | 2 ++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinClassNameMacro.kt create mode 100644 idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinFunctionNameMacro.kt diff --git a/Changelog.md b/Changelog.md index 840ea3375c4..30c19321d0a 100644 --- a/Changelog.md +++ b/Changelog.md @@ -20,4 +20,5 @@ - Add non-null assertions on call site for non-null parameters ### IDE -- Debugger can distinguish nested inline arguments \ No newline at end of file +- Debugger can distinguish nested inline arguments +- Add kotlinClassName() and kotlinFunctionName() macros for use in live templates diff --git a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinClassNameMacro.kt b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinClassNameMacro.kt new file mode 100644 index 00000000000..7b33100f6ec --- /dev/null +++ b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinClassNameMacro.kt @@ -0,0 +1,34 @@ +/* + * 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.idea.liveTemplates.macro + +import com.intellij.codeInsight.template.* +import org.jetbrains.kotlin.idea.liveTemplates.KotlinTemplateContextType +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf + +class KotlinClassNameMacro : Macro() { + override fun getName() = "kotlinClassName" + override fun getPresentableName() = "kotlinClassName()" + + override fun calculateResult(params: Array, context: ExpressionContext): Result? { + val element = context.psiElementAtStartOffset?.parentsWithSelf?.firstOrNull { it is KtClassOrObject && it.name != null } ?: return null + return TextResult((element as KtClassOrObject).name!!) + } + + override fun isAcceptableInContext(context: TemplateContextType?): Boolean = context is KotlinTemplateContextType +} \ No newline at end of file diff --git a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinFunctionNameMacro.kt b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinFunctionNameMacro.kt new file mode 100644 index 00000000000..ee654c4ac71 --- /dev/null +++ b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinFunctionNameMacro.kt @@ -0,0 +1,36 @@ +/* + * 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.idea.liveTemplates.macro + +import com.intellij.codeInsight.template.* +import org.jetbrains.kotlin.idea.liveTemplates.KotlinTemplateContextType +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType + +class KotlinFunctionNameMacro : Macro() { + override fun getName() = "kotlinFunctionName" + override fun getPresentableName() = "kotlinFunctionName()" + + override fun calculateResult(params: Array, context: ExpressionContext): Result? { + val element = context.psiElementAtStartOffset?.getNonStrictParentOfType() + val name = element?.name ?: return null + return TextResult(name) + } + + override fun isAcceptableInContext(context: TemplateContextType?) = context is KotlinTemplateContextType + +} \ No newline at end of file diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index c029b4c96de..a38a663433f 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -432,6 +432,8 @@ + +