fix checking context + tests
authorEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>
Mon, 1 Mar 2010 15:23:33 +0000 (18:23 +0300)
committerEugene Kudelevsky <Eugene.Kudelevsky@jetbrains.com>
Mon, 1 Mar 2010 15:23:33 +0000 (18:23 +0300)
platform/lang-impl/src/com/intellij/codeInsight/template/CustomTemplateCallback.java
platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java

index d1eab1c720bbfe5ec1df51fb561efc29a0289729..d159f70d2b174d1ba06c4c2651e4439d0999dbe9 100644 (file)
@@ -30,9 +30,7 @@ import com.intellij.util.containers.HashSet;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author Eugene.Kudelevsky
@@ -82,14 +80,23 @@ public class CustomTemplateCallback {
   @Nullable
   public TemplateImpl findApplicableTemplate(@NotNull String key) {
     List<TemplateImpl> templates = getMatchingTemplates(key);
-    templates = TemplateManagerImpl.filterApplicableCandidates(myFile, myStartOffset, templates);
+    templates = filterApplicableCandidates(templates);
     return templates.size() > 0 ? templates.get(0) : null;
   }
 
+  private List<TemplateImpl> filterApplicableCandidates(Collection<TemplateImpl> candidates) {
+    List<TemplateImpl> result = new ArrayList<TemplateImpl>();
+    for (TemplateImpl candidate : candidates) {
+      if (TemplateManagerImpl.isApplicable(myFile, myStartOffset, candidate)) {
+        result.add(candidate);
+      }
+    }
+    return result;
+  }
 
   public boolean templateContainsVars(@NotNull String key, String... varNames) {
     List<TemplateImpl> templates = getMatchingTemplates(key);
-    templates = TemplateManagerImpl.filterApplicableCandidates(myFile, myStartOffset, templates);
+    templates = filterApplicableCandidates(templates);
     if (templates.size() == 0) {
       return false;
     }
@@ -114,9 +121,9 @@ public class CustomTemplateCallback {
   public boolean startTemplate(@NotNull String key,
                                Map<String, String> predefinedVarValues,
                                @Nullable TemplateInvokationListener listener) {
-    int caretOffset = myEditor.getCaretModel().getOffset();
+    //int caretOffset = myEditor.getCaretModel().getOffset();
     List<TemplateImpl> templates = getMatchingTemplates(key);
-    templates = TemplateManagerImpl.filterApplicableCandidates(myFile, caretOffset, templates);
+    templates = filterApplicableCandidates(templates);
     if (templates.size() > 0) {
       TemplateImpl template = templates.get(0);
       return startTemplate(template, predefinedVarValues, listener);
index b8b4a5bf8f24aae46237c2536cf19384cf343064..c6b6107098243298d55d27911ff05d6aeeeeec9b 100644 (file)
@@ -417,7 +417,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
     return templateState != null ? templateState.getTemplate() : null;
   }
 
-  static boolean isApplicable(PsiFile file, int offset, TemplateImpl template) {
+  public static boolean isApplicable(PsiFile file, int offset, TemplateImpl template) {
     TemplateManager instance = getInstance(file.getProject());
     TemplateContext context = template.getTemplateContext();
     if (context.isEnabled(instance.getContextType(file, offset))) {