<!--                                                                        -->
<!-- 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.                                         -->

<!-- Remote Procedure Call support.                                         -->
<!--                                                                        -->
<!-- This module is typically inherited via com.google.gwt.user.User        -->
<!--                                                                        -->
<module>
	<inherits name="com.google.gwt.http.HTTP"/>  
	
	<!-- 
		Declare a property to determine whether warnings for final instance 
		fields should be suppressed.
	-->
	<define-property name="gwt.suppressNonStaticFinalFieldWarnings" values="true,false" />
	
	<!-- 
	    Default warning for non-static, final fields enabled 
	-->
	<set-property name="gwt.suppressNonStaticFinalFieldWarnings" value="false" />

    <!--
        If this is ever turned on by default, fix up RPCSuiteWithElision 
    -->
    <define-configuration-property name="gwt.elideTypeNamesFromRPC" is-multi-valued="false" />
    <set-configuration-property name="gwt.elideTypeNamesFromRPC" value="false" />
    
  <!--
      Contains regular expressions, optionally prefixed with '+' or '-'.
      Each type being considered for serialization is tested against the
      list of expressions in order, and if there is a match it is added to the
      blacklist (if the prefix is '-' or no prefix is present), or removed (if
      the prefix is '+').  If multiple entries in the list match a supplied
      class, then the last one 'wins.'  For generic types, the regular
      expression is applied to just the base class's fully qualified name.
  -->
  <define-configuration-property name="rpc.blacklist" is-multi-valued="true" />
  
  <!--
      Contains a list of fully-qualified class names indicating classes that
      should be treated as being enhanced on the server with additional fields.
      These classes will be treated specially by RPC.
  -->
  <define-configuration-property name="rpc.enhancedClasses" is-multi-valued="true"/>

	<generate-with class="com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator">
		<when-type-assignable class="com.google.gwt.user.client.rpc.RemoteService"/>
	</generate-with>
  
    <define-linker name="rpcLog" class="com.google.gwt.user.linker.rpc.RpcLogLinker" />
    <add-linker name="rpcLog" />

    <define-linker name="rpcPolicyManifest" class="com.google.gwt.user.linker.rpc.RpcPolicyManifestLinker" />
    <add-linker name="rpcPolicyManifest" /> 
</module>
