#existing API

# dirRoot_old is missing because refJars are being supplied
name_old gwt25userApi
#sourceFiles is specified as colon-separated list of files
sourceFiles_old com/google/gwt\
:com/google/web\
:javax/validation\

#excludedFiles is specified as colon-separated ant patterns
# The entries for javax and org exclude the validation stuff.
# Bug: http://code.google.com/p/google-web-toolkit/issues/detail?id=5566
excludedFiles_old com/google/gwt/benchmarks/BenchmarkReport.java\
:com/google/gwt/benchmarks/BenchmarkShell.java\
:com/google/gwt/benchmarks/client/Benchmark.java\
:com/google/gwt/typedarrays/super/com/google/gwt/typedarrays/shared/TypedArraysFactory.java\
:**/linker/**\
:**/rebind/**\
:**/server/**\
:**/tools/**\
:**/vm/**\
:com/google/gwt/regexp/shared/**\
:com/google/gwt/core/client/impl/WeakMapping.java\
:com/google/gwt/core/ext/**\
:com/google/gwt/dev/*.java\
:com/google/gwt/dev/asm/**\
:com/google/gwt/dev/cfg/**\
:com/google/gwt/dev/generator/**\
:com/google/gwt/dev/javac/**\
:com/google/gwt/dev/jdt/**\
:com/google/gwt/dev/jjs/*.java\
:com/google/gwt/dev/jjs/ast/**\
:com/google/gwt/dev/jjs/impl/**\
:com/google/gwt/dev/js/**\
:com/google/gwt/dev/json/**\
:com/google/gwt/dev/resource/**\
:com/google/gwt/dev/shell/**\
:com/google/gwt/dev/ui/**\
:com/google/gwt/dev/util/**\
:com/google/gwt/i18n/**/impl/cldr/**\
:com/google/gwt/junit/*.java\
:com/google/gwt/junit/client/GWTTestCase.java\
:com/google/gwt/junit/client/impl/GWTRunner.java\
:com/google/gwt/junit/remote/**\
:com/google/gwt/resources/css/**\
:com/google/gwt/resources/ext/**\
:com/google/gwt/resources/rg/**\
:com/google/gwt/rpc/client/impl/ClientWriterFactory.java\
:com/google/gwt/rpc/client/impl/EscapeUtil.java\
:com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java\
:com/google/gwt/safecss/shared/SafeStylesHostedModeUtils.java\
:com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java\
:com/google/gwt/safehtml/shared/SafeUriHostedModeUtils.java\
:com/google/gwt/soyc/**\
:com/google/gwt/user/client/rpc/core/**\
:com/google/gwt/user/client/rpc/impl/**\
:com/google/gwt/uibinder/attributeparsers/**\
:com/google/gwt/uibinder/client/impl/**\
:com/google/gwt/uibinder/elementparsers/**\
:com/google/gwt/uibinder/testing/**\
:com/google/gwt/util/**\
:com/google/gwt/validation/**\
:com/google/web/bindery/autobean/**/impl/**\
:com/google/web/bindery/autobean/shared/ValueCodexHelper.java\
:com/google/web/bindery/requestfactory/apt/**\
:com/google/web/bindery/requestfactory/gwt/client/impl/**\
:com/google/web/bindery/requestfactory/server/impl/**\
:com/google/web/bindery/requestfactory/shared/impl/**\
:com/google/web/bindery/requestfactory/vm/**\
:javax/**\
:org/**\

##############################################
#new Api

dirRoot_new ./
name_new gwt26userApi
#sourceFiles is specified as colon-separated list of files
sourceFiles_new dev/core/super\
:user/src\
:user/super\

#excludedFiles is specified as colon-separated ant patterns
# The entries for javax and org exclude the validation stuff.
# Bug: http://code.google.com/p/google-web-toolkit/issues/detail?id=5566
excludedFiles_new user/src/com/google/gwt/benchmarks/BenchmarkReport.java\
:user/src/com/google/gwt/benchmarks/BenchmarkShell.java\
:user/src/com/google/gwt/benchmarks/client/Benchmark.java\
:user/super/com/google/gwt/typedarrays/super/com/google/gwt/typedarrays/shared/TypedArraysFactory.java\
:**/linker/**\
:**/rebind/**\
:**/server/**\
:**/tools/**\
:**/vm/**\
:user/src/com/google/gwt/regexp/shared/**\
:user/src/com/google/web/bindery/autobean/shared/ValueCodexHelper.java\
:user/src/com/google/web/bindery/autobean/**/impl/**\
:user/src/com/google/gwt/core/client/impl/WeakMapping.java\
:user/src/com/google/gwt/i18n/**/impl/cldr/**\
:user/src/com/google/gwt/junit/*.java\
:user/src/com/google/gwt/junit/client/GWTTestCase.java\
:user/src/com/google/gwt/junit/client/impl/GWTRunner.java\
:user/src/com/google/gwt/junit/remote/**\
:user/src/com/google/gwt/resources/css/**\
:user/src/com/google/gwt/resources/ext/**\
:user/src/com/google/gwt/resources/rg/**\
:user/src/com/google/gwt/rpc/client/impl/ClientWriterFactory.java\
:user/src/com/google/gwt/rpc/client/impl/EscapeUtil.java\
:user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java\
:user/src/com/google/gwt/safecss/shared/SafeStylesHostedModeUtils.java\
:user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java\
:user/src/com/google/gwt/safehtml/shared/SafeUriHostedModeUtils.java\
:user/src/com/google/gwt/user/client/rpc/core/**\
:user/src/com/google/gwt/user/client/rpc/impl/**\
:user/src/com/google/gwt/uibinder/attributeparsers/**\
:user/src/com/google/gwt/uibinder/client/impl/**\
:user/src/com/google/gwt/uibinder/elementparsers/**\
:user/src/com/google/gwt/uibinder/testing/**\
:user/src/com/google/gwt/util/**\
:user/src/com/google/gwt/validation/**\
:user/src/com/google/web/bindery/requestfactory/apt/**\
:user/src/com/google/web/bindery/requestfactory/gwt/client/impl/**\
:user/src/com/google/web/bindery/requestfactory/server/impl/**\
:user/src/com/google/web/bindery/requestfactory/shared/impl/**\
:user/src/com/google/web/bindery/requestfactory/vm/**\
:user/src/javax/**\
:user/src/org/**\

##############################################
#excluded packages colon separated list
excludedPackages com.google.gwt.core.client.impl\
:com.google.gwt.editor.client.impl\
:com.google.gwt.junit.client.impl\
:com.google.gwt.benchmarks.client.impl\
:com.google.gwt.user.client.ui.impl\
:com.google.gwt.i18n.client.impl\

##############################################
#Api  whitelist
# when adding to the white-list, include comments as to why the addition is
# being made.

# Removed an internal method of GWTTestCase
com.google.gwt.junit.client.GWTTestCase::__getOrCreateTestResult() MISSING

# Removed deprecated 'checkpoints' functionality in GWTTestCase
com.google.gwt.junit.client.GWTTestCase::addCheckpoint(Ljava/lang/String;) MISSING
com.google.gwt.junit.client.GWTTestCase::clearCheckpoints() MISSING
com.google.gwt.junit.client.GWTTestCase::getCheckpoints() MISSING

# Removed deprecated benchmark infra
com.google.gwt.benchmarks.client MISSING

# Split BaseListenerWrapper
com.google.gwt.user.client.BaseListenerWrapper::getSource(Lcom/google/gwt/event/shared/GwtEvent;) MISSING
com.google.gwt.user.client.BaseListenerWrapper::setSource(Lcom/google/gwt/user/client/ui/Widget;) MISSING
