com.google.gwt.core.server

## Class StackTraceDeobfuscator

- java.lang.Object
- - com.google.gwt.core.server.StackTraceDeobfuscator

- Direct Known Subclasses:
    StackTraceDeobfuscator

      public abstract class StackTraceDeobfuscator
      extends java.lang.Object

  Deobfuscates stack traces on the server side. This class requires that you have turned on emulated stack traces, via `<set-property name="compiler.stackMode" value="emulated" />` in your `.gwt.xml` module file for browsers that don't support sourcemaps or `<set-property name="compiler.useSourceMaps" value="true"/>` for browsers that support it (e.g. Chrome), and moved your symbol map files to a location accessible by your server-side code. You can use the GWT compiler `-deploy` command line argument to specify the location of the folder into which the generated `symbolMaps` directory is written. By default, the final `symbolMaps` directory is `war/WEB-INF/deploy/yourmodulename/symbolMaps/`.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `StackTraceDeobfuscator()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `deobfuscateStackTrace(java.lang.Throwable throwable, java.lang.String strongName)` Replaces the stack traces in the given Throwable and its causes with deobfuscated stack traces wherever possible.
    `static StackTraceDeobfuscator` | `fromFileSystem(java.lang.String symbolMapsDirectory)` Creates a deobfuscator that loads symbol and source map files from the given directory.
    `static StackTraceDeobfuscator` | `fromResource(java.lang.String symbolMapsPath)` Creates a deobfuscator that loads symbol and source map files under given resource path.
    `static StackTraceDeobfuscator` | `fromUrl(java.net.URL urlPath)` Creates a deobfuscator that loads symbol and source map files beneath the given URL.
    `protected java.io.InputStream` | `getSourceMapInputStream(java.lang.String permutationStrongName, int fragmentNumber)`
    `protected java.io.InputStream` | `getSymbolMapInputStream(java.lang.String permutationStrongName)` Retrieves a new `InputStream` for the given permutation strong name.
    `protected abstract java.io.InputStream` | `openInputStream(java.lang.String fileName)` Opens a new `InputStream` for a symbol or source map file.
    `java.lang.StackTraceElement[]` | `resymbolize(java.lang.StackTraceElement[] st, java.lang.String strongName)` Convenience method which resymbolizes an entire stack trace to extent possible.
    `java.lang.StackTraceElement` | `resymbolize(java.lang.StackTraceElement ste, java.lang.String strongName)` Best effort resymbolization of a single stack trace element.
    `void` | `setLazyLoad(boolean lazyLoad)` If set to `true`, only symbols requested to be deobfuscated are cached and the rest is discarded.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### StackTraceDeobfuscator

          public StackTraceDeobfuscator()

  - ### Method Detail

    - #### fromResource

          public static StackTraceDeobfuscator fromResource(java.lang.String symbolMapsPath)

      Creates a deobfuscator that loads symbol and source map files under given resource path. Uses StackTraceObfuscator's `ClassLoader`.

    - #### fromFileSystem

          public static StackTraceDeobfuscator fromFileSystem(java.lang.String symbolMapsDirectory)

      Creates a deobfuscator that loads symbol and source map files from the given directory.

    - #### fromUrl

          public static StackTraceDeobfuscator fromUrl(java.net.URL urlPath)

      Creates a deobfuscator that loads symbol and source map files beneath the given URL.

    - #### setLazyLoad

          public void setLazyLoad(boolean lazyLoad)

      If set to `true`, only symbols requested to be deobfuscated are cached and the rest is discarded. This provides a large memory savings at the expense of occasional extra disk reads. Note that, this will only have effect on symbol maps that haven't been fully loaded yet.

    - #### deobfuscateStackTrace

          public final void deobfuscateStackTrace(java.lang.Throwable throwable,
                                                  java.lang.String strongName)

      Replaces the stack traces in the given Throwable and its causes with deobfuscated stack traces wherever possible.
      Parameters:
        `throwable` - the Throwable that needs its stack trace to be deobfuscated
        `strongName` - the GWT permutation strong name

    - #### resymbolize

          public final java.lang.StackTraceElement[] resymbolize(java.lang.StackTraceElement[] st,
                                                                 java.lang.String strongName)

      Convenience method which resymbolizes an entire stack trace to extent possible.
      Parameters:
        `st` - the stack trace to resymbolize
        `strongName` - the GWT permutation strong name
      Returns:
        a best effort resymbolized stack trace

    - #### resymbolize

          public final java.lang.StackTraceElement resymbolize(java.lang.StackTraceElement ste,
                                                               java.lang.String strongName)

      Best effort resymbolization of a single stack trace element.
      Parameters:
        `ste` - the stack trace element to resymbolize
        `strongName` - the GWT permutation strong name
      Returns:
        the best effort resymbolized stack trace element

    - #### getSourceMapInputStream

          protected java.io.InputStream getSourceMapInputStream(java.lang.String permutationStrongName,
                                                                int fragmentNumber)
                                                         throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getSymbolMapInputStream

          protected java.io.InputStream getSymbolMapInputStream(java.lang.String permutationStrongName)
                                                         throws java.io.IOException

      Retrieves a new `InputStream` for the given permutation strong name. This implementation, which subclasses may override, returns a `InputStream` for the `permutation-strong-name.symbolMap` file.
      Parameters:
        `permutationStrongName` - the GWT permutation strong name
      Returns:
        a new `InputStream`
      Throws:
        `java.io.IOException`

    - #### openInputStream

          protected abstract java.io.InputStream openInputStream(java.lang.String fileName)
                                                          throws java.io.IOException

      Opens a new `InputStream` for a symbol or source map file.
      Parameters:
        `fileName` - name of the symbol or source map file
      Returns:
        an input stream for reading the file (doesn't need to be buffered).
      Throws:
        `java.io.IOException` - if an I/O error occurs while creating the input stream.