<!--                                                                        -->
<!-- Copyright 2008 Google Inc.                                             -->
<!-- Licensed under the Apache License, Version 2.0 (the "License"); you    -->
<!-- may not use this file except in compliance with the License. You may   -->
<!-- may obtain a copy of the License at                                    -->
<!--                                                                        -->
<!-- http://www.apache.org/licenses/LICENSE-2.0                             -->
<!--                                                                        -->
<!-- Unless required by applicable law or agreed to in writing, software    -->
<!-- distributed under the License is distributed on an "AS IS" BASIS,      -->
<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        -->
<!-- implied. License for the specific language governing permissions and   -->
<!-- limitations under the License.                                         -->

<!-- Types and resources required to support primitive system operation.    -->
<!--                                                                        -->
<!-- Types from this module are visible to and imported into user code.     -->
<!-- Every module should directly or indirectly inherit this module.        -->
<!--                                                                        -->
<module>

  <!--
    A property that can be used to see if Super Dev Mode is on.
    It should only be set by Super Dev Mode and defined on the top so that
    all modules can use it.
  -->
  <define-property name="superdevmode" values="off, on"/>
  <set-property name="superdevmode" value="off"/>

  <define-property name="jre.debugMode" values="ENABLED,DISABLED" />
  <set-property name="jre.debugMode" value="DISABLED" />
  <set-property name="jre.debugMode" value="ENABLED">
    <when-property-is name="superdevmode" value="on" />
  </set-property>

  <inherits name="com.google.gwt.dev.jjs.intrinsic.Intrinsic" />
  <inherits name="com.google.gwt.core.CompilerParameters" />
  <inherits name="com.google.gwt.emul.Emulation" />
  <inherits name="com.google.gwt.core.StackTrace" />
  <inherits name="com.google.gwt.core.AsyncFragmentLoader" />
  <inherits name="jsinterop.annotations.Annotations" />

  <source path="client" />
  <source path="shared" />
  <super-source path="translatable" />
  <public path="public" />

  <define-linker name="sso" class="com.google.gwt.core.linker.SingleScriptLinker" />
  <define-linker name="std" class="com.google.gwt.core.linker.IFrameLinker" />
  <inherits name="com.google.gwt.core.XSLinker" />
  <inherits name="com.google.gwt.core.CrossSiteIframeLinker" />

  <!-- std and xs linkers are deprecated and will emit a warning, which can be turned off -->
  <define-configuration-property name="iframe.linker.suppressDeprecationWarning" is-multi-valued="false" />
  <set-configuration-property name="iframe.linker.suppressDeprecationWarning" value="false" />

  <replace-with class="com.google.gwt.core.client.impl.SuperDevModeLogger">
      <when-property-is name="superdevmode" value="on"/>
      <when-type-is class="com.google.gwt.core.shared.impl.JsLogger"/>
  </replace-with>

  <define-linker name="soycReport" class="com.google.gwt.core.linker.SoycReportLinker" />
  <define-linker name="symbolMaps" class="com.google.gwt.core.linker.SymbolMapsLinker" />

  <add-linker name="xsiframe" />

  <add-linker name="soycReport" />
  <add-linker name="symbolMaps" />

  <!--
   Setting this value to OFF will compile out all logging.  Setting it to SEVERE, WARNING
   or INFO means that the logging framework will not compile out, but the basic logging
   calls like logger.fine() will compile out if it is below the level that is set.
   Note that something like logger.log(Level.INFO, "foo") *will not* compile out.
   -->
  <define-property name="jre.logging.logLevel" values="OFF, SEVERE, WARNING, INFO, ALL" />
  <set-property name="jre.logging.logLevel" value="OFF"/>

  <set-property name="jre.logging.logLevel" value="ALL">
    <when-property-is name="jre.debugMode" value="ENABLED"/>
  </set-property>

  <define-property name="jre.logging.simpleConsoleHandler" values="ENABLED, DISABLED" />
  <set-property name="jre.logging.simpleConsoleHandler" value="ENABLED"/>

  <!--
   Configures if the UncaughtExceptionHandler will trap errors coming from
   listening on window.error.
   Three different flags are:
     - Trap window on error at all times and forward (REPORT)
     - Only trap window.onerror if there is no current window.onerror handler (REPORT_IF_NO_HANDLER)
     - Do not trap anything (legacy behavior) (IGNORE)
  -->
  <define-property name="gwt.uncaughtexceptionhander.windowonerror" values="IGNORE, REPORT, REPORT_IF_NO_HANDLER" />
  <set-property name="gwt.uncaughtexceptionhander.windowonerror" value="IGNORE"/>

  <!-- To support legacy logging flags -->
  <inherits name="com.google.gwt.logging.LogImpl"/>
</module>
