From 9b31195732d0ea95ae7cc202a6c65089e8144c27 Mon Sep 17 00:00:00 2001 From: Jack Zhou Date: Mon, 8 Apr 2013 12:53:06 -0400 Subject: [PATCH] Create from usage: Added supertype enumeration. --- .../quickfix/CreateMethodFromUsageFix.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/CreateMethodFromUsageFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/CreateMethodFromUsageFix.java index f11f6550c23..f16ea3c8894 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/CreateMethodFromUsageFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/CreateMethodFromUsageFix.java @@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; +import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.codeInsight.DescriptorToDeclarationUtil; @@ -98,8 +99,17 @@ public class CreateMethodFromUsageFix extends CreateFromUsageFixBase { assert cachedTypeCandidates != null; return cachedTypeCandidates; } - return cachedTypeCandidates = isType() ? new JetType[] {type} : guessTypeForExpression(expressionOfType, context); - // TODO: supertypes/subtypes of all possible types? + List types = new ArrayList(); + if (isType()) { + types.add(type); + types.addAll(TypeUtils.getAllSupertypes(type)); + } else { + for (JetType type : guessTypeForExpression(expressionOfType, context)) { + types.add(type); + types.addAll(TypeUtils.getAllSupertypes(type)); + } + } + return cachedTypeCandidates = types.toArray(new JetType[types.size()]); } @NotNull @@ -510,7 +520,7 @@ public class CreateMethodFromUsageFix extends CreateFromUsageFixBase { variables.add(new Variable(TYPE_PARAMETER_LIST_VARIABLE_NAME, expression, expression, false, true)); // run the template - TemplateManager.getInstance(project).startTemplate(editor, template, new TemplateEditingAdapter() { // TODO: too slow, speed it up + TemplateManager.getInstance(project).startTemplate(editor, template, new TemplateEditingAdapter() { @Override public void templateFinished(Template template, boolean brokenOff) { // TODO: file templates