{"name":"AspectJ","scopeName":"source.aspectj","patterns":[{"name":"meta.package.java","match":"^\\s*(package)\\b(?:\\s*([^ ;$]+)\\s*(;)?)?","captures":{"1":{"name":"keyword.other.package.java"},"2":{"name":"storage.modifier.package.java"},"3":{"name":"punctuation.terminator.java"}}},{"name":"meta.import.java","match":"^\\s*(import)\\b(?:\\s*([^ ;$]+)\\s*(;)?)?","captures":{"1":{"name":"keyword.other.import.java"},"2":{"name":"storage.modifier.import.java"},"3":{"name":"punctuation.terminator.java"}}},{"include":"#code"}],"repository":{"advice":{"name":"meta.advice.aspectj","begin":"(?!new)(?!.*pointcut)(?=[^=:]+\\([^\\)]*\\)[^=]*:)","end":"}|(?=;)","patterns":[{"include":"#storage-modifiers"},{"name":"meta.method.identifier.java","begin":"(around|after|before|throwing|returning)\\s*\\(","end":"\\)","patterns":[{"include":"#parameters"}],"beginCaptures":{"1":{"name":"keyword.other.advice.aspectj"}}},{"name":"keyword.other.advice.aspectj","match":"(throwing|returning)(?=\\s*:)"},{"name":"meta.advice.identifier.aspectj","begin":":","end":"(?={)","patterns":[{"include":"#pointcut-definitions"}]},{"name":"meta.method.return-type.java","begin":"(?=\\w.*\\s+\\w+\\s*\\()","end":"(?=\\w+\\s*\\()","patterns":[{"include":"#all-types"}]},{"include":"#throws"},{"name":"meta.method.body.java","begin":"{","end":"(?=})","patterns":[{"include":"#code"}]}]},"all-types":{"patterns":[{"include":"#primitive-arrays"},{"include":"#primitive-types"},{"include":"#object-types"}]},"annotations":{"patterns":[{"name":"meta.declaration.annotation.java","begin":"(@[^ (]+)(\\()","end":"(\\))","patterns":[{"match":"(\\w*)\\s*(=)","captures":{"1":{"name":"constant.other.key.java"},"2":{"name":"keyword.operator.assignment.java"}}},{"include":"#code"},{"name":"punctuation.seperator.property.java","match":","}],"beginCaptures":{"1":{"name":"storage.type.annotation.java"},"2":{"name":"punctuation.definition.annotation-arguments.begin.java"}},"endCaptures":{"1":{"name":"punctuation.definition.annotation-arguments.end.java"}}},{"name":"storage.type.annotation.java","match":"@\\w*"}]},"anonymous-classes-and-new":{"begin":"\\bnew\\b","end":"(?\u003c=\\)|\\])(?!\\s*{)|(?\u003c=})|(?=;)","patterns":[{"begin":"(\\w+)\\s*(?=\\[)","end":"}|(?=;|\\))","patterns":[{"begin":"\\[","end":"\\]","patterns":[{"include":"#code"}]},{"begin":"{","end":"(?=})","patterns":[{"include":"#code"}]}],"beginCaptures":{"1":{"name":"storage.type.java"}}},{"begin":"(?=\\w.*\\()","end":"(?\u003c=\\))","patterns":[{"include":"#object-types"},{"begin":"\\(","end":"\\)","patterns":[{"include":"#code"}],"beginCaptures":{"1":{"name":"storage.type.java"}}}]},{"name":"meta.inner-class.java","begin":"{","end":"}","patterns":[{"include":"#class-body"}]}],"beginCaptures":{"0":{"name":"keyword.control.new.java"}}},"assertions":{"patterns":[{"name":"meta.declaration.assertion.java","begin":"\\b(assert)\\s","end":"$","patterns":[{"name":"keyword.operator.assert.expression-seperator.java","match":":"},{"include":"#code"}],"beginCaptures":{"1":{"name":"keyword.control.assert.java"}}}]},"class":{"name":"meta.class.aspectj","begin":"(?=\\w?[\\w\\s]*(?:class|(?:@)?interface|enum|aspect)\\s+\\w+)","end":"}","patterns":[{"include":"#storage-modifiers"},{"include":"#comments"},{"name":"meta.class.identifier.aspectj","match":"(class|(?:@)?interface|enum|aspect)\\s+(\\w+)","captures":{"1":{"name":"storage.type.java"},"2":{"name":"entity.name.type.class.java"}}},{"name":"meta.definition.class.inherited.classes.java","begin":"extends","end":"(?={|implements)","patterns":[{"include":"#object-types-inherited"},{"include":"#comments"}],"beginCaptures":{"0":{"name":"storage.modifier.extends.java"}}},{"name":"meta.definition.class.implemented.interfaces.java","begin":"(implements)\\s","end":"(?=\\s*extends|\\{)","patterns":[{"include":"#object-types-inherited"},{"include":"#comments"}],"beginCaptures":{"1":{"name":"storage.modifier.implements.java"}}},{"name":"meta.class.body.java","begin":"{","end":"(?=})","patterns":[{"include":"#class-body"}]}],"endCaptures":{"0":{"name":"punctuation.section.class.end.java"}}},"class-body":{"patterns":[{"include":"#comments"},{"include":"#class"},{"include":"#enums"},{"include":"#methods"},{"include":"#pointcuts"},{"include":"#advice"},{"include":"#annotations"},{"include":"#storage-modifiers"},{"include":"#code"},{"include":"#declare-precedence"},{"include":"#declare-parents"},{"include":"#declare-constructs"},{"include":"#declare-warnings-errors"}]},"code":{"patterns":[{"include":"#comments"},{"include":"#class"},{"begin":"{","end":"}","patterns":[{"include":"#code"}]},{"include":"#assertions"},{"include":"#parens"},{"include":"#constants-and-special-vars"},{"include":"#anonymous-classes-and-new"},{"include":"#keywords"},{"include":"#storage-modifiers"},{"include":"#strings"},{"include":"#all-types"},{"name":"support.function.builtin.aspectj","match":"\\b(proceed)\\b"}]},"comments":{"patterns":[{"name":"comment.block.empty.java","match":"/\\*\\*/","captures":{"0":{"name":"punctuation.definition.comment.java"}}},{"include":"text.html.javadoc"},{"include":"#comments-inline"}]},"comments-inline":{"patterns":[{"name":"comment.block.java","begin":"/\\*","end":"\\*/","captures":{"0":{"name":"punctuation.definition.comment.java"}}},{"match":"\\s*((//).*$\\n?)","captures":{"1":{"name":"comment.line.double-slash.java"},"2":{"name":"punctuation.definition.comment.java"}}}]},"constants-and-special-vars":{"patterns":[{"name":"constant.language.java","match":"\\b(true|false|null)\\b"},{"name":"variable.language.java","match":"\\b(this|super)\\b"},{"name":"constant.numeric.java","match":"\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)([LlFfUuDd]|UL|ul)?\\b"},{"name":"constant.other.java","match":"(\\.)?\\b([A-Z][A-Z0-9_]+)(?!\u003c|\\.class|\\s*\\w+\\s*=)\\b","captures":{"1":{"name":"keyword.operator.dereference.java"}}}]},"declare-constructs":{"name":"meta.declare.construct.aspectj","begin":"(declare)\\s+(@(?:type|method|field|package|constructor))\\s*:","end":";","patterns":[{"include":"#keywords"},{"include":"#all-types"},{"include":"#storage-modifiers"},{"include":"#strings"}],"beginCaptures":{"1":{"name":"storage.type.declare.aspectj"},"2":{"name":"storage.type.declare.construct.aspectj"}}},"declare-parents":{"name":"meta.declare.precedence.aspectj","begin":"(declare)\\s+(parents)\\s*:","end":";","patterns":[{"include":"#keywords"},{"name":"storage.modifier.class.aspectj","match":"\\b(implements|extends)\\b"}],"beginCaptures":{"1":{"name":"storage.type.declare.aspectj"},"2":{"name":"storage.type.declare.parents.aspectj"}}},"declare-precedence":{"name":"meta.declare.precedence.aspectj","begin":"(declare)\\s+(precedence)\\s*:","end":";","beginCaptures":{"1":{"name":"storage.type.declare.aspectj"},"2":{"name":"storage.type.declare.precedence.aspectj"}}},"declare-warnings-errors":{"name":"meta.declare.alerts.aspectj","begin":"(declare)\\s+(warning|error)\\s*:","end":";","patterns":[{"include":"#pointcut-definitions"},{"include":"#strings"}],"beginCaptures":{"1":{"name":"storage.type.declare.aspectj"},"2":{"name":"storage.type.declare.alerts.aspectj"}}},"enums":{"begin":"^(?=\\s*[A-Z0-9_]+\\s*({|\\(|,))","end":"(?=;|})","patterns":[{"name":"meta.enum.java","begin":"\\w+","end":"(?=,|;|})","patterns":[{"include":"#parens"},{"begin":"{","end":"}","patterns":[{"include":"#class-body"}]}],"beginCaptures":{"0":{"name":"constant.other.enum.java"}}}]},"keywords":{"patterns":[{"name":"keyword.control.catch-exception.java","match":"\\b(try|catch|finally|throw)\\b"},{"name":"keyword.control.java","match":"\\?|:"},{"name":"keyword.control.java","match":"\\b(return|break|case|continue|default|do|while|for|switch|if|else)\\b"},{"name":"keyword.operator.java","match":"\\b(instanceof)\\b"},{"name":"keyword.operator.comparison.java","match":"(==|!=|\u003c=|\u003e=|\u003c\u003e|\u003c|\u003e)"},{"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":"(!|\u0026\u0026|\\|\\|)"},{"name":"keyword.operator.dereference.java","match":"(?\u003c=\\S)\\.(?=\\S)"},{"name":"punctuation.terminator.java","match":";"}]},"methods":{"name":"meta.method.java","begin":"(?!new)(?!.*pointcut)(?=\\w[^=:]*\\s+)(?=[^=:]+\\()(?!.*:)","end":"}|(?=;)","patterns":[{"include":"#storage-modifiers"},{"name":"meta.method.identifier.java","begin":"([\\w\\.]+)\\s*\\(","end":"\\)","patterns":[{"include":"#parameters"}],"beginCaptures":{"1":{"name":"entity.name.function.java"}}},{"name":"meta.method.return-type.java","begin":"(?=\\w.*\\s+\\w+\\s*\\()","end":"(?=\\w+\\s*\\()","patterns":[{"include":"#all-types"}]},{"include":"#throws"},{"name":"meta.method.body.java","begin":"{","end":"(?=})","patterns":[{"include":"#code"}]}]},"object-types":{"patterns":[{"name":"storage.type.generic.java","begin":"\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)\u003c","end":"\u003e|[^\\w\\s,\\?\u003c\\[\\]]","patterns":[{"include":"#object-types"},{"name":"storage.type.generic.java","begin":"\u003c","end":"\u003e|[^\\w\\s,\\[\\]\u003c]"}]},{"name":"storage.type.object.array.java","begin":"\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)(?=\\[)","end":"(?=[^\\]\\s])","patterns":[{"begin":"\\[","end":"\\]","patterns":[{"include":"#code"}]}]},{"name":"storage.type.java","match":"\\b(?:[a-z]\\w*(\\.))*[A-Z]+\\w*\\b","captures":{"1":{"name":"keyword.operator.dereference.java"}}}]},"object-types-inherited":{"patterns":[{"name":"entity.other.inherited-class.java","begin":"\\b((?:[a-z]\\w*\\.)*[A-Z]+\\w*)\u003c","end":"\u003e|[^\\w\\s,\u003c]","patterns":[{"include":"#object-types"},{"name":"storage.type.generic.java","begin":"\u003c","end":"\u003e|[^\\w\\s,\u003c]"}]},{"name":"entity.other.inherited-class.java","match":"\\b(?:[a-z]\\w*(\\.))*[A-Z]+\\w*","captures":{"1":{"name":"keyword.operator.dereference.java"}}}]},"parameters":{"patterns":[{"name":"storage.modifier.java","match":"final"},{"include":"#primitive-arrays"},{"include":"#primitive-types"},{"include":"#object-types"},{"name":"variable.parameter.java","match":"\\w+"}]},"parens":{"begin":"\\(","end":"\\)","patterns":[{"include":"#code"}]},"pointcut-definitions":{"patterns":[{"include":"#keywords"},{"include":"#all-types"},{"name":"support.function.builtin.aspectj","match":"(@annotation|\\b(get|set|adviceexecution|execution|call|target|args|within|withincode|handler|cflow|cflowbelow|this|if|preinitialization|staticinitialization|initialization)\\b)"}]},"pointcuts":{"name":"meta.pointcut.aspectj","begin":"(?=\\w?.*\\s+)(pointcut)(?=\\s+[^=]+\\()","end":";","patterns":[{"include":"#storage-modifiers"},{"name":"meta.pointcut.identifier.aspectj","begin":"(\\w+)\\s*\\(","end":"\\)","patterns":[{"include":"#parameters"}],"beginCaptures":{"1":{"name":"entity.name.function.aspectj"}}},{"name":"meta.pointcut.body.aspectj","begin":":","end":"(?=;)","patterns":[{"include":"#pointcut-definitions"}]}],"beginCaptures":{"1":{"name":"storage.type.aspectj"}}},"primitive-arrays":{"patterns":[{"name":"storage.type.primitive.array.java","match":"\\b(?:void|boolean|byte|char|short|int|float|long|double)(\\[\\])*\\b"}]},"primitive-types":{"patterns":[{"name":"storage.type.primitive.java","match":"\\b(?:void|boolean|byte|char|short|int|float|long|double)\\b"}]},"storage-modifiers":{"patterns":[{"name":"storage.modifier.java","match":"\\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient)\\b"},{"name":"storage.modifier.aspectj","match":"\\b(privileged)\\b"}]},"strings":{"patterns":[{"name":"string.quoted.double.java","begin":"\"","end":"\"","patterns":[{"name":"constant.character.escape.java","match":"\\\\."}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.java"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.java"}}},{"name":"string.quoted.single.java","begin":"'","end":"'","patterns":[{"name":"constant.character.escape.java","match":"\\\\."}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.java"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.java"}}}]},"throws":{"name":"meta.throwables.java","begin":"throws","end":"(?={|;)","patterns":[{"include":"#object-types"}],"beginCaptures":{"0":{"name":"storage.modifier.java"}}},"values":{"patterns":[{"include":"#strings"},{"include":"#object-types"},{"include":"#constants-and-special-vars"}]}}}