Merge remote-tracking branch 'origin/master'
[idea/community.git] / platform / lang-impl / src / com / intellij / codeInsight / editorActions / TypedHandler.java
index 2c230e536f7c556fcdcdb210bd4ea351dc247416..423b95dffc7fcf1a651e8312c8b51294a03cabf2 100644 (file)
@@ -25,10 +25,7 @@ import com.intellij.codeInsight.highlighting.BraceMatchingUtil;
 import com.intellij.codeInsight.highlighting.NontrivialBraceMatcher;
 import com.intellij.codeInsight.template.impl.editorActions.TypedActionHandlerBase;
 import com.intellij.injected.editor.DocumentWindow;
-import com.intellij.lang.ASTNode;
-import com.intellij.lang.Language;
-import com.intellij.lang.LanguageParserDefinitions;
-import com.intellij.lang.ParserDefinition;
+import com.intellij.lang.*;
 import com.intellij.openapi.actionSystem.CommonDataKeys;
 import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.application.ApplicationManager;
@@ -55,6 +52,7 @@ import com.intellij.psi.tree.IElementType;
 import com.intellij.psi.tree.TokenSet;
 import com.intellij.psi.util.PsiUtilBase;
 import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.text.CharArrayUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -92,6 +90,7 @@ public class TypedHandler extends TypedActionHandlerBase {
           return entry.getValue();
         }
       }
+      return LanguageQuoteHandling.INSTANCE.forLanguage(baseLanguage);
     }
     return quoteHandler;
   }
@@ -202,7 +201,7 @@ public class TypedHandler extends TypedActionHandlerBase {
           }
         }
         else if ('"' == charTyped || '\'' == charTyped || '`' == charTyped/* || '/' == charTyped*/) {
-          if (handleQuote(editor, charTyped, dataContext, file)) return;
+          if (handleQuote(editor, charTyped, file)) return;
         }
 
         long modificationStampBeforeTyping = editor.getDocument().getModificationStamp();
@@ -237,7 +236,7 @@ public class TypedHandler extends TypedActionHandlerBase {
           indentOpenedParenth(project, editor);
         }
       }
-    }, true);
+    });
   }
 
   private static void type(Editor editor, char charTyped) {
@@ -256,6 +255,12 @@ public class TypedHandler extends TypedActionHandlerBase {
       AutoPopupController.getInstance(project).autoPopupMemberLookup(editor, null);
     }
   }
+  
+  public static void commitDocumentIfCurrentCaretIsNotTheFirstOne(@NotNull Editor editor, @NotNull Project project) {
+    if (ContainerUtil.getFirstItem(editor.getCaretModel().getAllCarets()) != editor.getCaretModel().getCurrentCaret()) {
+      PsiDocumentManager.getInstance(project).commitDocument(editor.getDocument());
+    }
+  }
 
   private static boolean isAutoPopup(@NotNull Editor editor, @NotNull PsiFile file, char charTyped) {
     final int offset = editor.getCaretModel().getOffset() - 1;
@@ -429,7 +434,7 @@ public class TypedHandler extends TypedActionHandlerBase {
     return true;
   }
 
-  private boolean handleQuote(@NotNull Editor editor, char quote, @NotNull DataContext dataContext, @NotNull PsiFile file) {
+  private static boolean handleQuote(@NotNull Editor editor, char quote, @NotNull PsiFile file) {
     if (!CodeInsightSettings.getInstance().AUTOINSERT_PAIR_QUOTE) return false;
     final QuoteHandler quoteHandler = getQuoteHandler(file, editor);
     if (quoteHandler == null) return false;