diff --git a/idea/resources/liveTemplates/Kotlin.xml b/idea/resources/liveTemplates/Kotlin.xml
index 354d97384bc..7342df2f1cb 100644
--- a/idea/resources/liveTemplates/Kotlin.xml
+++ b/idea/resources/liveTemplates/Kotlin.xml
@@ -39,11 +39,11 @@
-
-
-
+
+
diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties
index 1018896c576..a9cdc7ea77e 100644
--- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties
+++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties
@@ -41,7 +41,7 @@ livetemplate.description.anonymous=Anonymous class
livetemplate.description.exfun=Extension function
livetemplate.description.exval=Extension read-only property
livetemplate.description.exvar=Extension read-write property
-macro.variable.of.type=kotlinVariableOfType(Type)
+macro.variable.of.type=kotlinVariable()
macro.iterable.variable=kotlinIterableVariable()
macro.suggest.variable.name=kotlinSuggestVariableName()
macro.fun.parameters=functionParameters()
diff --git a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetIterableVariableMacro.java b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetIterableVariableMacro.java
index 08fbb39afd9..5de7c2b0141 100644
--- a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetIterableVariableMacro.java
+++ b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/JetIterableVariableMacro.java
@@ -1,17 +1,26 @@
package org.jetbrains.jet.plugin.liveTemplates.macro;
-import com.intellij.codeInsight.template.Expression;
-import com.intellij.codeInsight.template.ExpressionContext;
-import com.intellij.codeInsight.template.Macro;
-import com.intellij.codeInsight.template.Result;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
+import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
+import org.jetbrains.jet.lang.resolve.DescriptorUtils;
+import org.jetbrains.jet.lang.types.JetType;
+import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.plugin.JetBundle;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Evgeny Gerashchenko
* @since 2/7/12
*/
-public class JetIterableVariableMacro extends Macro {
+public class JetIterableVariableMacro extends BaseJetVariableMacro {
+
+ private static final List ACCEPTED_FQ_NAMES = Arrays.asList(
+ "jet.Array", "java.lang.Iterable", ".java.lang.Iterable", "jet.Iterable");
+
@Override
public String getName() {
return "kotlinIterableVariable";
@@ -23,8 +32,18 @@ public class JetIterableVariableMacro extends Macro {
}
@Override
- public Result calculateResult(@NotNull Expression[] params, ExpressionContext context) {
- // TODO
- return null;
+ protected boolean isSuitable(@NotNull VariableDescriptor variableDescriptor) {
+ // TODO more sophisticated check needed
+
+ JetType outType = variableDescriptor.getOutType();
+ List types = new ArrayList(TypeUtils.getAllSupertypes(outType));
+ types.add(outType);
+ for (JetType type : types) {
+ ClassifierDescriptor declarationDescriptor = type.getConstructor().getDeclarationDescriptor();
+ if (ACCEPTED_FQ_NAMES.contains(DescriptorUtils.getFQName(declarationDescriptor))) {
+ return true;
+ }
+ }
+ return false;
}
}