Fix ISE when caret is on parameter of function type

EA-68570
This commit is contained in:
Alexander Udalov
2015-05-28 19:11:57 +03:00
parent dff3e17d88
commit bf09906f35
3 changed files with 12 additions and 4 deletions
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.references.JetReference
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.idea.util.ShortenReferences
@@ -74,10 +73,11 @@ fun isAutoCreatedItUsage(expression: JetSimpleNameExpression): Boolean {
}
fun JetCallableDeclaration.canRemoveTypeSpecificationByVisibility(): Boolean {
val descriptor = resolveToDescriptor()
val isOverride = getModifierList()?.hasModifier(JetTokens.OVERRIDE_KEYWORD) ?: false
if (!isOverride && (descriptor as? DeclarationDescriptorWithVisibility)?.getVisibility()?.isPublicAPI() ?: false) return false
return true
if (isOverride) return true
val descriptor = analyze()[BindingContext.DECLARATION_TO_DESCRIPTOR, this]
return descriptor !is DeclarationDescriptorWithVisibility || !descriptor.getVisibility().isPublicAPI()
}
// returns assignment which replaces initializer
@@ -0,0 +1,2 @@
// IS_APPLICABLE: false
fun foo(x: (<caret>String) -> Unit) {}
@@ -5671,6 +5671,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/removeExplicitType"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
}
@TestMetadata("notOnParameterOfFunctionType.kt")
public void testNotOnParameterOfFunctionType() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/notOnParameterOfFunctionType.kt");
doTest(fileName);
}
@TestMetadata("notOnPublic.kt")
public void testNotOnPublic() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/removeExplicitType/notOnPublic.kt");