@@ -29,31 +29,23 @@ import com.intellij.refactoring.HelpID
29
29
import com.intellij.refactoring.RefactoringBundle
30
30
import com.intellij.refactoring.util.CommonRefactoringUtil
31
31
import com.intellij.util.containers.MultiMap
32
- import org.jetbrains.kotlin.descriptors.PropertyDescriptor
33
- import org.jetbrains.kotlin.descriptors.VariableDescriptor
32
+ import org.jetbrains.kotlin.descriptors.ValueDescriptor
34
33
import org.jetbrains.kotlin.idea.KotlinLanguage
35
- import org.jetbrains.kotlin.idea.analysis.analyzeInContext
36
- import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
37
34
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
38
35
import org.jetbrains.kotlin.idea.codeInliner.CodeToInline
39
- import org.jetbrains.kotlin.idea.codeInliner.CodeToInlineBuilder
40
36
import org.jetbrains.kotlin.idea.codeInliner.PropertyUsageReplacementStrategy
41
- import org.jetbrains.kotlin.idea.core.copied
42
37
import org.jetbrains.kotlin.idea.project.builtIns
43
38
import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively
44
39
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
45
40
import org.jetbrains.kotlin.idea.references.ReferenceAccess
46
41
import org.jetbrains.kotlin.idea.references.readWriteAccess
47
- import org.jetbrains.kotlin.idea.util.getResolutionScope
48
42
import org.jetbrains.kotlin.lexer.KtTokens
49
43
import org.jetbrains.kotlin.psi.KtBinaryExpression
50
44
import org.jetbrains.kotlin.psi.KtElement
51
45
import org.jetbrains.kotlin.psi.KtExpression
52
46
import org.jetbrains.kotlin.psi.KtProperty
53
47
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
54
48
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
55
- import org.jetbrains.kotlin.resolve.BindingContext
56
- import org.jetbrains.kotlin.types.TypeUtils
57
49
58
50
class KotlinInlineValHandler : InlineActionHandler () {
59
51
@@ -93,16 +85,21 @@ class KotlinInlineValHandler : InlineActionHandler() {
93
85
val readReplacement: CodeToInline ?
94
86
val writeReplacement: CodeToInline ?
95
87
val assignmentToDelete: KtBinaryExpression ?
88
+ val descriptor = declaration.resolveToDescriptor() as ValueDescriptor
89
+ val isTypeExplicit = declaration.typeReference != null
96
90
if (getter == null && setter == null ) {
97
91
val initialization = extractInitialization(declaration, referenceExpressions, project, editor) ? : return
98
- readReplacement = buildCodeToInline(declaration, initialization.value)
92
+ readReplacement = buildCodeToInline(declaration, descriptor.type, isTypeExplicit, initialization.value, false , editor) ? : return
99
93
writeReplacement = null
100
94
assignmentToDelete = initialization.assignment
101
95
}
102
96
else {
103
- val descriptor = declaration.resolveToDescriptor() as PropertyDescriptor
104
- readReplacement = getter?.let { buildCodeToInline(getter, descriptor.type, editor) ? : return }
105
- writeReplacement = setter?.let { buildCodeToInline(setter, setter.builtIns.unitType, editor) ? : return }
97
+ readReplacement = getter?.let {
98
+ buildCodeToInline(getter, descriptor.type, isTypeExplicit, getter.bodyExpression!! , getter.hasBlockBody(), editor) ? : return
99
+ }
100
+ writeReplacement = setter?.let {
101
+ buildCodeToInline(setter, setter.builtIns.unitType, true , setter.bodyExpression!! , setter.hasBlockBody(), editor) ? : return
102
+ }
106
103
assignmentToDelete = null
107
104
}
108
105
@@ -175,24 +172,6 @@ class KotlinInlineValHandler : InlineActionHandler() {
175
172
}
176
173
}
177
174
178
- private fun buildCodeToInline (declaration : KtProperty , initializer : KtExpression ): CodeToInline {
179
- val descriptor = declaration.resolveToDescriptor() as VariableDescriptor
180
- val expectedType = if (declaration.typeReference != null )
181
- descriptor.returnType ? : TypeUtils .NO_EXPECTED_TYPE
182
- else
183
- TypeUtils .NO_EXPECTED_TYPE
184
-
185
- val initializerCopy = initializer.copied()
186
- fun analyzeInitializerCopy (): BindingContext {
187
- return initializerCopy.analyzeInContext(initializer.getResolutionScope(),
188
- contextExpression = initializer,
189
- expectedType = expectedType)
190
- }
191
-
192
- val codeToInlineBuilder = CodeToInlineBuilder (descriptor, declaration.getResolutionFacade())
193
- return codeToInlineBuilder.prepareCodeToInline(initializerCopy, emptyList(), ::analyzeInitializerCopy)
194
- }
195
-
196
175
private fun performRefactoring (
197
176
declaration : KtProperty ,
198
177
readReplacement : CodeToInline ? ,
0 commit comments