diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/refactoring/fqName/fqNameUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/refactoring/fqName/fqNameUtil.kt index e43e65e39f4..0504689f9cc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/refactoring/fqName/fqNameUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/refactoring/fqName/fqNameUtil.kt @@ -33,7 +33,7 @@ public fun PsiElement.getKotlinFqName(): FqName? { return when (element) { is PsiPackage -> FqName(element.getQualifiedName()) is PsiClass -> element.getQualifiedName()?.let { FqName(it) } - is PsiMember -> (element : PsiMember).getName()?.let { name -> + is PsiMember -> (element as PsiMember).getName()?.let { name -> val prefix = element.getContainingClass()?.getQualifiedName() FqName(if (prefix != null) "$prefix.$name" else name) } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/JetElementDescriptionProvider.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/JetElementDescriptionProvider.kt index ce6c508f071..ba654f7e340 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/JetElementDescriptionProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/JetElementDescriptionProvider.kt @@ -57,7 +57,7 @@ public class JetElementDescriptionProvider : ElementDescriptionProvider { if (targetElement !is PsiNamedElement || targetElement !is JetElement) return null - val name = (targetElement : PsiNamedElement).getName() + val name = (targetElement as PsiNamedElement).getName() return when(location) { is UsageViewLongNameLocation -> diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt index ac56edb0fc6..088fd55de45 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/createClassUtils.kt @@ -52,7 +52,7 @@ internal fun getTargetParentByQualifier( isQualified: Boolean, qualifierDescriptor: DeclarationDescriptor?): PsiElement? { val project = file.getProject() - val targetParent = when { + val targetParent: PsiElement = when { !isQualified -> file qualifierDescriptor is ClassDescriptor -> @@ -61,7 +61,7 @@ internal fun getTargetParentByQualifier( if (qualifierDescriptor.fqName != file.getPackageFqName()) { JavaPsiFacade.getInstance(project).findPackage(qualifierDescriptor.fqName.asString()) } - else file : PsiElement + else file as PsiElement else -> null } ?: return null @@ -112,11 +112,12 @@ internal fun JetSimpleNameExpression.getCreatePackageFixIfApplicable(targetParen val name = getReferencedName() if (!name.checkPackageName()) return null - val basePackage: PsiPackage = when (targetParent) { + val basePackage: PsiPackage? = when (targetParent) { is JetFile -> JavaPsiFacade.getInstance(targetParent.getProject()).findPackage(targetParent.getPackageFqName().asString()) - is PsiPackage -> targetParent : PsiPackage + is PsiPackage -> targetParent else -> null - } ?: return null + } + if (basePackage == null) return null val baseName = basePackage.getQualifiedName() val fullName = if (baseName.isNotEmpty()) "$baseName.$name" else name diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index dd95ee27ee4..49bd17d47b2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -29,6 +29,7 @@ import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer import com.intellij.refactoring.listeners.RefactoringEventListener import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade @@ -222,12 +223,7 @@ public open class KotlinIntroduceParameterHandler( } val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, targetParent] - val functionDescriptor: FunctionDescriptor = - when (descriptor) { - is FunctionDescriptor -> descriptor : FunctionDescriptor - is ClassDescriptor -> descriptor.getUnsubstitutedPrimaryConstructor() - else -> null - } ?: throw AssertionError("Unexpected element type: ${targetParent.getElementTextWithContext()}") + val functionDescriptor = descriptor.toFunctionDescriptor(targetParent) val replacementType = expressionType.approximateWithResolvableType(targetParent.getResolutionScope(context, targetParent.getResolutionFacade()), false) val body = when (targetParent) { @@ -354,6 +350,19 @@ public open class KotlinIntroduceParameterHandler( } } +private fun DeclarationDescriptor?.toFunctionDescriptor(targetParent: JetNamedDeclaration): FunctionDescriptor { + val functionDescriptor: FunctionDescriptor? = + when (this) { + is FunctionDescriptor -> this + is ClassDescriptor -> this.getUnsubstitutedPrimaryConstructor() + else -> null + } + if (functionDescriptor == null) { + throw AssertionError("Unexpected element type: ${targetParent.getElementTextWithContext()}") + } + return functionDescriptor +} + private fun findInternalUsagesOfParametersAndReceiver( targetParent: JetNamedDeclaration, targetDescriptor: FunctionDescriptor @@ -413,12 +422,7 @@ public open class KotlinIntroduceLambdaParameterHandler( ): KotlinIntroduceParameterDialog { val callable = lambdaExtractionDescriptor.extractionData.targetSibling as JetNamedDeclaration val descriptor = callable.resolveToDescriptor() - val callableDescriptor: FunctionDescriptor = - when (descriptor) { - is FunctionDescriptor -> descriptor : FunctionDescriptor - is ClassDescriptor -> descriptor.getUnsubstitutedPrimaryConstructor() - else -> null - } ?: throw AssertionError("Unexpected element type: ${callable.getElementTextWithContext()}") + val callableDescriptor = descriptor.toFunctionDescriptor(callable) val originalRange = lambdaExtractionDescriptor.extractionData.originalRange val introduceParameterDescriptor = IntroduceParameterDescriptor( originalRange = originalRange, diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt index 017415aa1f6..23b6072b29a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/jetRefactoringUtil.kt @@ -462,7 +462,7 @@ private fun copyTypeParameters( to: T, inserter: (T, PsiTypeParameterList) -> Unit ) where T : PsiTypeParameterListOwner, T : PsiNameIdentifierOwner { - val factory = PsiElementFactory.SERVICE.getInstance((from : PsiElement).getProject()) + val factory = PsiElementFactory.SERVICE.getInstance((from as PsiElement).getProject()) val templateTypeParams = from.getTypeParameterList()?.getTypeParameters() ?: PsiTypeParameter.EMPTY_ARRAY if (templateTypeParams.isNotEmpty()) { inserter(to, factory.createTypeParameterList()) diff --git a/idea/testData/quickfix/suppress/forStatement/call.kt.after b/idea/testData/quickfix/suppress/forStatement/call.kt.after index f5f98f27f3c..31128b4afd3 100644 --- a/idea/testData/quickfix/suppress/forStatement/call.kt.after +++ b/idea/testData/quickfix/suppress/forStatement/call.kt.after @@ -2,7 +2,7 @@ fun foo() { @Suppress("REDUNDANT_NULLABLE") - call("": String??) + call("" as String??) } fun call(s: String?) {} \ No newline at end of file diff --git a/idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeFunctionParameterType5.kt b/idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeFunctionParameterType5.kt deleted file mode 100644 index e2144fe8564..00000000000 --- a/idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeFunctionParameterType5.kt +++ /dev/null @@ -1,5 +0,0 @@ -// "class org.jetbrains.kotlin.idea.quickfix.ChangeParameterTypeFix" "false" -// ERROR: Type mismatch.
Required:kotlin.Int
Found:kotlin.String
-fun foo(y: Int = 0, z: (Int) -> String = {""}) { - foo("": Int) -} diff --git a/idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt b/idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt deleted file mode 100644 index c6ed8007279..00000000000 --- a/idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt +++ /dev/null @@ -1,3 +0,0 @@ -// "class org.jetbrains.kotlin.idea.quickfix.ChangeFunctionReturnTypeFix" "false" -// ERROR: Type mismatch.
Required:kotlin.Int
Found:kotlin.String
-fun foo(): Int = if (true) "": Int else 4 diff --git a/idea/testData/refactoring/inline/addParenthesis/Colon.kt b/idea/testData/refactoring/inline/addParenthesis/Colon.kt deleted file mode 100644 index fd3daac86bf..00000000000 --- a/idea/testData/refactoring/inline/addParenthesis/Colon.kt +++ /dev/null @@ -1,4 +0,0 @@ -fun f() { - val v = 2..3 - println(v: IntRange) -} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/Colon.kt.after b/idea/testData/refactoring/inline/addParenthesis/Colon.kt.after deleted file mode 100644 index eb3821e4c52..00000000000 --- a/idea/testData/refactoring/inline/addParenthesis/Colon.kt.after +++ /dev/null @@ -1,3 +0,0 @@ -fun f() { - println((2..3): IntRange) -} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index de4a97bcee4..1ea06fd4f8a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6413,12 +6413,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } - @TestMetadata("changeFunctionParameterType5.kt") - public void testChangeFunctionParameterType5() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeFunctionParameterType5.kt"); - doTest(fileName); - } - @TestMetadata("changeParameterTypeLongNameRuntime.kt") public void testChangeParameterTypeLongNameRuntime() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/parameterTypeMismatch/changeParameterTypeLongNameRuntime.kt"); @@ -6500,12 +6494,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } - @TestMetadata("returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt") - public void testReturnedExpresionCantEvaluateToExpresionThatTypeMismatch() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpresionCantEvaluateToExpresionThatTypeMismatch.kt"); - doTest(fileName); - } - @TestMetadata("returnedExpressionTypeMismatchFunctionParameterType.kt") public void testReturnedExpressionTypeMismatchFunctionParameterType() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/typeMismatchOnReturnedExpression/returnedExpressionTypeMismatchFunctionParameterType.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java index bccd28a9c35..dffdba889ee 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java @@ -169,12 +169,6 @@ public class InlineTestGenerated extends AbstractInlineTest { doTest(fileName); } - @TestMetadata("Colon.kt") - public void testColon() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/Colon.kt"); - doTest(fileName); - } - @TestMetadata("ColonDontAdd.kt") public void testColonDontAdd() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/ColonDontAdd.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt index 9a0c0aeadae..dd848fa209d 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/DelegationTranslator.kt @@ -116,13 +116,14 @@ public class DelegationTranslator( val delegateRefName = context().getScopeForDescriptor(getterDescriptor).declareName(delegateName) val delegateRef = JsNameRef(delegateRefName, JsLiteral.THIS) - val returnExpression: JsExpression = if (DescriptorUtils.isExtension(descriptor)) { // TODO remove explicit type specification after resolving KT-5569 + val returnExpression: JsExpression = if (DescriptorUtils.isExtension(descriptor)) { val getterName = context().getNameForDescriptor(getterDescriptor) val receiver = Namer.getReceiverParameterName() JsInvocation(JsNameRef(getterName, delegateRef), JsNameRef(receiver)) } else { - JsNameRef(propertyName, delegateRef) + @Suppress("USELESS_CAST") + (JsNameRef(propertyName, delegateRef) as JsExpression) // TODO remove explicit type specification after resolving KT-5569 } val jsFunction = simpleReturnFunction(context().getScopeForDescriptor(getterDescriptor.getContainingDeclaration()), returnExpression)