123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- // Specification:
- // https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/Throwable.html#printStackTrace()
- Prism.languages.javastacktrace = {
- // java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
- // Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
- // Caused by: com.example.myproject.MyProjectServletException
- // Caused by: MidLevelException: LowLevelException
- // Suppressed: Resource$CloseFailException: Resource ID = 0
- 'summary': {
- pattern: /^([\t ]*)(?:(?:Caused by:|Suppressed:|Exception in thread "[^"]*")[\t ]+)?[\w$.]+(?::.*)?$/m,
- lookbehind: true,
- inside: {
- 'keyword': {
- pattern: /^([\t ]*)(?:(?:Caused by|Suppressed)(?=:)|Exception in thread)/m,
- lookbehind: true
- },
- // the current thread if the summary starts with 'Exception in thread'
- 'string': {
- pattern: /^(\s*)"[^"]*"/,
- lookbehind: true
- },
- 'exceptions': {
- pattern: /^(:?\s*)[\w$.]+(?=:|$)/,
- lookbehind: true,
- inside: {
- 'class-name': /[\w$]+$/,
- 'namespace': /\b[a-z]\w*\b/,
- 'punctuation': /\./
- }
- },
- 'message': {
- pattern: /(:\s*)\S.*/,
- lookbehind: true,
- alias: 'string'
- },
- 'punctuation': /:/
- }
- },
- // at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
- // at org.hsqldb.jdbc.Util.throwError(Unknown Source) here could be some notes
- // at java.base/java.lang.Class.forName0(Native Method)
- // at Util.<init>(Unknown Source)
- // at com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101)
- // at com.foo.loader//com.foo.bar.App.run(App.java:12)
- // at acme@2.1/org.acme.Lib.test(Lib.java:80)
- // at MyClass.mash(MyClass.java:9)
- //
- // More information:
- // https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/StackTraceElement.html#toString()
- //
- // A valid Java module name is defined as:
- // "A module name consists of one or more Java identifiers (§3.8) separated by "." tokens."
- // https://docs.oracle.com/javase/specs/jls/se9/html/jls-6.html#jls-ModuleName
- //
- // A Java module version is defined by this class:
- // https://docs.oracle.com/javase/9/docs/api/java/lang/module/ModuleDescriptor.Version.html
- // This is the implementation of the `parse` method in JDK13:
- // https://github.com/matcdac/jdk/blob/2305df71d1b7710266ae0956d73927a225132c0f/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java#L1108
- // However, to keep this simple, a version will be matched by the pattern /@[\w$.+-]*/.
- 'stack-frame': {
- pattern: /^([\t ]*)at (?:[\w$./]|@[\w$.+-]*\/)+(?:<init>)?\([^()]*\)/m,
- lookbehind: true,
- inside: {
- 'keyword': {
- pattern: /^(\s*)at(?= )/,
- lookbehind: true
- },
- 'source': [
- // (Main.java:15)
- // (Main.scala:15)
- {
- pattern: /(\()\w+\.\w+:\d+(?=\))/,
- lookbehind: true,
- inside: {
- 'file': /^\w+\.\w+/,
- 'punctuation': /:/,
- 'line-number': {
- pattern: /\b\d+\b/,
- alias: 'number'
- }
- }
- },
- // (Unknown Source)
- // (Native Method)
- // (...something...)
- {
- pattern: /(\()[^()]*(?=\))/,
- lookbehind: true,
- inside: {
- 'keyword': /^(?:Native Method|Unknown Source)$/
- }
- }
- ],
- 'class-name': /[\w$]+(?=\.(?:<init>|[\w$]+)\()/,
- 'function': /(?:<init>|[\w$]+)(?=\()/,
- 'class-loader': {
- pattern: /(\s)[a-z]\w*(?:\.[a-z]\w*)*(?=\/[\w@$.]*\/)/,
- lookbehind: true,
- alias: 'namespace',
- inside: {
- 'punctuation': /\./
- }
- },
- 'module': {
- pattern: /([\s/])[a-z]\w*(?:\.[a-z]\w*)*(?:@[\w$.+-]*)?(?=\/)/,
- lookbehind: true,
- inside: {
- 'version': {
- pattern: /(@)[\s\S]+/,
- lookbehind: true,
- alias: 'number'
- },
- 'punctuation': /[@.]/
- }
- },
- 'namespace': {
- pattern: /(?:\b[a-z]\w*\.)+/,
- inside: {
- 'punctuation': /\./
- }
- },
- 'punctuation': /[()/.]/
- }
- },
- // ... 32 more
- // ... 32 common frames omitted
- 'more': {
- pattern: /^([\t ]*)\.{3} \d+ [a-z]+(?: [a-z]+)*/m,
- lookbehind: true,
- inside: {
- 'punctuation': /\.{3}/,
- 'number': /\d+/,
- 'keyword': /\b[a-z]+(?: [a-z]+)*\b/
- }
- }
- };
|