get rid of GroovyTokenTypes.mWS. Use TokenType.WHITE_SPACE instead.

This commit is contained in:
Maxim Medvedev
2011-09-08 18:15:09 +04:00
parent 2ef8b33999
commit 1aad49904f
14 changed files with 771 additions and 760 deletions
@@ -24,7 +24,7 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.lang.GrReferenceAdjuster;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.lexer.TokenSets;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
@@ -72,7 +72,7 @@ public class GroovyGenerationInfo<T extends PsiMember> extends PsiGenerationInfo
}
final IElementType type = element.getNode().getElementType();
if (type == GroovyTokenTypes.mNLS || type == GroovyTokenTypes.mWS) {
if (TokenSets.WHITE_SPACES_SET.contains(type)) {
return element.getNextSibling();
}
@@ -36,7 +36,6 @@ import org.jetbrains.plugins.groovy.codeInspection.BaseInspectionVisitor;
import org.jetbrains.plugins.groovy.codeInspection.GroovyFix;
import org.jetbrains.plugins.groovy.codeInspection.GroovyInspectionBundle;
import org.jetbrains.plugins.groovy.lang.GrReferenceAdjuster;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock;
@@ -286,8 +285,8 @@ public class GroovyRangeTypeCheckInspection extends BaseInspection {
}
if (anchor == null) return;
list = (GrReferenceList)myPsiClass.addBefore(list, anchor);
myPsiClass.getNode().addLeaf(GroovyTokenTypes.mWS, " ", anchor.getNode());
myPsiClass.getNode().addLeaf(GroovyTokenTypes.mWS, " ", list.getNode());
myPsiClass.getNode().addLeaf(TokenType.WHITE_SPACE, " ", anchor.getNode());
myPsiClass.getNode().addLeaf(TokenType.WHITE_SPACE, " ", list.getNode());
}
}
else {
@@ -297,8 +296,8 @@ public class GroovyRangeTypeCheckInspection extends BaseInspection {
PsiElement anchor = myPsiClass.getBody();
if (anchor == null) return;
list = (GrReferenceList)myPsiClass.addBefore(list, anchor);
myPsiClass.getNode().addLeaf(GroovyTokenTypes.mWS, " ", list.getNode());
myPsiClass.getNode().addLeaf(GroovyTokenTypes.mWS, " ", anchor.getNode());
myPsiClass.getNode().addLeaf(TokenType.WHITE_SPACE, " ", list.getNode());
myPsiClass.getNode().addLeaf(TokenType.WHITE_SPACE, " ", anchor.getNode());
}
}
@@ -53,7 +53,6 @@ public class GroovyBraceMatcher implements PairedBraceMatcher {
public boolean isPairedBracesAllowedBeforeType(@NotNull IElementType ibraceType, @Nullable IElementType tokenType) {
return tokenType == null
|| GroovyTokenTypes.mWS == tokenType
|| TokenType.WHITE_SPACE == tokenType
|| TokenSets.COMMENT_SET.contains(tokenType)
|| tokenType == GroovyTokenTypes.mSEMI
@@ -67,7 +67,7 @@ public class GroovyEnterHandler extends EnterHandlerDelegateAdapter {
if (caret >= 1 && caret < text.length() && CodeInsightSettings.getInstance().SMART_INDENT_ON_ENTER) {
HighlighterIterator iterator = highlighter.createIterator(caret);
iterator.retreat();
while (!iterator.atEnd() && (mWS == iterator.getTokenType() || TokenType.WHITE_SPACE == iterator.getTokenType())) {
while (!iterator.atEnd() && TokenType.WHITE_SPACE == iterator.getTokenType()) {
iterator.retreat();
}
boolean afterArrow = !iterator.atEnd() && iterator.getTokenType() == mCLOSABLE_BLOCK_OP;
@@ -78,7 +78,7 @@ public class GroovyEnterHandler extends EnterHandlerDelegateAdapter {
}
iterator = highlighter.createIterator(editor.getCaretModel().getOffset());
while (!iterator.atEnd() && (mWS == iterator.getTokenType() || TokenType.WHITE_SPACE == iterator.getTokenType())) {
while (!iterator.atEnd() && TokenType.WHITE_SPACE == iterator.getTokenType()) {
iterator.advance();
}
if (!iterator.atEnd() && mRCURLY == iterator.getTokenType()) {
@@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.lang.groovydoc.lexer;
import com.intellij.lexer.LexerBase;
import com.intellij.lexer.MergingLexerAdapter;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.util.text.CharArrayUtil;
@@ -31,7 +32,7 @@ public class GroovyDocLexer extends MergingLexerAdapter implements GroovyDocToke
private static final TokenSet TOKENS_TO_MERGE = TokenSet.create(
mGDOC_COMMENT_DATA,
mGDOC_WHITESPACE
TokenType.WHITE_SPACE
);
public GroovyDocLexer() {
@@ -101,7 +102,7 @@ public class GroovyDocLexer extends MergingLexerAdapter implements GroovyDocToke
if (myTokenType != null) return;
_locateToken();
if (myTokenType == mGDOC_WHITESPACE) {
if (myTokenType == TokenType.WHITE_SPACE) {
myAfterLineBreak = CharArrayUtil.containLineBreaks(myBuffer, getTokenStart(), getTokenEnd());
}
}
@@ -148,7 +149,7 @@ public class GroovyDocLexer extends MergingLexerAdapter implements GroovyDocToke
if (myBufferIndex < myTokenEndOffset) {
myTokenType = lf || state == _GroovyDocLexer.PARAM_TAG_SPACE || state == _GroovyDocLexer.TAG_DOC_SPACE || state == _GroovyDocLexer.INLINE_TAG_NAME || state == _GroovyDocLexer.DOC_TAG_VALUE_IN_PAREN
? mGDOC_WHITESPACE
? TokenType.WHITE_SPACE
: mGDOC_COMMENT_DATA;
return;
@@ -16,8 +16,8 @@
package org.jetbrains.plugins.groovy.lang.groovydoc.lexer;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.plugins.groovy.lang.groovydoc.parser.elements.GroovyDocTagValueTokenType;
/**
@@ -51,7 +51,7 @@ public interface GroovyDocTokenTypes {
mGDOC_COMMENT_END,
mGDOC_COMMENT_DATA,
mGDOC_TAG_NAME,
mGDOC_WHITESPACE,
// mGDOC_WHITESPACE,
mGDOC_TAG_VALUE_TOKEN,
mGDOC_TAG_VALUE_LPAREN,
mGDOC_TAG_VALUE_RPAREN,
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.1 on 12/18/09 8:54 PM */
/* The following code was generated by JFlex 1.4.3 on 06.09.11 15:42 */
/*
* Copyright 2000-2008 JetBrains s.r.o.
@@ -18,29 +18,41 @@
package org.jetbrains.plugins.groovy.lang.groovydoc.lexer;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.1
* on 12/18/09 8:54 PM from the specification file
* <tt>/Users/ilya/work/git/IDEA/tools/lexer/../../community/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/groovydoc/lexer/gdoc.flex</tt>
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 06.09.11 15:42 from the specification file
* <tt>C:/Home/IDEA/tools/lexer/../../community/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/groovydoc/lexer/gdoc.flex</tt>
*/
public class _GroovyDocLexer implements FlexLexer, GroovyDocTokenTypes {
public class _GroovyDocLexer implements FlexLexer, GroovyDocTokenTypes, TokenType {
/** initial size of the lookahead buffer */
private static final int ZZ_BUFFERSIZE = 16384;
/** lexical states */
public static final int INLINE_TAG_NAME = 8;
public static final int PARAM_TAG_SPACE = 4;
public static final int COMMENT_DATA = 2;
public static final int DOC_TAG_VALUE = 5;
public static final int COMMENT_DATA_START = 1;
public static final int TAG_DOC_SPACE = 3;
public static final int INLINE_TAG_NAME = 16;
public static final int PARAM_TAG_SPACE = 8;
public static final int COMMENT_DATA = 4;
public static final int DOC_TAG_VALUE = 10;
public static final int COMMENT_DATA_START = 2;
public static final int TAG_DOC_SPACE = 6;
public static final int YYINITIAL = 0;
public static final int DOC_TAG_VALUE_IN_PAREN = 6;
public static final int DOC_TAG_VALUE_IN_LTGT = 7;
public static final int DOC_TAG_VALUE_IN_PAREN = 12;
public static final int DOC_TAG_VALUE_IN_LTGT = 14;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
* ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
* at the beginning of a line
* l is of the form l = 2*k, k a non negative integer
*/
private static final int ZZ_LEXSTATE[] = {
0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
8, 8
};
/**
* Translates characters to character classes
@@ -524,7 +536,7 @@ public class _GroovyDocLexer implements FlexLexer, GroovyDocTokenTypes {
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
zzState = zzLexicalState;
zzState = ZZ_LEXSTATE[zzLexicalState];
zzForAction: {
@@ -572,8 +584,8 @@ public class _GroovyDocLexer implements FlexLexer, GroovyDocTokenTypes {
zzMarkedPos = zzMarkedPosL;
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 9:
{ yybegin(COMMENT_DATA); return mGDOC_WHITESPACE;
case 8:
{ yybegin(DOC_TAG_VALUE); return WHITE_SPACE;
}
case 21: break;
case 15:
@@ -596,30 +608,28 @@ public class _GroovyDocLexer implements FlexLexer, GroovyDocTokenTypes {
{ yybegin(COMMENT_DATA_START); return mGDOC_COMMENT_START;
}
case 26: break;
case 3:
{ return WHITE_SPACE;
}
case 27: break;
case 20:
{ yybegin(PARAM_TAG_SPACE); return mGDOC_TAG_NAME;
}
case 27: break;
case 28: break;
case 18:
{ yybegin(TAG_DOC_SPACE); return mGDOC_TAG_NAME;
}
case 28: break;
case 4:
{ if (checkAhead('@')){
yybegin(INLINE_TAG_NAME);
}
else{
yybegin(COMMENT_DATA);
}
return mGDOC_INLINE_TAG_START;
}
case 29: break;
case 16:
{ yybegin(COMMENT_DATA); return mGDOC_TAG_VALUE_GT;
}
case 30: break;
case 3:
{ return mGDOC_WHITESPACE;
case 7:
{ if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
else if (checkAhead('\u007b') ) yybegin(COMMENT_DATA); //lbrace - there's some error in JLex when typing lbrace directly
else yybegin(DOC_TAG_VALUE);
return WHITE_SPACE;
}
case 31: break;
case 11:
@@ -630,29 +640,31 @@ public class _GroovyDocLexer implements FlexLexer, GroovyDocTokenTypes {
{ yybegin(COMMENT_DATA); return mGDOC_INLINE_TAG_END;
}
case 33: break;
case 7:
{ if (checkAhead('<') || checkAhead('\"')) yybegin(COMMENT_DATA);
else if (checkAhead('\u007b') ) yybegin(COMMENT_DATA); //lbrace - there's some error in JLex when typing lbrace directly
else yybegin(DOC_TAG_VALUE);
return mGDOC_WHITESPACE;
case 4:
{ if (checkAhead('@')){
yybegin(INLINE_TAG_NAME);
}
else{
yybegin(COMMENT_DATA);
}
return mGDOC_INLINE_TAG_START;
}
case 34: break;
case 8:
{ yybegin(DOC_TAG_VALUE); return mGDOC_WHITESPACE;
}
case 35: break;
case 17:
{ return mGDOC_COMMENT_END;
}
case 36: break;
case 35: break;
case 10:
{ return mGDOC_TAG_VALUE_TOKEN;
}
case 37: break;
case 36: break;
case 14:
{ yybegin(DOC_TAG_VALUE_IN_LTGT); return mGDOC_TAG_VALUE_LT;
}
case 37: break;
case 9:
{ yybegin(COMMENT_DATA); return WHITE_SPACE;
}
case 38: break;
case 13:
{ return mGDOC_TAG_VALUE_COMMA;
@@ -17,11 +17,12 @@ package org.jetbrains.plugins.groovy.lang.groovydoc.lexer;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.TokenType;
%%
%class _GroovyDocLexer
%implements FlexLexer, GroovyDocTokenTypes
%implements FlexLexer, GroovyDocTokenTypes, TokenType
%unicode
%public
@@ -77,20 +78,20 @@ IDENTIFIER={ALPHA}({ALPHA}|{DIGIT}|[":.-"])*
%%
<YYINITIAL> "/**" { yybegin(COMMENT_DATA_START); return mGDOC_COMMENT_START; }
<COMMENT_DATA_START> {WHITE_DOC_SPACE_CHAR}+ { return mGDOC_WHITESPACE; }
<COMMENT_DATA_START> {WHITE_DOC_SPACE_CHAR}+ { return WHITE_SPACE; }
<COMMENT_DATA> {WHITE_DOC_SPACE_NO_NL}+ { return mGDOC_COMMENT_DATA; }
<COMMENT_DATA> [\n\r]+{WHITE_DOC_SPACE_CHAR}* { return mGDOC_WHITESPACE; }
<COMMENT_DATA> [\n\r]+{WHITE_DOC_SPACE_CHAR}* { return WHITE_SPACE; }
<DOC_TAG_VALUE> {WHITE_DOC_SPACE_CHAR}+ { yybegin(COMMENT_DATA); return mGDOC_WHITESPACE; }
<DOC_TAG_VALUE> {WHITE_DOC_SPACE_CHAR}+ { yybegin(COMMENT_DATA); return WHITE_SPACE; }
<DOC_TAG_VALUE, DOC_TAG_VALUE_IN_PAREN> ({ALPHA}|[_0-9\."$"\[\]])+ { return mGDOC_TAG_VALUE_TOKEN; }
<DOC_TAG_VALUE> [\(] { yybegin(DOC_TAG_VALUE_IN_PAREN); return mGDOC_TAG_VALUE_LPAREN; }
<DOC_TAG_VALUE_IN_PAREN> [\)] { yybegin(DOC_TAG_VALUE); return mGDOC_TAG_VALUE_RPAREN; }
<DOC_TAG_VALUE> [#] { return mGDOC_TAG_VALUE_SHARP_TOKEN; }
<DOC_TAG_VALUE, DOC_TAG_VALUE_IN_PAREN> [,] { return mGDOC_TAG_VALUE_COMMA; }
<DOC_TAG_VALUE_IN_PAREN> {WHITE_DOC_SPACE_CHAR}+ { return mGDOC_WHITESPACE; }
<DOC_TAG_VALUE_IN_PAREN> {WHITE_DOC_SPACE_CHAR}+ { return WHITE_SPACE; }
<INLINE_TAG_NAME, COMMENT_DATA_START> "@param" { yybegin(PARAM_TAG_SPACE); return mGDOC_TAG_NAME; }
<PARAM_TAG_SPACE> {WHITE_DOC_SPACE_CHAR}+ {yybegin(DOC_TAG_VALUE); return mGDOC_WHITESPACE;}
<PARAM_TAG_SPACE> {WHITE_DOC_SPACE_CHAR}+ {yybegin(DOC_TAG_VALUE); return WHITE_SPACE;}
<DOC_TAG_VALUE> [\<] { yybegin(DOC_TAG_VALUE_IN_LTGT); return mGDOC_TAG_VALUE_LT; }
<DOC_TAG_VALUE_IN_LTGT> {IDENTIFIER} { return mGDOC_TAG_VALUE_TOKEN; }
<DOC_TAG_VALUE_IN_LTGT> [\>] { yybegin(COMMENT_DATA); return mGDOC_TAG_VALUE_GT; }
@@ -116,7 +117,7 @@ IDENTIFIER={ALPHA}({ALPHA}|{DIGIT}|[":.-"])*
else if (checkAhead('\u007b') ) yybegin(COMMENT_DATA); //lbrace - there's some error in JLex when typing lbrace directly
else yybegin(DOC_TAG_VALUE);
return mGDOC_WHITESPACE;
return WHITE_SPACE;
}
"*"+"/" { return mGDOC_COMMENT_END; }
@@ -22,6 +22,7 @@ import com.intellij.lexer.MergingLexerAdapter;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import static com.intellij.psi.TokenType.WHITE_SPACE;
import static org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.*;
/**
@@ -34,7 +35,7 @@ public class GroovyLexer extends LookAheadLexer {
mREGEX_BEGIN,
mREGEX_CONTENT,
mREGEX_END,
mWS
WHITE_SPACE
);
public GroovyLexer() {
@@ -47,8 +48,8 @@ public class GroovyLexer extends LookAheadLexer {
if (type == mDOT || type == kIMPORT || type == kPACKAGE) {
addToken(type);
baseLexer.advance();
while (baseLexer.getTokenType() == mWS) {
addToken(mWS);
while (baseLexer.getTokenType() == WHITE_SPACE) {
addToken(WHITE_SPACE);
baseLexer.advance();
}
final IElementType token = baseLexer.getTokenType();
@@ -35,7 +35,6 @@ public interface GroovyTokenTypes extends GroovyDocElementTypes {
* Whitespaces & NewLines
* ****************************************************************************************************/
IElementType mWS = new GroovyElementType("white space");
IElementType mNLS = new GroovyElementType("new line");
/* **************************************************************************************************
@@ -46,8 +46,7 @@ public abstract class TokenSets {
public static TokenSet WHITE_SPACE_TOKEN_SET = TokenSet.create(
mWS,
mGDOC_WHITESPACE
TokenType.WHITE_SPACE
);
public static final TokenSet NUMBERS = TokenSet.create(mNUM_INT,
@@ -139,7 +138,7 @@ public abstract class TokenSets {
mGE,
kIN
);
public static final TokenSet WHITE_SPACES_SET = TokenSet.create(mWS, mNLS, TokenType.WHITE_SPACE);
public static final TokenSet WHITE_SPACES_SET = TokenSet.create(mNLS, TokenType.WHITE_SPACE);
public static final TokenSet COMMENT_SET = TokenSet.create(mML_COMMENT, mSH_COMMENT, mSL_COMMENT, GROOVY_DOC_COMMENT);
File diff suppressed because it is too large Load Diff
@@ -16,6 +16,7 @@
package org.jetbrains.plugins.groovy.lang.lexer;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import java.util.*;
import java.lang.reflect.Field;
@@ -24,7 +25,7 @@ import org.jetbrains.annotations.NotNull;
%%
%class _GroovyLexer
%implements FlexLexer, GroovyTokenTypes
%implements FlexLexer, GroovyTokenTypes, TokenType
%unicode
%public
@@ -59,8 +60,8 @@ import org.jetbrains.annotations.NotNull;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
mONE_NL = \r | \n | \r\n // NewLines
mWS = " " | \t | \f | \\ {mONE_NL} // Whitespaces
mNLS = {mONE_NL}({mONE_NL}|{mWS})*
WHITE_SPACE = " " | \t | \f | \\ {mONE_NL} // Whitespaces
mNLS = {mONE_NL}({mONE_NL}|{WHITE_SPACE})*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////// Comments ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -235,21 +236,21 @@ mGSTRING_LITERAL = \"\"
{mML_COMMENT} { return mML_COMMENT; }
{mDOC_COMMENT} { return GROOVY_DOC_COMMENT; }
({mNLS}|{mWS})+ { return mWS; }
({mNLS}|{WHITE_SPACE})+ { return WHITE_SPACE; }
[^] { yypushback(1);
yybegin(afterComment); }
}
<NLS_AFTER_LBRACE>{
({mNLS}|{mWS})+ { return mWS; }
({mNLS}|{WHITE_SPACE})+ { return WHITE_SPACE; }
[^] { yypushback(1);
yybegin(WAIT_FOR_REGEX); }
}
<NLS_AFTER_NLS>{
({mNLS}|{mWS})+ { return mWS; }
({mNLS}|{WHITE_SPACE})+ { return WHITE_SPACE; }
[^] { yypushback(1);
yybegin(NLS_AFTER_COMMENT); }
@@ -549,8 +550,8 @@ mGSTRING_LITERAL = \"\"
<WAIT_FOR_REGEX> {
{mWS} { afterComment = YYINITIAL;
return(mWS); }
{WHITE_SPACE} { afterComment = YYINITIAL;
return(WHITE_SPACE); }
{mSL_COMMENT} { return mSL_COMMENT; }
{mML_COMMENT} { return mML_COMMENT; }
@@ -653,11 +654,11 @@ mGSTRING_LITERAL = \"\"
///////////////////////// White spaces & NewLines //////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{mWS} { return mWS; }
{WHITE_SPACE} { return WHITE_SPACE; }
{mNLS} { yybegin(NLS_AFTER_NLS);
afterComment = WAIT_FOR_REGEX;
return !braceCount.isEmpty() &&
mLPAREN == braceCount.peek() ? mWS : mNLS; }
mLPAREN == braceCount.peek() ? WHITE_SPACE : mNLS; }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////Comments //////////////////////////////////////////////////////////////////////////////////////
@@ -36,9 +36,7 @@ import org.jetbrains.plugins.groovy.lang.lexer.TokenSets;
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyFileImpl;
import org.jetbrains.plugins.groovy.lang.psi.stubs.elements.GrStubFileElementType;
import static com.intellij.lang.ParserDefinition.SpaceRequirements.MAY;
import static com.intellij.lang.ParserDefinition.SpaceRequirements.MUST;
import static com.intellij.lang.ParserDefinition.SpaceRequirements.MUST_LINE_BREAK;
import static com.intellij.lang.ParserDefinition.SpaceRequirements.*;
import static org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes.*;
/**
@@ -85,7 +83,7 @@ public class GroovyParserDefinition implements ParserDefinition {
}
public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode left, ASTNode right) {
if (right.getElementType() == kIMPORT && left.getElementType() != mWS && left.getElementType() != TokenType.WHITE_SPACE) {
if (right.getElementType() == kIMPORT && left.getElementType() != TokenType.WHITE_SPACE) {
return MUST_LINE_BREAK;
}
else if (left.getElementType() == MODIFIERS && right.getElementType() == MODIFIERS) {