[{"displayName":"Apex","fileTypes":["apex","cls","trigger"],"name":"apex","patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#directives"},{"include":"#declarations"},{"include":"#script-top-level"}],"repository":{"annotation-declaration":{"begin":"(@[_[:alpha:]]+)\\b","beginCaptures":{"1":{"name":"storage.type.annotation.apex"}},"end":"(?=\\s(?!\\())|(?=\\s*$)|(?<=\\s*\\))","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"}]},{"include":"#statement"}]},"argument-list":{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#named-argument"},{"include":"#expression"},{"include":"#punctuation-comma"}]},"array-creation-expression":{"begin":"\\b(new)\\b\\s*(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)?\\s*(?=\\[)","beginCaptures":{"1":{"name":"keyword.control.new.apex"},"2":{"patterns":[{"include":"#support-type"},{"include":"#type"}]}},"end":"(?<=])","patterns":[{"include":"#bracketed-argument-list"}]},"block":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#statement"}]},"boolean-literal":{"patterns":[{"match":"(?<!\\.)\\btrue\\b","name":"constant.language.boolean.true.apex"},{"match":"(?<!\\.)\\bfalse\\b","name":"constant.language.boolean.false.apex"}]},"bracketed-argument-list":{"begin":"\\[","beginCaptures":{"0":{"name":"punctuation.squarebracket.open.apex"}},"end":"]","endCaptures":{"0":{"name":"punctuation.squarebracket.close.apex"}},"patterns":[{"include":"#soql-query-expression"},{"include":"#named-argument"},{"include":"#expression"},{"include":"#punctuation-comma"}]},"break-or-continue-statement":{"captures":{"1":{"name":"keyword.control.flow.break.apex"},"2":{"name":"keyword.control.flow.continue.apex"}},"match":"(?<!\\.)\\b(?:(break)|(continue))\\b"},"cast-expression":{"captures":{"1":{"name":"punctuation.parenthesis.open.apex"},"2":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"6":{"name":"punctuation.parenthesis.close.apex"}},"match":"(\\()\\s*(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s*(\\))(?=\\s*@?[(_[:alnum:]])"},"catch-clause":{"begin":"(?<!\\.)\\b(catch)\\b","beginCaptures":{"1":{"name":"keyword.control.try.catch.apex"}},"end":"(?<=})","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"captures":{"1":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"5":{"name":"entity.name.variable.local.apex"}},"match":"(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s*(?:(\\g<identifier>)\\b)?"}]},{"include":"#comment"},{"include":"#block"}]},"class-declaration":{"begin":"(?=\\bclass\\b)","end":"(?<=})","patterns":[{"begin":"\\b(class)\\b\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*","beginCaptures":{"1":{"name":"keyword.other.class.apex"},"2":{"name":"entity.name.type.class.apex"}},"end":"(?=\\{)","patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#extends-class"},{"include":"#implements-class"}]},{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#class-or-trigger-members"}]},{"include":"#javadoc-comment"},{"include":"#comment"}]},"class-or-trigger-members":{"patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#storage-modifier"},{"include":"#sharing-modifier"},{"include":"#type-declarations"},{"include":"#field-declaration"},{"include":"#property-declaration"},{"include":"#indexer-declaration"},{"include":"#variable-initializer"},{"include":"#constructor-declaration"},{"include":"#method-declaration"},{"include":"#initializer-block"},{"include":"#punctuation-semicolon"}]},"colon-expression":{"match":":","name":"keyword.operator.conditional.colon.apex"},"comment":{"patterns":[{"begin":"/\\*(\\*)?","beginCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"end":"\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"name":"comment.block.apex"},{"begin":"(^\\s+)?(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.apex"}},"end":"(?=$)","patterns":[{"begin":"(?<!/)///(?!/)","beginCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"end":"(?=$)","name":"comment.block.documentation.apex","patterns":[{"include":"#xml-doc-comment"}]},{"begin":"(?<!/)//(?:(?!/)|(?=//))","beginCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"end":"(?=$)","name":"comment.line.double-slash.apex"}]}]},"conditional-operator":{"begin":"(?<!\\?)\\?(?!\\?|\\.(?!\\d)|\\[)","beginCaptures":{"0":{"name":"keyword.operator.conditional.question-mark.apex"}},"end":":","endCaptures":{"0":{"name":"keyword.operator.conditional.colon.apex"}},"patterns":[{"include":"#expression"}]},"constructor-declaration":{"begin":"(?=@?[_[:alpha:]][_[:alnum:]]*\\s*\\()","end":"(?<=})|(?=;)","patterns":[{"captures":{"1":{"name":"entity.name.function.apex"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b"},{"begin":"(:)","beginCaptures":{"1":{"name":"punctuation.separator.colon.apex"}},"end":"(?=\\{|=>)","patterns":[{"include":"#constructor-initializer"}]},{"include":"#parenthesized-parameter-list"},{"include":"#comment"},{"include":"#expression-body"},{"include":"#block"}]},"constructor-initializer":{"begin":"\\b(this)\\b\\s*(?=\\()","beginCaptures":{"1":{"name":"keyword.other.this.apex"}},"end":"(?<=\\))","patterns":[{"include":"#argument-list"}]},"date-literal-with-params":{"captures":{"1":{"name":"keyword.operator.query.date.apex"}},"match":"\\b(((?:LAST_N_DAY|NEXT_N_DAY|NEXT_N_WEEK|LAST_N_WEEK|NEXT_N_MONTH|LAST_N_MONTH|NEXT_N_QUARTER|LAST_N_QUARTER|NEXT_N_YEAR|LAST_N_YEAR|NEXT_N_FISCAL_QUARTER|LAST_N_FISCAL_QUARTER|NEXT_N_FISCAL_YEAR|LAST_N_FISCAL_YEAR)S)\\s*:\\d+)\\b"},"date-literals":{"captures":{"1":{"name":"keyword.operator.query.date.apex"}},"match":"\\b(YESTERDAY|TODAY|TOMORROW|LAST_WEEK|THIS_WEEK|NEXT_WEEK|LAST_MONTH|THIS_MONTH|NEXT_MONTH|LAST_90_DAYS|NEXT_90_DAYS|THIS_QUARTER|LAST_QUARTER|NEXT_QUARTER|THIS_YEAR|LAST_YEAR|NEXT_YEAR|THIS_FISCAL_QUARTER|LAST_FISCAL_QUARTER|NEXT_FISCAL_QUARTER|THIS_FISCAL_YEAR|LAST_FISCAL_YEAR|NEXT_FISCAL_YEAR)\\b\\s*"},"declarations":{"patterns":[{"include":"#type-declarations"},{"include":"#punctuation-semicolon"}]},"directives":{"patterns":[{"include":"#punctuation-semicolon"}]},"dml-expression":{"begin":"\\b(delete|insert|undelete|update|upsert)\\b\\s+(?!new\\b)","beginCaptures":{"1":{"name":"support.function.apex"}},"end":"(?<=;)","patterns":[{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"do-statement":{"begin":"(?<!\\.)\\b(do)\\b","beginCaptures":{"1":{"name":"keyword.control.loop.do.apex"}},"end":"(?=[;}])","patterns":[{"include":"#statement"}]},"element-access-expression":{"begin":"(?:(\\??\\.)\\s*)?(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*)?(?:(\\?)\\s*)?(?=\\[)","beginCaptures":{"1":{"patterns":[{"include":"#punctuation-accessor"},{"include":"#operator-safe-navigation"}]},"2":{"name":"variable.other.object.property.apex"},"3":{"name":"keyword.operator.null-conditional.apex"}},"end":"(?<=])(?!\\s*\\[)","patterns":[{"include":"#bracketed-argument-list"}]},"else-part":{"begin":"(?<!\\.)\\b(else)\\b","beginCaptures":{"1":{"name":"keyword.control.conditional.else.apex"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#statement"}]},"enum-declaration":{"begin":"(?=\\benum\\b)","end":"(?<=})","patterns":[{"begin":"(?=enum)","end":"(?=\\{)","patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"captures":{"1":{"name":"keyword.other.enum.apex"},"2":{"name":"entity.name.type.enum.apex"}},"match":"(enum)\\s+(@?[_[:alpha:]][_[:alnum:]]*)"}]},{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#punctuation-comma"},{"begin":"@?[_[:alpha:]][_[:alnum:]]*","beginCaptures":{"0":{"name":"entity.name.variable.enum-member.apex"}},"end":"(?=([,}]))","patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#variable-initializer"}]}]},{"include":"#javadoc-comment"},{"include":"#comment"}]},"expression":{"patterns":[{"include":"#comment"},{"include":"#dml-expression"},{"include":"#merge-expression"},{"include":"#support-expression"},{"include":"#throw-expression"},{"include":"#this-expression"},{"include":"#trigger-context-declaration"},{"include":"#conditional-operator"},{"include":"#expression-operators"},{"include":"#soql-query-expression"},{"include":"#object-creation-expression"},{"include":"#array-creation-expression"},{"include":"#invocation-expression"},{"include":"#member-access-expression"},{"include":"#element-access-expression"},{"include":"#cast-expression"},{"include":"#literal"},{"include":"#parenthesized-expression"},{"include":"#initializer-expression"},{"include":"#identifier"}]},"expression-body":{"begin":"=>","beginCaptures":{"0":{"name":"keyword.operator.arrow.apex"}},"end":"(?=[),;}])","patterns":[{"include":"#expression"}]},"expression-operators":{"patterns":[{"match":"[-%*+/]=","name":"keyword.operator.assignment.compound.apex"},{"match":"(?:[\\&^]|<<|>>|\\|)=","name":"keyword.operator.assignment.compound.bitwise.apex"},{"match":"<<|>>","name":"keyword.operator.bitwise.shift.apex"},{"match":"[!=]=","name":"keyword.operator.comparison.apex"},{"match":"<=|>=|[<>]","name":"keyword.operator.relational.apex"},{"match":"!|&&|\\|\\|","name":"keyword.operator.logical.apex"},{"match":"[\\&^|~]","name":"keyword.operator.bitwise.apex"},{"match":"=","name":"keyword.operator.assignment.apex"},{"match":"--","name":"keyword.operator.decrement.apex"},{"match":"\\+\\+","name":"keyword.operator.increment.apex"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.apex"}]},"extends-class":{"begin":"(extends)\\b\\s+","beginCaptures":{"1":{"name":"keyword.other.extends.apex"}},"end":"(?=\\{|implements)","patterns":[{"begin":"(?=[_[:alpha:]][_[:alnum:]]*\\s*\\.)","end":"(?=\\{|implements)","patterns":[{"include":"#support-type"},{"include":"#type"}]},{"captures":{"1":{"name":"entity.name.type.extends.apex"}},"match":"([_[:alpha:]][_[:alnum:]]*)"}]},"field-declaration":{"begin":"(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s+(\\g<identifier>)\\s*(?!=[=>])(?=[,;=]|$)","beginCaptures":{"1":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"5":{"name":"entity.name.variable.field.apex"}},"end":"(?=;)","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.field.apex"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"},{"include":"#class-or-trigger-members"}]},"finally-clause":{"begin":"(?<!\\.)\\b(finally)\\b","beginCaptures":{"1":{"name":"keyword.control.try.finally.apex"}},"end":"(?<=})","patterns":[{"include":"#comment"},{"include":"#block"}]},"for-apex-syntax":{"captures":{"1":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"2":{"name":"entity.name.variable.local.apex"},"3":{"name":"keyword.operator.iterator.colon.apex"}},"match":"([._[:alpha:]][._[:alnum:]]+)\\s+([._[:alpha:]][._[:alnum:]]*)\\s*(:)"},"for-statement":{"begin":"(?<!\\.)\\b(for)\\b\\s*(?=\\()","beginCaptures":{"1":{"name":"keyword.control.loop.for.apex"}},"end":"(?<=})|(?=;)","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#for-apex-syntax"},{"include":"#local-variable-declaration"},{"include":"#expression"},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"},{"include":"#colon-expression"}]},{"include":"#statement"}]},"from-clause":{"captures":{"1":{"name":"keyword.operator.query.from.apex"},"2":{"name":"storage.type.apex"}},"match":"(FROM)\\b\\s*([._[:alnum:]]+\\b)?"},"goto-statement":{"begin":"(?<!\\.)\\b(goto)\\b","beginCaptures":{"1":{"name":"keyword.control.goto.apex"}},"end":"(?=;)","patterns":[{"begin":"\\b(case)\\b","beginCaptures":{"1":{"name":"keyword.control.case.apex"}},"end":"(?=;)","patterns":[{"include":"#expression"}]},{"captures":{"1":{"name":"keyword.control.default.apex"}},"match":"\\b(default)\\b"},{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.label.apex"}]},"identifier":{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"variable.other.readwrite.apex"},"if-statement":{"begin":"(?<!\\.)\\b(if)\\b\\s*(?=\\()","beginCaptures":{"1":{"name":"keyword.control.conditional.if.apex"}},"end":"(?<=})|(?=;)","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"}]},{"include":"#statement"}]},"implements-class":{"begin":"(implements)\\b","beginCaptures":{"1":{"name":"keyword.other.implements.apex"}},"end":"(?=\\{|extends)","patterns":[{"begin":"(?=[_[:alpha:]][_[:alnum:]]*\\s*\\.)","end":"(?=\\{|extends|,)","patterns":[{"include":"#support-type"},{"include":"#type"}]},{"captures":{"1":{"name":"entity.name.type.implements.apex"},"2":{"name":"punctuation.separator.comma.apex"}},"match":"([_[:alpha:]][_[:alnum:]]*)\\b\\s*(,)?"},{"include":"#punctuation-comma"}]},"indexer-declaration":{"begin":"(?<return_type>(?<type_name>(?:ref\\s+)?(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s+)(?<interface_name>\\g<type_name>\\s*\\.\\s*)?(?<indexer_name>this)\\s*(?=\\[)","beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"7":{"name":"keyword.other.this.apex"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#property-accessors"},{"include":"#expression-body"},{"include":"#variable-initializer"}]},"initializer-block":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#statement"}]},"initializer-expression":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},"interface-declaration":{"begin":"(?=\\binterface\\b)","end":"(?<=})","patterns":[{"begin":"(interface)\\b\\s+(@?[_[:alpha:]][_[:alnum:]]*)","beginCaptures":{"1":{"name":"keyword.other.interface.apex"},"2":{"name":"entity.name.type.interface.apex"}},"end":"(?=\\{)","patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#extends-class"}]},{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#interface-members"}]},{"include":"#javadoc-comment"},{"include":"#comment"}]},"interface-members":{"patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#property-declaration"},{"include":"#indexer-declaration"},{"include":"#method-declaration"},{"include":"#punctuation-semicolon"}]},"invocation-expression":{"begin":"(?:(\\??\\.)\\s*)?(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?<type_args>\\s*<([^<>]|\\g<type_args>)+>\\s*)?\\s*(?=\\()","beginCaptures":{"1":{"patterns":[{"include":"#punctuation-accessor"},{"include":"#operator-safe-navigation"}]},"2":{"name":"entity.name.function.apex"},"3":{"patterns":[{"include":"#type-arguments"}]}},"end":"(?<=\\))","patterns":[{"include":"#argument-list"}]},"javadoc-comment":{"patterns":[{"begin":"^\\s*(/\\*\\*)(?!/)","beginCaptures":{"1":{"name":"punctuation.definition.comment.apex"}},"end":"\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"name":"comment.block.javadoc.apex","patterns":[{"match":"@(deprecated|author|return|see|serial|since|version|usage|name|link)\\b","name":"keyword.other.documentation.javadoc.apex"},{"captures":{"1":{"name":"keyword.other.documentation.javadoc.apex"},"2":{"name":"entity.name.variable.parameter.apex"}},"match":"(@param)\\s+(\\S+)"},{"captures":{"1":{"name":"keyword.other.documentation.javadoc.apex"},"2":{"name":"entity.name.type.class.apex"}},"match":"(@(?:exception|throws))\\s+(\\S+)"},{"captures":{"1":{"name":"string.quoted.single.apex"}},"match":"(`([^`]+?)`)"}]}]},"literal":{"patterns":[{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#numeric-literal"},{"include":"#multiline-string-literal"},{"include":"#string-literal"}]},"local-constant-declaration":{"begin":"\\b(?<const_keyword>const)\\b\\s*(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s+(\\g<identifier>)\\s*(?=[,;=])","beginCaptures":{"1":{"name":"storage.modifier.apex"},"2":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.local.apex"}},"end":"(?=;)","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.local.apex"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}]},"local-declaration":{"patterns":[{"include":"#local-constant-declaration"},{"include":"#local-variable-declaration"}]},"local-variable-declaration":{"begin":"(?:(?:\\b(ref)\\s+)?\\b(var)\\b|(?<type_name>(?:ref\\s+)?(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*))\\s+(\\g<identifier>)\\s*(?=[),;=])","beginCaptures":{"1":{"name":"storage.modifier.apex"},"2":{"name":"keyword.other.var.apex"},"3":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"7":{"name":"entity.name.variable.local.apex"}},"end":"(?=[);])","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.local.apex"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}]},"member-access-expression":{"patterns":[{"captures":{"1":{"patterns":[{"include":"#punctuation-accessor"},{"include":"#operator-safe-navigation"}]},"2":{"name":"variable.other.object.property.apex"}},"match":"(\\??\\.)\\s*(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?![(_[:alnum:]]|(\\?)?\\[|<)"},{"captures":{"1":{"patterns":[{"include":"#punctuation-accessor"},{"include":"#operator-safe-navigation"}]},"2":{"name":"variable.other.object.apex"},"3":{"patterns":[{"include":"#type-arguments"}]}},"match":"(\\??\\.)?\\s*(@?[_[:alpha:]][_[:alnum:]]*)(?<type_params>\\s*<([^<>]|\\g<type_params>)+>\\s*)(?=(\\s*\\?)?\\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*)"},{"captures":{"1":{"name":"variable.other.object.apex"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)(?=(\\s*\\?)?\\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*)"}]},"merge-expression":{"begin":"(merge)\\b\\s+","beginCaptures":{"1":{"name":"support.function.apex"}},"end":"(?<=;)","patterns":[{"include":"#object-creation-expression"},{"include":"#merge-type-statement"},{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"merge-type-statement":{"captures":{"1":{"name":"variable.other.readwrite.apex"},"2":{"name":"variable.other.readwrite.apex"},"3":{"name":"punctuation.terminator.statement.apex"}},"match":"([_[:alpha:]]*)\\b\\s+([_[:alpha:]]*)\\b\\s*(;)"},"method-declaration":{"begin":"(?<return_type>(?<type_name>(?:ref\\s+)?(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s+)(?<interface_name>\\g<type_name>\\s*\\.\\s*)?(\\g<identifier>)\\s*(<([^<>]+)>)?\\s*(?=\\()","beginCaptures":{"1":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"6":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"7":{"patterns":[{"include":"#support-type"},{"include":"#method-name-custom"}]},"8":{"patterns":[{"include":"#type-parameter-list"}]}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}]},"method-name-custom":{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"entity.name.function.apex"},"multiline-string-literal":{"begin":"'''","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apex"}},"end":"'''","endCaptures":{"0":{"name":"punctuation.definition.string.end.apex"}},"name":"string.quoted.single.multiline.apex","patterns":[{"include":"#string-character-escape"},{"include":"#string-template-expression"}]},"named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","beginCaptures":{"1":{"name":"entity.name.variable.parameter.apex"},"2":{"name":"punctuation.separator.colon.apex"}},"end":"(?=([]),]))","patterns":[{"include":"#expression"}]},"null-literal":{"match":"(?<!\\.)\\bnull\\b","name":"constant.language.null.apex"},"numeric-literal":{"patterns":[{"match":"\\b(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,3})?([-+])\\d{2}:\\d{2})\\b","name":"constant.numeric.datetime.apex"},{"match":"\\b(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,3})?(Z)?)\\b","name":"constant.numeric.datetime.apex"},{"match":"\\b(\\d{4}-\\d{2}-\\d{2})\\b","name":"constant.numeric.date.apex"},{"match":"\\b0([Xx])[_\\h]+([LUlu]|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b","name":"constant.numeric.hex.apex"},{"match":"\\b0([Bb])[01_]+([LUlu]|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b","name":"constant.numeric.binary.apex"},{"match":"\\b([0-9_]+)?\\.[0-9_]+(([Ee])[0-9]+)?([DFMdfm])?\\b","name":"constant.numeric.decimal.apex"},{"match":"\\b[0-9_]+([Ee])[0-9_]+([DFMdfm])?\\b","name":"constant.numeric.decimal.apex"},{"match":"\\b[0-9_]+([DFMdfm])\\b","name":"constant.numeric.decimal.apex"},{"match":"\\b[0-9_]+([LUlu]|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b","name":"constant.numeric.decimal.apex"}]},"object-creation-expression":{"patterns":[{"include":"#object-creation-expression-with-parameters"},{"include":"#object-creation-expression-with-no-parameters"},{"include":"#punctuation-comma"}]},"object-creation-expression-with-no-parameters":{"captures":{"1":{"name":"support.function.apex"},"2":{"name":"keyword.control.new.apex"},"3":{"patterns":[{"include":"#support-type"},{"include":"#type"}]}},"match":"(delete|insert|undelete|update|upsert)?\\s*(new)\\s+(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s*(?=\\{|$)"},"object-creation-expression-with-parameters":{"begin":"(delete|insert|undelete|update|upsert)?\\s*(new)\\s+(?<type_name>(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s*(?=\\()","beginCaptures":{"1":{"name":"support.function.apex"},"2":{"name":"keyword.control.new.apex"},"3":{"patterns":[{"include":"#support-type"},{"include":"#type"}]}},"end":"(?<=\\))","patterns":[{"include":"#argument-list"}]},"operator-assignment":{"match":"(?<![!=])(=)(?!=)","name":"keyword.operator.assignment.apex"},"operator-safe-navigation":{"match":"\\?\\.","name":"keyword.operator.safe-navigation.apex"},"orderby-clause":{"captures":{"1":{"name":"keyword.operator.query.orderby.apex"}},"match":"\\b(ORDER BY)\\b\\s*","patterns":[{"include":"#ordering-direction"},{"include":"#ordering-nulls"}]},"ordering-direction":{"captures":{"1":{"name":"keyword.operator.query.ascending.apex"},"2":{"name":"keyword.operator.query.descending.apex"}},"match":"\\b(?:(ASC)|(DESC))\\b"},"ordering-nulls":{"captures":{"1":{"name":"keyword.operator.query.nullsfirst.apex"},"2":{"name":"keyword.operator.query.nullslast.apex"}},"match":"\\b(?:(NULLS FIRST)|(NULLS LAST))\\b"},"parameter":{"captures":{"1":{"name":"storage.modifier.apex"},"2":{"patterns":[{"include":"#support-type"},{"include":"#type"}]},"6":{"name":"entity.name.variable.parameter.apex"}},"match":"(?:\\b(this|final)\\b\\s+)?(?<type_name>(?:ref\\s+)?(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s+(\\g<identifier>)"},"parenthesized-expression":{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"}]},"parenthesized-parameter-list":{"begin":"(\\()","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"(\\))","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#comment"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}]},"property-accessors":{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"match":"\\b(pr(?:ivate|otected))\\b","name":"storage.modifier.apex"},{"match":"\\b(get)\\b","name":"keyword.other.get.apex"},{"match":"\\b(set)\\b","name":"keyword.other.set.apex"},{"include":"#comment"},{"include":"#expression-body"},{"include":"#block"},{"include":"#punctuation-semicolon"}]},"property-declaration":{"begin":"(?!.*\\b(?:class|interface|enum)\\b)\\s*(?<return_type>(?<type_name>(?:ref\\s+)?(?:(?<identifier>@?[_[:alpha:]][_[:alnum:]]*)\\s*::\\s*)?(?<name_and_type_args>\\g<identifier>\\s*(?<type_args>\\s*<(?:[^<>]|\\g<type_args>)+>\\s*)?)(?:\\s*\\.\\s*\\g<name_and_type_args>)*(?:\\s*\\?\\s*)?(?:\\s*\\[(?:\\s*,\\s*)*]\\s*)*)\\s+)(?<interface_name>\\g<type_name>\\s*\\.\\s*)?(?<property_name>\\g<identifier>)\\s*(?=\\{|=>|$)","beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"7":{"name":"entity.name.variable.property.apex"}},"end":"(?<=})|(?=;)","patterns":[{"include":"#comment"},{"include":"#property-accessors"},{"include":"#expression-body"},{"include":"#variable-initializer"},{"include":"#class-or-trigger-members"}]},"punctuation-accessor":{"match":"\\.","name":"punctuation.accessor.apex"},"punctuation-comma":{"match":",","name":"punctuation.separator.comma.apex"},"punctuation-semicolon":{"match":";","name":"punctuation.terminator.statement.apex"},"query-operators":{"captures":{"1":{"name":"keyword.operator.query.apex"}},"match":"\\b(ABOVE|AND|AT|FOR REFERENCE|FOR UPDATE|FOR VIEW|GROUP BY|HAVING|IN|LIKE|LIMIT|NOT IN|NOT|OFFSET|OR|TYPEOF|UPDATE TRACKING|UPDATE VIEWSTAT|WITH DATA CATEGORY|WITH)\\b\\s*"},"return-statement":{"begin":"(?<!\\.)\\b(return)\\b","beginCaptures":{"1":{"name":"keyword.control.flow.return.apex"}},"end":"(?=;)","patterns":[{"include":"#expression"}]},"script-top-level":{"patterns":[{"include":"#method-declaration"},{"include":"#statement"},{"include":"#punctuation-semicolon"}]},"sharing-modifier":{"match":"(?<!\\.)\\b((?:with|without|inherited) sharing)\\b","name":"sharing.modifier.apex"},"soql-colon-method-statement":{"begin":"(:?\\.)?([_[:alpha:]][_[:alnum:]]*)(?=\\()","beginCaptures":{"1":{"name":"punctuation.accessor.apex"},"2":{"name":"entity.name.function.apex"}},"end":"(?<=\\))","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"}]},{"include":"#statement"}]},"soql-colon-vars":{"begin":"(:)\\s*","beginCaptures":{"0":{"name":"keyword.operator.conditional.colon.apex"}},"end":"(?![(_[:alnum:]]|(\\?)?\\[|<)","patterns":[{"include":"#trigger-context-declaration"},{"captures":{"1":{"name":"variable.other.object.apex"},"2":{"patterns":[{"include":"#punctuation-accessor"},{"include":"#operator-safe-navigation"}]}},"match":"([_[:alpha:]][_[:alnum:]]*)(\\??\\.)"},{"include":"#soql-colon-method-statement"},{"match":"[_[:alpha:]][_[:alnum:]]*","name":"entity.name.variable.local.apex"}]},"soql-functions":{"begin":"\\b(AVG|CALENDAR_MONTH|CALENDAR_QUARTER|CALENDAR_YEAR|convertCurrency|convertTimezone|COUNT|COUNT_DISTINCT|DAY_IN_MONTH|DAY_IN_WEEK|DAY_IN_YEAR|DAY_ONLY|toLabel|INCLUDES|EXCLUDES|FISCAL_MONTH|FISCAL_QUARTER|FISCAL_YEAR|FORMAT|GROUPING|GROUP BY CUBE|GROUP BY ROLLUP|HOUR_IN_DAY|MAX|MIN|SUM|WEEK_IN_MONTH|WEEK_IN_YEAR)\\s*(\\()","beginCaptures":{"1":{"name":"support.function.query.apex"},"2":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#literal"},{"include":"#punctuation-comma"},{"include":"#soql-functions"},{"match":"[._[:alpha:]][._[:alnum:]]*","name":"keyword.query.field.apex"}]},"soql-group-clauses":{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#soql-query-expression"},{"include":"#soql-colon-vars"},{"include":"#soql-group-clauses"},{"include":"#punctuation-comma"},{"include":"#operator-assignment"},{"include":"#literal"},{"include":"#query-operators"},{"include":"#date-literals"},{"include":"#date-literal-with-params"},{"include":"#using-scope"},{"match":"[._[:alpha:]][._[:alnum:]]*","name":"keyword.query.field.apex"}]},"soql-query-body":{"patterns":[{"include":"#trigger-context-declaration"},{"include":"#soql-colon-vars"},{"include":"#soql-functions"},{"include":"#from-clause"},{"include":"#where-clause"},{"include":"#query-operators"},{"include":"#date-literals"},{"include":"#date-literal-with-params"},{"include":"#using-scope"},{"include":"#soql-group-clauses"},{"include":"#orderby-clause"},{"include":"#ordering-direction"},{"include":"#ordering-nulls"}]},"soql-query-expression":{"begin":"\\b(SELECT)\\b\\s*","beginCaptures":{"1":{"name":"keyword.operator.query.select.apex"}},"end":"(?=;)|(?=])|(?=\\))","patterns":[{"include":"#soql-query-body"},{"include":"#comment"},{"include":"#punctuation-comma"},{"include":"#operator-assignment"},{"include":"#parenthesized-expression"},{"include":"#expression-operators"},{"include":"#literal"},{"captures":{"1":{"name":"keyword.query.field.apex"},"2":{"name":"punctuation.separator.comma.apex"}},"match":"([._[:alpha:]][._[:alnum:]]*)\\s*(,)?"}]},"statement":{"patterns":[{"include":"#comment"},{"include":"#while-statement"},{"include":"#do-statement"},{"include":"#for-statement"},{"include":"#switch-statement"},{"include":"#when-else-statement"},{"include":"#when-sobject-statement"},{"include":"#when-statement"},{"include":"#when-multiple-statement"},{"include":"#if-statement"},{"include":"#else-part"},{"include":"#goto-statement"},{"include":"#return-statement"},{"include":"#break-or-continue-statement"},{"include":"#throw-statement"},{"include":"#try-statement"},{"include":"#soql-query-expression"},{"include":"#local-declaration"},{"include":"#block"},{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"storage-modifier":{"match":"(?<!\\.)\\b(new|public|protected|private|abstract|virtual|override|global|static|final|transient)\\b","name":"storage.modifier.apex"},"string-character-escape":{"match":"\\\\.","name":"constant.character.escape.apex"},"string-literal":{"begin":"'(?!'')","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apex"}},"end":"(')|([^\\n\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.apex"},"2":{"name":"invalid.illegal.newline.apex"}},"name":"string.quoted.single.apex","patterns":[{"include":"#string-character-escape"},{"include":"#string-template-expression"}]},"string-template-expression":{"begin":"\\$\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.apex"}},"name":"meta.template-expression.apex","patterns":[{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"variable.other.readwrite.apex"}]},"support-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.apex"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.apex"}},"patterns":[{"include":"#comment"},{"include":"#support-type"},{"include":"#punctuation-comma"}]},"support-class":{"captures":{"1":{"name":"support.class.apex"}},"match":"\\b(ApexPages|Database|DMLException|Exception|PageReference|Savepoint|SchedulableContext|Schema|SObject|System|Test)\\b"},"support-expression":{"begin":"(ApexPages|Database|DMLException|Exception|PageReference|Savepoint|SchedulableContext|Schema|SObject|System|Test)(?=[.\\s])","beginCaptures":{"1":{"name":"support.class.apex"}},"end":"(?<=\\)|$)|(?=})|(?=;)|(?=\\)|(?=]))|(?=,)","patterns":[{"include":"#support-type"},{"captures":{"1":{"name":"punctuation.accessor.apex"},"2":{"name":"support.function.apex"}},"match":"(\\.)(\\p{alpha}*)(?=\\()"},{"captures":{"1":{"name":"punctuation.accessor.apex"},"2":{"name":"support.type.apex"}},"match":"(\\.)(\\p{alpha}+)"},{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},{"include":"#comment"},{"include":"#statement"}]},"support-functions":{"captures":{"1":{"name":"support.function.apex"}},"match":"\\b(delete|execute|finish|insert|start|undelete|update|upsert)\\b"},"support-name":{"patterns":[{"captures":{"1":{"name":"punctuation.accessor.apex"},"2":{"name":"support.function.apex"}},"match":"(\\.)\\s*(\\p{alpha}*)(?=\\()"},{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}]},{"captures":{"1":{"name":"punctuation.accessor.apex"},"2":{"name":"support.type.apex"}},"match":"(\\.)\\s*([_[:alpha:]]*)"}]},"support-type":{"name":"support.apex","patterns":[{"include":"#comment"},{"include":"#support-class"},{"include":"#support-functions"},{"include":"#support-name"}]},"switch-statement":{"begin":"(switch)\\b\\s+(on)\\b\\s+(.*)(\\{)","beginCaptures":{"1":{"name":"keyword.control.switch.apex"},"2":{"name":"keyword.control.switch.on.apex"},"3":{"patterns":[{"include":"#statement"},{"include":"#parenthesized-expression"}]},"4":{"name":"punctuation.curlybrace.open.apex"}},"end":"(})","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#when-string"},{"include":"#when-else-statement"},{"include":"#when-sobject-statement"},{"include":"#when-statement"},{"include":"#when-multiple-statement"},{"include":"#expression"},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"}]},"this-expression":{"captures":{"1":{"name":"keyword.other.this.apex"}},"match":"\\b(this)\\b"},"throw-expression":{"captures":{"1":{"name":"keyword.control.flow.throw.apex"}},"match":"(?<!\\.)\\b(throw)\\b"},"throw-statement":{"begin":"(?<!\\.)\\b(throw)\\b","beginCaptures":{"1":{"name":"keyword.control.flow.throw.apex"}},"end":"(?=;)","patterns":[{"include":"#expression"}]},"trigger-context-declaration":{"begin":"\\b(Trigger)\\b(\\.)\\b","beginCaptures":{"1":{"name":"support.class.trigger.apex"},"2":{"name":"punctuation.accessor.apex"}},"end":"(?=})|(?=;)|(?=\\)|(?=]))","patterns":[{"match":"\\b(isExecuting|isInsert|isUpdate|isDelete|isBefore|isAfter|isUndelete|new|newMap|old|oldMap|size)\\b","name":"support.type.trigger.apex"},{"captures":{"1":{"patterns":[{"include":"#punctuation-accessor"},{"include":"#operator-safe-navigation"}]},"2":{"name":"support.function.trigger.apex"}},"match":"(\\??\\.)(\\p{alpha}+)(?=\\()"},{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#trigger-type-statement"},{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#expression"}]},{"include":"#expression"}]},"trigger-declaration":{"begin":"(?=\\btrigger\\b)","end":"(?<=})","patterns":[{"begin":"\\b(trigger)\\b\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*\\b(on)\\b\\s+([_[:alpha:]][_[:alnum:]]*)\\s*","beginCaptures":{"1":{"name":"keyword.other.trigger.apex"},"2":{"name":"entity.name.type.trigger.apex"},"3":{"name":"keyword.operator.trigger.on.apex"},"4":{"name":"storage.type.apex"}},"end":"(?=\\{)","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#trigger-type-statement"},{"include":"#trigger-operator-statement"},{"include":"#punctuation-comma"},{"include":"#expression"}]},{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#type-parameter-list"}]},{"begin":"\\{","beginCaptures":{"0":{"name":"punctuation.curlybrace.open.apex"}},"end":"}","endCaptures":{"0":{"name":"punctuation.curlybrace.close.apex"}},"patterns":[{"include":"#statement"},{"include":"#class-or-trigger-members"}]},{"include":"#javadoc-comment"},{"include":"#comment"}]},"trigger-operator-statement":{"match":"\\b(insert|update|delete|merge|upsert|undelete)\\b","name":"keyword.operator.trigger.apex"},"trigger-type-statement":{"captures":{"1":{"name":"keyword.control.trigger.before.apex"},"2":{"name":"keyword.control.trigger.after.apex"}},"match":"\\b(?:(before)|(after))\\b"},"try-block":{"begin":"(?<!\\.)\\b(try)\\b","beginCaptures":{"1":{"name":"keyword.control.try.apex"}},"end":"(?<=})","patterns":[{"include":"#comment"},{"include":"#block"}]},"try-statement":{"patterns":[{"include":"#try-block"},{"include":"#catch-clause"},{"include":"#finally-clause"}]},"type":{"name":"meta.type.apex","patterns":[{"include":"#comment"},{"include":"#type-builtin"},{"include":"#type-name"},{"include":"#type-arguments"},{"include":"#type-array-suffix"},{"include":"#type-nullable-suffix"}]},"type-arguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.apex"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.apex"}},"patterns":[{"include":"#comment"},{"include":"#support-type"},{"include":"#type"},{"include":"#punctuation-comma"}]},"type-array-suffix":{"begin":"\\[","beginCaptures":{"0":{"name":"punctuation.squarebracket.open.apex"}},"end":"]","endCaptures":{"0":{"name":"punctuation.squarebracket.close.apex"}},"patterns":[{"include":"#punctuation-comma"}]},"type-builtin":{"captures":{"1":{"name":"keyword.type.apex"}},"match":"\\b(Blob|Boolean|byte|Date|Datetime|Decimal|Double|Id|ID|Integer|Long|Object|String|Time|void)\\b"},"type-declarations":{"patterns":[{"include":"#javadoc-comment"},{"include":"#comment"},{"include":"#annotation-declaration"},{"include":"#storage-modifier"},{"include":"#sharing-modifier"},{"include":"#class-declaration"},{"include":"#enum-declaration"},{"include":"#interface-declaration"},{"include":"#trigger-declaration"},{"include":"#punctuation-semicolon"}]},"type-name":{"patterns":[{"captures":{"1":{"name":"storage.type.apex"},"2":{"name":"punctuation.accessor.apex"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\.)"},{"captures":{"1":{"name":"punctuation.accessor.apex"},"2":{"name":"storage.type.apex"}},"match":"(\\.)\\s*(@?[_[:alpha:]][_[:alnum:]]*)"},{"match":"@?[_[:alpha:]][_[:alnum:]]*","name":"storage.type.apex"}]},"type-nullable-suffix":{"captures":{"0":{"name":"punctuation.separator.question-mark.apex"}},"match":"\\?"},"type-parameter-list":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.apex"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.apex"}},"patterns":[{"captures":{"1":{"name":"entity.name.type.type-parameter.apex"}},"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b"},{"include":"#comment"},{"include":"#punctuation-comma"}]},"using-scope":{"captures":{"1":{"name":"keyword.operator.query.using.apex"}},"match":"((USING SCOPE)\\b\\s*(Delegated|Everything|Mine|My_Territory|My_Team_Territory|Team))\\b\\s*"},"variable-initializer":{"begin":"(?<![!=])(=)(?![=>])","beginCaptures":{"1":{"name":"keyword.operator.assignment.apex"}},"end":"(?=[]),;}])","patterns":[{"include":"#expression"}]},"when-else-statement":{"begin":"(when)\\b\\s+(else)\\b\\s*","beginCaptures":{"1":{"name":"keyword.control.switch.when.apex"},"2":{"name":"keyword.control.switch.else.apex"}},"end":"(?=})|(?=when\\b)","patterns":[{"include":"#block"},{"include":"#expression"}]},"when-multiple-statement":{"begin":"(when)\\b\\s*","beginCaptures":{"1":{"name":"keyword.control.switch.when.apex"}},"end":"(?=})|(?=when\\b)","patterns":[{"include":"#block"},{"include":"#expression"},{"include":"#punctuation-comma"}]},"when-sobject-statement":{"begin":"(when)\\b\\s+([_[:alnum:]]+)\\s+([_[:alnum:]]+)\\s*","beginCaptures":{"1":{"name":"keyword.control.switch.when.apex"},"2":{"name":"storage.type.apex"},"3":{"name":"entity.name.variable.local.apex"}},"end":"(?=})|(?=when\\b)","patterns":[{"include":"#block"},{"include":"#expression"}]},"when-statement":{"begin":"(when)\\b\\s+([-_[:alnum:]]+)\\s*","beginCaptures":{"1":{"name":"keyword.control.switch.when.apex"},"2":{"patterns":[{"include":"#expression"}]}},"end":"(?=})|(?=when\\b)","patterns":[{"include":"#block"},{"include":"#expression"}]},"when-string":{"begin":"(when)\\b\\s*('[^\\n']*')(\\s*(,)\\s*('[^\\n']*'))*\\s*","beginCaptures":{"1":{"name":"keyword.control.switch.when.apex"},"2":{"patterns":[{"include":"#string-literal"}]},"4":{"patterns":[{"include":"#punctuation-comma"}]},"5":{"patterns":[{"include":"#string-literal"}]}},"end":"(?=})|(?=when\\b)","patterns":[{"include":"#block"},{"include":"#expression"}]},"where-clause":{"captures":{"1":{"name":"keyword.operator.query.where.apex"}},"match":"\\b(WHERE)\\b\\s*"},"while-statement":{"begin":"(?<!\\.)\\b(while)\\b\\s*(?=\\()","beginCaptures":{"1":{"name":"keyword.control.loop.while.apex"}},"end":"(?<=})|(?=;)","patterns":[{"begin":"\\(","beginCaptures":{"0":{"name":"punctuation.parenthesis.open.apex"}},"end":"\\)","endCaptures":{"0":{"name":"punctuation.parenthesis.close.apex"}},"patterns":[{"include":"#expression"}]},{"include":"#statement"}]},"xml-attribute":{"patterns":[{"captures":{"1":{"name":"entity.other.attribute-name.apex"},"2":{"name":"entity.other.attribute-name.namespace.apex"},"3":{"name":"punctuation.separator.colon.apex"},"4":{"name":"entity.other.attribute-name.localname.apex"},"5":{"name":"punctuation.separator.equals.apex"}},"match":"(?:^|\\s+)((?:([-_[:alnum:]]+)(:))?([-_[:alnum:]]+))(=)"},{"include":"#xml-string"}]},"xml-cdata":{"begin":"<!\\[CDATA\\[","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apex"}},"end":"]]>","endCaptures":{"0":{"name":"punctuation.definition.string.end.apex"}},"name":"string.unquoted.cdata.apex"},"xml-character-entity":{"patterns":[{"captures":{"1":{"name":"punctuation.definition.constant.apex"},"3":{"name":"punctuation.definition.constant.apex"}},"match":"(&)([:_[:alpha:]][-.:_[:alnum:]]*|#\\d+|#x\\h+)(;)","name":"constant.character.entity.apex"},{"match":"&","name":"invalid.illegal.bad-ampersand.apex"}]},"xml-comment":{"begin":"<!--","beginCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"end":"-->","endCaptures":{"0":{"name":"punctuation.definition.comment.apex"}},"name":"comment.block.apex"},"xml-doc-comment":{"patterns":[{"include":"#xml-comment"},{"include":"#xml-character-entity"},{"include":"#xml-cdata"},{"include":"#xml-tag"}]},"xml-string":{"patterns":[{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.apex"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.apex"}},"name":"string.quoted.single.apex","patterns":[{"include":"#xml-character-entity"}]},{"begin":"\"","beginCaptures":{"0":{"name":"punctuation.definition.stringdoublequote.begin.apex"}},"end":"\"","endCaptures":{"0":{"name":"punctuation.definition.stringdoublequote.end.apex"}},"name":"string.quoted.double.apex","patterns":[{"include":"#xml-character-entity"}]}]},"xml-tag":{"begin":"(</?)((?:([-_[:alnum:]]+)(:))?([-_[:alnum:]]+))","beginCaptures":{"1":{"name":"punctuation.definition.tag.apex"},"2":{"name":"entity.name.tag.apex"},"3":{"name":"entity.name.tag.namespace.apex"},"4":{"name":"punctuation.separator.colon.apex"},"5":{"name":"entity.name.tag.localname.apex"}},"end":"(/?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.apex"}},"name":"meta.tag.apex","patterns":[{"include":"#xml-attribute"}]}},"scopeName":"source.apex"}]