diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/JetNameValidatorImpl.java b/idea/src/org/jetbrains/jet/plugin/refactoring/JetNameValidatorImpl.java index f84fa3bd5c8..11f937e9459 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/JetNameValidatorImpl.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/JetNameValidatorImpl.java @@ -18,9 +18,9 @@ package org.jetbrains.jet.plugin.refactoring; import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiElement; +import kotlin.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.psi.JetElement; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetVisitorVoid; @@ -33,17 +33,13 @@ import java.util.Collection; public class JetNameValidatorImpl extends JetNameValidator { private final PsiElement myContainer; private final PsiElement myAnchor; - private final boolean myOnlyVariables; + private final Function1 myFilter; - public JetNameValidatorImpl(PsiElement container, PsiElement anchor, boolean onlyVariables) { + public JetNameValidatorImpl(PsiElement container, PsiElement anchor, Function1 filter) { super(container.getProject()); myContainer = container; myAnchor = anchor; - myOnlyVariables = onlyVariables; - } - - public JetNameValidatorImpl(PsiElement container, PsiElement anchor) { - this(container, anchor, true); + myFilter = filter; } @Override @@ -85,7 +81,7 @@ public class JetNameValidatorImpl extends JetNameValidator { public void visitExpression(@NotNull JetExpression expression) { Collection variants = TipsManager.getVariantsNoReceiver(expression, bindingContext); for (DeclarationDescriptor variant : variants) { - if (variant.getName().asString().equals(name) && (!myOnlyVariables || variant instanceof VariableDescriptor)) { + if (variant.getName().asString().equals(name) && myFilter.invoke(variant)) { result.set(false); return; } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt index 95a0d44abf4..bd699f4c177 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/extractFunction/extractFunctionUtils.kt @@ -89,6 +89,7 @@ import org.jetbrains.jet.lang.types.ErrorUtils import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import org.jetbrains.jet.lang.diagnostics.Errors +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor private val DEFAULT_FUNCTION_NAME = "myFun" private val DEFAULT_RETURN_TYPE = KotlinBuiltIns.getInstance().getUnitType() @@ -234,7 +235,11 @@ private fun ExtractionData.inferParametersInfo( replacementMap: MutableMap, parameters: MutableSet ): MaybeError? { - val varNameValidator = JetNameValidatorImpl(commonParent.getParentByType(javaClass()), originalElements.first, true) + val varNameValidator = JetNameValidatorImpl( + commonParent.getParentByType(javaClass()), + originalElements.first, + { it is VariableDescriptor } + ) val modifiedVarDescriptors = localInstructions.getModifiedVarDescriptors(bindingContext) val extractedDescriptorToParameter = HashMap() @@ -448,7 +453,11 @@ fun ExtractionData.performAnalysis(): Maybe { val outOfScopeError = checkDeclarationsMovingOutOfScope(controlFlow) if (outOfScopeError != null) return outOfScopeError - val functionNameValidator = JetNameValidatorImpl(nextSibling.getParent(), nextSibling, false) + val functionNameValidator = JetNameValidatorImpl( + nextSibling.getParent(), + nextSibling, + {it is FunctionDescriptor || it is ClassDescriptor} + ) val functionName = JetNameSuggester.suggestNames(controlFlow.returnType, functionNameValidator, DEFAULT_FUNCTION_NAME).first() val receiverCandidates = parameters.filterTo(HashSet()) { it.receiverCandidate } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java b/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java index 2dad47189aa..dd5ccded192 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java @@ -31,9 +31,12 @@ import com.intellij.psi.PsiWhiteSpace; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.introduce.inplace.OccurrencesChooser; +import kotlin.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.di.InjectorForMacros; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext; @@ -187,10 +190,17 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { PsiElement commonParent = PsiTreeUtil.findCommonParent(allReplaces); PsiElement commonContainer = getContainer(commonParent); - JetNameValidatorImpl validator = new JetNameValidatorImpl(commonContainer, - calculateAnchor(commonParent, - commonContainer, - allReplaces)); + JetNameValidatorImpl validator = new JetNameValidatorImpl( + commonContainer, + calculateAnchor(commonParent, commonContainer, allReplaces), + new Function1() { + @Override + public Boolean invoke(DeclarationDescriptor descriptor) { + return descriptor instanceof VariableDescriptor; + } + } + + ); String[] suggestedNames = JetNameSuggester.suggestNames(expression, validator, "value"); final LinkedHashSet suggestedNamesSet = new LinkedHashSet(); Collections.addAll(suggestedNamesSet, suggestedNames);