提交 4ef9dcd6 编写于 作者: M Martin Aeschlimann

[java] add grammar update script

上级 e11ba0b9
......@@ -3,6 +3,9 @@
"version": "0.1.0",
"publisher": "vscode",
"engines": { "vscode": "*" },
"scripts": {
"update-grammar": "node ../../build/npm/update-grammar.js textmate/java.tmbundle Syntaxes/Java.plist ./syntaxes/java.json"
},
"contributes": {
"languages": [{
"id": "java",
......@@ -13,7 +16,7 @@
"grammars": [{
"language": "java",
"scopeName": "source.java",
"path": "./syntaxes/Java.plist"
"path": "./syntaxes/java.json"
}]
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>java</string>
<string>bsh</string>
</array>
<key>keyEquivalent</key>
<string>^~J</string>
<key>name</key>
<string>Java</string>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.package.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.modifier.package.java</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.terminator.java</string>
</dict>
</dict>
<key>match</key>
<string>^\s*(package)\b(?:\s*([^ ;$]+)\s*(;)?)?</string>
<key>name</key>
<string>meta.package.java</string>
</dict>
<dict>
<key>begin</key>
<string>(import static)\b\s*</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.import.static.java</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.import.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.modifier.import.java</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.terminator.java</string>
</dict>
</dict>
<key>contentName</key>
<string>storage.modifier.import.java</string>
<key>end</key>
<string>\s*(?:$|(;))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.terminator.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.import.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\.</string>
<key>name</key>
<string>punctuation.separator.java</string>
</dict>
<dict>
<key>match</key>
<string>\s</string>
<key>name</key>
<string>invalid.illegal.character_not_allowed_here.java</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(import)\b\s*</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.import.java</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.import.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.modifier.import.java</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.terminator.java</string>
</dict>
</dict>
<key>contentName</key>
<string>storage.modifier.import.java</string>
<key>end</key>
<string>\s*(?:$|(;))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.terminator.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.import.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\.</string>
<key>name</key>
<string>punctuation.separator.java</string>
</dict>
<dict>
<key>match</key>
<string>\s</string>
<key>name</key>
<string>invalid.illegal.character_not_allowed_here.java</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
<key>repository</key>
<dict>
<key>all-types</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#primitive-arrays</string>
</dict>
<dict>
<key>include</key>
<string>#primitive-types</string>
</dict>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
</array>
</dict>
<key>annotations</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(@[^ (]+)(\()</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.annotation.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.annotation-arguments.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>(\))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.annotation-arguments.end.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.declaration.annotation.java</string>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>constant.other.key.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.operator.assignment.java</string>
</dict>
</dict>
<key>match</key>
<string>(\w*)\s*(=)</string>
</dict>
<dict>
<key>include</key>
<string>#code</string>
</dict>
<dict>
<key>match</key>
<string>,</string>
<key>name</key>
<string>punctuation.separator.property.java</string>
</dict>
</array>
</dict>
<dict>
<key>match</key>
<string>@\w*</string>
<key>name</key>
<string>storage.type.annotation.java</string>
</dict>
</array>
</dict>
<key>anonymous-classes-and-new</key>
<dict>
<key>begin</key>
<string>\bnew\b</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.control.new.java</string>
</dict>
</dict>
<key>end</key>
<string>(?&lt;=\)|\])(?!\s*{)|(?&lt;=})|(?=;)</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(\w+)\s*(?=\[)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.java</string>
</dict>
</dict>
<key>end</key>
<string>(})|(?=\s*(?:,|;|\)))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.section.block.end.java</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\[</string>
<key>end</key>
<string>\]</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.block.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>(?=})</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(?=\w.*\()</string>
<key>end</key>
<string>(?&lt;=\))</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
<dict>
<key>begin</key>
<string>\(</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.java</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.inner-class.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.inner-class.end.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.inner-class.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#class-body</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>assertions</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\b(assert)\s</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.assert.java</string>
</dict>
</dict>
<key>end</key>
<string>$</string>
<key>name</key>
<string>meta.declaration.assertion.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>:</string>
<key>name</key>
<string>keyword.operator.assert.expression-seperator.java</string>
</dict>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>class</key>
<dict>
<key>begin</key>
<string>(?=\w?[\w\s]*(?:class|(?:@)?interface|enum)\s+\w+)</string>
<key>end</key>
<string>}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.class.end.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.class.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#storage-modifiers</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.modifier.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>entity.name.type.class.java</string>
</dict>
</dict>
<key>match</key>
<string>(class|(?:@)?interface|enum)\s+(\w+)</string>
<key>name</key>
<string>meta.class.identifier.java</string>
</dict>
<dict>
<key>begin</key>
<string>extends</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>storage.modifier.extends.java</string>
</dict>
</dict>
<key>end</key>
<string>(?={|implements)</string>
<key>name</key>
<string>meta.definition.class.inherited.classes.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types-inherited</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(implements)\s</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.modifier.implements.java</string>
</dict>
</dict>
<key>end</key>
<string>(?=\s*extends|\{)</string>
<key>name</key>
<string>meta.definition.class.implemented.interfaces.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types-inherited</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.class.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>(?=})</string>
<key>name</key>
<string>meta.class.body.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#class-body</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>class-body</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
<dict>
<key>include</key>
<string>#class</string>
</dict>
<dict>
<key>include</key>
<string>#enums</string>
</dict>
<dict>
<key>include</key>
<string>#variables</string>
</dict>
<dict>
<key>include</key>
<string>#methods</string>
</dict>
<dict>
<key>include</key>
<string>#annotations</string>
</dict>
<dict>
<key>include</key>
<string>#storage-modifiers</string>
</dict>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<key>code</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
<dict>
<key>include</key>
<string>#class</string>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.block.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.block.end.java</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#assertions</string>
</dict>
<dict>
<key>include</key>
<string>#parens</string>
</dict>
<dict>
<key>include</key>
<string>#constants-and-special-vars</string>
</dict>
<dict>
<key>include</key>
<string>#anonymous-classes-and-new</string>
</dict>
<dict>
<key>include</key>
<string>#keywords</string>
</dict>
<dict>
<key>include</key>
<string>#storage-modifiers</string>
</dict>
<dict>
<key>include</key>
<string>#method-call</string>
</dict>
<dict>
<key>include</key>
<string>#strings</string>
</dict>
<dict>
<key>include</key>
<string>#all-types</string>
</dict>
</array>
</dict>
<key>comments</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.java</string>
</dict>
</dict>
<key>match</key>
<string>/\*\*/</string>
<key>name</key>
<string>comment.block.empty.java</string>
</dict>
<dict>
<key>include</key>
<string>text.html.javadoc</string>
</dict>
<dict>
<key>include</key>
<string>#comments-inline</string>
</dict>
</array>
</dict>
<key>comments-inline</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>/\*</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.java</string>
</dict>
</dict>
<key>end</key>
<string>\*/</string>
<key>name</key>
<string>comment.block.java</string>
</dict>
<dict>
<key>begin</key>
<string>(^[ \t]+)?(?=//)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.whitespace.comment.leading.java</string>
</dict>
</dict>
<key>end</key>
<string>(?!\G)</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>//</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.java</string>
</dict>
</dict>
<key>end</key>
<string>\n</string>
<key>name</key>
<string>comment.line.double-slash.java</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>constants-and-special-vars</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(true|false|null)\b</string>
<key>name</key>
<string>constant.language.java</string>
</dict>
<dict>
<key>match</key>
<string>\b(this|super)\b</string>
<key>name</key>
<string>variable.language.java</string>
</dict>
<dict>
<key>match</key>
<string>\b0[xX]\h([\h_]*\h)?[lL]?(?!\w|\.)</string>
<key>name</key>
<string>constant.numeric.hex.java</string>
</dict>
<dict>
<key>match</key>
<string>\b0[0-7_]*[0-7][lL]?\b</string>
<key>name</key>
<string>constant.numeric.octal.java</string>
</dict>
<dict>
<key>match</key>
<string>\b0[bB][01]([01_]*[01])?[lL]?\b</string>
<key>name</key>
<string>constant.numeric.binary.java</string>
</dict>
<dict>
<key>match</key>
<string>\b(0|[1-9]([0-9_]*[0-9])?)[lL]?(?!\w|\.)</string>
<key>name</key>
<string>constant.numeric.integer.java</string>
</dict>
<dict>
<key>match</key>
<string>(?x)
(?&lt;!\w) # Ensure word boundry
(?&gt;
0[xX] # Start literal
(\h([\h_]*\h)?)? # Optional Number
(
(?&lt;=\h)\. # A number must exist on
| \.(?=\h) # one side of the decimal
| (?&lt;=\h) # Decimal not required
)
(\h([\h_]*\h)?)? # Optional Number
[pP] # Exponent Indicator
[+-]?(0|[1-9]([0-9_]*[0-9])?) # Signed Integer
[fFdD]? # Float Type Suffix
)
(?!\w) # Ensure word boundry
</string>
<key>name</key>
<string>constant.numeric.hex-float.java</string>
</dict>
<dict>
<key>match</key>
<string>(?x)
(?&lt;!\w) # Ensure word boundry
(?&gt;
(
(0|[1-9]([0-9_]*[0-9])?) # Leading digits
(?=[eEfFdD.]) # Allow for numbers without .
)?
(
(?&lt;=[0-9])(?=[eEfFdD]) # Allow for numbers without .
| \.
)
(
[0-9]([0-9_]*[0-9])? # Numbers after .
)?
(
[eE][+-]?(0|[1-9]([0-9_]*[0-9])?) # Exponent
)?
[fFdD]? # Float Type Suffix
)
(?!\w) # Ensure word boundry
</string>
<key>name</key>
<string>constant.numeric.float.java</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.dereference.java</string>
</dict>
</dict>
<key>match</key>
<string>(\.)?\b([A-Z][A-Z0-9_]+)(?!&lt;|\.class|\s*\w+\s*=)\b</string>
<key>name</key>
<string>constant.other.java</string>
</dict>
</array>
</dict>
<key>enums</key>
<dict>
<key>begin</key>
<string>^(?=\s*[A-Z0-9_]+\s*({|\(|,))</string>
<key>end</key>
<string>(?=;|})</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\w+</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>constant.other.enum.java</string>
</dict>
</dict>
<key>end</key>
<string>(?=,|;|})</string>
<key>name</key>
<string>meta.enum.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#parens</string>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.enum.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.enum.end.java</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#class-body</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
<dict>
<key>include</key>
<string>#annotations</string>
</dict>
</array>
</dict>
<key>keywords</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(try|catch|finally|throw)\b</string>
<key>name</key>
<string>keyword.control.catch-exception.java</string>
</dict>
<dict>
<key>match</key>
<string>\?|:</string>
<key>name</key>
<string>keyword.control.ternary.java</string>
</dict>
<dict>
<key>match</key>
<string>\b(return|break|case|continue|default|do|while|for|switch|if|else)\b</string>
<key>name</key>
<string>keyword.control.java</string>
</dict>
<dict>
<key>match</key>
<string>\b(instanceof)\b</string>
<key>name</key>
<string>keyword.operator.java</string>
</dict>
<dict>
<key>match</key>
<string>(&lt;&lt;|&gt;&gt;&gt;?|~|\^)</string>
<key>name</key>
<string>keyword.operator.bitwise.java</string>
</dict>
<dict>
<key>match</key>
<string>((&amp;|\^|\||&lt;&lt;|&gt;&gt;&gt;?)=)</string>
<key>name</key>
<string>keyword.operator.assignment.bitwise.java</string>
</dict>
<dict>
<key>match</key>
<string>(===?|!=|&lt;=|&gt;=|&lt;&gt;|&lt;|&gt;)</string>
<key>name</key>
<string>keyword.operator.comparison.java</string>
</dict>
<dict>
<key>match</key>
<string>([+*/%-]=)</string>
<key>name</key>
<string>keyword.operator.assignment.arithmetic.java</string>
</dict>
<dict>
<key>match</key>
<string>(=)</string>
<key>name</key>
<string>keyword.operator.assignment.java</string>
</dict>
<dict>
<key>match</key>
<string>(\-\-|\+\+)</string>
<key>name</key>
<string>keyword.operator.increment-decrement.java</string>
</dict>
<dict>
<key>match</key>
<string>(\-|\+|\*|\/|%)</string>
<key>name</key>
<string>keyword.operator.arithmetic.java</string>
</dict>
<dict>
<key>match</key>
<string>(!|&amp;&amp;|\|\|)</string>
<key>name</key>
<string>keyword.operator.logical.java</string>
</dict>
<dict>
<key>match</key>
<string>(\||&amp;)</string>
<key>name</key>
<string>keyword.operator.bitwise.java</string>
</dict>
<dict>
<key>match</key>
<string>(?&lt;=\S)\.(?=\S)</string>
<key>name</key>
<string>keyword.operator.dereference.java</string>
</dict>
<dict>
<key>match</key>
<string>;</string>
<key>name</key>
<string>punctuation.terminator.java</string>
</dict>
</array>
</dict>
<key>method-call</key>
<dict>
<key>begin</key>
<string>([\w$]+)(\()</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.method.java</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.method-parameters.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.method-parameters.end.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.method-call.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>,</string>
<key>name</key>
<string>punctuation.definition.seperator.parameter.java</string>
</dict>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<key>methods</key>
<dict>
<key>begin</key>
<string>(?!new)(?=[\w&lt;].*\s+)(?=([^=/]|/(?!/))+\()</string>
<key>end</key>
<string>(})|(?=;)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.section.method.end.java</string>
</dict>
</dict>
<key>name</key>
<string>meta.method.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#storage-modifiers</string>
</dict>
<dict>
<key>begin</key>
<string>(\w+)\s*\(</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.function.java</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>name</key>
<string>meta.method.identifier.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#parameters</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>&lt;</string>
<key>end</key>
<string>&gt;</string>
<key>name</key>
<string>storage.type.token.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
<dict>
<key>begin</key>
<string>&lt;</string>
<key>comment</key>
<string>This is just to support &lt;&gt;'s with no actual type prefix</string>
<key>end</key>
<string>&gt;|[^\w\s,\[\]&lt;]</string>
<key>name</key>
<string>storage.type.generic.java</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(?=\w.*\s+\w+\s*\()</string>
<key>end</key>
<string>(?=\w+\s*\()</string>
<key>name</key>
<string>meta.method.return-type.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#all-types</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#throws</string>
</dict>
<dict>
<key>begin</key>
<string>{</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.section.method.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>(?=})</string>
<key>name</key>
<string>meta.method.body.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
</array>
</dict>
<key>object-types</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\b((?:[a-z]\w*\.)*[A-Z]+\w*)&lt;</string>
<key>end</key>
<string>&gt;|[^\w\s,\?&lt;\[\]]</string>
<key>name</key>
<string>storage.type.generic.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
<dict>
<key>begin</key>
<string>&lt;</string>
<key>comment</key>
<string>This is just to support &lt;&gt;'s with no actual type prefix</string>
<key>end</key>
<string>&gt;|[^\w\s,\[\]&lt;]</string>
<key>name</key>
<string>storage.type.generic.java</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b((?:[a-z]\w*\.)*[A-Z]+\w*)(?=\[)</string>
<key>end</key>
<string>(?=[^\]\s])</string>
<key>name</key>
<string>storage.type.object.array.java</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\[</string>
<key>end</key>
<string>\]</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.dereference.java</string>
</dict>
</dict>
<key>match</key>
<string>\b(?:[a-z]\w*(\.))*[A-Z]+\w*\b</string>
<key>name</key>
<string>storage.type.java</string>
</dict>
</array>
</dict>
<key>object-types-inherited</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\b((?:[a-z]\w*\.)*[A-Z]+\w*)&lt;</string>
<key>end</key>
<string>&gt;|[^\w\s,&lt;]</string>
<key>name</key>
<string>entity.other.inherited-class.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
<dict>
<key>begin</key>
<string>&lt;</string>
<key>comment</key>
<string>This is just to support &lt;&gt;'s with no actual type prefix</string>
<key>end</key>
<string>&gt;|[^\w\s,&lt;]</string>
<key>name</key>
<string>storage.type.generic.java</string>
</dict>
</array>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.dereference.java</string>
</dict>
</dict>
<key>match</key>
<string>\b(?:[a-z]\w*(\.))*[A-Z]+\w*</string>
<key>name</key>
<string>entity.other.inherited-class.java</string>
</dict>
</array>
</dict>
<key>parameters</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>final</string>
<key>name</key>
<string>storage.modifier.java</string>
</dict>
<dict>
<key>include</key>
<string>#annotations</string>
</dict>
<dict>
<key>include</key>
<string>#primitive-arrays</string>
</dict>
<dict>
<key>include</key>
<string>#primitive-types</string>
</dict>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
<dict>
<key>match</key>
<string>\w+</string>
<key>name</key>
<string>variable.parameter.java</string>
</dict>
</array>
</dict>
<key>parens</key>
<dict>
<key>begin</key>
<string>\(</string>
<key>end</key>
<string>\)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<key>primitive-arrays</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(?:void|boolean|byte|char|short|int|float|long|double)(\[\])*\b</string>
<key>name</key>
<string>storage.type.primitive.array.java</string>
</dict>
</array>
</dict>
<key>primitive-types</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(?:void|boolean|byte|char|short|int|float|long|double)\b</string>
<key>name</key>
<string>storage.type.primitive.java</string>
</dict>
</array>
</dict>
<key>storage-modifiers</key>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.modifier.java</string>
</dict>
</dict>
<key>match</key>
<string>\b(public|private|protected|static|final|native|synchronized|volatile|abstract|threadsafe|transient)\b</string>
</dict>
<key>strings</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>"</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>"</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.java</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.double.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\.</string>
<key>name</key>
<string>constant.character.escape.java</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>'</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.java</string>
</dict>
</dict>
<key>end</key>
<string>'</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.java</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.single.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\.</string>
<key>name</key>
<string>constant.character.escape.java</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>throws</key>
<dict>
<key>begin</key>
<string>throws</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>storage.modifier.java</string>
</dict>
</dict>
<key>end</key>
<string>(?={|;)</string>
<key>name</key>
<string>meta.throwables.java</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
</array>
</dict>
<key>values</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#strings</string>
</dict>
<dict>
<key>include</key>
<string>#object-types</string>
</dict>
<dict>
<key>include</key>
<string>#constants-and-special-vars</string>
</dict>
</array>
</dict>
<key>variables</key>
<dict>
<key>applyEndPatternLast</key>
<integer>1</integer>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(?x:(?=
(?:
(?:private|protected|public|native|synchronized|volatile|abstract|threadsafe|transient|static|final) # visibility/modifier
|
(?:def)
|
(?:void|boolean|byte|char|short|int|float|long|double)
|
(?:(?:[a-z]\w*\.)*[A-Z]+\w*) # object type
)
\s+
(?!private|protected|public|native|synchronized|volatile|abstract|threadsafe|transient|static|final|def|void|boolean|byte|char|short|int|float|long|double)
[\w\d_&lt;&gt;\[\],\?][\w\d_&lt;&gt;\[\],\? \t]*
(?:=|$)
))</string>
<key>end</key>
<string>(?=;)</string>
<key>name</key>
<string>meta.definition.variable.java</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\s</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>constant.other.variable.java</string>
</dict>
</dict>
<key>match</key>
<string>([A-Z_0-9]+)\s+(?=\=)</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.definition.variable.name.java</string>
</dict>
</dict>
<key>match</key>
<string>(\w[^\s,]*)\s+(?=\=)</string>
</dict>
<dict>
<key>begin</key>
<string>=</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>keyword.operator.assignment.java</string>
</dict>
</dict>
<key>end</key>
<string>(?=;)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>meta.definition.variable.name.java</string>
</dict>
</dict>
<key>match</key>
<string>(\w[^\s=]*)(?=\s*;)</string>
</dict>
<dict>
<key>include</key>
<string>#code</string>
</dict>
</array>
</dict>
</array>
</dict>
</dict>
<key>scopeName</key>
<string>source.java</string>
<key>uuid</key>
<string>2B449DF6-6B1D-11D9-94EC-000D93589AF6</string>
</dict>
</plist>
\ No newline at end of file
{
"fileTypes": [
"java",
"bsh"
],
"keyEquivalent": "^~J",
"name": "Java",
"patterns": [
{
"captures": {
"1": {
"name": "keyword.other.package.java"
},
"2": {
"name": "storage.modifier.package.java"
},
"3": {
"name": "punctuation.terminator.java"
}
},
"match": "^\\s*(package)\\b(?:\\s*([^ ;$]+)\\s*(;)?)?",
"name": "meta.package.java"
},
{
"begin": "(import static)\\b\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.import.static.java"
}
},
"captures": {
"1": {
"name": "keyword.other.import.java"
},
"2": {
"name": "storage.modifier.import.java"
},
"3": {
"name": "punctuation.terminator.java"
}
},
"contentName": "storage.modifier.import.java",
"end": "\\s*(?:$|(;))",
"endCaptures": {
"1": {
"name": "punctuation.terminator.java"
}
},
"name": "meta.import.java",
"patterns": [
{
"match": "\\.",
"name": "punctuation.separator.java"
},
{
"match": "\\s",
"name": "invalid.illegal.character_not_allowed_here.java"
}
]
},
{
"begin": "(import)\\b\\s*",
"beginCaptures": {
"1": {
"name": "keyword.other.import.java"
}
},
"captures": {
"1": {
"name": "keyword.other.import.java"
},
"2": {
"name": "storage.modifier.import.java"
},
"3": {
"name": "punctuation.terminator.java"
}
},
"contentName": "storage.modifier.import.java",
"end": "\\s*(?:$|(;))",
"endCaptures": {
"1": {
"name": "punctuation.terminator.java"
}
},
"name": "meta.import.java",
"patterns": [
{
"match": "\\.",
"name": "punctuation.separator.java"
},
{
"match": "\\s",
"name": "invalid.illegal.character_not_allowed_here.java"
}
]
},
{
"include": "#code"
}
],
"repository": {
"all-types": {
"patterns": [
{
"include": "#primitive-arrays"
},
{
"include": "#primitive-types"
},
{
"include": "#object-types"
}
]
},
"annotations": {
"patterns": [
{
"begin": "(@[^ (]+)(\\()",
"beginCaptures": {
"1": {
"name": "storage.type.annotation.java"
},
"2": {
"name": "punctuation.definition.annotation-arguments.begin.java"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "punctuation.definition.annotation-arguments.end.java"
}
},
"name": "meta.declaration.annotation.java",
"patterns": [
{
"captures": {
"1": {
"name": "constant.other.key.java"
},
"2": {
"name": "keyword.operator.assignment.java"
}
},
"match": "(\\w*)\\s*(=)"
},
{
"include": "#code"
},
{
"match": ",",
"name": "punctuation.separator.property.java"
}
]
},
{
"match": "@\\w*",
"name": "storage.type.annotation.java"
}
]
},
"anonymous-classes-and-new": {
"begin": "\\bnew\\b",
"beginCaptures": {
"0": {
"name": "keyword.control.new.java"
}
},
"end": "(?<=\\)|\\])(?!\\s*{)|(?<=})|(?=;)",
"patterns": [
{
"begin": "(\\w+)\\s*(?=\\[)",
"beginCaptures": {
"1": {
"name": "storage.type.java"
}
},
"end": "(})|(?=\\s*(?:,|;|\\)))",
"endCaptures": {
"1": {
"name": "punctuation.section.block.end.java"
}
},
"patterns": [
{
"begin": "\\[",
"end": "\\]",
"patterns": [
{
"include": "#code"
}
]
},
{
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.section.block.begin.java"
}
},
"end": "(?=})",
"patterns": [
{
"include": "#code"
}
]
}
]
},
{
"begin": "(?=\\w.*\\()",
"end": "(?<=\\))",
"patterns": [
{
"include": "#object-types"
},
{
"begin": "\\(",
"beginCaptures": {
"1": {
"name": "storage.type.java"
}
},
"end": "\\)",
"patterns": [
{
"include": "#code"
}
]
}
]
},
{
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.section.inner-class.begin.java"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.inner-class.end.java"
}
},
"name": "meta.inner-class.java",
"patterns": [
{
"include": "#class-body"
}
]
}
]
},
"assertions": {
"patterns": [
{
"begin": "\\b(assert)\\s",
"beginCaptures": {
"1": {
"name": "keyword.control.assert.java"
}
},
"end": "$",
"name": "meta.declaration.assertion.java",
"patterns": [
{
"match": ":",
"name": "keyword.operator.assert.expression-seperator.java"
},
{
"include": "#code"
}
]
}
]
},
"class": {
"begin": "(?=\\w?[\\w\\s]*(?:class|(?:@)?interface|enum)\\s+\\w+)",
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.class.end.java"
}
},
"name": "meta.class.java",
"patterns": [
{
"include": "#storage-modifiers"
},
{
"include": "#comments"
},
{
"captures": {
"1": {
"name": "storage.modifier.java"
},
"2": {
"name": "entity.name.type.class.java"
}
},
"match": "(class|(?:@)?interface|enum)\\s+(\\w+)",
"name": "meta.class.identifier.java"
},
{
"begin": "extends",
"beginCaptures": {
"0": {
"name": "storage.modifier.extends.java"
}
},
"end": "(?={|implements)",
"name": "meta.definition.class.inherited.classes.java",
"patterns": [
{
"include": "#object-types-inherited"
},
{
"include": "#comments"
}
]
},
{
"begin": "(implements)\\s",
"beginCaptures": {
"1": {
"name": "storage.modifier.implements.java"
}
},
"end": "(?=\\s*extends|\\{)",
"name": "meta.definition.class.implemented.interfaces.java",
"patterns": [
{
"include": "#object-types-inherited"
},
{
"include": "#comments"
}
]
},
{
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.section.class.begin.java"
}
},
"end": "(?=})",
"name": "meta.class.body.java",
"patterns": [
{
"include": "#class-body"
}
]
}
]
},
"class-body": {
"patterns": [
{
"include": "#comments"
},
{
"include": "#class"
},
{
"include": "#enums"
},
{
"include": "#variables"
},
{
"include": "#methods"
},
{
"include": "#annotations"
},
{
"include": "#storage-modifiers"
},
{
"include": "#code"
}
]
},
"code": {
"patterns": [
{
"include": "#comments"
},
{
"include": "#class"
},
{
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.section.block.begin.java"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.block.end.java"
}
},
"patterns": [
{
"include": "#code"
}
]
},
{
"include": "#assertions"
},
{
"include": "#parens"
},
{
"include": "#constants-and-special-vars"
},
{
"include": "#anonymous-classes-and-new"
},
{
"include": "#annotations"
},
{
"include": "#keywords"
},
{
"include": "#storage-modifiers"
},
{
"include": "#method-call"
},
{
"include": "#strings"
},
{
"include": "#all-types"
}
]
},
"comments": {
"patterns": [
{
"captures": {
"0": {
"name": "punctuation.definition.comment.java"
}
},
"match": "/\\*\\*/",
"name": "comment.block.empty.java"
},
{
"include": "text.html.javadoc"
},
{
"include": "#comments-inline"
}
]
},
"comments-inline": {
"patterns": [
{
"begin": "/\\*",
"captures": {
"0": {
"name": "punctuation.definition.comment.java"
}
},
"end": "\\*/",
"name": "comment.block.java"
},
{
"begin": "(^[ \\t]+)?(?=//)",
"beginCaptures": {
"1": {
"name": "punctuation.whitespace.comment.leading.java"
}
},
"end": "(?!\\G)",
"patterns": [
{
"begin": "//",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.java"
}
},
"end": "\\n",
"name": "comment.line.double-slash.java"
}
]
}
]
},
"constants-and-special-vars": {
"patterns": [
{
"match": "\\b(true|false|null)\\b",
"name": "constant.language.java"
},
{
"match": "\\b(this|super)\\b",
"name": "variable.language.java"
},
{
"match": "\\b0[xX]\\h([\\h_]*\\h)?[lL]?(?!\\w|\\.)",
"name": "constant.numeric.hex.java"
},
{
"match": "\\b0[0-7_]*[0-7][lL]?\\b",
"name": "constant.numeric.octal.java"
},
{
"match": "\\b0[bB][01]([01_]*[01])?[lL]?\\b",
"name": "constant.numeric.binary.java"
},
{
"match": "\\b(0|[1-9]([0-9_]*[0-9])?)[lL]?(?!\\w|\\.)",
"name": "constant.numeric.integer.java"
},
{
"match": "(?x)\n\t\t\t\t\t\t(?<!\\w)\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t\t(?>\n\t\t\t\t\t\t\t0[xX]\t\t\t\t\t\t\t\t\t# Start literal\n\t\t\t\t\t\t\t(\\h([\\h_]*\\h)?)?\t\t\t\t\t\t# Optional Number\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(?<=\\h)\\.\t\t\t\t\t\t\t# A number must exist on\n\t\t\t\t\t\t | \\.(?=\\h)\t\t\t\t\t\t\t# one side of the decimal\n\t\t\t\t\t\t | (?<=\\h)\t\t\t\t\t\t\t\t# Decimal not required\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t(\\h([\\h_]*\\h)?)?\t\t\t\t\t\t# Optional Number\n\t\t\t\t\t\t\t[pP]\t\t\t\t\t\t\t\t\t# Exponent Indicator\n\t\t\t\t\t\t\t[+-]?(0|[1-9]([0-9_]*[0-9])?)\t\t\t# Signed Integer\n\t\t\t\t\t\t\t[fFdD]?\t\t\t\t\t\t\t\t\t# Float Type Suffix\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(?!\\w)\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t",
"name": "constant.numeric.hex-float.java"
},
{
"match": "(?x)\n\t\t\t\t\t\t(?<!\\w)\t\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t\t(?>\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(0|[1-9]([0-9_]*[0-9])?)\t\t\t\t# Leading digits\n\t\t\t\t\t\t\t\t(?=[eEfFdD.])\t\t\t\t\t\t\t# Allow for numbers without .\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t(?<=[0-9])(?=[eEfFdD])\t\t\t\t\t# Allow for numbers without .\n\t\t\t\t\t\t\t | \\.\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t[0-9]([0-9_]*[0-9])?\t\t\t\t\t# Numbers after .\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t[eE][+-]?(0|[1-9]([0-9_]*[0-9])?)\t\t# Exponent\n\t\t\t\t\t\t\t)?\n\t\t\t\t\t\t\t[fFdD]?\t\t\t\t\t\t\t\t\t\t# Float Type Suffix\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(?!\\w)\t\t\t\t\t\t\t\t\t\t\t# Ensure word boundry\n\t\t\t\t\t",
"name": "constant.numeric.float.java"
},
{
"captures": {
"1": {
"name": "keyword.operator.dereference.java"
}
},
"match": "(\\.)?\\b([A-Z][A-Z0-9_]+)(?!<|\\.class|\\s*\\w+\\s*=)\\b",
"name": "constant.other.java"
}
]
},
"enums": {
"begin": "^(?=\\s*[A-Z0-9_]+\\s*({|\\(|,))",
"end": "(?=;|})",
"patterns": [
{
"begin": "\\w+",
"beginCaptures": {
"0": {
"name": "constant.other.enum.java"
}
},
"end": "(?=,|;|})",
"name": "meta.enum.java",
"patterns": [
{
"include": "#parens"
},
{
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.section.enum.begin.java"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.section.enum.end.java"
}
},
"patterns": [
{
"include": "#class-body"
}
]
}
]
},
{
"include": "#comments"
},
{
"include": "#annotations"
}
]
},
"keywords": {
"patterns": [
{
"match": "\\b(try|catch|finally|throw)\\b",
"name": "keyword.control.catch-exception.java"
},
{
"match": "\\?|:",
"name": "keyword.control.ternary.java"
},
{
"match": "\\b(return|break|case|continue|default|do|while|for|switch|if|else)\\b",
"name": "keyword.control.java"
},
{
"match": "\\b(instanceof)\\b",
"name": "keyword.operator.java"
},
{
"match": "(<<|>>>?|~|\\^)",
"name": "keyword.operator.bitwise.java"
},
{
"match": "((&|\\^|\\||<<|>>>?)=)",
"name": "keyword.operator.assignment.bitwise.java"
},
{
"match": "(===?|!=|<=|>=|<>|<|>)",
"name": "keyword.operator.comparison.java"
},
{
"match": "([+*/%-]=)",
"name": "keyword.operator.assignment.arithmetic.java"
},
{
"match": "(=)",
"name": "keyword.operator.assignment.java"
},
{
"match": "(\\-\\-|\\+\\+)",
"name": "keyword.operator.increment-decrement.java"
},
{
"match": "(\\-|\\+|\\*|\\/|%)",
"name": "keyword.operator.arithmetic.java"
},
{
"match": "(!|&&|\\|\\|)",
"name": "keyword.operator.logical.java"
},
{
"match": "(\\||&)",
"name": "keyword.operator.bitwise.java"
},
{
"match": "(?<=\\S)\\.(?=\\S)",
"name": "keyword.operator.dereference.java"
},
{
"match": ";",
"name": "punctuation.terminator.java"
}
]
},
"method-call": {
"begin": "([\\w$]+)(\\()",
"beginCaptures": {
"1": {
"name": "meta.method.java"
},
"2": {
"name": "punctuation.definition.method-parameters.begin.java"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.definition.method-parameters.end.java"
}
},
"name": "meta.method-call.java",
"patterns": [
{
"match": ",",
"name": "punctuation.definition.seperator.parameter.java"
},
{
"include": "#code"
}
]
},
"methods": {
"begin": "(?!new)(?=[\\w<].*\\s+)(?=([^=/]|/(?!/))+\\()",
"end": "(})|(?=;)",
"endCaptures": {
"1": {
"name": "punctuation.section.method.end.java"
}
},
"name": "meta.method.java",
"patterns": [
{
"include": "#storage-modifiers"
},
{
"begin": "(\\w+)\\s*\\(",
"beginCaptures": {
"1": {
"name": "entity.name.function.java"
}
},
"end": "\\)",
"name": "meta.method.identifier.java",
"patterns": [
{
"include": "#parameters"
},
{
"include": "#comments"
}
]
},
{
"begin": "<",
"end": ">",
"name": "storage.type.token.java",
"patterns": [
{
"include": "#object-types"
},
{
"begin": "<",
"comment": "This is just to support <>'s with no actual type prefix",
"end": ">|[^\\w\\s,\\[\\]<]",
"name": "storage.type.generic.java"
}
]
},
{
"begin": "(?=\\w.*\\s+\\w+\\s*\\()",
"end": "(?=\\w+\\s*\\()",
"name": "meta.method.return-type.java",
"patterns": [
{
"include": "#all-types"
},
{
"include": "#comments"
}
]
},
{
"include": "#throws"
},
{
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.section.method.begin.java"
}
},
"end": "(?=})",
"name": "meta.method.body.java",
"patterns": [
{
"include": "#code"
}
]
},
{
"include": "#comments"
}
]
},
"object-types": {
"patterns": [
{
"begin": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)<",
"end": ">|[^\\w\\s,\\?<\\[\\]]",
"name": "storage.type.generic.java",
"patterns": [
{
"include": "#object-types"
},
{
"begin": "<",
"comment": "This is just to support <>'s with no actual type prefix",
"end": ">|[^\\w\\s,\\[\\]<]",
"name": "storage.type.generic.java"
}
]
},
{
"begin": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)(?=\\[)",
"end": "(?=[^\\]\\s])",
"name": "storage.type.object.array.java",
"patterns": [
{
"begin": "\\[",
"end": "\\]",
"patterns": [
{
"include": "#code"
}
]
}
]
},
{
"captures": {
"1": {
"name": "keyword.operator.dereference.java"
}
},
"match": "\\b(?:[a-z]\\w*(\\.))*[A-Z]+\\w*\\b",
"name": "storage.type.java"
}
]
},
"object-types-inherited": {
"patterns": [
{
"begin": "\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)<",
"end": ">|[^\\w\\s,<]",
"name": "entity.other.inherited-class.java",
"patterns": [
{
"include": "#object-types"
},
{
"begin": "<",
"comment": "This is just to support <>'s with no actual type prefix",
"end": ">|[^\\w\\s,<]",
"name": "storage.type.generic.java"
}
]
},
{
"captures": {
"1": {
"name": "keyword.operator.dereference.java"
}
},
"match": "\\b(?:[a-z]\\w*(\\.))*[A-Z]+\\w*",
"name": "entity.other.inherited-class.java"
}
]
},
"parameters": {
"patterns": [
{
"match": "final",
"name": "storage.modifier.java"
},
{
"include": "#annotations"
},
{
"include": "#primitive-arrays"
},
{
"include": "#primitive-types"
},
{
"include": "#object-types"
},
{
"match": "\\w+",
"name": "variable.parameter.java"
}
]
},
"parens": {
"begin": "\\(",
"end": "\\)",
"patterns": [
{
"include": "#code"
}
]
},
"primitive-arrays": {
"patterns": [
{
"match": "\\b(?:void|boolean|byte|char|short|int|float|long|double)(\\[\\])*\\b",
"name": "storage.type.primitive.array.java"
}
]
},
"primitive-types": {
"patterns": [
{
"match": "\\b(?:void|boolean|byte|char|short|int|float|long|double)\\b",
"name": "storage.type.primitive.java"
}
]
},
"storage-modifiers": {
"captures": {
"1": {
"name": "storage.modifier.java"
}
},
"match": "\\b(public|private|protected|static|final|native|synchronized|volatile|abstract|threadsafe|transient)\\b"
},
"strings": {
"patterns": [
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.java"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.java"
}
},
"name": "string.quoted.double.java",
"patterns": [
{
"match": "\\\\.",
"name": "constant.character.escape.java"
}
]
},
{
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.java"
}
},
"end": "'",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.java"
}
},
"name": "string.quoted.single.java",
"patterns": [
{
"match": "\\\\.",
"name": "constant.character.escape.java"
}
]
}
]
},
"throws": {
"begin": "throws",
"beginCaptures": {
"0": {
"name": "storage.modifier.java"
}
},
"end": "(?={|;)",
"name": "meta.throwables.java",
"patterns": [
{
"include": "#object-types"
}
]
},
"values": {
"patterns": [
{
"include": "#strings"
},
{
"include": "#object-types"
},
{
"include": "#constants-and-special-vars"
}
]
},
"variables": {
"applyEndPatternLast": 1,
"patterns": [
{
"begin": "(?x:(?=\n (?:\n (?:private|protected|public|native|synchronized|volatile|abstract|threadsafe|transient|static|final) # visibility/modifier\n |\n (?:def)\n |\n (?:void|boolean|byte|char|short|int|float|long|double)\n |\n (?:(?:[a-z]\\w*\\.)*[A-Z]+\\w*) # object type\n )\n \\s+\n (?!private|protected|public|native|synchronized|volatile|abstract|threadsafe|transient|static|final|def|void|boolean|byte|char|short|int|float|long|double)\n [\\w\\d_<>\\[\\],\\?][\\w\\d_<>\\[\\],\\? \\t]*\n (?:=|$)\n \n\t\t\t\t\t))",
"end": "(?=;)",
"name": "meta.definition.variable.java",
"patterns": [
{
"match": "\\s"
},
{
"captures": {
"1": {
"name": "constant.other.variable.java"
}
},
"match": "([A-Z_0-9]+)\\s+(?=\\=)"
},
{
"captures": {
"1": {
"name": "meta.definition.variable.name.java"
}
},
"match": "(\\w[^\\s,]*)\\s+(?=\\=)"
},
{
"begin": "=",
"beginCaptures": {
"0": {
"name": "keyword.operator.assignment.java"
}
},
"end": "(?=;)",
"patterns": [
{
"include": "#code"
}
]
},
{
"captures": {
"1": {
"name": "meta.definition.variable.name.java"
}
},
"match": "(\\w[^\\s=]*)(?=\\s*;)"
},
{
"include": "#code"
}
]
}
]
}
},
"scopeName": "source.java",
"uuid": "2B449DF6-6B1D-11D9-94EC-000D93589AF6",
"version": "https://github.com/textmate/java.tmbundle/commit/faffa518d0b22b68b4e5e6b4c939722522b97d40"
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册