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"
|
||||
interface="org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangeListener"
|
||||
area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint qualifiedName="org.jetbrains.kotlin.additionalExtractableAnalyser"
|
||||
interface="org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.AdditionalExtractableAnalyser"/>
|
||||
</extensionPoints>
|
||||
|
||||
<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.DeclarationDescriptor
|
||||
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.refactoring.KotlinRefactoringBundle
|
||||
import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.OutputValue.*
|
||||
@@ -357,7 +358,8 @@ data class ExtractableCodeDescriptor(
|
||||
val replacementMap: MultiMap<KtSimpleNameExpression, Replacement>,
|
||||
val controlFlow: ControlFlow,
|
||||
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 duplicates: List<DuplicateInfo> by lazy { findDuplicates() }
|
||||
@@ -393,7 +395,8 @@ fun ExtractableCodeDescriptor.copy(
|
||||
newReplacementMap,
|
||||
controlFlow.copy(oldToNewParameters),
|
||||
returnType ?: this.returnType,
|
||||
modifiers
|
||||
modifiers,
|
||||
annotations
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -708,6 +708,9 @@ fun ExtractionData.performAnalysis(): AnalysisResult {
|
||||
descriptor = descriptor.copy(modifiers = listOf(KtTokens.SUSPEND_KEYWORD))
|
||||
}
|
||||
|
||||
for (analyser in AdditionalExtractableAnalyser.EP_NAME.extensions) {
|
||||
descriptor = analyser.amendDescriptor(descriptor)
|
||||
}
|
||||
|
||||
return AnalysisResult(
|
||||
descriptor,
|
||||
|
||||
+7
-1
@@ -61,10 +61,16 @@ private fun buildSignature(config: ExtractionGeneratorConfiguration, renderer: D
|
||||
fun TypeParameter.isReified() = originalDeclaration.hasModifier(KtTokens.REIFIED_KEYWORD)
|
||||
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 } +
|
||||
listOfNotNull(if (shouldBeInline) KtTokens.INLINE_KEYWORD.value else null)
|
||||
val modifiers = if (visibility.isNotEmpty()) listOf(visibility) + extraModifiers else extraModifiers
|
||||
modifier(modifiers.joinToString(separator = " "))
|
||||
modifier(annotations + modifiers.joinToString(separator = " "))
|
||||
|
||||
typeParams(
|
||||
config.descriptor.typeParameters.map {
|
||||
|
||||
Reference in New Issue
Block a user