From 99c232df8468fa108c47586880a38ff5c7f24706 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 29 Mar 2016 21:46:54 +0300 Subject: [PATCH] Checking that no quickfix reference KotlinType --- .../kotlin/idea/highlighter/KotlinPsiChecker.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt index ca40ae721b6..94def0afba2 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinPsiChecker.kt @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics +import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.singletonOrEmptyList import java.lang.reflect.* import java.util.* @@ -156,9 +157,16 @@ private object NoDeclarationDescriptorsChecker { private fun checkType(type: Type, field: Field) { when (type) { is Class<*> -> { - if (DeclarationDescriptor::class.java.isAssignableFrom(type)) { - LOG.error("QuickFix class ${field.declaringClass.name} contains field ${field.name} that holds DeclarationDescriptor") + if (DeclarationDescriptor::class.java.isAssignableFrom(type) || KotlinType::class.java.isAssignableFrom(type)) { + LOG.error("QuickFix class ${field.declaringClass.name} contains field ${field.name} that holds ${type.simpleName}. " + + "This leads to holding too much memory through this quick-fix instance. " + + "Possible solution can be wrapping it using KotlinIntentionActionFactoryWithDelegate.") } + + if (IntentionAction::class.java.isAssignableFrom(type)) { + check(type) + } + } is GenericArrayType -> checkType(type.genericComponentType, field)