{
    "keywords": "false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",
    "illegal": "<\\\/|#",
    "contains": [
        {
            "className": "comment",
            "begin": "\/\\*\\*",
            "end": "\\*\/",
            "contains": [
                {
                    "begin": "\\w+@",
                    "relevance": 0
                },
                {
                    "className": "doctag",
                    "begin": "@[A-Za-z]+"
                },
                {
                    "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ],
            "relevance": 0
        },
        {
            "className": "comment",
            "begin": "\/\/",
            "end": "$",
            "contains": [
                {
                    "$ref": "#contains.0.contains.2"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "comment",
            "begin": "\/\\*",
            "end": "\\*\/",
            "contains": [
                {
                    "$ref": "#contains.0.contains.2"
                },
                {
                    "className": "doctag",
                    "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "string",
            "begin": "'",
            "end": "'",
            "illegal": "\\n",
            "contains": [
                {
                    "begin": "\\\\[\\s\\S]",
                    "relevance": 0
                }
            ]
        },
        {
            "className": "string",
            "begin": "\"",
            "end": "\"",
            "illegal": "\\n",
            "contains": [
                {
                    "$ref": "#contains.3.contains.0"
                }
            ]
        },
        {
            "className": "class",
            "beginKeywords": "aspect",
            "end": "[{;=]",
            "excludeEnd": true,
            "illegal": "[:;\"\\[\\]]",
            "contains": [
                {
                    "beginKeywords": "extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"
                },
                {
                    "className": "title",
                    "begin": "[a-zA-Z_]\\w*",
                    "relevance": 0
                },
                {
                    "begin": "\\([^\\)]*",
                    "end": "[)]+",
                    "keywords": "false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance get set args call",
                    "excludeEnd": false
                }
            ]
        },
        {
            "className": "class",
            "beginKeywords": "class interface",
            "end": "[{;=]",
            "excludeEnd": true,
            "relevance": 0,
            "keywords": "class interface",
            "illegal": "[:\"\\[\\]]",
            "contains": [
                {
                    "beginKeywords": "extends implements"
                },
                {
                    "$ref": "#contains.5.contains.1"
                }
            ]
        },
        {
            "beginKeywords": "pointcut after before around throwing returning",
            "end": "[)]",
            "excludeEnd": false,
            "illegal": "[\"\\[\\]]",
            "contains": [
                {
                    "begin": "[a-zA-Z_]\\w*\\s*\\(",
                    "returnBegin": true,
                    "contains": [
                        {
                            "$ref": "#contains.5.contains.1"
                        }
                    ]
                }
            ]
        },
        {
            "begin": "[:]",
            "returnBegin": true,
            "end": "[{;]",
            "relevance": 0,
            "excludeEnd": false,
            "keywords": "false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",
            "illegal": "[\"\\[\\]]",
            "contains": [
                {
                    "begin": "[a-zA-Z_]\\w*\\s*\\(",
                    "keywords": "false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance get set args call",
                    "relevance": 0
                },
                {
                    "$ref": "#contains.4"
                }
            ]
        },
        {
            "beginKeywords": "new throw",
            "relevance": 0
        },
        {
            "className": "function",
            "begin": "\\w+ +\\w+(\\.)?\\w+\\s*\\([^\\)]*\\)\\s*((throws)[\\w\\s,]+)?[\\{;]",
            "returnBegin": true,
            "end": "[{;=]",
            "keywords": "false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",
            "excludeEnd": true,
            "contains": [
                {
                    "begin": "[a-zA-Z_]\\w*\\s*\\(",
                    "returnBegin": true,
                    "relevance": 0,
                    "contains": [
                        {
                            "$ref": "#contains.5.contains.1"
                        }
                    ]
                },
                {
                    "className": "params",
                    "begin": "\\(",
                    "end": "\\)",
                    "relevance": 0,
                    "keywords": "false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",
                    "contains": [
                        {
                            "$ref": "#contains.3"
                        },
                        {
                            "$ref": "#contains.4"
                        },
                        {
                            "className": "number",
                            "begin": "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",
                            "relevance": 0
                        },
                        {
                            "$ref": "#contains.2"
                        }
                    ]
                },
                {
                    "$ref": "#contains.1"
                },
                {
                    "$ref": "#contains.2"
                }
            ]
        },
        {
            "$ref": "#contains.10.contains.1.contains.2"
        },
        {
            "className": "meta",
            "begin": "@[A-Za-z]+"
        }
    ]
}
