#existing API

# dirRoot_old is missing because refJars are being supplied
name_old gwt20userApi
#sourceFiles is specified as colon-separated list of files
sourceFiles_old com/google/gwt

#excludedFiles is specified as colon-separated ant patterns
excludedFiles_old com/google/gwt/benchmarks/BenchmarkReport.java\
:com/google/gwt/benchmarks/BenchmarkShell.java\
:com/google/gwt/benchmarks/client/Benchmark.java\
:com/google/gwt/core/ext/**\
:com/google/gwt/core/linker/**\
: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/resource/**\
:com/google/gwt/dev/shell/**\
:com/google/gwt/dev/ui/**\
:com/google/gwt/dev/util/**\
:com/google/gwt/resources/css/**\
:com/google/gwt/resources/ext/**\
:com/google/gwt/resources/rg/**\
:com/google/gwt/user/linker/**\
:com/google/gwt/util/**\
:com/google/gwt/soyc/**\
:**/rebind/**\
:**/remote/**\
:**/server/**\
:**/tools/**\
:com/google/gwt/core/client/impl/WeakMapping.java\
:com/google/gwt/junit/*.java\
:com/google/gwt/junit/client/GWTTestCase.java\
:com/google/gwt/junit/client/impl/GWTRunner.java\
:com/google/gwt/regexp/shared/**\
:com/google/gwt/rpc/client/impl/ClientWriterFactory.java\
:com/google/gwt/rpc/client/impl/EscapeUtil.java\
:com/google/gwt/rpc/linker/*.java\
:com/google/gwt/uibinder/attributeparsers/*.java\
:com/google/gwt/uibinder/elementparsers/*.java\
:com/google/gwt/uibinder/testing/*.java\
:com/google/gwt/user/client/rpc/core/java/util/LinkedHashMap_CustomFieldSerializer.java\

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

dirRoot_new ./
name_new gwt21userApi
#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
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\
:**/rebind/**\
:**/server/**\
:**/tools/**\
:user/src/com/google/gwt/regexp/shared/**\
:user/src/com/google/gwt/core/client/impl/WeakMapping.java\
: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/precompress/linker\
: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/linker\
:user/src/com/google/gwt/user/client/rpc/core/java/util/LinkedHashMap_CustomFieldSerializer.java\
:user/src/com/google/gwt/user/linker\
:user/src/com/google/gwt/uibinder/attributeparsers\
:user/src/com/google/gwt/uibinder/elementparsers\
:user/src/com/google/gwt/uibinder/testing\
:user/src/com/google/gwt/util/regexfilter\

##############################################
#excluded packages
excludedPackages com.google.gwt.core.client.impl\
:com.google.gwt.i18n.client.impl\
:com.google.gwt.i18n.client.impl.cldr\
:com.google.gwt.i18n.client.impl.plurals\
:com.google.gwt.user.client.impl\
:com.google.gwt.user.client.rpc.impl\
:com.google.gwt.user.client.ui.impl\
:com.google.gwt.xml.client.impl\

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

# Added repeating FinallyCommand.
com.google.gwt.core.client.Scheduler::scheduleFinally(Lcom/google/gwt/core/client/Scheduler$ScheduledCommand;) OVERLOADED_METHOD_CALL

# Adding StackLayoutPanel.add overrides.
com.google.gwt.user.client.ui.StackLayoutPanel::add(Lcom/google/gwt/user/client/ui/Widget;Lcom/google/gwt/user/client/ui/Widget;D) OVERLOADED_METHOD_CALL

# Removing HTTPRequest.
com.google.gwt.user.client.HTTPRequest MISSING

# Change signature for native long from double[2] to LongEmul{l=int,m=int,h=int}
com.google.gwt.lang.LongLib::RUN_IN_JVM MISSING
com.google.gwt.lang.LongLib::add([D[D) MISSING
com.google.gwt.lang.LongLib::and([D[D) MISSING
com.google.gwt.lang.LongLib::compare([D[D) MISSING
com.google.gwt.lang.LongLib::div([D[D) MISSING
com.google.gwt.lang.LongLib::eq([D[D) MISSING
com.google.gwt.lang.LongLib::fromDouble(D) RETURN_TYPE_ERROR  from double[] to java.lang.Object
com.google.gwt.lang.LongLib::fromInt(I) RETURN_TYPE_ERROR  from double[] to java.lang.Object
com.google.gwt.lang.LongLib::gt([D[D) MISSING
com.google.gwt.lang.LongLib::gte([D[D) MISSING
com.google.gwt.lang.LongLib::lt([D[D) MISSING
com.google.gwt.lang.LongLib::lte([D[D) MISSING
com.google.gwt.lang.LongLib::mod([D[D) MISSING
com.google.gwt.lang.LongLib::mul([D[D) MISSING
com.google.gwt.lang.LongLib::neg([D) MISSING
com.google.gwt.lang.LongLib::neq([D[D) MISSING
com.google.gwt.lang.LongLib::not([D) MISSING
com.google.gwt.lang.LongLib::or([D[D) MISSING
com.google.gwt.lang.LongLib::shl([DI) MISSING
com.google.gwt.lang.LongLib::shr([DI) MISSING
com.google.gwt.lang.LongLib::shru([DI) MISSING
com.google.gwt.lang.LongLib::sub([D[D) MISSING
com.google.gwt.lang.LongLib::toDouble([D) MISSING
com.google.gwt.lang.LongLib::toInt([D) MISSING
com.google.gwt.lang.LongLib::toString([D) MISSING
com.google.gwt.lang.LongLib::typeChange(J) MISSING
com.google.gwt.lang.LongLib::xor([D[D) MISSING

# Array.length is now intrinsic to the compiler
com.google.gwt.lang.Array::length MISSING

# Array initialization modified to include castableTypeMap arg
com.google.gwt.lang.Array::initDim(Ljava/lang/Class;IIII) MISSING
com.google.gwt.lang.Array::initDims([Ljava/lang/Class;[I[I[III) MISSING
com.google.gwt.lang.Array::initValues(Ljava/lang/Class;IILcom/google/gwt/lang/Array;) MISSING

# Add DateTimeFormatInfo, PredefinedFormat overrides
com.google.gwt.i18n.client.DateTimeFormat::DateTimeFormat(Ljava/lang/String;Lcom/google/gwt/i18n/client/constants/DateTimeConstants;) OVERLOADED_METHOD_CALL
com.google.gwt.i18n.client.DateTimeFormat::getFormat(Ljava/lang/String;) OVERLOADED_METHOD_CALL
