Skip to content

Commit 8c09684

Browse files
committed
Improve DartLineIndentProvider
- Resolve the "Extension point implementations must not use static initialization" warning - Add try keyword to the SYNTAX_MAP
1 parent c824b11 commit 8c09684

File tree

1 file changed

+36
-25
lines changed

1 file changed

+36
-25
lines changed

third_party/src/main/java/com/jetbrains/lang/dart/ide/editor/DartLineIndentProvider.java

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,51 @@
1616
import org.jetbrains.annotations.Nullable;
1717

1818
import java.util.HashMap;
19+
import java.util.Map;
1920

2021
import static com.intellij.psi.impl.source.codeStyle.lineIndent.JavaLikeLangLineIndentProvider.JavaLikeElement.*;
2122

2223
public final class DartLineIndentProvider extends JavaLikeLangLineIndentProvider {
2324

24-
static HashMap<IElementType, SemanticEditorPosition.SyntaxElement> SYNTAX_MAP = new HashMap<>();
25+
private static volatile Map<IElementType, SemanticEditorPosition.SyntaxElement> SYNTAX_MAP;
2526

26-
static {
27-
SYNTAX_MAP.put(DartTokenTypesSets.WHITE_SPACE, Whitespace);
28-
SYNTAX_MAP.put(DartTokenTypes.SEMICOLON, Semicolon);
29-
SYNTAX_MAP.put(DartTokenTypes.LBRACE, BlockOpeningBrace);
30-
SYNTAX_MAP.put(DartTokenTypes.RBRACE, BlockClosingBrace);
31-
SYNTAX_MAP.put(DartTokenTypes.LBRACKET, ArrayOpeningBracket);
32-
SYNTAX_MAP.put(DartTokenTypes.RBRACKET, ArrayClosingBracket);
33-
SYNTAX_MAP.put(DartTokenTypes.LPAREN, LeftParenthesis);
34-
SYNTAX_MAP.put(DartTokenTypes.RPAREN, RightParenthesis);
35-
SYNTAX_MAP.put(DartTokenTypes.COLON, Colon);
36-
SYNTAX_MAP.put(DartTokenTypes.CASE, SwitchCase);
37-
SYNTAX_MAP.put(DartTokenTypes.DEFAULT, SwitchDefault);
38-
SYNTAX_MAP.put(DartTokenTypes.IF, IfKeyword);
39-
SYNTAX_MAP.put(DartTokenTypes.ELSE, ElseKeyword);
40-
SYNTAX_MAP.put(DartTokenTypes.FOR, ForKeyword);
41-
SYNTAX_MAP.put(DartTokenTypes.DO, DoKeyword);
42-
SYNTAX_MAP.put(DartTokenTypesSets.MULTI_LINE_COMMENT, BlockComment);
43-
SYNTAX_MAP.put(DartTokenTypesSets.MULTI_LINE_COMMENT_END, DocBlockEnd);
44-
SYNTAX_MAP.put(DartTokenTypesSets.MULTI_LINE_DOC_COMMENT_START, DocBlockStart);
45-
SYNTAX_MAP.put(DartTokenTypes.COMMA, Comma);
46-
SYNTAX_MAP.put(DartTokenTypesSets.SINGLE_LINE_COMMENT, LineComment);
47-
SYNTAX_MAP.put(DartTokenTypesSets.SINGLE_LINE_DOC_COMMENT, LineComment);
48-
}
27+
private static @NotNull Map<IElementType, SemanticEditorPosition.SyntaxElement> getSyntaxMap() {
28+
if (SYNTAX_MAP == null) {
29+
synchronized (DartLineIndentProvider.class) {
30+
if (SYNTAX_MAP == null) {
31+
final Map<IElementType, SemanticEditorPosition.SyntaxElement> map = new HashMap<>(32);
32+
map.put(DartTokenTypesSets.WHITE_SPACE, Whitespace);
33+
map.put(DartTokenTypes.SEMICOLON, Semicolon);
34+
map.put(DartTokenTypes.LBRACE, BlockOpeningBrace);
35+
map.put(DartTokenTypes.RBRACE, BlockClosingBrace);
36+
map.put(DartTokenTypes.LBRACKET, ArrayOpeningBracket);
37+
map.put(DartTokenTypes.RBRACKET, ArrayClosingBracket);
38+
map.put(DartTokenTypes.LPAREN, LeftParenthesis);
39+
map.put(DartTokenTypes.RPAREN, RightParenthesis);
40+
map.put(DartTokenTypes.COLON, Colon);
41+
map.put(DartTokenTypes.CASE, SwitchCase);
42+
map.put(DartTokenTypes.DEFAULT, SwitchDefault);
43+
map.put(DartTokenTypes.IF, IfKeyword);
44+
map.put(DartTokenTypes.ELSE, ElseKeyword);
45+
map.put(DartTokenTypes.FOR, ForKeyword);
46+
map.put(DartTokenTypes.DO, DoKeyword);
47+
map.put(DartTokenTypes.TRY, TryKeyword);
48+
map.put(DartTokenTypesSets.MULTI_LINE_COMMENT, BlockComment);
49+
map.put(DartTokenTypesSets.MULTI_LINE_COMMENT_END, DocBlockEnd);
50+
map.put(DartTokenTypesSets.MULTI_LINE_DOC_COMMENT_START, DocBlockStart);
51+
map.put(DartTokenTypes.COMMA, Comma);
52+
map.put(DartTokenTypesSets.SINGLE_LINE_COMMENT, LineComment);
53+
map.put(DartTokenTypesSets.SINGLE_LINE_DOC_COMMENT, LineComment);
54+
SYNTAX_MAP = map;
55+
}
56+
}
57+
}
58+
return SYNTAX_MAP;
59+
}
4960

5061
@Override
5162
protected @Nullable SemanticEditorPosition.SyntaxElement mapType(@NotNull IElementType tokenType) {
52-
return SYNTAX_MAP.get(tokenType);
63+
return getSyntaxMap().get(tokenType);
5364
}
5465

5566
@Override

0 commit comments

Comments
 (0)