CoffeeScriptParser inherited from AbstractIndentParser
authorAndrey Vokin <andrey.vokin@jetbrains.com>
Wed, 17 Jul 2013 07:58:45 +0000 (11:58 +0400)
committerAndrey Vokin <andrey.vokin@jetbrains.com>
Wed, 17 Jul 2013 08:04:57 +0000 (12:04 +0400)
platform/lang-impl/src/com/intellij/indentation/OperationParserHelper.java

index 977cab065eddc659f0956c96ca3ff4a28de2b1b5..604fab7c1fb196daf25d5f7cf505acb820872729 100644 (file)
@@ -61,12 +61,19 @@ public class OperationParserHelper {
   }
 
   private static boolean isBinaryOperator(@NotNull final BinaryOperationParser parser, int level) {
-    IElementType tokenType = parser.getTokenType();
+    if (parser instanceof CustomBinaryOperationParser) {
+      return ((CustomBinaryOperationParser)parser).isBinaryOperator(level);
+    }
+    final IElementType tokenType = parser.getTokenType();
     return parser.getOperatorsByPriority()[level].contains(tokenType);
   }
 
-  private static void parseBinaryOperator(@NotNull final BinaryOperationParser parser, int level) {
-    parser.advance();
+  private static void parseBinaryOperator(@NotNull final BinaryOperationParser parser) {
+    if (parser instanceof CustomBinaryOperationParser) {
+      ((CustomBinaryOperationParser)parser).parseBinaryOperator();
+    } else {
+      parser.advance();
+    }
   }
 
   /**
@@ -85,7 +92,7 @@ public class OperationParserHelper {
         tempMarkerDeleted = true;
       }
       lastMarker = operationMarker;
-      parseBinaryOperator(parser, level);
+      parseBinaryOperator(parser);
       callParsingBinaryOperation(parser, level - 1);
       parser.done(operationMarker, parser.getOperationElementTypes()[level]);
       result = true;
@@ -191,4 +198,10 @@ public class OperationParserHelper {
      */
     IElementType[] getOperationElementTypes();
   }
+
+  public interface CustomBinaryOperationParser {
+    boolean isBinaryOperator(int level);
+
+    void parseBinaryOperator();
+  }
 }