Adds AdditionalExtractableAnalyser EP.
Adds annotations to ExtractableCodeDescriptor. Adds functionality of adding annotations to KtPsiFactory.CallableBuilder
This commit is contained in:
@@ -67,6 +67,9 @@
|
|||||||
<extensionPoint qualifiedName="org.jetbrains.kotlin.scripting.idea.listener"
|
<extensionPoint qualifiedName="org.jetbrains.kotlin.scripting.idea.listener"
|
||||||
interface="org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangeListener"
|
interface="org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangeListener"
|
||||||
area="IDEA_PROJECT"/>
|
area="IDEA_PROJECT"/>
|
||||||
|
|
||||||
|
<extensionPoint qualifiedName="org.jetbrains.kotlin.additionalExtractableAnalyser"
|
||||||
|
interface="org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AdditionalExtractableAnalyser"/>
|
||||||
</extensionPoints>
|
</extensionPoints>
|
||||||
|
|
||||||
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
<extensions defaultExtensionNs="org.jetbrains.kotlin">
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.idea.refactoring.introduce.extractionEngine
|
||||||
|
|
||||||
|
import com.intellij.openapi.extensions.ExtensionPointName
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows to modify ExtractableCodeDescriptor within [ExtractionData.performAnalysis].
|
||||||
|
*/
|
||||||
|
interface AdditionalExtractableAnalyser {
|
||||||
|
|
||||||
|
fun amendDescriptor(descriptor: ExtractableCodeDescriptor): ExtractableCodeDescriptor
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val EP_NAME = ExtensionPointName.create<AdditionalExtractableAnalyser>("org.jetbrains.kotlin.additionalExtractableAnalyser")
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
-2
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
import org.jetbrains.kotlin.idea.core.replaced
|
import org.jetbrains.kotlin.idea.core.replaced
|
||||||
import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle
|
import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle
|
||||||
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.OutputValue.*
|
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.OutputValue.*
|
||||||
@@ -357,7 +358,8 @@ data class ExtractableCodeDescriptor(
|
|||||||
val replacementMap: MultiMap<KtSimpleNameExpression, Replacement>,
|
val replacementMap: MultiMap<KtSimpleNameExpression, Replacement>,
|
||||||
val controlFlow: ControlFlow,
|
val controlFlow: ControlFlow,
|
||||||
val returnType: KotlinType,
|
val returnType: KotlinType,
|
||||||
val modifiers: List<KtKeywordToken> = emptyList()
|
val modifiers: List<KtKeywordToken> = emptyList(),
|
||||||
|
val annotations: List<AnnotationDescriptor> = emptyList()
|
||||||
) {
|
) {
|
||||||
val name: String get() = suggestedNames.firstOrNull() ?: ""
|
val name: String get() = suggestedNames.firstOrNull() ?: ""
|
||||||
val duplicates: List<DuplicateInfo> by lazy { findDuplicates() }
|
val duplicates: List<DuplicateInfo> by lazy { findDuplicates() }
|
||||||
@@ -393,7 +395,8 @@ fun ExtractableCodeDescriptor.copy(
|
|||||||
newReplacementMap,
|
newReplacementMap,
|
||||||
controlFlow.copy(oldToNewParameters),
|
controlFlow.copy(oldToNewParameters),
|
||||||
returnType ?: this.returnType,
|
returnType ?: this.returnType,
|
||||||
modifiers
|
modifiers,
|
||||||
|
annotations
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
@@ -708,6 +708,9 @@ fun ExtractionData.performAnalysis(): AnalysisResult {
|
|||||||
descriptor = descriptor.copy(modifiers = listOf(KtTokens.SUSPEND_KEYWORD))
|
descriptor = descriptor.copy(modifiers = listOf(KtTokens.SUSPEND_KEYWORD))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (analyser in AdditionalExtractableAnalyser.EP_NAME.extensions) {
|
||||||
|
descriptor = analyser.amendDescriptor(descriptor)
|
||||||
|
}
|
||||||
|
|
||||||
return AnalysisResult(
|
return AnalysisResult(
|
||||||
descriptor,
|
descriptor,
|
||||||
|
|||||||
+7
-1
@@ -61,10 +61,16 @@ private fun buildSignature(config: ExtractionGeneratorConfiguration, renderer: D
|
|||||||
fun TypeParameter.isReified() = originalDeclaration.hasModifier(KtTokens.REIFIED_KEYWORD)
|
fun TypeParameter.isReified() = originalDeclaration.hasModifier(KtTokens.REIFIED_KEYWORD)
|
||||||
val shouldBeInline = config.descriptor.typeParameters.any { it.isReified() }
|
val shouldBeInline = config.descriptor.typeParameters.any { it.isReified() }
|
||||||
|
|
||||||
|
|
||||||
|
val annotations = if (config.descriptor.annotations.isEmpty()) {
|
||||||
|
""
|
||||||
|
} else {
|
||||||
|
config.descriptor.annotations.joinToString(separator = "\n", postfix = "\n") { renderer.renderAnnotation(it) }
|
||||||
|
}
|
||||||
val extraModifiers = config.descriptor.modifiers.map { it.value } +
|
val extraModifiers = config.descriptor.modifiers.map { it.value } +
|
||||||
listOfNotNull(if (shouldBeInline) KtTokens.INLINE_KEYWORD.value else null)
|
listOfNotNull(if (shouldBeInline) KtTokens.INLINE_KEYWORD.value else null)
|
||||||
val modifiers = if (visibility.isNotEmpty()) listOf(visibility) + extraModifiers else extraModifiers
|
val modifiers = if (visibility.isNotEmpty()) listOf(visibility) + extraModifiers else extraModifiers
|
||||||
modifier(modifiers.joinToString(separator = " "))
|
modifier(annotations + modifiers.joinToString(separator = " "))
|
||||||
|
|
||||||
typeParams(
|
typeParams(
|
||||||
config.descriptor.typeParameters.map {
|
config.descriptor.typeParameters.map {
|
||||||
|
|||||||
Reference in New Issue
Block a user