ICU-21370 Delete folder for eclipse plug-in build
diff --git a/icu4j/build.xml b/icu4j/build.xml
index 9182ef4..46b3d01 100644
--- a/icu4j/build.xml
+++ b/icu4j/build.xml
@@ -183,13 +183,6 @@
         <delete dir="${out.dir}"/>
         <delete dir="${module.dir}"/>
         <delete dir="${cldr.release.dir}"/>
-
-        <available file="eclipse-build" type="dir" property="eclipse-build.dir.present"/>
-        <antcall target="_clean.eclipse-build"/>
-    </target>
-
-    <target name="_clean.eclipse-build" if="eclipse-build.dir.present">
-        <ant dir="eclipse-build" target="clean" inheritAll="false"/>
     </target>
 
     <target name="ivy-clean">
diff --git a/icu4j/eclipse-build/build-local.properties.template b/icu4j/eclipse-build/build-local.properties.template
deleted file mode 100644
index 7427fa8..0000000
--- a/icu4j/eclipse-build/build-local.properties.template
+++ /dev/null
@@ -1,39 +0,0 @@
-# © 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html
-################################################################################
-# Copyright (C) 2014-2015, International Business Machines Corporation and
-# others. All Rights Reserved.
-################################################################################
-
-# Eclipse installation location
-# Specify the folder that contains eclipse.exe, for example: eclipse.home=C:/eclipse
-#
-# Note:
-#      By default, this value is set by an environment variable 'ECLIPSE_HOME'.
-#      You could uncomment below and specify the path in this file alternatively (recommended). 
-#
-#eclipse.home=
-
-#
-# Java 7 runtime jar location
-# Specify jar file path(es) including Java runtime classes.
-#
-# Note: 
-#   Java runtime classes are stored in multiple jar files in modern JREs.
-#   To get the full list of jar files included in JRE, you can write a simple
-#   code printing system property "sun.boot.class.path".
-#
-# For example:
-#
-# java.rt=C:/java7/jre/lib/resources.jar;C:/java7/jre/lib/rt.jar;\
-#     C:/java7/jre/lib/sunrsasign.jar;C:/java7/jre/lib/jsse.jar;\
-#     C:/java7/jre/lib/jce.jar;C:/java7/jre/lib/charsets.jar;
-#     C:/java7/jre/lib/jfr.jar;C:/java7/jre/classes
-#
-# NOTE: slashes must be forward slashes. Backslashes will NOT work as path separator.
-#
-# IF java.rt variable has embedded space(s)...
-#   ...each element containing an embedded space java.rt must individually quoted and the elements separated by a semi-colon.
-#   ex. "C:/Program Files/IBM/JDK7/jre/lib/vm.jar";"C:/Program Files/IBM/JDK7/jre/lib/core.jar"
-#                                                ^^^
-#java.rt=
diff --git a/icu4j/eclipse-build/build.xml b/icu4j/eclipse-build/build.xml
deleted file mode 100644
index 9020b8e..0000000
--- a/icu4j/eclipse-build/build.xml
+++ /dev/null
@@ -1,409 +0,0 @@
-<!--
-/*
-* © 2016 and later: Unicode, Inc. and others.
-* License & terms of use: http://www.unicode.org/copyright.html
-*******************************************************************************
-* Copyright (C) 2010,2016, International Business Machines Corporation and    *
-* others. All Rights Reserved.                                                *
-*******************************************************************************
-*/
--->
-
-<project name="icu4j-eclipse" default="build" basedir=".">
-  <property file="build-local.properties"/>
-  <property file="build.properties"/>
-
-  <property name="out.dir" value="out"/>
-  <property name="eclipse.projects.dir" value="${out.dir}/projects"/>
-
-  <property name="main.dir" value="../main"/>
-  <property name="shared.dir" value="${main.dir}/shared"/>
-
-  <import file="${shared.dir}/build/common-targets.xml"/>
-  <property file="${shared.dir}/build/common.properties"/>
-  <property file="${shared.dir}/build/locations.properties"/>
-
-  <property environment="env"/>
-
-  <target name="clean" description="Delete all build outputs">
-    <delete dir="${out.dir}"/>
-  </target>
-
-  <target name="build"
-          depends="checkProps,initEnv,icuProjectFiles,icuTestsProjectFiles,icuBaseProjectFiles,icuBaseTestsProjectFiles"
-          description="Build icu4j plug-ins">
-
-    <!-- copy OSGi jar file to baseLocation -->
-    <mkdir dir="${eclipse.projects.dir}/baseLocation/features"/>
-    <mkdir dir="${eclipse.projects.dir}/baseLocation/plugins"/>
-    <copy toDir="${eclipse.projects.dir}/baseLocation/plugins" file="${eclipse.osgi.jar}"/>
-
-    <!-- copy PDE build script files and run the build -->
-    <pathconvert property="eclipse.projects.dir.full" dirsep="/">
-      <path location="${basedir}/${eclipse.projects.dir}"/>
-    </pathconvert>
-
-    <antcall target="runEclipsePDEBuild">
-      <param name="icu.plugin.id" value="com.ibm.icu"/>
-    </antcall>
-
-    <antcall target="runEclipsePDEBuild">
-      <param name="icu.plugin.id" value="com.ibm.icu.base"/>
-    </antcall>
-
-  </target>
-
-  <target name="initEclipseHome"
-          if="env.ECLIPSE_HOME"
-          unless="eclipse.home"
-          description="Initialize the property eclipse.home from the environment variable ECLIPSE_HOME">
-    <property name="eclipse.home" value="${env.ECLIPSE_HOME}"/>
-  </target>
-
-  <target name="checkProps" depends="initEclipseHome">
-      <fail message="Eclipse home (eclipse.home or env.ECLIPSE_HOME) is not set">
-        <condition>
-          <or>
-            <equals arg1="${eclipse.home}" arg2=""/>
-            <not>
-              <isset property="eclipse.home"/>
-            </not>
-          </or>
-        </condition>
-      </fail>
-      <fail message="Java runtime jar path (java.rt) is not set">
-        <condition>
-          <or>
-            <equals arg1="${java.rt}" arg2=""/>
-            <not>
-              <isset property="java.rt"/>
-            </not>
-          </or>
-        </condition>
-      </fail>
-  </target>
-
-  <target name="initPluginVersion">
-    <tstamp>
-      <format property="build.date" pattern="yyyyMMdd"/>
-    </tstamp>
-    <property name="icu4j.eclipse.build.version.string" value="${icu4j.plugin.impl.version.string}.v${build.date}"/>
-  </target>
-
-  <target name="initEnv"
-          depends="checkProps,initEclipseLauncher,initEclipseOSGiJar,initEclipsePDE"
-          description="Initialize eclipse PDE build environment">
-    <echo message="[PDE build configuration properties]"/>
-    <echo message="    Ant version:     ${ant.version}"/>
-    <echo message="    Eclipse home:    ${eclipse.home}"/>
-    <echo message="    Launcher jar:    ${eclipse.launcher}"/>
-    <echo message="    OSGi bundle jar: ${eclipse.osgi.jar}"/>
-    <echo message="    Base OS:         ${eclipse.baseos}"/>
-    <echo message="    Base WS:         ${eclipse.basews}"/>
-    <echo message="    Base ARCH:       ${eclipse.basearch}"/>
-    <echo message="    java.rt:         ${java.rt}"/>
-      
-    <!-- try and detect use of backslashes  -->
-    <condition property="java-rt-has-noSlashes">
-        <matches pattern="/" string="${java.rt}"/>
-    </condition>      
-    <fail message="java.rt variable has no slashes!" unless="java-rt-has-noSlashes"/>
-
-  </target>
-    
-  <target name="initEclipseLauncher"
-          if="eclipse.home"
-          description="Locate org.eclipse.equinox.launcher jar file for eclipse 3.3 and beyond">
-    <first id="equinox.launcher">
-      <fileset dir="${eclipse.home}/plugins">
-        <include name="org.eclipse.equinox.launcher_*.jar"/>
-      </fileset>
-    </first>
-    <pathconvert property="eclipse.launcher" dirsep="/" refid="equinox.launcher"/>
-  </target>
-
-  <target name="initEclipseOSGiJar"
-          if="eclipse.home"
-          description="Locate org.eclipse.osgi plugin jar file">
-    <first id="osgi.bundle">
-      <fileset dir="${eclipse.home}/plugins">
-        <include name="org.eclipse.osgi_*.jar"/>
-      </fileset>
-    </first>
-    <pathconvert property="eclipse.osgi.jar" dirsep="/" refid="osgi.bundle"/>
-  </target>
-
-  <target name="initEclipsePDE"
-          depends="locateEclipsePDE"
-          if="eclipse.pde.dir"
-          description="Set up PDE runtime arguments">
-    <property file="${eclipse.pde.dir}/templates/headless-build/build.properties" prefix="pde.template"/>
-    <property name="eclipse.baseos" value="${pde.template.baseos}"/>
-    <property name="eclipse.basews" value="${pde.template.basews}"/>
-    <property name="eclipse.basearch" value="${pde.template.basearch}"/>
-  </target>
-
-  <target name="locateEclipsePDE"
-          if="eclipse.home"
-          description="Locate org.eclipse.pde.build plug-in and set the property 'eclipse.pde.dir'">
-    <first id="eclipse.pde.plugin.dir">
-      <dirset dir="${eclipse.home}/plugins">
-        <include name="org.eclipse.pde.build_*"/>
-      </dirset>
-    </first>
-    <pathconvert property="eclipse.pde.dir" dirsep="/" refid="eclipse.pde.plugin.dir"/>
-  </target>
-
-  <target name="runEclipsePDEBuild">
-    <mkdir dir="${eclipse.projects.dir}/buildScripts/${icu.plugin.id}"/>
-      <copy toDir="${eclipse.projects.dir}/buildScripts/${icu.plugin.id}">
-        <fileset dir="pdebuild" includes="**/*"/>
-          <filterset>
-            <filter token="PLUGIN_ID" value="${icu.plugin.id}"/>
-            <filter token="BUILD_DIR" value="${eclipse.projects.dir.full}"/>
-            <filter token="BUILD_TYPE" value="ICU4J"/>
-            <filter token="BUILD_ID" value="${icu.plugin.id}"/>
-            <filter token="BASE_LOCATION" value="${eclipse.projects.dir.full}/baseLocation"/>
-            <filter token="BASE_OS" value="${eclipse.baseos}"/>
-            <filter token="BASE_WS" value="${eclipse.basews}"/>
-            <filter token="BASE_ARCH" value="${eclipse.basearch}"/>
-            <filter token="JAVA_RT" value="${java.rt}"/>
-          </filterset>
-      </copy>
-
-      <java jar="${eclipse.launcher}" fork="true" failonerror="true">
-        <arg value="-application"/>
-        <arg value="org.eclipse.ant.core.antRunner"/>
-        <arg value="-buildfile"/>
-        <arg value="${eclipse.pde.dir}/scripts/build.xml"/>
-        <arg value="-Dbuilder=${eclipse.projects.dir.full}/buildScripts/${icu.plugin.id}"/>
-      </java>
-  </target>
-
-  <target name="icuProjectFiles"
-        depends="initPluginVersion"
-        description="Copy com.ibm.icu plug-in project files">
-
-    <delete failonerror="no">
-      <fileset dir="${eclipse.projects.dir}/plugins/com.ibm.icu" />
-      <fileset dir="${eclipse.projects.dir}/features/com.ibm.icu" />
-    </delete>
-
-    <!-- icu source -->
-    <copy toDir="${eclipse.projects.dir}/plugins/com.ibm.icu/src">
-      <fileset dir="${icu4j.collate.dir}/src"/>
-      <fileset dir="${icu4j.core.dir}/src"/>
-      <fileset dir="${icu4j.currdata.dir}/src"/>
-      <fileset dir="${icu4j.langdata.dir}/src"/>
-      <fileset dir="${icu4j.regiondata.dir}/src"/>
-      <fileset dir="${icu4j.translit.dir}/src"/>
-    </copy>
-
-    <!-- overwriting the ICU runtime configuration file for forcing ICU4J plugin to use JDK time zone rules -->
-    <copy file="misc/ICUConfig.properties"
-      toDir="${eclipse.projects.dir}/plugins/com.ibm.icu/src/com/ibm/icu"
-      overwrite="true"/>
-
-    <!-- icu data -->
-    <unjar src="${icu4j.data.jar}" dest="${eclipse.projects.dir}/plugins/com.ibm.icu/src">
-      <patternset>
-        <exclude name="META-INF"/>
-        <exclude name="META-INF/**/*"/>
-        <exclude name="**/*.cnv"/>
-        <exclude name="**/cnvalias.icu"/>
-      </patternset>
-    </unjar>
-
-    <!-- icu tz data -->
-    <unjar src="${icu4j.tzdata.jar}" dest="${eclipse.projects.dir}/plugins/com.ibm.icu/src">
-      <patternset>
-        <exclude name="META-INF"/>
-        <exclude name="META-INF/**/*"/>
-      </patternset>
-    </unjar>
-
-    <!-- full locale names lists -->
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/brkitr"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/coll"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/curr"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/lang"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/rbnf"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/region"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/translit"/>
-    </antcall>
-
-    <antcall target="@full-locale-names">
-        <param name="res.dir" value="${eclipse.projects.dir}/plugins/com.ibm.icu/src/${icu4j.data.path}/zone"/>
-    </antcall>
-
-    <!-- plugin project -->
-    <copy todir="${eclipse.projects.dir}/plugins/com.ibm.icu">
-      <fileset dir="plugins.template/com.ibm.icu"/>
-      <filterset>
-        <filter token="BUILD_VERSION" value="${icu4j.eclipse.build.version.string}" />
-        <filter token="COPYRIGHT" value="${copyright.eclipse}" />
-        <filter token="IMPL_VERSION" value="${icu4j.impl.version}" />
-        <filter token="DATA_VERSION_NUMBER" value="${icu4j.data.version.number}" />
-      </filterset>
-    </copy>
-
-    <!-- license -->
-    <copy file="${shared.dir}/licenses/LICENSE"
-          todir="${eclipse.projects.dir}/plugins/com.ibm.icu/about_files" />
-
-    <!-- about -->
-    <copy file="misc/about_icu.html"
-          tofile="${eclipse.projects.dir}/plugins/com.ibm.icu/about.html" />
-
-    <!-- FEATURE FILES -->
-    <copy todir="${eclipse.projects.dir}/features/com.ibm.icu">
-      <fileset dir="features.template/com.ibm.icu"/>
-      <filterset>
-        <filter token="BUILD_VERSION" value="${icu4j.eclipse.build.version.string}" />
-        <filter token="COPYRIGHT" value="${copyright.eclipse}" />
-        <filter token="DATA_VERSION_NUMBER" value="${icu4j.data.version.number}" />
-      </filterset>
-    </copy>
-
-  </target>
-
-  <target name="icuTestsProjectFiles"
-        depends="initPluginVersion"
-        description="Copy com.ibm.icu.tests plug-in project files">
-
-    <delete failonerror="no">
-      <fileset dir="${eclipse.projects.dir}/plugins/com.ibm.icu.tests" />
-    </delete>
-
-    <!-- icu test source -->
-    <copy toDir="${eclipse.projects.dir}/plugins/com.ibm.icu.tests/src">
-      <fileset dir="${icu4j.test-framework.dir}/src"/>
-      <fileset dir="${icu4j.core-tests.dir}/src"/>
-      <fileset dir="${icu4j.collate-tests.dir}/src"/>
-      <fileset dir="${icu4j.translit-tests.dir}/src"/>
-    </copy>
-
-    <!-- icu test data -->
-    <unjar src="${icu4j.testdata.jar}" dest="${eclipse.projects.dir}/plugins/com.ibm.icu.tests/src">
-      <patternset>
-        <exclude name="**/*.cnv"/>
-        <exclude name="**/cnvalias.icu"/>
-        <exclude name="META-INF"/>
-        <exclude name="META-INF/**/*"/>
-      </patternset>
-    </unjar>
-
-    <!-- plugin project -->
-    <copy todir="${eclipse.projects.dir}/plugins/com.ibm.icu.tests">
-      <fileset dir="plugins.template/com.ibm.icu.tests"/>
-      <filterset>
-        <filter token="BUILD_VERSION" value="${icu4j.eclipse.build.version.string}" />
-        <filter token="COPYRIGHT" value="${copyright.eclipse}" />
-        <filter token="IMPL_VERSION" value="${icu4j.impl.version}" />
-        <filter token="DATA_VERSION_NUMBER" value="${icu4j.data.version.number}" />
-      </filterset>
-    </copy>
-
-    <!-- license -->
-    <copy file="${shared.dir}/licenses/LICENSE"
-          todir="${eclipse.projects.dir}/plugins/com.ibm.icu.tests/about_files" />
-
-    <!-- about -->
-    <copy file="misc/about_icu.html"
-          tofile="${eclipse.projects.dir}/plugins/com.ibm.icu.tests/about.html" />
-
-  </target>
-
-  <target name="icuBaseProjectFiles"
-        depends="initPluginVersion"
-        description="Copy com.ibm.icu.base plug-in project files">
-
-    <delete failonerror="no">
-      <fileset dir="${eclipse.projects.dir}/plugins/com.ibm.icu.base" />
-      <fileset dir="${eclipse.projects.dir}/features/com.ibm.icu.base" />
-    </delete>
-
-    <!-- plugin project -->
-    <copy todir="${eclipse.projects.dir}/plugins/com.ibm.icu.base">
-      <fileset dir="plugins.template/com.ibm.icu.base"/>
-      <filterset>
-        <filter token="BUILD_VERSION" value="${icu4j.eclipse.build.version.string}" />
-        <filter token="COPYRIGHT" value="${copyright.eclipse}" />
-        <filter token="IMPL_VERSION" value="${icu4j.impl.version}" />
-        <filter token="DATA_VERSION_NUMBER" value="${icu4j.data.version.number}" />
-      </filterset>
-    </copy>
-
-    <!-- license -->
-    <copy file="${shared.dir}/licenses/LICENSE"
-          todir="${eclipse.projects.dir}/plugins/com.ibm.icu.base/about_files" />
-
-    <!-- about -->
-    <copy file="misc/about_icu.html"
-          tofile="${eclipse.projects.dir}/plugins/com.ibm.icu.base/about.html" />
-
-    <!-- FEATURE FILES -->
-    <copy todir="${eclipse.projects.dir}/features/com.ibm.icu.base">
-      <fileset dir="features.template/com.ibm.icu.base"/>
-      <filterset>
-        <filter token="BUILD_VERSION" value="${icu4j.eclipse.build.version.string}" />
-        <filter token="COPYRIGHT" value="${copyright.eclipse}" />
-        <filter token="DATA_VERSION_NUMBER" value="${icu4j.data.version.number}" />
-      </filterset>
-    </copy>
-
-  </target>
-
-  <target name="icuBaseTestsProjectFiles"
-        depends="initPluginVersion"
-        description="Copy com.ibm.icu.base.tests plug-in project files">
-
-    <delete failonerror="no">
-      <fileset dir="${eclipse.projects.dir}/plugins/com.ibm.icu.base.tests" />
-    </delete>
-
-    <!-- plugin project -->
-    <copy todir="${eclipse.projects.dir}/plugins/com.ibm.icu.base.tests">
-      <fileset dir="plugins.template/com.ibm.icu.base.tests"/>
-      <filterset>
-        <filter token="BUILD_VERSION" value="${icu4j.eclipse.build.version.string}" />
-        <filter token="COPYRIGHT" value="${copyright.eclipse}" />
-        <filter token="IMPL_VERSION" value="${icu4j.impl.version}" />
-        <filter token="DATA_VERSION_NUMBER" value="${icu4j.data.version.number}" />
-      </filterset>
-    </copy>
-
-    <!-- license -->
-    <copy file="${shared.dir}/licenses/LICENSE"
-          todir="${eclipse.projects.dir}/plugins/com.ibm.icu.base.tests/about_files" />
-
-    <!-- about -->
-    <copy file="misc/about_icu.html"
-          tofile="${eclipse.projects.dir}/plugins/com.ibm.icu.base.tests/about.html" />
-
-  </target>
-
-</project>
diff --git a/icu4j/eclipse-build/features.template/com.ibm.icu.base/.project b/icu4j/eclipse-build/features.template/com.ibm.icu.base/.project
deleted file mode 100644
index 7f1208b..0000000
--- a/icu4j/eclipse-build/features.template/com.ibm.icu.base/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>com.ibm.icu.base-feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/icu4j/eclipse-build/features.template/com.ibm.icu.base/build.properties b/icu4j/eclipse-build/features.template/com.ibm.icu.base/build.properties
deleted file mode 100644
index c6c3b4d..0000000
--- a/icu4j/eclipse-build/features.template/com.ibm.icu.base/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2011,2016 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-LICENSE
-outputUpdateJars = true
-
-generate.plugin@com.ibm.icu.base.source=com.ibm.icu.base
-
diff --git a/icu4j/eclipse-build/features.template/com.ibm.icu.base/feature.xml b/icu4j/eclipse-build/features.template/com.ibm.icu.base/feature.xml
deleted file mode 100644
index 5102e29..0000000
--- a/icu4j/eclipse-build/features.template/com.ibm.icu.base/feature.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="com.ibm.icu.base"
-      label="com.ibm.icu.base"
-      version="@BUILD_VERSION@">
-
-   <description url="http://www.example.com/description">
-      [Enter Feature Description here.]
-   </description>
-
-   <copyright url="http://www.example.com/copyright">
-      [Enter Copyright Description here.]
-   </copyright>
-
-   <license url="http://www.example.com/license">
-      [Enter License Description here.]
-   </license>
-
-   <plugin
-         id="com.ibm.icu.base"
-         download-size="0"
-         install-size="0"
-         version="@BUILD_VERSION@"
-         unpack="false"/>
-
-   <plugin
-         id="com.ibm.icu.base.source"
-         download-size="0"
-         install-size="0"
-         version="@BUILD_VERSION@"
-         unpack="false"/>
-
-</feature>
diff --git a/icu4j/eclipse-build/features.template/com.ibm.icu/.project b/icu4j/eclipse-build/features.template/com.ibm.icu/.project
deleted file mode 100644
index d407fa0..0000000
--- a/icu4j/eclipse-build/features.template/com.ibm.icu/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>com.ibm.icu-feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/icu4j/eclipse-build/features.template/com.ibm.icu/build.properties b/icu4j/eclipse-build/features.template/com.ibm.icu/build.properties
deleted file mode 100644
index bec15cf..0000000
--- a/icu4j/eclipse-build/features.template/com.ibm.icu/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000,2016 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes =\
-epl-v10.html,\
-eclipse_update_120.jpg,\
-feature.xml,\
-feature.properties,\
-LICENSE
-outputUpdateJars = true
-
-generate.plugin@com.ibm.icu.source=com.ibm.icu
-
diff --git a/icu4j/eclipse-build/features.template/com.ibm.icu/feature.xml b/icu4j/eclipse-build/features.template/com.ibm.icu/feature.xml
deleted file mode 100644
index 417e65b..0000000
--- a/icu4j/eclipse-build/features.template/com.ibm.icu/feature.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="com.ibm.icu"
-      label="com.ibm.icu"
-      version="@BUILD_VERSION@">
-
-   <description url="http://www.example.com/description">
-      [Enter Feature Description here.]
-   </description>
-
-   <copyright url="http://www.example.com/copyright">
-      [Enter Copyright Description here.]
-   </copyright>
-
-   <license url="http://www.example.com/license">
-      [Enter License Description here.]
-   </license>
-
-   <plugin
-         id="com.ibm.icu"
-         download-size="0"
-         install-size="0"
-         version="@BUILD_VERSION@"
-         unpack="false"/>
-
-   <plugin
-         id="com.ibm.icu.source"
-         download-size="0"
-         install-size="0"
-         version="@BUILD_VERSION@"
-         unpack="false"/>
-
-</feature>
diff --git a/icu4j/eclipse-build/misc/ICUConfig.properties b/icu4j/eclipse-build/misc/ICUConfig.properties
deleted file mode 100644
index 1b88ef3..0000000
--- a/icu4j/eclipse-build/misc/ICUConfig.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html
-#*******************************************************************************
-#* Copyright (C) 2008-2011, International Business Machines Corporation and    *
-#* others. All Rights Reserved.                                                *
-#*******************************************************************************
-#* This is the properties contains ICU runtime configuration 
-#*
-
-#
-# The default TimeZone implementation type used by the ICU TimeZone
-# factory method. [ ICU | JDK ]
-#
-com.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK
-
-#
-# By default, DecimalFormat uses some internal equivalent character
-# data in addition to ones in DecimalFormatSymbols for parsing
-# decimal/grouping separators.  When this property is true,
-# DecimalFormat uses separators configured by DecimalFormatSymbols only
-# and does not try to find a match in the internal equivalent character
-# data.
-#
-com.ibm.icu.text.DecimalFormat.SkipExtendedSeparatorParsing = false
-
-
-# 
-# [Internal Use Only]
-# Disable resource path scan for building full locale name list
-# at run time.
-#
-com.ibm.icu.impl.ICUResourceBundle.skipRuntimeLocaleResourceScan = false
diff --git a/icu4j/eclipse-build/misc/about_icu.html b/icu4j/eclipse-build/misc/about_icu.html
deleted file mode 100644
index 2fa9ccc..0000000
--- a/icu4j/eclipse-build/misc/about_icu.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<meta name="COPYRIGHT" content="© 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html">
-<title>About com.ibm.icu plugin</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>Sept 18, 2018</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-
-<h3>Third Party Content</h3>
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor's license for 
-terms and conditions of use.</p>
-
-<p><strong>ICU4J 63.1.0 plug-in</strong></p>
-
-<p>The plug-in includes software (&quot;ICU4J&quot;) developed by Unicode Inc. and others.
-Your use of ICU4J is subject to the terms and conditions of the ICU license.  A copy of the
-license is contained in the file <a href="about_files/LICENSE" target="_blank">about_files/LICENSE</a>.</p>
-
-<p>The project information including source code, documentations and demo programs are available on
-the <a href="http://www.icu-project.org">ICU public web site</a>.</p>
-
-</body>
-</html>
diff --git a/icu4j/eclipse-build/misc/about_icu_base.html b/icu4j/eclipse-build/misc/about_icu_base.html
deleted file mode 100644
index aceb93f..0000000
--- a/icu4j/eclipse-build/misc/about_icu_base.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<meta name="COPYRIGHT" content="© 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html">
-<title>About com.ibm.icu.base plugin</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>Sept 18, 2018</p>
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-
-<h3>Third Party Content</h3>
-<p>The Content includes items that have been sourced from third parties as set out below. If you 
-did not receive this Content directly from the Eclipse Foundation, the following is provided 
-for informational purposes only, and you should look to the Redistributor's license for 
-terms and conditions of use.</p>
-
-<p><strong>ICU4J 63.1.0 base plug-in</strong></p>
-
-<p>The plug-in includes software (&quot;ICU4J&quot;) developed by Unicode Inc. and others.
-Your use of ICU4J is subject to the terms and conditions of the ICU license.  A copy of the
-license is contained in the file <a href="about_files/LICENSE" target="_blank">about_files/LICENSE</a>.</p>
-
-<p>The project information including source code, documentations and demo programs are available on
-the <a href="http://www.icu-project.org">ICU public web site</a>.</p>
-
-</body>
-</html>
diff --git a/icu4j/eclipse-build/pdebuild/allElements.xml b/icu4j/eclipse-build/pdebuild/allElements.xml
deleted file mode 100644
index e4d6613..0000000
--- a/icu4j/eclipse-build/pdebuild/allElements.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<project name="allElements Delegator">
-	
- 	<!-- ===================================================================== -->
- 	<!-- Run a given ${target} on all elements being built                     -->
- 	<!-- Replace element.id with the id of the top level element being built.    -->
-	<!-- If element.id does not exist in ${buildDirectory}/features/element.id   -->
-	<!-- or ${baseLocation}/features/element.id, then you must provide the       -->
-	<!-- location by setting the property "pluginPath"                           -->
- 	<!-- Add on <ant> task for each top level element being built.             -->
- 	<!-- ===================================================================== -->
- 	<target name="allElementsDelegator">
- 		<ant antfile="${genericTargets}" target="${target}">
-	 		<property name="type" value="feature" />
-	 		<property name="id" value="@PLUGIN_ID@" />
- 		</ant>
- 	</target>
- 
- 	<!-- ===================================================================== -->
- 	<!-- Targets to assemble the built elements for particular configurations  -->
- 	<!-- These generally call the generated assemble scripts (named in         -->
- 	<!-- ${assembleScriptName}) but may also add pre and post processing       -->
- 	<!-- Add one target for each root element and each configuration           -->
- 	<!-- Replace element.id with the id of the top level element being built   -->
- 	<!-- ===================================================================== -->
- 	<target name="assemble.@PLUGIN_ID@">
- 		<ant antfile="${assembleScriptName}" dir="${buildDirectory}"/>
- 	</target>
-</project>
diff --git a/icu4j/eclipse-build/pdebuild/build.properties b/icu4j/eclipse-build/pdebuild/build.properties
deleted file mode 100644
index 00b3b3d..0000000
--- a/icu4j/eclipse-build/pdebuild/build.properties
+++ /dev/null
@@ -1,224 +0,0 @@
-###############################################################################
-# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html
-# Copyright (c) 2003-2015 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-#####################
-# Parameters describing how and where to execute the build.
-# Typical users need only update the following properties:
-#    baseLocation - where things you are building against are installed
-#    bootclasspath - The base jars to compile against (typicaly rt.jar)
-#    configs - the list of {os, ws, arch} configurations to build.  
-#
-# Of course any of the settings here can be overridden by spec'ing 
-# them on the command line (e.g., -DbaseLocation=d:/eclipse
-
-############# PRODUCT/PACKAGING CONTROL #############
-product=/plugin or feature id/path/to/.product
-runPackager=true
-
-#Set the name of the archive that will result from the product build.
-#archiveNamePrefix=
-
-# The prefix that will be used in the generated archive.
-#archivePrefix=<output archive root>
-archivePrefix=
-
-# The location underwhich all of the build output will be collected.
-collectingFolder=${archivePrefix}
-
-# The list of {os, ws, arch} configurations to build.  This 
-# value is a '&' separated list of ',' separate triples.  For example, 
-#     configs=win32,win32,x86 & linux,motif,x86
-# By default the value is *,*,*
-#configs=win32, win32, x86 & \
-#	linux, gtk, ppc &\
-# linux, gtk, x86 & \
-#	linux, gtk, x86_64 & \
-#	linux, motif, x86 & \
-#	solaris, motif, sparc & \
-#	solaris, gtk, sparc & \
-#	aix, motif, ppc & \
-#	hpux, motif, PA_RISC & \
-#	macosx, carbon, ppc
-
-# By default PDE creates one archive (result) per entry listed in the configs property.
-# Setting this value to try will cause PDE to only create one output containing all 
-# artifacts for all the platforms listed in the configs property.
-#groupConfigurations=true
-
-#The format of the archive. By default a zip is created using antZip.
-#The list can only contain the configuration for which the desired format is different than zip.
-#archivesFormat=win32, win32, x86 - antZip& \
-#	linux, gtk, ppc - antZip &\
-#    linux, gtk, x86 - antZip& \
-#	linux, gtk, x86_64 - antZip& \
-# linux, motif, x86 - antZip& \
-#	solaris, motif, sparc - antZip& \
-#	solaris, gtk, sparc - antZip& \
-#	aix, motif, ppc - antZip& \
-#	hpux, motif, PA_RISC - antZip& \
-#	macosx, carbon, ppc - antZip
-	
-#Set to true if you want the output to be ready for an update jar (no site.xml generated)
-#outputUpdateJars = false
-
-#Set to true for Jnlp generation
-#codebase should be a URL that will be used as the root of all relative URLs in the output.
-#generateJnlp=false
-#jnlp.codebase=<codebase url>
-#jnlp.j2se=<j2se version>
-#jnlp.locale=<a locale>
-
-#Set to true if you want to sign jars
-#signJars=false
-#sign.alias=<alias>
-#sign.keystore=<keystore location>
-#sign.storepass=<keystore password>
-
-#Arguments to send to the zip executable
-zipargs=
-
-#Arguments to send to the tar executable
-tarargs=
-
-#Control the creation of a file containing the version included in each configuration - on by default 
-#generateVersionsLists=false
-
-############## BUILD NAMING CONTROL ################
-# The directory into which the build elements are fetched and where
-# the build takes place.
-buildDirectory=@BUILD_DIR@
-
-# Type of build.  Used in naming the build output.  Typically this value is
-# one of I, N, M, S, ...
-buildType=@BUILD_TYPE@
-
-# ID of the build.  Used in naming the build output.
-buildId=@BUILD_ID@
-
-# Label for the build.  Used in naming the build output
-buildLabel=${buildType}.${buildId}
-
-# Timestamp for the build.  Used in naming the build output
-timestamp=007
-
-#The value to be used for the qualifier of a plugin or feature when you want to override the value computed by pde.
-#The value will only be applied to plugin or features indicating build.properties, qualifier = context 
-#forceContextQualifier=<the value for the qualifier>
-
-#Enable / disable the generation of a suffix for the features that use .qualifier. 
-#The generated suffix is computed according to the content of the feature   
-#generateFeatureVersionSuffix=true
-
-############# BASE CONTROL #############
-# Settings for the base Eclipse components and Java class libraries 
-# against which you are building.
-# Base location for anything the build needs to compile against.  For example,
-# in most RCP app or a plug-in,  the baseLocation should be the location of a previously
-# installed Eclipse against which the application or plug-in code will be compiled and the RCP delta pack.
-
-base=<path/to/parent/of/eclipse>
-#baseLocation=${base}/eclipse
-baseLocation=@BASE_LOCATION@
-#Os/Ws/Arch/nl of the eclipse specified by baseLocation
-baseos=@BASE_OS@
-basews=@BASE_WS@
-basearch=@BASE_ARCH@
-
-#this property indicates whether you want the set of plug-ins and features to be considered during the build to be limited to the ones reachable from the features / plugins being built
-filteredDependencyCheck=false
-
-#pluginPath is a list of locations in which to find plugins and features.  This list is separated by the platform file separator (; or :)
-#a location is one of:  
-#- the location of the jar or folder that is the plugin or feature : /path/to/foo.jar or /path/to/foo
-#- a directory that contains a /plugins or /features subdirectory
-#- the location of a feature.xml, or for 2.1 style plugins, the plugin.xml or fragment.xml
-#pluginPath=
-
-skipBase=true
-eclipseURL=<url for eclipse download site>
-eclipseBuildId=<Id of Eclipse build to get>
-eclipseBaseURL=${eclipseURL}/eclipse-platform-${eclipseBuildId}-win32.zip
-
-
-############# MAP FILE CONTROL ################
-# This section defines CVS tags to use when fetching the map files from the repository.
-# If you want to fetch the map file from repository / location, change the getMapFiles target in the customTargets.xml
-
-skipMaps=true
-mapsRepo=:pserver:anonymous@example.com/path/to/repo
-mapsRoot=path/to/maps
-mapsCheckoutTag=HEAD
-
-#tagMaps=true
-mapsTagTag=v${buildId}
-
-
-############ REPOSITORY CONTROL ###############
-# This section defines properties parameterizing the repositories where plugins, fragments
-# bundles and features are being obtained from. 
-
-# The tags to use when fetching elements to build.
-# By default thebuilder will use whatever is in the maps.  
-# This value takes the form of a comma separated list of repository identifier (like used in the map files) and the 
-# overriding value
-# For example fetchTag=CVS=HEAD, SVN=v20050101
-# fetchTag=HEAD
-skipFetch=true
-
-
-############# JAVA COMPILER OPTIONS ##############
-# The location of the Java jars to compile against.  Typically the rt.jar for your JDK/JRE
-#bootclasspath=${java.home}/lib/rt.jar
-
-# specific JRE locations to compile against. These values are used to compile bundles specifying a 
-# Bundle-RequiredExecutionEnvironment. Uncomment and set values for environments that you support
-#CDC-1.0/Foundation-1.0= /path/to/rt.jar
-#CDC-1.1/Foundation-1.1=
-#OSGi/Minimum-1.0=
-#OSGi/Minimum-1.1=
-#JRE-1.1=
-#J2SE-1.2=
-#J2SE-1.3=
-#J2SE-1.4=
-#J2SE-1.5=
-#JavaSE-1.6=
-#JavaSE-1.7=
-JavaSE-1.7=@JAVA_RT@
-#PersonalJava-1.1=
-#PersonalJava-1.2=
-#CDC-1.0/PersonalBasis-1.0=
-#CDC-1.0/PersonalJava-1.0=
-#CDC-1.1/PersonalBasis-1.1=
-#CDC-1.1/PersonalJava-1.1=
-
-# Specify the output format of the compiler log when eclipse jdt is used
-logExtension=.log
-
-# Whether or not to include debug info in the output jars
-javacDebugInfo=true
-
-# Whether or not to fail the build if there are compiler errors
-javacFailOnError=true
-
-# Enable or disable verbose mode of the compiler
-javacVerbose=true
-
-# Extra arguments for the compiler. These are specific to the java compiler being used.
-compilerArg=-inlineJSR -enableJavadoc -encoding UTF-8
-
-# Default value for the version of the source code. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacSource in build.properties
-javacSource=1.7
-
-# Default value for the version of the byte code targeted. This value is used when compiling plug-ins that do not set the Bundle-RequiredExecutionEnvironment or set javacTarget in build.properties.
-javacTarget=1.7
-
-individualSourceBundles=true
diff --git a/icu4j/eclipse-build/pdebuild/customTargets.xml b/icu4j/eclipse-build/pdebuild/customTargets.xml
deleted file mode 100644
index ae4266d..0000000
--- a/icu4j/eclipse-build/pdebuild/customTargets.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<project name="Build specific targets and properties" default="noDefault">
-
-	<!-- ===================================================================== -->
-	<!-- Run a given ${target} on all elements being built -->
-	<!-- Add on <ant> task for each top level element being built. -->
-	<!-- ===================================================================== -->
-	<property name="allElementsFile" value="${builder}/allElements.xml"/>
-	<import file="${allElementsFile}" />
-	<target name="allElements">
-		<antcall target="allElementsDelegator" />
-	</target>
-	
-	<!-- ===================================================================== -->
-	<!-- ===================================================================== -->
-	<target name="getBaseComponents" depends="checkLocalBase" unless="skipBase">
-		<get src="${eclipseBaseURL}" dest="${buildDirectory}/../temp-base.zip" />
-		<unzip dest="${base}" overwrite="true" src="${buildDirectory}/../temp-base.zip" />
-	</target>
-
-	<target name="checkLocalBase">
-		<available file="${base}" property="skipBase" />
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Check out map files from correct repository -->
-	<!-- Replace values for mapsCheckoutTag as desired. -->
-	<!-- ===================================================================== -->
-	<target name="getMapFiles" depends="checkLocalMaps" unless="skipMaps">
-		<property name="mapsCheckoutTag" value="HEAD" />
-		<cvs cvsRoot="${mapsRepo}" package="${mapsRoot}" dest="${buildDirectory}/maps" tag="${mapsCheckoutTag}" />
-	</target>
-
-	<target name="checkLocalMaps">
-		<available property="skipMaps" file="${buildDirectory}/maps" />
-	</target>
-
-	<target name="tagMapFiles" if="tagMaps">
-		<cvs dest="${buildDirectory}/maps/${mapsRoot}" command="tag ${mapsTagTag}" />
-	</target>
-
-	<!-- ===================================================================== -->
-
-	<target name="clean" unless="noclean">
-		<antcall target="allElements">
-			<param name="target" value="cleanElement" />
-		</antcall>
-	</target>
-
-	<target name="gatherLogs">
-		<mkdir dir="${buildDirectory}/${buildLabel}/compilelogs" />
-		<antcall target="allElements">
-			<param name="target" value="gatherLogs" />
-		</antcall>
-		<unzip dest="${buildDirectory}/${buildLabel}/compilelogs" overwrite="true">
-			<fileset dir="${buildDirectory}/features">
-				<include name="**/*.log.zip" />
-			</fileset>
-		</unzip>
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do before setup -->
-	<!-- ===================================================================== -->
-	<target name="preSetup">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after setup but before starting the build proper -->
-	<!-- ===================================================================== -->
-	<target name="postSetup">
-		<antcall target="getBaseComponents" />
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do before fetching the build elements -->
-	<!-- ===================================================================== -->
-	<target name="preFetch">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after fetching the build elements -->
-	<!-- ===================================================================== -->
-	<target name="postFetch">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do before generating the build scripts. -->
-	<!-- ===================================================================== -->
-	<target name="preGenerate">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after generating the build scripts. -->
-	<!-- ===================================================================== -->
-	<target name="postGenerate">
-		<antcall target="clean" />
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do before running the build.xmls for the elements being built. -->
-	<!-- ===================================================================== -->
-	<target name="preProcess">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after running the build.xmls for the elements being built. -->
-	<!-- ===================================================================== -->
-	<target name="postProcess">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do before running assemble. -->
-	<!-- ===================================================================== -->
-	<target name="preAssemble">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after  running assemble. -->
-	<!-- ===================================================================== -->
-	<target name="postAssemble">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do before running package. -->
-	<!-- ===================================================================== -->
-	<target name="prePackage">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after  running package. -->
-	<!-- ===================================================================== -->
-	<target name="postPackage">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do after the build is done. -->
-	<!-- ===================================================================== -->
-	<target name="postBuild">
-		<antcall target="gatherLogs" />
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do to test the build results -->
-	<!-- ===================================================================== -->
-	<target name="test">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Steps to do to publish the build results -->
-	<!-- ===================================================================== -->
-	<target name="publish">
-	</target>
-
-	<!-- ===================================================================== -->
-	<!-- Default target                                                        -->
-	<!-- ===================================================================== -->
-	<target name="noDefault">
-		<echo message="You must specify a target when invoking this file" />
-	</target>
-
-</project>
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.classpath b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.classpath
deleted file mode 100644
index 3bc2475..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.project b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.project
deleted file mode 100644
index 848567c..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>com.ibm.icu.base.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.core.resources.prefs b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.jdt.core.prefs b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index b237e4c..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,77 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=ignore
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.7
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.jdt.ui.prefs b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 1c69cb6..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Thu Dec 14 11:51:01 EST 2006
-eclipse.preferences.version=1
-internal.default.compliance=default
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/META-INF/MANIFEST.MF b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index b473e18..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: com.ibm.icu.base.tests
-Bundle-Version: @BUILD_VERSION@
-Bundle-Vendor: %providerName
-Fragment-Host: com.ibm.icu.base
-Bundle-Copyright: @COPYRIGHT@
-Require-Bundle: org.junit
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/build.properties b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/build.properties
deleted file mode 100644
index 3edb708..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2011 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = .,\
-               about.html,\
-               about_files/,\
-               plugin.properties,\
-               META-INF/
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/plugin.properties b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/plugin.properties
deleted file mode 100644
index 5038ce3..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2011 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = International Components for Unicode for Java (ICU4J) Replacement plug-in Tests
-providerName = IBM Corporation
\ No newline at end of file
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/BreakIteratorTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/BreakIteratorTest.java
deleted file mode 100644
index 1ddd5d8..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/BreakIteratorTest.java
+++ /dev/null
@@ -1,361 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.text.CharacterIterator;
-import java.text.StringCharacterIterator;
-import java.util.Locale;
-
-import com.ibm.icu.text.BreakIterator;
-import com.ibm.icu.util.ULocale;
-
-public class BreakIteratorTest extends ICUTestCase {
-    // ICU behaves a bit differently with this text, but the tested values aren't
-    // affected.  If Java changes behavior they might need to change.
-    private static final String text = "Mr. and Mrs. Mumblety-Peg paid $35.97 for a new 12\" cockatoo. " +
-        "When they got home they both cooed \"Isn't it lovely?\" and sighed softly. " +
-        "\"Let's name it u\u0308\u5098!\" they said with glee.";
-    private static int pos = text.indexOf("sn't");
-    private static BreakIterator cbr;
-    private static BreakIterator wbr;
-    private static BreakIterator lbr;
-    private static BreakIterator sbr;
-        
-    static {
-        cbr = BreakIterator.getCharacterInstance();
-        cbr.setText(text);
-        wbr = BreakIterator.getWordInstance();
-        wbr.setText(text);
-        lbr = BreakIterator.getLineInstance();
-        lbr.setText(text);
-        sbr = BreakIterator.getSentenceInstance();
-        sbr.setText(text);
-                
-        // diagnostic
-        //              dump(cbr);
-        //              dump(wbr);
-        //              dump(lbr);
-        //              dump(sbr);
-    }
-        
-    //      private static void dump(BreakIterator bi) {
-    //              for (int ix = bi.first(), lim = text.length(); ix != lim;) {
-    //                      int nx = bi.next();
-    //                      if (nx < 0) nx = lim;
-    //                      System.out.println(Integer.toString(ix) + ": " + text.substring(ix, nx));
-    //                      ix = nx;
-    //              }
-    //      }
-        
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.hashCode()'
-     */
-    public void testHashCode() {
-        BreakIterator br = BreakIterator.getWordInstance();
-        br.setText(text);
-        BreakIterator brne = BreakIterator.getWordInstance();
-        brne.setText(text + "X");
-        wbr.first();
-        testEHCS(br, wbr, brne);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.BreakIterator(BreakIterator)'
-     */
-    public void testBreakIterator() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.first()'
-     */
-    public void testFirst() {
-        assertEquals(0, cbr.first());
-        assertEquals(0, wbr.first());
-        assertEquals(0, lbr.first());
-        assertEquals(0, sbr.first());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.last()'
-     */
-    public void testLast() {
-        assertEquals(text.length(), cbr.last());
-        assertEquals(text.length(), wbr.last());
-        assertEquals(text.length(), lbr.last());
-        assertEquals(text.length(), sbr.last());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.next(int)'
-     */
-    public void testNextInt() {
-        cbr.first();
-        wbr.first();
-        lbr.first();
-        sbr.first();
-        assertEquals(2, cbr.next(2));
-        assertEquals(3, wbr.next(2));
-        assertEquals(8, lbr.next(2));
-        assertEquals(62, sbr.next(2));
-                
-        cbr.last();
-        wbr.last();
-        lbr.last();
-        sbr.last();
-        assertEquals(174, cbr.next(-2));
-        assertEquals(171, wbr.next(-2));
-        assertEquals(166, lbr.next(-2));
-        assertEquals(135, sbr.next(-2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.next()'
-     */
-    public void testNext() {
-        cbr.first();
-        wbr.first();
-        lbr.first();
-        sbr.first();
-        assertEquals(1, cbr.next());
-        assertEquals(2, wbr.next());
-        assertEquals(4, lbr.next());
-        assertEquals(13, sbr.next());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.previous()'
-     */
-    public void testPrevious() {
-        cbr.last();
-        wbr.last();
-        lbr.last();
-        sbr.last();
-        assertEquals(175, cbr.previous());
-        assertEquals(175, wbr.previous());
-        assertEquals(171, lbr.previous());
-        assertEquals(156, sbr.previous());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.following(int)'
-     */
-    public void testFollowing() {
-        assertEquals(100, cbr.following(pos));
-        assertEquals(103, wbr.following(pos));
-        assertEquals(104, lbr.following(pos));
-        assertEquals(116, sbr.following(pos));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.preceding(int)'
-     */
-    public void testPreceding() {
-        assertEquals(98, cbr.preceding(pos));
-        assertEquals(98, wbr.preceding(pos));
-        assertEquals(97, lbr.preceding(pos));
-        assertEquals(62, sbr.preceding(pos));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.isBoundary(int)'
-     */
-    public void testIsBoundary() {
-        assertTrue(cbr.isBoundary(pos));
-        assertFalse(wbr.isBoundary(pos));
-        assertFalse(lbr.isBoundary(pos));
-        assertFalse(sbr.isBoundary(pos));
-
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.current()'
-     */
-    public void testCurrent() {
-        cbr.following(pos);
-        wbr.following(pos);
-        lbr.following(pos);
-        sbr.following(pos);
-        assertEquals(100, cbr.current());
-        assertEquals(103, wbr.current());
-        assertEquals(104, lbr.current());
-        assertEquals(116, sbr.current());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getText()'
-     */
-    public void testGetText() {
-        CharacterIterator ci = cbr.getText();
-        StringBuffer buf = new StringBuffer(ci.getEndIndex() - ci.getBeginIndex());
-        for (char c = ci.first(); c != CharacterIterator.DONE; c = ci.next()) {
-            buf.append(c);
-        }
-        String result = buf.toString();
-        assertEquals(text, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.setText(String)'
-     */
-    public void testSetTextString() {
-        // implicitly tested
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.setText(CharacterIterator)'
-     */
-    public void testSetTextCharacterIterator() {
-        CharacterIterator ci = new StringCharacterIterator(text, pos);
-        BreakIterator bi = BreakIterator.getWordInstance();
-        bi.setText(ci);
-        assertEquals(2, bi.next());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getWordInstance()'
-     */
-    public void testGetWordInstance() {
-        // implicitly tested
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getWordInstance(Locale)'
-     */
-    public void testGetWordInstanceLocale() {
-        assertNotNull(BreakIterator.getWordInstance(Locale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getWordInstance(ULocale)'
-     */
-    public void testGetWordInstanceULocale() {
-        assertNotNull(BreakIterator.getWordInstance(ULocale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getLineInstance()'
-     */
-    public void testGetLineInstance() {
-        // implicitly tested
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getLineInstance(Locale)'
-     */
-    public void testGetLineInstanceLocale() {
-        assertNotNull(BreakIterator.getLineInstance(Locale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getLineInstance(ULocale)'
-     */
-    public void testGetLineInstanceULocale() {
-        assertNotNull(BreakIterator.getLineInstance(ULocale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getCharacterInstance()'
-     */
-    public void testGetCharacterInstance() {
-        // implicitly tested
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getCharacterInstance(Locale)'
-     */
-    public void testGetCharacterInstanceLocale() {
-        assertNotNull(BreakIterator.getCharacterInstance(Locale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getCharacterInstance(ULocale)'
-     */
-    public void testGetCharacterInstanceULocale() {
-        assertNotNull(BreakIterator.getCharacterInstance(ULocale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getSentenceInstance()'
-     */
-    public void testGetSentenceInstance() {
-        // implicitly tested
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getSentenceInstance(Locale)'
-     */
-    public void testGetSentenceInstanceLocale() {
-        assertNotNull(BreakIterator.getSentenceInstance(Locale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getSentenceInstance(ULocale)'
-     */
-    public void testGetSentenceInstanceULocale() {
-        assertNotNull(BreakIterator.getSentenceInstance(ULocale.JAPAN));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getTitleInstance()'
-     */
-    public void testGetTitleInstance() {
-        // not implemented
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getTitleInstance(Locale)'
-     */
-    public void testGetTitleInstanceLocale() {
-        // not implemented
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getTitleInstance(ULocale)'
-     */
-    public void testGetTitleInstanceULocale() {
-        // not implemented
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getAvailableLocales()'
-     */
-    public void testGetAvailableLocales() {
-        assertNotNull(BreakIterator.getAvailableLocales());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.getAvailableULocales()'
-     */
-    public void testGetAvailableULocales() {
-        assertNotNull(BreakIterator.getAvailableULocales());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.toString()'
-     */
-    public void testToString() {
-        assertNotNull(cbr.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.clone()'
-     */
-    public void testClone() {
-        // see testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.BreakIterator.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // see testHashCode
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CalendarTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CalendarTest.java
deleted file mode 100644
index 9b0e755..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CalendarTest.java
+++ /dev/null
@@ -1,553 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2012, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Date;
-import java.util.Locale;
-
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.util.Calendar;
-import com.ibm.icu.util.TimeZone;
-import com.ibm.icu.util.ULocale;
-
-public class CalendarTest extends ICUTestCase {
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.hashCode()'
-     */
-    public void testHashCode() {
-        Calendar cal1 = Calendar.getInstance();
-        Calendar cal2 = Calendar.getInstance();
-        Calendar cal3 = Calendar.getInstance();
-
-        long t = System.currentTimeMillis();
-        cal1.setTimeInMillis(t);
-        cal2.setTimeInMillis(t);
-        cal3.setTimeInMillis(t);
-
-        cal3.setMinimalDaysInFirstWeek(cal3.getMinimalDaysInFirstWeek()+1);
-        testEHCS(cal1, cal2, cal3);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.Calendar(Calendar)'
-     */
-    public void testCalendar() {
-        // tested implicitly everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getInstance()'
-     */
-    public void testGetInstance() {
-        // tested by testEHCS
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getInstance(TimeZone)'
-     */
-    public void testGetInstanceTimeZone() {
-        TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
-        Calendar cal = Calendar.getInstance(tz);
-        assertNotNull(cal);
-        assertNotNull(cal.getTime());
-        assertEquals(tz, cal.getTimeZone());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getInstance(Locale)'
-     */
-    public void testGetInstanceLocale() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        assertNotNull(cal);
-        assertNotNull(cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getInstance(ULocale)'
-     */
-    public void testGetInstanceULocale() {
-        Calendar cal = Calendar.getInstance(ULocale.US);
-        assertNotNull(cal);
-        assertNotNull(cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getInstance(TimeZone, Locale)'
-     */
-    public void testGetInstanceTimeZoneLocale() {
-        TimeZone tz = TimeZone.getTimeZone("America/New_York");
-        Calendar cal = Calendar.getInstance(tz, Locale.US);
-        assertNotNull(cal);
-        assertNotNull(cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getInstance(TimeZone, ULocale)'
-     */
-    public void testGetInstanceTimeZoneULocale() {
-        TimeZone tz = TimeZone.getTimeZone("America/New_York");
-        Calendar cal = Calendar.getInstance(tz, ULocale.US);
-        assertNotNull(cal);
-        assertNotNull(cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getAvailableLocales()'
-     */
-    public void testGetAvailableLocales() {
-        assertNotNull(Calendar.getAvailableLocales());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getAvailableULocales()'
-     */
-    public void testGetAvailableULocales() {
-        assertNotNull(Calendar.getAvailableULocales());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getTime()'
-     */
-    public void testGetTime() {
-        Calendar cal = Calendar.getInstance();
-        assertNotNull(cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.setTime(Date)'
-     */
-    public void testSetTime() {
-        Calendar cal = Calendar.getInstance();
-        cal.clear();
-        cal.set(2006, 0, 20, 9, 30, 0);
-        Date date = cal.getTime();
-        cal = Calendar.getInstance();
-        cal.setTime(date);
-        assertEquals(date, cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getTimeInMillis()'
-     */
-    public void testGetTimeInMillis() {
-        Calendar cal = Calendar.getInstance();
-        assertTrue(0 != cal.getTimeInMillis());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.setTimeInMillis(long)'
-     */
-    public void testSetTimeInMillis() {
-        Calendar cal = Calendar.getInstance();
-        cal.clear();
-        cal.set(2006, 0, 20, 9, 30, 0);
-        long millis = cal.getTimeInMillis();
-        Date date = cal.getTime();
-        
-        cal = Calendar.getInstance();
-        cal.setTimeInMillis(millis);
-        
-        assertEquals(date, cal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.get(int)'
-     */
-    public void testGet() {
-        Calendar cal = Calendar.getInstance();
-        cal.clear();
-        cal.set(2006, 0, 20, 9, 30, 0);
-        assertEquals(0, cal.get(Calendar.MONTH));
-        assertEquals(20, cal.get(Calendar.DAY_OF_MONTH));
-        assertEquals(30, cal.get(Calendar.MINUTE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.set(int, int)'
-     */
-    public void testSetIntInt() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, 1977);
-        assertEquals(1977, cal.get(Calendar.YEAR));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.set(int, int, int)'
-     */
-    public void testSetIntIntInt() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1997, 9, 15);
-        assertEquals(15, cal.get(Calendar.DATE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.set(int, int, int, int, int)'
-     */
-    public void testSetIntIntIntIntInt() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1997, 9, 15, 14, 25);
-        assertEquals(25, cal.get(Calendar.MINUTE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.set(int, int, int, int, int, int)'
-     */
-    public void testSetIntIntIntIntIntInt() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1997, 9, 15, 14, 25, 51);
-        assertEquals(51, cal.get(Calendar.SECOND));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.clear()'
-     */
-    public void testClear() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1997, 9, 15, 14, 25, 51);
-        cal.clear();
-        assertEquals(0, cal.get(Calendar.MONTH));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.clear(int)'
-     */
-    public void testClearInt() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1997, 9, 15, 14, 25, 51);
-        assertTrue(cal.isSet(Calendar.DAY_OF_MONTH));
-        cal.clear(Calendar.DAY_OF_MONTH);
-        assertFalse(cal.isSet(Calendar.DAY_OF_MONTH));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.isSet(int)'
-     */
-    public void testIsSet() {
-        // see testClearInt
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // tested by testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.isEquivalentTo(Calendar)'
-     */
-    public void testIsEquivalentTo() {
-        Calendar cal = Calendar.getInstance();
-        Calendar cal2 = Calendar.getInstance();
-        cal2.set(1994, 6, 21, 8, 7);
-        assertTrue(cal.isEquivalentTo(cal2));
-        cal.setTimeZone(TimeZone.getTimeZone("CST"));
-        cal2.setTimeZone(TimeZone.getTimeZone("PDT"));
-        assertFalse(cal.isEquivalentTo(cal2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.before(Object)'
-     */
-    public void testBefore() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, 1990);
-        assertTrue(cal.before(new Date()));
-        assertTrue(cal.before(Calendar.getInstance()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.after(Object)'
-     */
-    public void testAfter() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, 3058);
-        assertTrue(cal.after(new Date()));
-        assertTrue(cal.after(Calendar.getInstance()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getActualMaximum(int)'
-     */
-    public void testGetActualMaximum() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        assertEquals(11, cal.getActualMaximum(Calendar.MONTH));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getActualMinimum(int)'
-     */
-    public void testGetActualMinimum() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        assertEquals(0, cal.getActualMinimum(Calendar.MONTH));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.roll(int, boolean)'
-     */
-    public void testRollIntBoolean() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        cal.set(1997, 1, 27);
-        cal.roll(Calendar.DATE, true);
-        assertEquals(28, cal.get(Calendar.DATE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.roll(int, int)'
-     */
-    public void testRollIntInt() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        cal.set(1997, 1, 27);
-        cal.roll(Calendar.DATE, 3);
-        assertEquals(2, cal.get(Calendar.DATE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.add(int, int)'
-     */
-    public void testAdd() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        cal.set(1997, 1, 27);
-        cal.add(Calendar.DATE, 3);
-        assertEquals(2, cal.get(Calendar.DATE));
-        assertEquals(2, cal.get(Calendar.MONTH));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getDisplayName(Locale)'
-     */
-    public void testGetDisplayNameLocale() {
-        Calendar cal = Calendar.getInstance();
-        assertEquals("Gregorian Calendar", cal.getDisplayName(Locale.US));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getDisplayName(ULocale)'
-     */
-    public void testGetDisplayNameULocale() {
-        Calendar cal = Calendar.getInstance();
-        assertEquals("Gregorian Calendar", cal.getDisplayName(ULocale.US));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.compareTo(Calendar)'
-     */
-    public void testCompareToCalendar() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, 1990);
-        assertTrue(0 > cal.compareTo(Calendar.getInstance()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.compareTo(Object)'
-     */
-    public void testCompareToObject() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.YEAR, 1990);
-        assertTrue(0 > cal.compareTo(Calendar.getInstance()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getDateTimeFormat(int, int, Locale)'
-     */
-    public void testGetDateTimeFormatIntIntLocale() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1990, 8, 16, 20, 3);
-        DateFormat df = cal.getDateTimeFormat(DateFormat.LONG, DateFormat.SHORT, Locale.US);
-        assertEquals("September 16, 1990 8:03 PM", df.format(cal));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getDateTimeFormat(int, int, ULocale)'
-     */
-    public void testGetDateTimeFormatIntIntULocale() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(1990, 8, 16, 20, 3);
-        DateFormat df = cal.getDateTimeFormat(DateFormat.LONG, DateFormat.SHORT, ULocale.US);
-        assertEquals("September 16, 1990 8:03 PM", df.format(cal));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.fieldDifference(Date, int)'
-     */
-    public void testFieldDifference() {
-        Calendar cal = Calendar.getInstance();
-        cal.set(Calendar.DAY_OF_MONTH, 0);
-        Date date = cal.getTime();
-        cal.add(Calendar.DAY_OF_MONTH, 5);
-        assertEquals(-5, cal.fieldDifference(date, Calendar.DAY_OF_MONTH));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getTimeZone()'
-     */
-    public void testGetTimeZone() {
-        Calendar cal = Calendar.getInstance();
-        assertNotNull(cal.getTimeZone());
-    }
-    
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.setTimeZone(TimeZone)'
-     */
-    public void testSetTimeZone() {
-        Calendar cal = Calendar.getInstance();
-        TimeZone value1 = cal.getTimeZone();
-        String tzn = "PDT".equals(value1.getID()) ? "CST" : "PDT";
-        TimeZone value2 = TimeZone.getTimeZone(tzn);
-        cal.setTimeZone(value2);
-        TimeZone result = cal.getTimeZone();
-        assertNotEqual(value1, result);
-        assertEquals(value2, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.setLenient(boolean)'
-     */
-    public void testSetLenient() {
-        Calendar cal = Calendar.getInstance();
-        boolean lenient = cal.isLenient();
-        cal.setLenient(!lenient);
-        assertFalse(lenient == cal.isLenient());
-        
-        // not testing if it has the expected effect
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.isLenient()'
-     */
-    public void testIsLenient() {
-        // tested by testSetLenient
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.setFirstDayOfWeek(int)'
-     */
-    public void testSetFirstDayOfWeek() {
-        Calendar cal = Calendar.getInstance();
-        int firstDay = cal.getFirstDayOfWeek();
-        cal.setFirstDayOfWeek(firstDay+1);
-        assertEquals(firstDay+1, cal.getFirstDayOfWeek());
-
-        // don't test functionality
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getFirstDayOfWeek()'
-     */
-    public void testGetFirstDayOfWeek() {
-        // tested by testSetFirstDayOfWeek
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.setMinimalDaysInFirstWeek(int)'
-     */
-    public void testSetMinimalDaysInFirstWeek() {
-        Calendar cal = Calendar.getInstance();
-        int firstDay = cal.getMinimalDaysInFirstWeek();
-        cal.setMinimalDaysInFirstWeek(firstDay+1);
-        assertEquals(firstDay+1, cal.getMinimalDaysInFirstWeek());
-
-        // don't test functionality
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getMinimalDaysInFirstWeek()'
-     */
-    public void testGetMinimalDaysInFirstWeek() {
-        // tested by testSetMinimalDaysInFirstWeek
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getMinimum(int)'
-     */
-    public void testGetMinimum() {
-        Calendar cal = Calendar.getInstance();
-        assertEquals(1, cal.getMinimum(Calendar.DAY_OF_WEEK));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getMaximum(int)'
-     */
-    public void testGetMaximum() {
-        Calendar cal = Calendar.getInstance();
-        assertEquals(7, cal.getMaximum(Calendar.DAY_OF_WEEK));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getGreatestMinimum(int)'
-     */
-    public void testGetGreatestMinimum() {
-        Calendar cal = Calendar.getInstance();
-        assertEquals(1, cal.getGreatestMinimum(Calendar.DATE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getLeastMaximum(int)'
-     */
-    public void testGetLeastMaximum() {
-        Calendar cal = Calendar.getInstance();
-        assertEquals(28, cal.getLeastMaximum(Calendar.DATE));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getDayOfWeekType(int)'
-     */
-    public void testGetDayOfWeekType() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        assertEquals(Calendar.WEEKDAY, cal.getDayOfWeekType(Calendar.FRIDAY));
-        assertEquals(Calendar.WEEKEND, cal.getDayOfWeekType(Calendar.SATURDAY));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.isWeekend(Date)'
-     */
-    public void testIsWeekendDate() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
-        assertTrue(cal.isWeekend(cal.getTime()));
-        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
-        assertFalse(cal.isWeekend(cal.getTime()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.isWeekend()'
-     */
-    public void testIsWeekend() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
-        assertTrue(cal.isWeekend());
-        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
-        assertFalse(cal.isWeekend());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.clone()'
-     */
-    public void testClone() {
-        // tested by testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.toString()'
-     */
-    public void testToString() {
-        Calendar cal = Calendar.getInstance();
-        assertNotNull(cal.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.Calendar.getType()'
-     */
-    public void testGetType() {
-        Calendar cal = Calendar.getInstance(Locale.US);
-        assertEquals("gregorian", cal.getType());
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CollationKeyTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CollationKeyTest.java
deleted file mode 100644
index 1fe5002..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CollationKeyTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import com.ibm.icu.text.CollationKey;
-import com.ibm.icu.text.Collator;
-
-public class CollationKeyTest extends ICUTestCase {
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.hashCode()'
-     */
-    public void testHashCode() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        CollationKey k2 = c.getCollationKey("this");
-        c.setStrength(Collator.TERTIARY);
-        CollationKey kn = c.getCollationKey("this");
-        testEHCS(k1, k2, kn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.CollationKey(CollationKey)'
-     */
-    public void testCollationKey() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.compareTo(CollationKey)'
-     */
-    public void testCompareToCollationKey() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        CollationKey k2 = c.getCollationKey("this");
-        c.setStrength(Collator.TERTIARY);
-        CollationKey k3 = c.getCollationKey("this");
-        assertTrue(0 == k1.compareTo(k2));
-        assertFalse(0 == k1.compareTo(k3));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.compareTo(Object)'
-     */
-    public void testCompareToObject() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        CollationKey k2 = c.getCollationKey("this");
-        assertTrue(0 == k1.compareTo(k2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.equals(Object)'
-     */
-    public void testEqualsObject() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        CollationKey k2 = c.getCollationKey("this");
-        assertTrue(k1.equals((Object)k2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.toString()'
-     */
-    public void testToString() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        assertNotNull(k1.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.getSourceString()'
-     */
-    public void testGetSourceString() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        assertEquals("This", k1.getSourceString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.CollationKey.toByteArray()'
-     */
-    public void testToByteArray() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey("This");
-        byte[] key = k1.toByteArray();
-        assertNotNull(key);
-        assertTrue(0 < key.length);
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CollatorTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CollatorTest.java
deleted file mode 100644
index 8cb743d..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/CollatorTest.java
+++ /dev/null
@@ -1,207 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Locale;
-
-import com.ibm.icu.text.CollationKey;
-import com.ibm.icu.text.Collator;
-import com.ibm.icu.util.ULocale;
-
-public class CollatorTest extends ICUTestCase {
-    private static final String s1 = "Fu\u0308nf"; // capital F + u + diaresis
-    private static final String s2 = "fu\u0308nf"; // u + diaresis
-    private static final String s3 = "f\u00fcnf"; // u-umlaut
-    private static final String s4 = "fu\u0308\u0316nf"; // u + diaresis above + grave below
-    private static final String s5 = "fu\u0316\u0308nf"; // u + grave below + diaresis above
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.hashCode()'
-     */
-    public void testHashCode() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.SECONDARY);
-        Collator c2 = Collator.getInstance();
-        c2.setStrength(Collator.SECONDARY);
-        Collator cn = Collator.getInstance();
-        cn.setStrength(Collator.TERTIARY);
-        testEHCS(c, c2, cn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.Collator(Collator)'
-     */
-    public void testCollator() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.setStrength(int)'
-     */
-    public void testSetStrength() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        assertTrue(0 == c.compare(s1, s2));
-        c.setStrength(Collator.SECONDARY);
-        assertTrue(0 == c.compare(s1, s2));
-        c.setStrength(Collator.TERTIARY);
-        assertTrue(0 < c.compare(s1, s2));
-        assertTrue(0 == c.compare(s2, s3));
-        c.setStrength(Collator.QUATERNARY);
-        assertTrue(0 > c.compare(s2, s3));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.setDecomposition(int)'
-     */
-    public void testSetDecomposition() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.TERTIARY);
-        assertTrue(0 != c.compare(s4, s5));
-        c.setDecomposition(Collator.IDENTICAL);
-        assertTrue(0 == c.compare(s4, s5));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getInstance()'
-     */
-    public void testGetInstance() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getInstance(ULocale)'
-     */
-    public void testGetInstanceULocale() {
-        Collator c = Collator.getInstance(ULocale.GERMANY);
-        assertNotNull(c);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getInstance(Locale)'
-     */
-    public void testGetInstanceLocale() {
-        Collator c = Collator.getInstance(Locale.GERMANY);
-        assertNotNull(c);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getAvailableLocales()'
-     */
-    public void testGetAvailableLocales() {
-        assertNotNull(Collator.getAvailableLocales());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getAvailableULocales()'
-     */
-    public void testGetAvailableULocales() {
-        assertNotNull(Collator.getAvailableULocales());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getKeywords()'
-     */
-    public void testGetKeywords() {
-        assertEquals(0, Collator.getKeywords().length);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getKeywordValues(String)'
-     */
-    public void testGetKeywordValues() {
-        assertEquals(0, Collator.getKeywordValues("").length);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getStrength()'
-     */
-    public void testGetStrength() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        assertEquals(Collator.PRIMARY, c.getStrength());
-        c.setStrength(Collator.SECONDARY);
-        assertEquals(Collator.SECONDARY, c.getStrength());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getDecomposition()'
-     */
-    public void testGetDecomposition() {
-        Collator c = Collator.getInstance();
-        c.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
-        assertEquals(Collator.CANONICAL_DECOMPOSITION, c.getDecomposition());
-        c.setDecomposition(Collator.NO_DECOMPOSITION);
-        assertEquals(Collator.NO_DECOMPOSITION, c.getDecomposition());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.compare(Object, Object)'
-     */
-    public void testCompareObjectObject() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        assertTrue(0 == c.compare((Object)s1, (Object)s2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.equals(String, String)'
-     */
-    public void testEqualsStringString() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        assertTrue(c.equals(s1, s2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.compare(String, String)'
-     */
-    public void testCompareStringString() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        assertTrue(0 == c.compare(s1, s2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.getCollationKey(String)'
-     */
-    public void testGetCollationKey() {
-        Collator c = Collator.getInstance();
-        c.setStrength(Collator.PRIMARY);
-        CollationKey k1 = c.getCollationKey(s1);
-        CollationKey k2 = c.getCollationKey(s2);
-        assertTrue(k1.equals(k2));
-        c.setStrength(Collator.TERTIARY);
-        k1 = c.getCollationKey(s1);
-        k2 = c.getCollationKey(s2);
-        assertFalse(k1.equals(k2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.toString()'
-     */
-    public void testToString() {
-        assertNotNull(Collator.getInstance().toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.clone()'
-     */
-    public void testClone() {
-        // tested above
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.Collator.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // tested above
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DateFormatSymbolsTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DateFormatSymbolsTest.java
deleted file mode 100644
index a98dafb..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DateFormatSymbolsTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Locale;
-
-import com.ibm.icu.text.DateFormatSymbols;
-import com.ibm.icu.util.ULocale;
-
-public class DateFormatSymbolsTest extends ICUTestCase {
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.hashCode()'
-     */
-    public void testHashCode() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        DateFormatSymbols dfs2 = new DateFormatSymbols(ULocale.US);
-        DateFormatSymbols dfsn = new DateFormatSymbols(Locale.US);
-        dfsn.setAmPmStrings(new String[] { "sw", "xw" });
-        testEHCS(dfs, dfs2, dfsn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.DateFormatSymbols(DateFormatSymbols)'
-     */
-    public void testDateFormatSymbolsDateFormatSymbols() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.DateFormatSymbols()'
-     */
-    public void testDateFormatSymbols() {
-        DateFormatSymbols dfs = new DateFormatSymbols();
-        assertNotNull(dfs.getWeekdays());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.DateFormatSymbols(Locale)'
-     */
-    public void testDateFormatSymbolsLocale() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getWeekdays());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.DateFormatSymbols(ULocale)'
-     */
-    public void testDateFormatSymbolsULocale() {
-        DateFormatSymbols dfs = new DateFormatSymbols(ULocale.US);
-        assertNotNull(dfs.getWeekdays());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getEras()'
-     */
-    public void testGetEras() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getEras());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setEras(String[])'
-     */
-    public void testSetEras() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[] oldvalue = dfs.getEras();
-        String[] newvalue = (String[])oldvalue.clone();
-        newvalue[0] = newvalue[0] + "!";
-        dfs.setEras(newvalue);
-        String[] result = dfs.getEras();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getMonths()'
-     */
-    public void testGetMonths() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getMonths());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setMonths(String[])'
-     */
-    public void testSetMonths() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[] oldvalue = dfs.getMonths();
-        String[] newvalue = (String[])oldvalue.clone();
-        newvalue[0] = newvalue[0] + "!";
-        dfs.setMonths(newvalue);
-        String[] result = dfs.getMonths();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getShortMonths()'
-     */
-    public void testGetShortMonths() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getShortMonths());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setShortMonths(String[])'
-     */
-    public void testSetShortMonths() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[] oldvalue = dfs.getShortMonths();
-        String[] newvalue = (String[])oldvalue.clone();
-        newvalue[0] = newvalue[0] + "!";
-        dfs.setShortMonths(newvalue);
-        String[] result = dfs.getShortMonths();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getWeekdays()'
-     */
-    public void testGetWeekdays() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getShortMonths());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setWeekdays(String[])'
-     */
-    public void testSetWeekdays() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[] oldvalue = dfs.getWeekdays();
-        String[] newvalue = (String[])oldvalue.clone();
-        newvalue[0] = newvalue[0] + "!";
-        dfs.setWeekdays(newvalue);
-        String[] result = dfs.getWeekdays();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getShortWeekdays()'
-     */
-    public void testGetShortWeekdays() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getShortWeekdays());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setShortWeekdays(String[])'
-     */
-    public void testSetShortWeekdays() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[] oldvalue = dfs.getShortWeekdays();
-        String[] newvalue = (String[])oldvalue.clone();
-        newvalue[0] = newvalue[0] + "!";
-        dfs.setShortWeekdays(newvalue);
-        String[] result = dfs.getShortWeekdays();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getAmPmStrings()'
-     */
-    public void testGetAmPmStrings() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getAmPmStrings());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setAmPmStrings(String[])'
-     */
-    public void testSetAmPmStrings() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[] oldvalue = dfs.getAmPmStrings();
-        String[] newvalue = (String[])oldvalue.clone();
-        newvalue[0] = newvalue[0] + "!";
-        dfs.setAmPmStrings(newvalue);
-        String[] result = dfs.getAmPmStrings();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getZoneStrings()'
-     */
-    public void testGetZoneStrings() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getZoneStrings());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setZoneStrings(String[][])'
-     */
-    public void testSetZoneStrings() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String[][] oldvalue = dfs.getZoneStrings();
-        String[][] newvalue = (String[][])cloneComplex(oldvalue);
-        newvalue[0][0] = newvalue[0][0] + "!";
-        dfs.setZoneStrings(newvalue);
-        String[][] result = dfs.getZoneStrings();
-        assertArraysNotEqual(oldvalue, result);
-        assertArraysEqual(newvalue, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.getLocalPatternChars()'
-     */
-    public void testGetLocalPatternChars() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.getLocalPatternChars());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.setLocalPatternChars(String)'
-     */
-    public void testSetLocalPatternChars() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        String pat = dfs.getLocalPatternChars();
-        StringBuffer buf = new StringBuffer(pat);
-        buf.setCharAt(0, (char)(pat.charAt(0) + 1));
-        String pat2 = buf.toString();
-        dfs.setLocalPatternChars(pat2);
-        String pat3 = dfs.getLocalPatternChars();
-        assertNotEqual(pat, pat2);
-        assertEquals(pat2, pat3);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.toString()'
-     */
-    public void testToString() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        assertNotNull(dfs.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.clone()'
-     */
-    public void testClone() {
-        // tested by testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormatSymbols.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // tested by testHashCode
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DateFormatTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DateFormatTest.java
deleted file mode 100644
index 0f2fc7d..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DateFormatTest.java
+++ /dev/null
@@ -1,456 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.text.FieldPosition;
-import java.text.ParseException;
-import java.text.ParsePosition;
-import java.util.Date;
-import java.util.Locale;
-
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.NumberFormat;
-import com.ibm.icu.util.Calendar;
-import com.ibm.icu.util.TimeZone;
-import com.ibm.icu.util.ULocale;
-
-public class DateFormatTest extends ICUTestCase {
-    private Calendar aCal;
-    private Calendar anESTCal;
-    private Date aDate;
-    private String aDateString;
-    private String aTimeString;
-    private String anESTTimeString;
-    private String aDateTimeString;
-    private String aShortDateTimeString;
-    private String aDefaultESTDateTimeString;
-    private DateFormat aDF;
-    private StringBuffer aBuf;
-    private FieldPosition anFP;
-    private FieldPosition anFPField;
-
-    private static int YEAR_POS_START = 8;
-    private static int YEAR_POS_END = 12;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-                
-        java.util.GregorianCalendar gcal = new java.util.GregorianCalendar();
-        gcal.clear();
-        gcal.set(java.util.GregorianCalendar.YEAR, 1990);
-        gcal.set(java.util.GregorianCalendar.MONTH, java.util.GregorianCalendar.DECEMBER);
-        gcal.set(java.util.GregorianCalendar.DATE, 17);
-        gcal.set(java.util.GregorianCalendar.HOUR, 5);
-        gcal.set(java.util.GregorianCalendar.MINUTE, 17);
-        aCal = new Calendar(gcal);
-        anESTCal = Calendar.getInstance();
-        anESTCal.setTimeZone(TimeZone.getTimeZone("EST"));
-        aDate = gcal.getTime();
-        aDateString = "Dec 17, 1990"; // medium -- the default
-        aTimeString = "5:17:00 AM"; // medium
-        anESTTimeString = "8:17:00 AM";
-        aDateTimeString = "Dec 17, 1990 5:17:00 AM"; // medium, medium
-        aDefaultESTDateTimeString = "Dec 17, 1990 8:17 AM"; // medium, short -- the default
-        aShortDateTimeString = "12/17/90 5:17 AM"; // short, short
-        aDF = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US);
-        aBuf = new StringBuffer();
-        anFP = new FieldPosition(DateFormat.YEAR_FIELD);
-        anFPField = new FieldPosition(DateFormat.Field.YEAR);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.hashCode()'
-     */
-    public final void testHashCode() {
-        DateFormat df = DateFormat.getInstance();
-        DateFormat eq = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
-        testEHCS(df, eq, aDF);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.DateFormat(DateFormat)'
-     */
-    public final void testDateFormat() {
-        DateFormat df = new DateFormat(java.text.DateFormat.getInstance());
-        assertEquals(DateFormat.getInstance(), df);
-    }
-
-    private void assertEqualDateString(StringBuffer buf) {
-        assertEquals(aDateTimeString, buf.toString());
-    }
-        
-    private void assertEqualDateString(String str) {
-        assertEquals(aDateTimeString, str);
-    }
-        
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.format(Object, StringBuffer, FieldPosition)'
-     */
-    public final void testFormatObjectStringBufferFieldPosition() {
-        assertEqualDateString(aDF.format(aDate, aBuf, anFP));
-        assertEquals(YEAR_POS_START, anFP.getBeginIndex());
-        assertEquals(YEAR_POS_END, anFP.getEndIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.format(Calendar, StringBuffer, FieldPosition)'
-     */
-    public final void testFormatCalendarStringBufferFieldPosition() {
-        assertEqualDateString(aDF.format(aCal, aBuf, anFP));
-        assertEquals(YEAR_POS_START, anFP.getBeginIndex());
-        assertEquals(YEAR_POS_END, anFP.getEndIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.format(Date, StringBuffer, FieldPosition)'
-     */
-    public final void testFormatDateStringBufferFieldPosition() {
-        assertEqualDateString(aDF.format(aDate, aBuf, anFPField));
-        assertEquals(YEAR_POS_START, anFPField.getBeginIndex());
-        assertEquals(YEAR_POS_END, anFPField.getEndIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.format(Date)'
-     */
-    public final void testFormatDate() {
-        assertEqualDateString(aDF.format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.parse(String)'
-     */
-    public final void testParseString() throws Exception {
-        assertEquals(aDate, aDF.parse(aDateTimeString));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.parse(String, Calendar, ParsePosition)'
-     */
-    public final void testParseStringCalendarParsePosition() {
-        aDF.parse(aDateTimeString, aCal, new ParsePosition(0));
-        assertEquals(aDate, aCal.getTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.parse(String, ParsePosition)'
-     */
-    public final void testParseStringParsePosition() {
-        assertEquals(aDate, aDF.parse(aDateTimeString, new ParsePosition(0)));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.parseObject(String, ParsePosition)'
-     */
-    public final void testParseObjectStringParsePosition() {
-        assertEquals(aDate, aDF.parseObject(aDateTimeString, new ParsePosition(0)));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance()'
-     */
-    public final void testGetTimeInstance() {
-        assertEquals(aTimeString, DateFormat.getTimeInstance().format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int)'
-     */
-    public final void testGetTimeInstanceInt() {
-        assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int, Locale)'
-     */
-    public final void testGetTimeInstanceIntLocale() {
-        assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int, ULocale)'
-     */
-    public final void testGetTimeInstanceIntULocale() {
-        assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance()'
-     */
-    public final void testGetDateInstance() {
-        assertEquals(aDateString, DateFormat.getDateInstance().format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int)'
-     */
-    public final void testGetDateInstanceInt() {
-        assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int, Locale)'
-     */
-    public final void testGetDateInstanceIntLocale() {
-        assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int, ULocale)'
-     */
-    public final void testGetDateInstanceIntULocale() {
-        assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance()'
-     */
-    public final void testGetDateTimeInstance() {
-        assertEquals(aDateTimeString, DateFormat.getDateTimeInstance().format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int)'
-     */
-    public final void testGetDateTimeInstanceIntInt() {
-        assertEquals(aDateTimeString, 
-                     DateFormat.getDateTimeInstance(
-                                                    DateFormat.MEDIUM, DateFormat.MEDIUM).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int, Locale)'
-     */
-    public final void testGetDateTimeInstanceIntIntLocale() {
-        assertEquals(aDateTimeString, 
-                     DateFormat.getDateTimeInstance(
-                                                    DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int, ULocale)'
-     */
-    public final void testGetDateTimeInstanceIntIntULocale() {
-        assertEquals(aDateTimeString, 
-                     DateFormat.getDateTimeInstance(
-                                                    DateFormat.MEDIUM, DateFormat.MEDIUM, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getInstance()'
-     */
-    public final void testGetInstance() {
-        assertEquals(aShortDateTimeString, DateFormat.getInstance().format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getAvailableLocales()'
-     */
-    public final void testGetAvailableLocales() {
-        Locale[] locales = DateFormat.getAvailableLocales();
-        if (ICUTestCase.testingWrapper) {
-            ICUTestCase.assertArraysEqual(java.text.DateFormat.getAvailableLocales(), locales);
-        } else {
-            assertNotNull(locales);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.setCalendar(Calendar)'
-     */
-    public final void testSetCalendar() {
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeZone(TimeZone.getTimeZone("EST"));
-        DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
-        df.setCalendar(cal);
-        assertEquals("8:17 AM", df.format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getCalendar()'
-     */
-    public final void testGetCalendar() {
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeZone(TimeZone.getTimeZone("EST"));
-        DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
-        df.setCalendar(cal);
-        assertEquals(cal, df.getCalendar());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.setNumberFormat(NumberFormat)'
-     */
-    public final void testSetNumberFormat() {
-        // no easy way to test effect of setting the number format
-        NumberFormat nf = NumberFormat.getInstance();
-        DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
-        df.setNumberFormat(nf);
-        // note, can't actually USE the dateformat since it changes the calendar
-        assertEquals(nf, df.getNumberFormat());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getNumberFormat()'
-     */
-    public final void testGetNumberFormat() {
-        // see testSetNumberFormat
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.setTimeZone(TimeZone)'
-     */
-    public final void testSetTimeZone() {
-        DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
-        TimeZone tz = TimeZone.getTimeZone("EST");
-        df.setTimeZone(tz);
-        assertEquals("8:17 AM", df.format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeZone()'
-     */
-    public final void testGetTimeZone() {
-        DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
-        TimeZone tz = TimeZone.getTimeZone("EST");
-        df.setTimeZone(tz);
-        assertEquals(tz, df.getTimeZone());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.setLenient(boolean)'
-     */
-    public final void testSetLenient() throws Exception {
-        DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
-        df.parse("2/31/90"); // succeeds, default is lenient
-        df.setLenient(false);
-        try {
-            df.parse("2/31/90");
-            throw new Exception("strict parse should have failed");
-        }
-        catch (ParseException e) {
-            // ok, this is what we expect
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.isLenient()'
-     */
-    public final void testIsLenient() {
-        DateFormat df = DateFormat.getInstance();
-        assertTrue(df.isLenient());
-        df.setLenient(false);
-        assertFalse(df.isLenient());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int, Locale)'
-     */
-    public final void testGetDateInstanceCalendarIntLocale() {
-        assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int, ULocale)'
-     */
-    public final void testGetDateInstanceCalendarIntULocale() {
-        assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int, Locale)'
-     */
-    public final void testGetTimeInstanceCalendarIntLocale() {
-        assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int, ULocale)'
-     */
-    public final void testGetTimeInstanceCalendarIntULocale() {
-        assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int, Locale)'
-     */
-    public final void testGetDateTimeInstanceCalendarIntIntLocale() {
-        assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int, ULocale)'
-     */
-    public final void testGetDateTimeInstanceCalendarIntIntULocale() {
-        assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar, Locale)'
-     */
-    public final void testGetInstanceCalendarLocale() {
-        assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal, Locale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar, ULocale)'
-     */
-    public final void testGetInstanceCalendarULocale() {
-        assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal, ULocale.US).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar)'
-     */
-    public final void testGetInstanceCalendar() {
-        assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int)'
-     */
-    public final void testGetDateInstanceCalendarInt() {
-        assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int)'
-     */
-    public final void testGetTimeInstanceCalendarInt() {
-        assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int)'
-     */
-    public final void testGetDateTimeInstanceCalendarIntInt() {
-        assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT).format(aDate));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.toString()'
-     */
-    public final void testToString() {
-        assertNotNull(aDF.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.clone()'
-     */
-    public final void testClone() {
-        // see testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DateFormat.equals(Object)'
-     */
-    public final void testEqualsObject() {
-        // see testHashCode
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DecimalFormatSymbolsTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DecimalFormatSymbolsTest.java
deleted file mode 100644
index 155d838..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DecimalFormatSymbolsTest.java
+++ /dev/null
@@ -1,346 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Locale;
-
-import com.ibm.icu.text.DecimalFormatSymbols;
-import com.ibm.icu.util.ULocale;
-
-public class DecimalFormatSymbolsTest extends ICUTestCase {
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.hashCode()'
-     */
-    public void testHashCode() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
-        DecimalFormatSymbols dfs2 = new DecimalFormatSymbols(ULocale.US);
-        DecimalFormatSymbols dfsn = new DecimalFormatSymbols(Locale.FRANCE);
-        testEHCS(dfs, dfs2, dfsn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.DecimalFormatSymbols(DecimalFormatSymbols)'
-     */
-    public void testDecimalFormatSymbolsDecimalFormatSymbols() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.DecimalFormatSymbols()'
-     */
-    public void testDecimalFormatSymbols() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
-        assertTrue(-1 != dfs.getDecimalSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.DecimalFormatSymbols(Locale)'
-     */
-    public void testDecimalFormatSymbolsLocale() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
-        assertTrue(-1 != dfs.getDecimalSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.DecimalFormatSymbols(ULocale)'
-     */
-    public void testDecimalFormatSymbolsULocale() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertTrue(-1 != dfs.getDecimalSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getZeroDigit()'
-     */
-    public void testGetZeroDigit() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('0', dfs.getZeroDigit());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setZeroDigit(char)'
-     */
-    public void testSetZeroDigit() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getZeroDigit();
-        char value1 = (char)(value + 1);
-        dfs.setZeroDigit(value1);
-        char result = dfs.getZeroDigit();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getGroupingSeparator()'
-     */
-    public void testGetGroupingSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals(',', dfs.getGroupingSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setGroupingSeparator(char)'
-     */
-    public void testSetGroupingSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getGroupingSeparator();
-        char value1 = (char)(value + 1);
-        dfs.setGroupingSeparator(value1);
-        char result = dfs.getGroupingSeparator();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getDecimalSeparator()'
-     */
-    public void testGetDecimalSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('.', dfs.getDecimalSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setDecimalSeparator(char)'
-     */
-    public void testSetDecimalSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getDecimalSeparator();
-        char value1 = (char)(value + 1);
-        dfs.setDecimalSeparator(value1);
-        char result = dfs.getDecimalSeparator();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getPerMill()'
-     */
-    public void testGetPerMill() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('\u2030', dfs.getPerMill());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setPerMill(char)'
-     */
-    public void testSetPerMill() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getPerMill();
-        char value1 = (char)(value + 1);
-        dfs.setPerMill(value1);
-        char result = dfs.getPerMill();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getPercent()'
-     */
-    public void testGetPercent() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('%', dfs.getPercent());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setPercent(char)'
-     */
-    public void testSetPercent() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getPercent();
-        char value1 = (char)(value + 1);
-        dfs.setPercent(value1);
-        char result = dfs.getPercent();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getDigit()'
-     */
-    public void testGetDigit() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('#', dfs.getDigit());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setDigit(char)'
-     */
-    public void testSetDigit() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getDigit();
-        char value1 = (char)(value + 1);
-        dfs.setDigit(value1);
-        char result = dfs.getDigit();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getPatternSeparator()'
-     */
-    public void testGetPatternSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals(';', dfs.getPatternSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setPatternSeparator(char)'
-     */
-    public void testSetPatternSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getPatternSeparator();
-        char value1 = (char)(value + 1);
-        dfs.setPatternSeparator(value1);
-        char result = dfs.getPatternSeparator();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getInfinity()'
-     */
-    public void testGetInfinity() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals("\u221e", dfs.getInfinity());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setInfinity(String)'
-     */
-    public void testSetInfinity() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        String value = dfs.getInfinity();
-        String value1 = value + "!";
-        dfs.setInfinity(value1);
-        String result = dfs.getInfinity();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getNaN()'
-     */
-    public void testGetNaN() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertNotNull(dfs.getNaN()); // java returns missing character???
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setNaN(String)'
-     */
-    public void testSetNaN() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        String value = dfs.getNaN();
-        String value1 = value + "!";
-        dfs.setNaN(value1);
-        String result = dfs.getNaN();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getMinusSign()'
-     */
-    public void testGetMinusSign() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('-', dfs.getMinusSign());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setMinusSign(char)'
-     */
-    public void testSetMinusSign() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getMinusSign();
-        char value1 = (char)(value + 1);
-        dfs.setMinusSign(value1);
-        char result = dfs.getMinusSign();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getCurrencySymbol()'
-     */
-    public void testGetCurrencySymbol() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals("$", dfs.getCurrencySymbol());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setCurrencySymbol(String)'
-     */
-    public void testSetCurrencySymbol() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        String value = dfs.getCurrencySymbol();
-        String value1 = value + "!";
-        dfs.setCurrencySymbol(value1);
-        String result = dfs.getCurrencySymbol();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getInternationalCurrencySymbol()'
-     */
-    public void testGetInternationalCurrencySymbol() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals("USD", dfs.getInternationalCurrencySymbol());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setInternationalCurrencySymbol(String)'
-     */
-    public void testSetInternationalCurrencySymbol() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        String value = dfs.getInternationalCurrencySymbol();
-        String value1 = value + "!";
-        dfs.setInternationalCurrencySymbol(value1);
-        String result = dfs.getInternationalCurrencySymbol();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.getMonetaryDecimalSeparator()'
-     */
-    public void testGetMonetaryDecimalSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        assertEquals('.', dfs.getMonetaryDecimalSeparator());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.setMonetaryDecimalSeparator(char)'
-     */
-    public void testSetMonetaryDecimalSeparator() {
-        DecimalFormatSymbols dfs = new DecimalFormatSymbols(ULocale.US);
-        char value = dfs.getMonetaryDecimalSeparator();
-        char value1 = (char)(value + 1);
-        dfs.setMonetaryDecimalSeparator(value1);
-        char result = dfs.getMonetaryDecimalSeparator();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.clone()'
-     */
-    public void testClone() {
-        // tested in testHashcode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormatSymbols.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // tested in testHashcode
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DecimalFormatTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DecimalFormatTest.java
deleted file mode 100644
index f32230a..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/DecimalFormatTest.java
+++ /dev/null
@@ -1,244 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Locale;
-
-import com.ibm.icu.text.DecimalFormat;
-import com.ibm.icu.text.DecimalFormatSymbols;
-
-public class DecimalFormatTest extends ICUTestCase {
-    private static final long lmax = Long.MAX_VALUE;
-    private static final double dsmall = 23.33;
-        
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.clone()'
-     */
-    public void testClone() {
-        DecimalFormat df = new DecimalFormat("#,#0.00");
-        DecimalFormat df2 = new DecimalFormat("#,#0.00");
-        DecimalFormat dfn = new DecimalFormat("#,#0.00");
-        dfn.setNegativePrefix(dfn.getNegativePrefix() + '!');
-        testEHCS(df, df2, dfn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.DecimalFormat(DecimalFormat)'
-     */
-    public void testDecimalFormatDecimalFormat() {
-        // tested implicitly
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.DecimalFormat()'
-     */
-    public void testDecimalFormat() {
-        DecimalFormat df = new DecimalFormat();
-        assertEquals("9,223,372,036,854,775,807", df.format(lmax));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.DecimalFormat(String)'
-     */
-    public void testDecimalFormatString() {
-        DecimalFormat df = new DecimalFormat("#,##0.000");
-        assertEquals("23.330", df.format(dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.DecimalFormat(String, DecimalFormatSymbols)'
-     */
-    public void testDecimalFormatStringDecimalFormatSymbols() {
-        DecimalFormatSymbols sym = new DecimalFormatSymbols(Locale.FRANCE);
-        DecimalFormat df = new DecimalFormat("#,##0.000", sym);
-        assertEquals("23,330", df.format(dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getDecimalFormatSymbols()'
-     */
-    public void testGetDecimalFormatSymbols() {
-        DecimalFormatSymbols sym = new DecimalFormatSymbols(Locale.FRANCE);
-        DecimalFormat df = new DecimalFormat("#,##0.000", sym);
-        assertEquals(sym, df.getDecimalFormatSymbols());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setDecimalFormatSymbols(DecimalFormatSymbols)'
-     */
-    public void testSetDecimalFormatSymbols() {
-        DecimalFormat df = new DecimalFormat();
-        df.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.FRANCE));
-        assertEquals("23,33", df.format(dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getPositivePrefix()'
-     */
-    public void testGetPositivePrefix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#;-#,##0.#");
-        assertEquals("+", df.getPositivePrefix());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setPositivePrefix(String)'
-     */
-    public void testSetPositivePrefix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#;-#,##0.#");
-        df.setPositivePrefix("?");
-        assertEquals("?23.3", df.format(dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getNegativePrefix()'
-     */
-    public void testGetNegativePrefix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#;-#,##0.#");
-        assertEquals("-", df.getNegativePrefix());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setNegativePrefix(String)'
-     */
-    public void testSetNegativePrefix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#;-#,##0.#");
-        df.setNegativePrefix("~");
-        assertEquals("~23.3", df.format(-dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getPositiveSuffix()'
-     */
-    public void testGetPositiveSuffix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#**;-#,##0.#~~");
-        assertEquals("**", df.getPositiveSuffix());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setPositiveSuffix(String)'
-     */
-    public void testSetPositiveSuffix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#;-#,##0.#");
-        df.setPositiveSuffix("**");
-        assertEquals("+23.3**", df.format(dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getNegativeSuffix()'
-     */
-    public void testGetNegativeSuffix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#**;-#,##0.#~~");
-        assertEquals("~~", df.getNegativeSuffix());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setNegativeSuffix(String)'
-     */
-    public void testSetNegativeSuffix() {
-        DecimalFormat df = new DecimalFormat("+#,##0.#;-#,##0.#");
-        df.setNegativeSuffix("~~");
-        assertEquals("-23.3~~", df.format(-dsmall));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getMultiplier()'
-     */
-    public void testGetMultiplier() {
-        DecimalFormat df = new DecimalFormat("%000");
-        df.setMultiplier(1000);
-        assertEquals(1000, df.getMultiplier());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setMultiplier(int)'
-     */
-    public void testSetMultiplier() {
-        DecimalFormat df = new DecimalFormat("%000");
-        assertEquals("%012", df.format(.123));
-        df.setMultiplier(1000);
-        assertEquals("%123", df.format(.123));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.getGroupingSize()'
-     */
-    public void testGetGroupingSize() {
-        DecimalFormat df = new DecimalFormat("#,#0.#");
-        assertEquals(2, df.getGroupingSize());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setGroupingSize(int)'
-     */
-    public void testSetGroupingSize() {
-        DecimalFormat df = new DecimalFormat("#,##0.##");
-        assertEquals("1,234,567.89", df.format(1234567.89));
-        df.setGroupingSize(2);
-        assertEquals("1,23,45,67.89", df.format(1234567.89));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.isDecimalSeparatorAlwaysShown()'
-     */
-    public void testIsDecimalSeparatorAlwaysShown() {
-        DecimalFormat df = new DecimalFormat("#.#");
-        df.setDecimalSeparatorAlwaysShown(false);
-        assertEquals("1", df.format(1));
-        assertEquals("1.2", df.format(1.2));
-        df.setDecimalSeparatorAlwaysShown(true);
-        assertEquals("1.", df.format(1));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.setDecimalSeparatorAlwaysShown(boolean)'
-     */
-    public void testSetDecimalSeparatorAlwaysShown() {
-        DecimalFormat df = new DecimalFormat("#.#");
-        df.setDecimalSeparatorAlwaysShown(false);
-        assertFalse(df.isDecimalSeparatorAlwaysShown());
-        df.setDecimalSeparatorAlwaysShown(true);
-        assertTrue(df.isDecimalSeparatorAlwaysShown());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.toPattern()'
-     */
-    public void testToPattern() {
-        DecimalFormat df = new DecimalFormat("#,##0.##");
-        assertEquals("#,##0.##", df.toPattern());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.toLocalizedPattern()'
-     */
-    public void testToLocalizedPattern() {
-        DecimalFormat df = new DecimalFormat("#,##0.##", new DecimalFormatSymbols(Locale.FRANCE));
-        assertEquals("#,##0.##", df.toPattern());
-        assertEquals("#\u00a0##0,##", df.toLocalizedPattern());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.applyPattern(String)'
-     */
-    public void testApplyPattern() {
-        DecimalFormat df = new DecimalFormat("#,##0.##");
-        df.applyPattern("#,0.#");
-        assertEquals("1,2,3.4", df.format(123.4));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.DecimalFormat.applyLocalizedPattern(String)'
-     */
-    public void testApplyLocalizedPattern() {
-        DecimalFormat df = new DecimalFormat("#,##0.##", new DecimalFormatSymbols(Locale.FRANCE));
-        df.applyLocalizedPattern("#\u00a00,#");
-        assertEquals("1\u00a02\u00a03,4", df.format(123.4));
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/ICUTestCase.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/ICUTestCase.java
deleted file mode 100644
index e053d1c..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/ICUTestCase.java
+++ /dev/null
@@ -1,288 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Locale;
-
-import com.ibm.icu.util.TimeZone;
-import com.ibm.icu.util.ULocale;
-
-import junit.framework.TestCase;
-
-/**
- * Implement boilerplate tests.
- * Currently there is only one method, testEHCS, which tests equals, hashCode, 
- * clone, and serialization.
- */
-public abstract class ICUTestCase extends TestCase {
-    private static final Object[] EMPTY_ARGS = {};
-	private static final Class<?>[] EMPTY_CLASSES = {};
-        
-    private static final Locale oldLocale = Locale.getDefault();
-    private static final ULocale oldULocale = ULocale.getDefault();
-    private static final java.util.TimeZone oldJTimeZone = java.util.TimeZone.getDefault();
-    private static final TimeZone oldITimeZone = TimeZone.getDefault();
-                
-    // TODO: what's the best way to check this?
-    public static final boolean testingWrapper = true;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        Locale.setDefault(Locale.US);
-        ULocale.setDefault(ULocale.US);
-        java.util.TimeZone.setDefault(java.util.TimeZone.getTimeZone("PST"));
-        TimeZone.setDefault(TimeZone.getTimeZone("PST"));
-    }
-        
-    protected void tearDown() throws Exception {
-        ULocale.setDefault(oldULocale);
-        Locale.setDefault(oldLocale);
-        TimeZone.setDefault(oldITimeZone);
-        java.util.TimeZone.setDefault(oldJTimeZone);
-        super.tearDown();
-    }
-
-    private static final Object test = new Object();
-        
-    /**
-     * Assert that two objects are _not_ equal.  Curiously missing from Assert.
-     * @param lhs an object to test, may be null
-     * @param rhs an object to test, may be null
-     */
-    public static void assertNotEqual(Object lhs, Object rhs) {
-        if (lhs == null) {
-            if (rhs == null) fail("null equals null");
-        } else {
-            if (lhs.equals(rhs)) {
-                fail(lhs.toString() + " equals " + rhs);
-            }
-        }
-    }
-        
-    public static void assertNotEqual(long lhs, long rhs) {
-        if (lhs == rhs) {
-            fail("values are equal: " + lhs);
-        }
-    }
-        
-    /**
-     * Test whether equality, hashCode, clone, and serialization work as expected.  
-     * Equals(Object) is assumed to return false (not throw an exception) if passed 
-     * null or an object of an incompatible class.
-     * Hashcodes must be equal iff the two objects compare equal.  No attempt is made to
-     * evaluate the quality of the hashcode distribution, so (in particular) degenerate 
-     * hashcode implementations will pass this test.
-     * Clone will be tested if the method "clone" is public on the class of obj.  
-     * It is assumed to return an object that compares equal to obj.
-     * Serialization will be tested if object implements Serializable or Externalizable.
-     * It is assumed the serialized/deserialized object compares equal to obj.
-     * @param obj the object to test
-     * @param eq an object that should compare equal to, but is not the same as, obj.  
-     *     it should be assignable to the class of obj.
-     * @param neq a non-null object that should not compare equal to obj.  
-     *     it should be assignable to the class of obj.
-     */
-	public static void testEHCS(Object obj, Object eq, Object neq) {
-        if (obj == null || eq == null || neq == null) {
-            throw new NullPointerException();
-        }
-        Class<? extends Object> cls = obj.getClass();
-        if (!(cls.isAssignableFrom(eq.getClass()) && cls.isAssignableFrom(neq.getClass()))) {
-            throw new IllegalArgumentException("unassignable classes");
-        }
-                
-        // reflexive
-        assertEquals(obj, obj);
-                
-        // should return false, not throw exception
-        assertNotEqual(obj, test);
-        assertNotEqual(obj, null);
-                
-        // commutative
-        assertEquals(obj, eq);
-        assertEquals(eq, obj);
-                
-        assertNotEqual(obj, neq);
-        assertNotEqual(neq, obj);
-                
-        // equal objects MUST have equal hashes, unequal objects MAY have equal hashes
-        assertEquals(obj.hashCode(), eq.hashCode());
-                
-        Object clone = null;
-        try {
-            // look for public clone method and call it if available
-            Method method_clone = cls.getMethod("clone", EMPTY_CLASSES);
-            clone = method_clone.invoke(obj, EMPTY_ARGS);
-            assertNotNull(clone);
-        }
-        catch(NoSuchMethodException e) {
-            // ok
-        }
-        catch(InvocationTargetException e) {
-            // ok
-        }
-        catch(IllegalAccessException e) {
-            // ok
-        }
-                
-        if (clone != null) {
-            assertEquals(obj, clone);
-            assertEquals(clone, obj);
-        }
-                
-        if (obj instanceof Serializable || obj instanceof Externalizable) {
-            Object ser = null;
-            try {
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-                ObjectOutputStream oos = new ObjectOutputStream(bos);
-                oos.writeObject(clone);
-                oos.close();
-                                
-                ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-                ObjectInputStream ois = new ObjectInputStream(bis);
-                ser = ois.readObject();
-                ois.close();
-            }
-            catch(IOException e) {
-                System.err.println(e.getMessage());
-                throw new RuntimeException(e);
-            }
-            catch(ClassNotFoundException e) {
-                System.err.println(e.getMessage());
-                throw new RuntimeException(e);
-            }
-                        
-            if (ser != null) {
-                assertEquals(obj, ser);
-                assertEquals(ser, obj);
-                assertEquals(obj.hashCode(), ser.hashCode());
-            }
-        }
-    }
-
-    /**
-     * Fail if the arrays are not equal.  To be equal, the arrays must
-     * be the same length, and each element in the left array must compare
-     * equal to the corresponding element of the right array.
-     * Also fails if one of the objects is not an array.
-     * @param lhs the left array
-     * @param rhs the right array
-     */
-    public static void assertArraysEqual(Object lhs, Object rhs) {
-        Class<? extends Object> lcls = lhs.getClass();
-        Class<? extends Object> rcls = rhs.getClass();
-        if (!(lcls.isArray() && rcls.isArray())) {
-            fail("objects are not arrays");
-        }
-        String result = arraysAreEqual(lhs, rhs);
-        if (result != null) {
-            fail(result);
-        }
-    }
-
-    /**
-     * Fail if the arrays are equal.  Also fails if one or the other 
-     * argument is not an array.
-     * @param lhs the left array
-     * @param rhs the right array
-     */
-    public static void assertArraysNotEqual(Object lhs, Object rhs) {
-        Class<? extends Object> lcls = lhs.getClass();
-        Class<? extends Object> rcls = rhs.getClass();
-        if (!(lcls.isArray() && rcls.isArray())) {
-            fail("objects are not arrays");
-        }
-        String result = arraysAreEqual(lhs, rhs);
-        if (result == null) {
-            fail("arrays are equal");
-        }
-    }
-        
-    // slow but general
-    private static String arraysAreEqual(Object lhsa, Object rhsa) {
-        int lhsl = Array.getLength(lhsa);
-        int rhsl = Array.getLength(rhsa);
-        if (lhsl != rhsl) {
-            return "length " + lhsl + " != " + rhsl;
-        }
-        boolean lhsaA = lhsa.getClass().getComponentType().isArray();
-        boolean rhsaA = rhsa.getClass().getComponentType().isArray();
-        if (lhsaA != rhsaA) {
-            return (lhsaA ? "" : "non-") + "array != " + (rhsaA ? "" : "non-") + "array";
-        }
-        for (int i = 0; i < lhsl; ++i) {
-            Object lhse = Array.get(lhsa, i);
-            Object rhse = Array.get(rhsa, i);
-            if (lhse == null) {
-                if (rhse != null) {
-                    return "null != " + rhse;
-                }
-            } else {
-                if (lhsaA) {
-                    String result = arraysAreEqual(lhse, rhse);
-                    if (result != null) {
-                        if (result.charAt(0) != '[') {
-                            result = " " + result;
-                        }
-                        return "[" + i + "]" + result;
-                    }
-                } else {
-                    if (!lhse.equals(rhse)) {
-                        return lhse.toString() + " != " + rhse;
-                    }
-                }
-            }
-        }
-        return null;
-    }
-        
-    // much more painful and slow than it should be... partly because of the
-    // oddness of clone, partly because arrays don't provide a Method for 
-    // 'clone' despite the fact that they implement it and make it public.
-    public static Object cloneComplex(Object obj) {
-        Object result = null;
-        if (obj != null) {
-            Class<? extends Object> cls = obj.getClass();
-            if (cls.isArray()) {
-                int len = Array.getLength(obj);
-                Class<?> typ = cls.getComponentType();
-                result = Array.newInstance(typ, len);
-                boolean prim = typ.isPrimitive();
-                for (int i = 0; i < len; ++i) {
-                    Object elem = Array.get(obj, i);
-                    Array.set(result, i, prim ? elem : cloneComplex(elem));
-                }
-            } else {
-                result = obj; // default
-                try {
-                    Method cloneM = cls.getMethod("clone", EMPTY_CLASSES);
-                    result = cloneM.invoke(obj, EMPTY_ARGS);
-                }
-                catch (NoSuchMethodException e) {
-                }
-                catch (IllegalAccessException e) {
-                }
-                catch (InvocationTargetException e) {
-                }
-            }
-        }
-        return result;
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/MessageFormatTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/MessageFormatTest.java
deleted file mode 100644
index fb6f327..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/MessageFormatTest.java
+++ /dev/null
@@ -1,309 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.tests;
-
-import java.text.FieldPosition;
-import java.text.Format;
-import java.text.ParseException;
-import java.text.ParsePosition;
-import java.util.Date;
-import java.util.Locale;
-
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.text.MessageFormat;
-import com.ibm.icu.text.NumberFormat;
-import com.ibm.icu.util.ULocale;
-
-public class MessageFormatTest extends ICUTestCase {
-    private final String pattern = "Deleted {0,number} files at {1,time,short} on {1,date}.";
-    private final String altPattern = "Deleted {0,  number } files at {1, time, short} on {1, date}.";
-    private final Date date = new Date(716698890835L);
-    private final Number num = new Long(3456);
-    private final Object[] args = { num, date };
-    private final Date dateOnly = new Date(716626800000L);
-    private final String englishTarget = "Deleted 3,456 files at 8:01 PM on Sep 16, 1992.";
-    private final String germanTarget = "Deleted 3.456 files at 20:01 on 16.09.1992.";
-    private final String modifiedTarget = "Deleted 3,456 files at 8:01:30 PM PDT on Sep 16, 1992.";
-    
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.hashCode()'
-     */
-    public void testHashCode() {
-        MessageFormat mf = new MessageFormat(pattern);
-        MessageFormat eq = new MessageFormat(altPattern);
-        MessageFormat ne = new MessageFormat("Deleted (0, number, currency} files at {1, time} on {1, date}.");
-        testEHCS(mf, eq, ne);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.MessageFormat(MessageFormat)'
-     */
-    public void testMessageFormatMessageFormat() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.MessageFormat(String)'
-     */
-    public void testMessageFormatString() {
-        MessageFormat mf = new MessageFormat(pattern);
-        assertEquals(englishTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.MessageFormat(String, Locale)'
-     */
-    public void testMessageFormatStringLocale() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        assertEquals(englishTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.MessageFormat(String, ULocale)'
-     */
-    public void testMessageFormatStringULocale() {
-        MessageFormat mf = new MessageFormat(pattern, ULocale.US);
-        assertEquals(englishTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.setLocale(Locale)'
-     */
-    public void testSetLocaleLocale() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        mf.setLocale(Locale.GERMANY);
-        mf.applyPattern(pattern);
-        assertEquals(germanTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.setLocale(ULocale)'
-     */
-    public void testSetLocaleULocale() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        mf.setLocale(ULocale.GERMANY);
-        mf.applyPattern(pattern);
-        assertEquals(germanTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.getLocale()'
-     */
-    public void testGetLocale() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        mf.setLocale(Locale.GERMANY);
-        assertEquals(Locale.GERMANY, mf.getLocale());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.getULocale()'
-     */
-    public void testGetULocale() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        mf.setLocale(ULocale.GERMANY);
-        assertEquals(ULocale.GERMANY, mf.getULocale());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.applyPattern(String)'
-     */
-    public void testApplyPattern() {
-        MessageFormat mf = new MessageFormat("foo");
-        mf.applyPattern(pattern);
-        assertEquals(englishTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.toPattern()'
-     */
-    public void testToPattern() {
-        MessageFormat mf = new MessageFormat(altPattern);
-        assertEquals(pattern, mf.toPattern());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.setFormatsByArgumentIndex(Format[])'
-    public void testSetFormatsByArgumentIndex() {
-        // this api is broken.  if the same argument is used twice with two different
-        // formats, this can't be used, since it sets only one format per argument.
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        Format[] formats = {
-            NumberFormat.getIntegerInstance(),
-            DateFormat.getTimeInstance(DateFormat.SHORT),
-            DateFormat.getDateInstance(),
-        };
-        mf.setFormatsByArgumentIndex(formats);
-        assertEquals(brokenButConformantTarget, mf.format(args));
-    }
-     */
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.setFormats(Format[])'
-     */
-    public void testSetFormats() {
-        // this api, while it has the problem that the order of formats depends
-        // on the order in the string, at least lets you set all the formats.
-        
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        Format[] formats = {
-            NumberFormat.getIntegerInstance(),
-            DateFormat.getTimeInstance(DateFormat.SHORT),
-            DateFormat.getDateInstance(),
-        };
-        mf.setFormats(formats);
-        assertEquals(englishTarget, mf.format(args));
-   }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.setFormatByArgumentIndex(int, Format)'
-     public void testSetFormatByArgumentIndex() {
-        // same problem, once you set a format for an argument, you've set all of them
-        
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        mf.setFormatByArgumentIndex(1, DateFormat.getTimeInstance(DateFormat.SHORT));
-        assertEquals(brokenButConformantTarget, mf.format(args));
-
-    }
-    */
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.setFormat(int, Format)'
-     */
-    public void testSetFormat() {
-        // and ok again        
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        mf.setFormat(1, DateFormat.getTimeInstance(DateFormat.LONG));
-        assertEquals(modifiedTarget, mf.format(args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.getFormatsByArgumentIndex()'
-    public void testGetFormatsByArgumentIndex() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        Format[] formats = mf.getFormatsByArgumentIndex();
-        NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
-        assertEquals(formats[0], nf);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US);
-        assertEquals(formats[1], df);
-    }
-     */
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.getFormats()'
-     */
-    public void testGetFormats() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        Format[] formats = mf.getFormats();
-        NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
-        assertEquals(formats[0], nf);
-        DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.US);
-        assertEquals(formats[1], tf);
-        DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US);
-        assertEquals(formats[2], df);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.format(Object[], StringBuffer, FieldPosition)'
-     */
-    public void testFormatObjectArrayStringBufferFieldPosition() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(0);
-        mf.format(args, buf, fp);
-        assertEquals(englishTarget, buf.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.format(String, Object[])'
-     */
-    public void testFormatStringObjectArray() {
-        assertEquals(englishTarget, MessageFormat.format(pattern, args));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.format(Object, StringBuffer, FieldPosition)'
-     */
-    public void testFormatObjectStringBufferFieldPosition() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(0);
-        mf.format((Object)args, buf, fp);
-        assertEquals(englishTarget, buf.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.parse(String, ParsePosition)'
-     */
-    public void testParseStringParsePosition() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        ParsePosition pp = new ParsePosition(1);
-        Object[] result = mf.parse("!" + englishTarget, pp);
-        assertEquals(num, result[0]);
-        assertEquals(dateOnly, result[1]);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.parse(String)'
-     */
-    public void testParseString() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        try {
-            Object[] result = mf.parse(englishTarget);
-            assertEquals(num, result[0]);
-            assertEquals(dateOnly, result[1]);
-        }
-        catch (ParseException e) {
-            fail(e.getMessage());
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.parseObject(String, ParsePosition)'
-     */
-    public void testParseObjectStringParsePosition() {
-        MessageFormat mf = new MessageFormat(pattern, Locale.US);
-        ParsePosition pp = new ParsePosition(0);
-        Object result = mf.parseObject(englishTarget, pp);
-        assertEquals(num, ((Object[])result)[0]);
-        assertEquals(dateOnly, ((Object[])result)[1]);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.autoQuoteApostrophe(String)'
-     */
-    public void testAutoQuoteApostrophe() {
-        String str = "Let's meet at {1,time,h 'o'' clock'} at l'Orange Bleue";
-        String pat = MessageFormat.autoQuoteApostrophe(str);
-        MessageFormat mf = new MessageFormat(pat, Locale.US);
-        String result = mf.format(args);
-        assertEquals("Let's meet at 8 o' clock at l'Orange Bleue", result);
-        assertEquals("Let''s meet at {1,time,h 'o'' clock'} at l''Orange Bleue", pat);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.clone()'
-     */
-    public void testClone() {
-        // tested already in testHashcode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // tested already in testHashcode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.MessageFormat.toString()'
-     */
-    public void testToString() {
-        // no need to test
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/NumberFormatTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/NumberFormatTest.java
deleted file mode 100644
index 931fa7d..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/NumberFormatTest.java
+++ /dev/null
@@ -1,449 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2007-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.math.BigInteger;
-import java.text.FieldPosition;
-import java.text.ParseException;
-import java.text.ParsePosition;
-import java.util.Locale;
-
-import com.ibm.icu.text.NumberFormat;
-import com.ibm.icu.util.ULocale;
-
-public class NumberFormatTest extends ICUTestCase {
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.NumberFormat(NumberFormat)'
-     */
-    public void testNumberFormat() {
-        NumberFormat nf = new NumberFormat(java.text.NumberFormat.getInstance());
-        assertEquals(nf, NumberFormat.getInstance());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(Object, StringBuffer, FieldPosition)'
-     */
-    public void testFormatObjectStringBufferFieldPosition() {
-        Number num = new Long(1234L);
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(NumberFormat.INTEGER_FIELD);
-        NumberFormat.getInstance().format(num, buf, fp);
-        assertEquals("1,234", buf.toString());
-        assertEquals(0, fp.getBeginIndex());
-        assertEquals(5, fp.getEndIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.parseObject(String, ParsePosition)'
-     */
-    public void testParseObjectStringParsePosition() {
-        ParsePosition pp = new ParsePosition(0);
-        Object result = NumberFormat.getInstance().parse("1,234", pp);
-        assertEquals(result, new Long(1234));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(double)'
-     */
-    public void testFormatDouble() {
-        assertEquals("1,234.567", NumberFormat.getInstance().format(1234.567));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(long)'
-     */
-    public void testFormatLong() {
-        assertEquals("1,234", NumberFormat.getInstance().format(1234L));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(BigInteger)'
-     */
-    public void testFormatBigInteger() {
-        // note, java doesn't handle biginteger with full precision.
-        BigInteger bi = new BigInteger("123456");
-        assertEquals("123,456", java.text.NumberFormat.getInstance().format(bi));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(double, StringBuffer, FieldPosition)'
-     */
-    public void testFormatDoubleStringBufferFieldPosition() {
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(NumberFormat.FRACTION_FIELD);
-        assertEquals("123,456.789", NumberFormat.getInstance().format(123456.789, buf, fp).toString());
-        assertEquals(8, fp.getBeginIndex());
-        assertEquals(11, fp.getEndIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(long, StringBuffer, FieldPosition)'
-     */
-    public void testFormatLongStringBufferFieldPosition() {
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(NumberFormat.Field.GROUPING_SEPARATOR);
-        assertEquals("123,456", NumberFormat.getInstance().format(123456L, buf, fp).toString());
-        assertEquals(3, fp.getBeginIndex());
-        assertEquals(4, fp.getEndIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.format(BigInteger, StringBuffer, FieldPosition)'
-     */
-    public void testFormatBigIntegerStringBufferFieldPosition() {
-        // note, java doesn't handle biginteger with full precision.
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(0);
-        BigInteger bi = new BigInteger("123456");
-        assertEquals("123,456", java.text.NumberFormat.getInstance().format(bi, buf, fp).toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.parse(String, ParsePosition)'
-     */
-    public void testParseStringParsePosition() {
-        ParsePosition pp = new ParsePosition(3);
-        assertEquals(new Long(123456), NumberFormat.getInstance().parse("xxx123,456yyy", pp));
-        assertEquals(10, pp.getIndex());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.parse(String)'
-     */
-    public void testParseString() throws ParseException {
-        Number result = NumberFormat.getInstance().parse("123,456,yyy");
-        assertEquals(new Long(123456), result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.isParseIntegerOnly()'
-     */
-    public void testIsParseIntegerOnly() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setParseIntegerOnly(true);
-        assertTrue(nf.isParseIntegerOnly());
-        nf.setParseIntegerOnly(false);
-        assertFalse(nf.isParseIntegerOnly());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.setParseIntegerOnly(boolean)'
-     */
-    public void testSetParseIntegerOnly() throws ParseException {
-        String str = "123.456,yyy";
-        NumberFormat nf = NumberFormat.getInstance();
-        assertEquals(new Double(123.456), nf.parse(str));
-        nf.setParseIntegerOnly(true);
-        assertEquals(new Long(123), nf.parse(str));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getInstance()'
-     */
-    public void testGetInstance() {
-        // used everywhere, no need to test
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getInstance(Locale)'
-     */
-    public void testGetInstanceLocale() {
-        NumberFormat nf = NumberFormat.getInstance(Locale.GERMANY);
-        assertEquals("123,456", nf.format(123.456));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getInstance(ULocale)'
-     */
-    public void testGetInstanceULocale() {
-        NumberFormat nf = NumberFormat.getInstance(ULocale.GERMANY);
-        assertEquals("123,456", nf.format(123.456));            
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getNumberInstance()'
-     */
-    public void testGetNumberInstance() {
-        NumberFormat nf = NumberFormat.getNumberInstance();
-        assertEquals("123,456.789", nf.format(123456.789));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getNumberInstance(Locale)'
-     */
-    public void testGetNumberInstanceLocale() {
-        NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
-        assertEquals("123.456,789", nf.format(123456.789));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getNumberInstance(ULocale)'
-     */
-    public void testGetNumberInstanceULocale() {
-        NumberFormat nf = NumberFormat.getNumberInstance(ULocale.GERMANY);
-        assertEquals("123.456,789", nf.format(123456.789));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getIntegerInstance()'
-     */
-    public void testGetIntegerInstance() {
-        NumberFormat nf = NumberFormat.getIntegerInstance();
-        assertEquals("123,457", nf.format(123456.789)); // rounds
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getIntegerInstance(Locale)'
-     */
-    public void testGetIntegerInstanceLocale() {
-        NumberFormat nf = NumberFormat.getIntegerInstance(Locale.GERMANY);
-        assertEquals("123.457", nf.format(123456.789)); // rounds
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getIntegerInstance(ULocale)'
-     */
-    public void testGetIntegerInstanceULocale() {
-        NumberFormat nf = NumberFormat.getIntegerInstance(ULocale.GERMANY);
-        assertEquals("123.457", nf.format(123456.789)); // rounds
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getCurrencyInstance()'
-     */
-    public void testGetCurrencyInstance() {
-        NumberFormat nf = NumberFormat.getCurrencyInstance();
-        assertEquals("$123,456.99", nf.format(123456.99));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getCurrencyInstance(Locale)'
-     */
-    public void testGetCurrencyInstanceLocale() {
-        NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.GERMANY);
-        assertEquals("123.456,99 \u20AC", nf.format(123456.99));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getCurrencyInstance(ULocale)'
-     */
-    public void testGetCurrencyInstanceULocale() {
-        NumberFormat nf = NumberFormat.getCurrencyInstance(ULocale.GERMANY);
-        assertEquals("123.456,99 \u20AC", nf.format(123456.99));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getPercentInstance()'
-     */
-    public void testGetPercentInstance() {
-        NumberFormat nf = NumberFormat.getPercentInstance();
-        assertEquals("123,456%", nf.format(1234.56));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getPercentInstance(Locale)'
-     */
-    public void testGetPercentInstanceLocale() {
-        NumberFormat nf = NumberFormat.getPercentInstance(Locale.GERMANY);
-        assertEquals("123.456%", nf.format(1234.56));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getPercentInstance(ULocale)'
-     */
-    public void testGetPercentInstanceULocale() {
-        NumberFormat nf = NumberFormat.getPercentInstance(ULocale.GERMANY);
-        assertEquals("123.456%", nf.format(1234.56));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getScientificInstance()'
-     */
-    public void testGetScientificInstance() {
-        NumberFormat nf = NumberFormat.getScientificInstance();
-        assertEquals(".123456E4", nf.format(1234.56));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getScientificInstance(Locale)'
-     */
-    public void testGetScientificInstanceLocale() {
-        NumberFormat nf = NumberFormat.getScientificInstance(Locale.GERMANY);
-        assertEquals(",123456E4", nf.format(1234.56));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getScientificInstance(ULocale)'
-     */
-    public void testGetScientificInstanceULocale() {
-        NumberFormat nf = NumberFormat.getScientificInstance(ULocale.GERMANY);
-        assertEquals(",123456E4", nf.format(1234.56));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getAvailableLocales()'
-     */
-    public void testGetAvailableLocales() {
-        Locale[] ilocales = NumberFormat.getAvailableLocales();
-        if (ICUTestCase.testingWrapper) {
-            Locale[] jlocales = java.text.NumberFormat.getAvailableLocales();
-            for (int i = 0; i < ilocales.length; ++i) {
-                assertEquals(jlocales[i], ilocales[i]);
-            }
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getAvailableULocales()'
-     */
-    public void testGetAvailableULocales() {
-        ULocale[] ulocales = NumberFormat.getAvailableULocales();
-        if (ICUTestCase.testingWrapper) {
-            Locale[] jlocales = java.text.NumberFormat.getAvailableLocales();
-            for (int i = 0; i < ulocales.length; ++i) {
-                assertEquals(jlocales[i], ulocales[i].toLocale());
-            }
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.isGroupingUsed()'
-     */
-    public void testIsGroupingUsed() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setGroupingUsed(true);
-        assertTrue(nf.isGroupingUsed());
-        nf.setGroupingUsed(false);
-        assertFalse(nf.isGroupingUsed());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.setGroupingUsed(boolean)'
-     */
-    public void testSetGroupingUsed() {
-        NumberFormat nf = NumberFormat.getInstance();
-        assertEquals("123,456,789", nf.format(123456789));
-        nf.setGroupingUsed(false);
-        assertEquals("123456789", nf.format(123456789));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getMaximumIntegerDigits()'
-     */
-    public void testGetMaximumIntegerDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMaximumIntegerDigits(4);
-        assertEquals(4, nf.getMaximumIntegerDigits());
-        nf.setMaximumIntegerDigits(6);
-        assertEquals(6, nf.getMaximumIntegerDigits());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.setMaximumIntegerDigits(int)'
-     */
-    public void testSetMaximumIntegerDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMaximumIntegerDigits(4);
-        assertEquals("3,456", nf.format(123456)); // high digits truncated
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getMinimumIntegerDigits()'
-     */
-    public void testGetMinimumIntegerDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMinimumIntegerDigits(4);
-        assertEquals(4, nf.getMinimumIntegerDigits());
-        nf.setMinimumIntegerDigits(6);
-        assertEquals(6, nf.getMinimumIntegerDigits());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.setMinimumIntegerDigits(int)'
-     */
-    public void testSetMinimumIntegerDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMinimumIntegerDigits(4);
-        assertEquals("0,012", nf.format(12)); // pad out with zero, grouping still used
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getMaximumFractionDigits()'
-     */
-    public void testGetMaximumFractionDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMaximumFractionDigits(4);
-        assertEquals(4, nf.getMaximumFractionDigits());
-        nf.setMaximumFractionDigits(6);
-        assertEquals(6, nf.getMaximumFractionDigits());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.setMaximumFractionDigits(int)'
-     */
-    public void testSetMaximumFractionDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMaximumFractionDigits(4);
-        assertEquals("1.2346", nf.format(1.2345678)); // low digits rounded
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.getMinimumFractionDigits()'
-     */
-    public void testGetMinimumFractionDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMinimumFractionDigits(4);
-        assertEquals(4, nf.getMinimumFractionDigits());
-        nf.setMinimumFractionDigits(6);
-        assertEquals(6, nf.getMinimumFractionDigits());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.setMinimumFractionDigits(int)'
-     */
-    public void testSetMinimumFractionDigits() {
-        NumberFormat nf = NumberFormat.getInstance();
-        nf.setMinimumFractionDigits(4);
-        assertEquals("1.2000", nf.format(1.2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.toString()'
-     */
-    public void testToString() {
-        assertNotNull(NumberFormat.getInstance().toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.hashCode()'
-     */
-    public void testHashCode() {
-        NumberFormat nf = NumberFormat.getInstance();
-        NumberFormat eq = NumberFormat.getInstance(Locale.US);
-        NumberFormat neq = NumberFormat.getInstance(Locale.GERMANY);
-                
-        ICUTestCase.testEHCS(nf, eq, neq);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.clone()'
-     */
-    public void testClone() {
-        // see testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.text.NumberFormat.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // see testHashCode
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/SimpleDateFormatTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/SimpleDateFormatTest.java
deleted file mode 100644
index 1ddc240..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/SimpleDateFormatTest.java
+++ /dev/null
@@ -1,204 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.text.FieldPosition;
-import java.text.ParseException;
-import java.text.ParsePosition;
-import java.util.Date;
-import java.util.Locale;
-
-import com.ibm.icu.text.DateFormatSymbols;
-import com.ibm.icu.text.SimpleDateFormat;
-import com.ibm.icu.util.Calendar;
-import com.ibm.icu.util.TimeZone;
-import com.ibm.icu.util.ULocale;
-
-public class SimpleDateFormatTest extends ICUTestCase {
-    private static final String mdy = "MMM dd yyyy";
-    private static final String md2 = "MMM dd yy";
-    private static final String hmz = "'The time is' HH:mm:ss zzz";
-    private static final String hmzmdy = hmz + " 'on' " + mdy;
-    private static final String hmzmdyStr = "The time is 15:05:20 CST on Jan 10 2006";
-        
-    private static final TimeZone tzc = TimeZone.getTimeZone("CST");
-    private static final TimeZone tzp = TimeZone.getTimeZone("PST");
-    private static final Calendar cal = Calendar.getInstance(tzc);
-    private static final Date date;
-    static {
-        cal.clear();
-        cal.set(2006, 0, 10, 15, 5, 20); // arrgh, doesn't clear millis
-        date = cal.getTime();
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.format(Calendar, StringBuffer, FieldPosition)'
-     */
-    public void testFormatCalendarStringBufferFieldPosition() {
-        StringBuffer buf = new StringBuffer();
-        FieldPosition fp = new FieldPosition(0);
-        SimpleDateFormat sdf = new SimpleDateFormat(hmzmdy);
-        sdf.format(cal, buf, fp);
-        assertEquals(hmzmdyStr, buf.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.parse(String, Calendar, ParsePosition)'
-     */
-    public void testParseStringCalendarParsePosition() {
-        Calendar cal = Calendar.getInstance(tzp);
-        cal.clear();
-        ParsePosition pp = new ParsePosition(0);
-        SimpleDateFormat sdf = new SimpleDateFormat(hmzmdy);
-        sdf.parse(hmzmdyStr, cal, pp);
-        assertEquals(date, cal.getTime());
-        // note: java doesn't return the parsed time zone
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.clone()'
-     */
-    public void testClone() {
-
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat()'
-     */
-    public void testSimpleDateFormat() {
-        SimpleDateFormat sdf = new SimpleDateFormat();
-        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat();
-        assertEquals(jsdf.format(date), sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String)'
-     */
-    public void testSimpleDateFormatString() {
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy);
-        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy);
-        assertEquals(jsdf.format(date), sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String, Locale)'
-     */
-    public void testSimpleDateFormatStringLocale() {
-        Locale l = Locale.JAPAN;
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy, l);
-        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy, l);
-        assertEquals(jsdf.format(date), sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String, ULocale)'
-     */
-    public void testSimpleDateFormatStringULocale() {
-        ULocale l = ULocale.JAPAN;
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy, l);
-        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy, l.toLocale());
-        assertEquals(jsdf.format(date), sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String, DateFormatSymbols)'
-     */
-    public void testSimpleDateFormatStringDateFormatSymbols() {
-        Locale l = Locale.US;
-        DateFormatSymbols dfs = new DateFormatSymbols(l);
-        java.text.DateFormatSymbols jdfs = new java.text.DateFormatSymbols(l);
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy, dfs);
-        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy, jdfs);
-        assertEquals(jsdf.format(date), sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.set2DigitYearStart(Date)'
-     */
-    public void testSet2DigitYearStart() {
-        SimpleDateFormat sdf = new SimpleDateFormat(md2);
-        sdf.set2DigitYearStart(date);
-        try {
-            Date d = sdf.parse("Jan 15 04");
-            assertNotEqual(-1, d.toString().indexOf("2104"));
-        }
-        catch (ParseException pe) {
-            fail(pe.getMessage());
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.get2DigitYearStart()'
-     */
-    public void testGet2DigitYearStart() {
-        SimpleDateFormat sdf = new SimpleDateFormat(md2);
-        sdf.set2DigitYearStart(date);
-        assertEquals(date, sdf.get2DigitYearStart());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.toPattern()'
-     */
-    public void testToPattern() {
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy);
-        assertEquals(mdy, sdf.toPattern());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.toLocalizedPattern()'
-     */
-    public void testToLocalizedPattern() {
-        Locale l = Locale.getDefault();
-        Locale.setDefault(Locale.US);
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy);
-        assertEquals(mdy, sdf.toLocalizedPattern());
-        Locale.setDefault(l);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.applyPattern(String)'
-     */
-    public void testApplyPattern() {
-        SimpleDateFormat sdf = new SimpleDateFormat();
-        sdf.setTimeZone(tzc);
-        sdf.applyPattern(hmzmdy);
-        assertEquals(hmzmdyStr, sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.applyLocalizedPattern(String)'
-     */
-    public void testApplyLocalizedPattern() {
-        SimpleDateFormat sdf = new SimpleDateFormat();
-        sdf.setTimeZone(tzc);
-        sdf.applyLocalizedPattern(hmzmdy);
-        assertEquals(hmzmdyStr, sdf.format(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.getDateFormatSymbols()'
-     */
-    public void testGetDateFormatSymbols() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
-        SimpleDateFormat sdf = new SimpleDateFormat(mdy, dfs);
-        assertEquals(dfs, sdf.getDateFormatSymbols());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.text.SimpleDateFormat.setDateFormatSymbols(DateFormatSymbols)'
-     */
-    public void testSetDateFormatSymbols() {
-        DateFormatSymbols dfs = new DateFormatSymbols(Locale.JAPAN);
-        SimpleDateFormat sdf = new SimpleDateFormat(hmzmdy);
-        sdf.setDateFormatSymbols(dfs);
-        // assumes Japanese symbols do not have gregorian month names
-        assertEquals(-1, sdf.format(date).indexOf("Jan"));
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/TimeZoneTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/TimeZoneTest.java
deleted file mode 100644
index 46afd71..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/TimeZoneTest.java
+++ /dev/null
@@ -1,237 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Date;
-import java.util.Locale;
-
-import com.ibm.icu.util.Calendar;
-import com.ibm.icu.util.TimeZone;
-import com.ibm.icu.util.ULocale;
-
-public class TimeZoneTest extends ICUTestCase {
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.hashCode()'
-     */
-    public void testHashCode() {
-        TimeZone tz1 = TimeZone.getTimeZone("PST");
-        TimeZone tz2 = TimeZone.getTimeZone("PST");
-        TimeZone tzn = TimeZone.getTimeZone("CST");
-        testEHCS(tz1, tz2, tzn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.TimeZone(TimeZone)'
-     */
-    public void testTimeZone() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getOffset(int, int, int, int, int, int)'
-     */
-    public void testGetOffset() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        int offset = tz.getOffset(1, 2004, 0, 01, 1, 0);
-        assertEquals(-28800000, offset);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.setRawOffset(int)'
-     */
-    public void testSetRawOffset() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        int value = tz.getRawOffset();
-        int value1 = value + 100000;
-        tz.setRawOffset(value1);
-        int result = tz.getRawOffset();
-        assertNotEqual(value, result);
-        assertEquals(value1, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getRawOffset()'
-     */
-    public void testGetRawOffset() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        int offset = tz.getRawOffset();
-        assertEquals(-28800000, offset);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getID()'
-     */
-    public void testGetID() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("PST", tz.getID());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.setID(String)'
-     */
-    public void testSetID() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        String value1 = tz.getID();
-        String value2 = value1 + "!";
-        tz.setID(value2);
-        String result = tz.getID();
-        assertNotEqual(value1, result);
-        assertEquals(value2, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDisplayName()'
-     */
-    public void testGetDisplayName() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("Pacific Standard Time", tz.getDisplayName());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDisplayName(Locale)'
-     */
-    public void testGetDisplayNameLocale() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("Pacific Standard Time", tz.getDisplayName(Locale.US));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDisplayName(ULocale)'
-     */
-    public void testGetDisplayNameULocale() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("Pacific Standard Time", tz.getDisplayName(ULocale.US));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDisplayName(boolean, int)'
-     */
-    public void testGetDisplayNameBooleanInt() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("PDT", tz.getDisplayName(true, TimeZone.SHORT));
-        assertEquals("Pacific Daylight Time", tz.getDisplayName(true, TimeZone.LONG));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDisplayName(boolean, int, Locale)'
-     */
-    public void testGetDisplayNameBooleanIntLocale() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("PDT", tz.getDisplayName(true, TimeZone.SHORT, Locale.US));
-        assertEquals("Pacific Daylight Time", tz.getDisplayName(true, TimeZone.LONG, Locale.US));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDisplayName(boolean, int, ULocale)'
-     */
-    public void testGetDisplayNameBooleanIntULocale() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals("PDT", tz.getDisplayName(true, TimeZone.SHORT, ULocale.US));
-        assertEquals("Pacific Daylight Time", tz.getDisplayName(true, TimeZone.LONG, ULocale.US));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDSTSavings()'
-     */
-    public void testGetDSTSavings() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertEquals(3600000, tz.getDSTSavings());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.useDaylightTime()'
-     */
-    public void testUseDaylightTime() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        assertTrue(tz.useDaylightTime());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.inDaylightTime(Date)'
-     */
-    public void testInDaylightTime() {
-        TimeZone tz = TimeZone.getTimeZone("PST");
-        Calendar cal = Calendar.getInstance();
-        cal.set(2005, 0, 17);
-        Date date = cal.getTime();
-        assertFalse(tz.inDaylightTime(date));
-        cal.set(2005, 6, 17);
-        date = cal.getTime();
-        assertTrue(tz.inDaylightTime(date));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getTimeZone(String)'
-     */
-    public void testGetTimeZone() {
-        // implicitly tested everywhere
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getAvailableIDs(int)'
-     */
-    public void testGetAvailableIDsInt() {
-        String[] ids = TimeZone.getAvailableIDs(-28800000);
-        assertNotNull(ids);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getAvailableIDs()'
-     */
-    public void testGetAvailableIDs() {
-        String[] ids = TimeZone.getAvailableIDs();
-        assertNotNull(ids);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.getDefault()'
-     */
-    public void testGetDefault() {
-        TimeZone tz = TimeZone.getDefault();
-        assertNotNull(tz);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.setDefault(TimeZone)'
-     */
-    public void testSetDefault() {
-        TimeZone tz1 = TimeZone.getDefault();
-        String newCode = "PDT".equals(tz1.getID()) ? "CST" : "PDT";
-        TimeZone tz2 = TimeZone.getTimeZone(newCode);
-        TimeZone.setDefault(tz2);
-        TimeZone result = TimeZone.getDefault();
-        assertNotEqual(tz1, result);
-        assertEquals(tz2, result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.hasSameRules(TimeZone)'
-     */
-    public void testHasSameRules() {
-        TimeZone tz1 = TimeZone.getTimeZone("PST");
-        TimeZone tz2 = TimeZone.getTimeZone("America/Los_Angeles");
-        assertTrue(tz1.hasSameRules(tz2));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.clone()'
-     */
-    public void testClone() {
-        // tested by testHashCode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.util.TimeZone.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // tested by testHashCode
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/ULocaleTest.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/ULocaleTest.java
deleted file mode 100644
index 21d95d4..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base.tests/src/com/ibm/icu/tests/ULocaleTest.java
+++ /dev/null
@@ -1,849 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2006-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.tests;
-
-import java.util.Iterator;
-import java.util.Locale;
-
-import com.ibm.icu.util.ULocale;
-import com.ibm.icu.util.ULocale.Category;
-
-public class ULocaleTest extends ICUTestCase {
-    private String sampleName;
-    private String longULocaleName;
-    private String longULocaleBasename;
-    private String nonNormalizedName;
-    private ULocale longULocale;
-    private Locale sampleLocale;
-        
-    /**
-     * @Override
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-                
-        sampleName = "ll_CC_VVVV";
-        longULocaleName = "ll_Ssss_CC_VVVV@collation=phonebook;key=value";
-        longULocaleBasename = longULocaleName.substring(0, longULocaleName.indexOf('@'));
-        nonNormalizedName = "LL_ssss_cc_VVVV@ Key = value ; Collation = phonebook ; ";
-        longULocale = new ULocale(longULocaleName);
-        sampleLocale = new ULocale(sampleName).toLocale();
-    }
-        
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.hashCode()'
-     */
-    public void testHashCode() {
-        ULocale obj = ULocale.GERMANY;
-        ULocale eq = new ULocale("de_DE");
-        ULocale neq = new ULocale("de_DE_FRENCH");
-                
-        ICUTestCase.testEHCS(obj, eq, neq);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.forLocale(Locale)'
-     */
-    public void testForLocale() {
-        assertEquals(ULocale.GERMANY, ULocale.forLocale(Locale.GERMANY));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.ULocale(String)'
-     */
-    public void testULocaleString() {
-        assertEquals(ULocale.GERMAN, new ULocale("de"));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.ULocale(String, String)'
-     */
-    public void testULocaleStringString() {
-        assertEquals(ULocale.GERMANY, new ULocale("de", "DE"));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.ULocale(String, String, String)'
-     */
-    public void testULocaleStringStringString() {
-        assertEquals(sampleLocale, new ULocale("ll", "cc", "VVVV").toLocale());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.createCanonical(String)'
-     */
-    public void testCreateCanonical() {
-        ULocale result = ULocale.createCanonical("de__PHONEBOOK");
-        assertEquals(new ULocale("de@collation=phonebook"), result);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.toLocale()'
-     */
-    public void testToLocale() {
-        assertEquals(sampleLocale, new ULocale("ll", "cc", "VVVV").toLocale());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDefault()'
-     */
-    public void testGetDefault() {
-        assertEquals(Locale.getDefault(), ULocale.getDefault().toLocale());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.setDefault(ULocale)'
-     */
-    public void testSetDefault() {
-        Locale oldLocale = Locale.getDefault();
-        ULocale oldULocale = ULocale.getDefault();
-        try {
-            ULocale.setDefault(longULocale);
-            ICUTestCase.assertNotEqual(Locale.getDefault(), oldLocale);
-            ICUTestCase.assertNotEqual(ULocale.getDefault(), oldULocale);
-            assertEquals(longULocale, ULocale.getDefault());
-            assertEquals(sampleLocale, Locale.getDefault());
-        }
-        finally {
-            ULocale.setDefault(oldULocale);
-            Locale.setDefault(oldLocale); // in case of some error
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.clone()'
-     */
-    public void testClone() {
-        // see testHashcode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.equals(Object)'
-     */
-    public void testEqualsObject() {
-        // see testHashcode
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getAvailableLocales()'
-     */
-    public void testGetAvailableLocales() {
-        ULocale[] ulocales = ULocale.getAvailableLocales();
-        if (ICUTestCase.testingWrapper) {
-            Locale[] locales = Locale.getAvailableLocales();
-            for (int i = 0; i < ulocales.length; ++i) {
-                assertEquals(ulocales[i].toLocale(), locales[i]);
-            }
-        }
-        // else nothing to test except that the function returned.
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getISOCountries()'
-     */
-    public void testGetISOCountries() {
-        String[] ucountries = ULocale.getISOCountries();
-        assertNotNull(ucountries);
-        if (ICUTestCase.testingWrapper) {
-            // keep our own data for now
-            // our data doesn't match java's so this test would fail
-            // TODO: enable if we decide to use java's data
-            // String[] countries = Locale.getISOCountries();
-            // TestBoilerplate.assertArraysEqual(ucountries, countries);
-        }
-        // else nothing to test except that the function returned.
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getISOLanguages()'
-     */
-    public void testGetISOLanguages() {
-        String[] ulanguages = ULocale.getISOLanguages();
-        assertNotNull(ulanguages);
-        if (ICUTestCase.testingWrapper) {
-            // keep our own data for now
-            // our data doesn't match java's so this test would fail
-            // TODO: enable if we decide to use java's data
-            // String[] languages = Locale.getISOLanguages();
-            // TestBoilerplate.assertArraysEqual(ulanguages, languages);
-        }
-        // else nothing to test except that the function returned.
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getLanguage()'
-     */
-    public void testGetLanguage() {
-        assertEquals("ll", longULocale.getLanguage());
-        assertEquals("ll", longULocale.toLocale().getLanguage());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getLanguage(String)'
-     */
-    public void testGetLanguageString() {
-        assertEquals("ll", ULocale.getLanguage(longULocale.getName()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getScript()'
-     */
-    public void testGetScript() {
-        assertEquals("Ssss", longULocale.getScript());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getScript(String)'
-     */
-    public void testGetScriptString() {
-        assertEquals("Ssss", ULocale.getScript(longULocale.getName()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getCountry()'
-     */
-    public void testGetCountry() {
-        assertEquals("CC", longULocale.getCountry());
-        assertEquals("CC", longULocale.toLocale().getCountry());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getCountry(String)'
-     */
-    public void testGetCountryString() {
-        assertEquals("CC", ULocale.getCountry(longULocale.getName()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getVariant()'
-     */
-    public void testGetVariant() {
-        assertEquals("VVVV", longULocale.getVariant());
-        assertEquals("VVVV", longULocale.toLocale().getVariant());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getVariant(String)'
-     */
-    public void testGetVariantString() {
-        assertEquals("VVVV", ULocale.getVariant(longULocale.getName()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getFallback(String)'
-     */
-    public void testGetFallbackString() {
-        assertEquals(ULocale.GERMAN, ULocale.getFallback(ULocale.GERMANY.getName()));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getFallback()'
-     */
-    public void testGetFallback() {
-        assertEquals(ULocale.GERMAN, ULocale.GERMANY.getFallback());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getBaseName()'
-     */
-    public void testGetBaseName() {
-        assertEquals(longULocaleBasename, longULocale.getBaseName());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getBaseName(String)'
-     */
-    public void testGetBaseNameString() {
-        assertEquals(longULocaleBasename, longULocale.getBaseName());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getName()'
-     */
-    public void testGetName() {
-        assertEquals(longULocaleName, longULocale.getName());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getName(String)'
-     */
-    public void testGetNameString() {
-        assertEquals(longULocaleName, ULocale.getName(nonNormalizedName));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.toString()'
-     */
-    public void testToString() {
-        assertEquals(longULocaleName, longULocale.toString());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getKeywords()'
-     */
-    public void testGetKeywords() {
-        Iterator<String> iter = longULocale.getKeywords();
-        assertEquals(iter.next(), "collation");
-        assertEquals(iter.next(), "key");
-        assertFalse(iter.hasNext());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getKeywords(String)'
-     */
-    public void testGetKeywordsString() {
-        Iterator<String> iter = ULocale.getKeywords(nonNormalizedName);
-        assertEquals(iter.next(), "collation");
-        assertEquals(iter.next(), "key");
-        assertFalse(iter.hasNext());
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getKeywordValue(String)'
-     */
-    public void testGetKeywordValueString() {
-        assertEquals("value", longULocale.getKeywordValue("key"));
-        assertEquals("phonebook", longULocale.getKeywordValue("collation"));
-        assertNull(longULocale.getKeywordValue("zzyzx"));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getKeywordValue(String, String)'
-     */
-    public void testGetKeywordValueStringString() {
-        assertEquals("value", ULocale.getKeywordValue(longULocaleName, "key"));
-        assertEquals("phonebook", ULocale.getKeywordValue(longULocaleName, "collation"));
-        assertNull(ULocale.getKeywordValue(longULocaleName, "zzyzx"));
-
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.canonicalize(String)'
-     */
-    public void testCanonicalize() {
-        assertEquals("de@collation=phonebook", ULocale.canonicalize("de__PHONEBOOK"));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.setKeywordValue(String, String)'
-     */
-    public void testSetKeywordValueStringString() {
-        ULocale munged = longULocale.setKeywordValue("key", "C#");
-        assertEquals("C#", munged.getKeywordValue("key"));
-        munged = munged.setKeywordValue("zzyzx", "grue");
-        assertEquals("grue", munged.getKeywordValue("zzyzx"));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.setKeywordValue(String, String, String)'
-     */
-    public void testSetKeywordValueStringStringString() {
-        String munged = ULocale.setKeywordValue(longULocaleName, "key", "C#");
-        assertEquals("C#", ULocale.getKeywordValue(munged, "key"));
-        munged = ULocale.setKeywordValue(munged, "zzyzx", "grue");
-        assertEquals("grue", ULocale.getKeywordValue(munged, "zzyzx"));
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getISO3Language()'
-     */
-    public void testGetISO3Language() {
-        String il = ULocale.GERMANY.getISO3Language();
-        String jl = Locale.GERMANY.getISO3Language();
-        assertEquals(il, jl);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getISO3Language(String)'
-     */
-    public void testGetISO3LanguageString() {
-        String il = ULocale.getISO3Language(ULocale.GERMANY.getName());
-        String jl = Locale.GERMANY.getISO3Language();
-        assertEquals(il, jl);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getISO3Country()'
-     */
-    public void testGetISO3Country() {
-        String ic = ULocale.GERMANY.getISO3Country();
-        String jc = Locale.GERMANY.getISO3Country();
-        assertEquals(ic, jc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getISO3Country(String)'
-     */
-    public void testGetISO3CountryString() {
-        String ic = ULocale.getISO3Country(ULocale.GERMANY.getName());
-        String jc = Locale.GERMANY.getISO3Country();
-        assertEquals(ic, jc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayLanguage()'
-     */
-    public void testGetDisplayLanguage() {
-        String idl = ULocale.GERMANY.getDisplayLanguage();
-        String jdl = Locale.GERMANY.getDisplayLanguage();
-        assertEquals(idl, jdl);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayLanguage(ULocale)'
-     */
-    public void testGetDisplayLanguageULocale() {
-        String idl = ULocale.GERMANY.getDisplayLanguage(ULocale.GERMANY);
-        String jdl = Locale.GERMANY.getDisplayLanguage(Locale.GERMANY);
-        assertEquals(idl, jdl);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayLanguage(String, String)'
-     */
-    public void testGetDisplayLanguageStringString() {
-        String idl = ULocale.getDisplayLanguage(ULocale.GERMANY.getName(), "de_DE");
-        String jdl = Locale.GERMANY.getDisplayLanguage(Locale.GERMANY);
-        assertEquals(idl, jdl);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayLanguage(String, ULocale)'
-     */
-    public void testGetDisplayLanguageStringULocale() {
-        String idl = ULocale.getDisplayLanguage(ULocale.GERMANY.getName(), ULocale.GERMANY);
-        String jdl = Locale.GERMANY.getDisplayLanguage(Locale.GERMANY);
-        assertEquals(idl, jdl);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayScript()'
-     */
-    public void testGetDisplayScript() {
-        String is = ULocale.TRADITIONAL_CHINESE.getDisplayScript();
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("Hant", is);
-        } else {
-            assertEquals("Traditional Chinese", is);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayScript(ULocale)'
-     */
-    public void testGetDisplayScriptULocale() {
-        String is = ULocale.TRADITIONAL_CHINESE.getDisplayScript(ULocale.GERMANY);
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("Hant", is);
-        } else {
-            // TODO: look up expected value
-            assertEquals("Hant", is);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayScript(String, String)'
-     */
-    public void testGetDisplayScriptStringString() {
-        String is = ULocale.getDisplayScript("zh_Hant", "de_DE");
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("Hant", is);
-        } else {
-            // TODO: look up expected value
-            assertEquals("Hant", is);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayScript(String, ULocale)'
-     */
-    public void testGetDisplayScriptStringULocale() {
-        String is = ULocale.getDisplayScript("zh_Hant", ULocale.GERMANY);
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("Hant", is);
-        } else {
-            // TODO: look up expected value
-            assertEquals("Hant", is);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayCountry()'
-     */
-    public void testGetDisplayCountry() {
-        String idc = ULocale.GERMANY.getDisplayCountry();
-        String jdc = Locale.GERMANY.getDisplayCountry();
-        assertEquals(idc, jdc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayCountry(ULocale)'
-     */
-    public void testGetDisplayCountryULocale() {
-        String idc = ULocale.GERMANY.getDisplayCountry(ULocale.GERMANY);
-        String jdc = Locale.GERMANY.getDisplayCountry(Locale.GERMANY);
-        assertEquals(idc, jdc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayCountry(String, String)'
-     */
-    public void testGetDisplayCountryStringString() {
-        String idc = ULocale.getDisplayCountry("de_DE", "de_DE");
-        String jdc = Locale.GERMANY.getDisplayCountry(Locale.GERMANY);
-        assertEquals(idc, jdc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayCountry(String, ULocale)'
-     */
-    public void testGetDisplayCountryStringULocale() {
-        String idc = ULocale.getDisplayCountry("de_DE", ULocale.GERMANY);
-        String jdc = Locale.GERMANY.getDisplayCountry(Locale.GERMANY);
-        assertEquals(idc, jdc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayVariant()'
-     */
-    public void testGetDisplayVariant() {
-        String idv = new ULocale("de_DE_PHONEBOOK").getDisplayVariant();
-        String jdv = new Locale("de", "DE", "PHONEBOOK").getDisplayVariant();
-        assertEquals(jdv, idv);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayVariant(ULocale)'
-     */
-    public void testGetDisplayVariantULocale() {
-        String idv = new ULocale("de_DE_PHONEBOOK").getDisplayVariant(ULocale.GERMANY);
-        String jdv = new Locale("de", "DE", "PHONEBOOK").getDisplayVariant(Locale.GERMANY);
-        assertEquals(jdv, idv);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayVariant(String, String)'
-     */
-    public void testGetDisplayVariantStringString() {
-        String idv = ULocale.getDisplayVariant("de_DE_PHONEBOOK", "de_DE");
-        String jdv = new Locale("de", "DE", "PHONEBOOK").getDisplayVariant(Locale.GERMANY);
-        assertEquals(jdv, idv);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayVariant(String, ULocale)'
-     */
-    public void testGetDisplayVariantStringULocale() {
-        String idv = ULocale.getDisplayVariant("de_DE_PHONEBOOK", ULocale.GERMANY);
-        String jdv = new Locale("de", "DE", "PHONEBOOK").getDisplayVariant(Locale.GERMANY);
-        assertEquals(jdv, idv);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeyword(String)'
-     */
-    public void testGetDisplayKeywordString() {
-        String idk = ULocale.getDisplayKeyword("collation");
-        assertEquals("collation", idk);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeyword(String, String)'
-     */
-    public void testGetDisplayKeywordStringString() {
-        String idk = ULocale.getDisplayKeyword("collation", "de_DE");
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("collation", idk);
-        } else {
-            // TODO: find real value
-            assertEquals("collation", idk);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeyword(String, ULocale)'
-     */
-    public void testGetDisplayKeywordStringULocale() {
-        String idk = ULocale.getDisplayKeyword("collation", ULocale.GERMANY);
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("collation", idk);
-        } else {
-            // TODO: find real value
-            assertEquals("collation", idk);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeywordValue(String)'
-     */
-    public void testGetDisplayKeywordValueString() {
-        ULocale ul = new ULocale("de_DE@collation=phonebook");
-        String idk = ul.getDisplayKeywordValue("collation");
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("phonebook", idk);
-        } else {
-            // TODO: find real value
-            assertEquals("phonebook", idk);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeywordValue(String, ULocale)'
-     */
-    public void testGetDisplayKeywordValueStringULocale() {
-        ULocale ul = new ULocale("de_DE@collation=phonebook");
-        String idk = ul.getDisplayKeywordValue("collation", ULocale.GERMANY);
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("phonebook", idk);
-        } else {
-            // TODO: find real value
-            assertEquals("phonebook", idk);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeywordValue(String, String, String)'
-     */
-    public void testGetDisplayKeywordValueStringStringString() {
-        String idk = ULocale.getDisplayKeywordValue("de_DE@collation=phonebook", "collation", "de_DE");
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("phonebook", idk);
-        } else {
-            // TODO: find real value
-            assertEquals("phonebook", idk);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayKeywordValue(String, String, ULocale)'
-     */
-    public void testGetDisplayKeywordValueStringStringULocale() {
-        String idk = ULocale.getDisplayKeywordValue("de_DE@collation=phonebook", "collation", ULocale.GERMANY);
-        if (ICUTestCase.testingWrapper) {
-            assertEquals("phonebook", idk);
-        } else {
-            // TODO: find real value
-            assertEquals("phonebook", idk);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayName()'
-     */
-    public void testGetDisplayName() {
-        String idn = ULocale.GERMANY.getDisplayName();
-        String jdn = Locale.GERMANY.getDisplayName();
-        assertEquals(idn, jdn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayName(ULocale)'
-     */
-    public void testGetDisplayNameULocale() {
-        String idn = ULocale.GERMANY.getDisplayName(ULocale.GERMANY);
-        String jdn = Locale.GERMANY.getDisplayName(Locale.GERMANY);
-        assertEquals(idn, jdn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayName(String, String)'
-     */
-    public void testGetDisplayNameStringString() {
-        String idn = ULocale.getDisplayName("de_DE", "de_DE");
-        String jdn = Locale.GERMANY.getDisplayName(Locale.GERMANY);
-        assertEquals(idn, jdn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDisplayName(String, ULocale)'
-     */
-    public void testGetDisplayNameStringULocale() {
-        String idn = ULocale.getDisplayName("de_DE", ULocale.GERMANY);
-        String jdn = Locale.GERMANY.getDisplayName(Locale.GERMANY);
-        assertEquals(idn, jdn);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.acceptLanguage(String, ULocale[], boolean[])'
-     */
-    public void testAcceptLanguageStringULocaleArrayBooleanArray() {
-        boolean[] fallback = new boolean[1];
-        ULocale[] locales = { 
-            new ULocale("en_CA"), 
-            new ULocale("es_US"), 
-        };
-        ULocale result = ULocale.acceptLanguage("en-US, en-GB, en-CA, es-US", locales, fallback);
-        assertEquals(new ULocale("en_CA"), result);
-        assertFalse(fallback[0]);
-        result = ULocale.acceptLanguage("en-US, en-GB, es-US-NEWMEXICO", locales, fallback);
-        assertEquals(new ULocale("es_US"), result);
-        assertTrue(fallback[0]);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.acceptLanguage(ULocale[], ULocale[], boolean[])'
-     */
-    public void testAcceptLanguageULocaleArrayULocaleArrayBooleanArray() {
-        boolean[] fallback = new boolean[1];
-        ULocale[] locales = { 
-            new ULocale("en_CA"), 
-            new ULocale("es_US"), 
-        };
-        ULocale[] accept_locales = {
-            new ULocale("en_US"),
-            new ULocale("en_GB"),
-            new ULocale("en_CA"),
-            new ULocale("es_US"),
-        };
-        ULocale[] accept_locales2 = {
-            new ULocale("en_US"),
-            new ULocale("en_GB"),
-            new ULocale("es_US_NEWMEXICO"),
-        };
-        ULocale result = ULocale.acceptLanguage(accept_locales, locales, fallback);
-        assertEquals(new ULocale("en_CA"), result);
-        assertFalse(fallback[0]);
-        result = ULocale.acceptLanguage(accept_locales2, locales, fallback);
-        assertEquals(new ULocale("es_US"), result);
-        assertTrue(fallback[0]);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.acceptLanguage(String, boolean[])'
-     */
-    public void testAcceptLanguageStringBooleanArray() {
-        boolean[] fallback = new boolean[1];
-        ULocale result = ULocale.acceptLanguage("en-CA, en-GB, es-US", fallback);
-        assertEquals(new ULocale("en_CA"), result);
-        assertFalse(fallback[0]);
-        result = ULocale.acceptLanguage("es-US-NEWMEXICO", fallback);
-        assertNotNull(result); // actual result depends on jdk
-        assertTrue(fallback[0]);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.acceptLanguage(ULocale[], boolean[])'
-     */
-    public void testAcceptLanguageULocaleArrayBooleanArray() {
-        boolean[] fallback = new boolean[1];
-        ULocale[] accept_locales = {
-            new ULocale("en_CA"),
-            new ULocale("en_GB"),
-            new ULocale("es_US"),
-        };
-        ULocale[] accept_locales2 = {
-            new ULocale("es_US_NEWMEXICO"),
-        };
-        ULocale result = ULocale.acceptLanguage(accept_locales, fallback);
-        assertEquals(new ULocale("en_CA"), result);
-        assertFalse(fallback[0]);
-        result = ULocale.acceptLanguage(accept_locales2, fallback);
-        assertNotNull(result); // actual result depends on jdk
-        assertTrue(fallback[0]);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.toLanguageTag()'
-     */
-    public void testToLanguageTag() {
-        ULocale[] test_ulocales = {
-            new ULocale("en_US"),
-            new ULocale(""),
-            new ULocale("de_DE@collation=phonebook"),
-            new ULocale("en_Latn_US_POSIX"),
-            new ULocale("th_TH@numbers=thai;calendar=buddhist"),
-            new ULocale("und_CN@timezone=PRC"),
-            new ULocale("iw_IL"),
-        };
-
-        String[] expected = {
-            "en-US",
-            "und",
-            "de-DE-u-co-phonebk",
-            "en-Latn-US-u-va-posix",
-            "th-TH-u-ca-buddhist-nu-thai",
-            "und-CN-u-tz-cnsha",
-            "he-IL",
-        };
-
-        for (int i = 0; i < test_ulocales.length; i++) {
-            String result = test_ulocales[i].toLanguageTag();
-            assertEquals(expected[i], result);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.forLanguageTag()'
-     */
-    public void testForLanguageTag() {
-        String[] test_tags = {
-            "en-us",
-            "Und-Us",
-            "ja-jp-u-ca-japanese",
-            "fr-FR-u-tz-frpar-ca-gregory",
-        };
-
-        ULocale[] expected = {
-            new ULocale("en_US"),
-            new ULocale("und_US"),
-            new ULocale("ja_JP@calendar=japanese"),
-            new ULocale("fr_FR@calendar=gregorian;timezone=Europe/Paris"),
-        };
-
-        for (int i = 0; i < test_tags.length; i++) {
-            ULocale result = ULocale.forLanguageTag(test_tags[i]);
-            assertEquals(expected[i], result);
-        }
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.getDefault(Category)'
-     */
-    public void testGetDefaultCategory() {
-        ULocale dispLoc = ULocale.getDefault(Category.DISPLAY);
-        assertNotNull(dispLoc);
-        ULocale formLoc = ULocale.getDefault(Category.FORMAT);
-        assertNotNull(formLoc);
-    }
-
-    /*
-     * Test method for 'com.ibm.icu.x.util.ULocale.setDefault(Category, ULocale)'
-     */
-    public void testSetDefaultCategoryULocale() {
-        ULocale orgDefault = ULocale.getDefault();
-        ULocale orgDisplay = ULocale.getDefault(Category.DISPLAY);
-        ULocale orgFormat = ULocale.getDefault(Category.FORMAT);
-
-        ULocale jaUS = new ULocale("ja_US");
-        ULocale.setDefault(jaUS);
-
-        // setDefault(ULocale) updates category defaults
-        assertEquals(ULocale.getDefault(), jaUS);
-        assertEquals(ULocale.getDefault(Category.DISPLAY), jaUS);
-        assertEquals(ULocale.getDefault(Category.FORMAT), jaUS);
-
-        ULocale frDE = new ULocale("fr_DE");
-        ULocale.setDefault(Category.DISPLAY, frDE);
-
-        // setDefault(Category, ULocale) only updates the category default
-        assertEquals(ULocale.getDefault(), jaUS);
-        assertEquals(ULocale.getDefault(Category.DISPLAY), frDE);
-        assertEquals(ULocale.getDefault(Category.FORMAT), jaUS);
-
-        // restore the original
-        ULocale.setDefault(orgDefault);
-        ULocale.setDefault(Category.DISPLAY, orgDisplay);
-        ULocale.setDefault(Category.FORMAT, orgFormat);
-
-        assertEquals(ULocale.getDefault(), orgDefault);
-        assertEquals(ULocale.getDefault(Category.DISPLAY), orgDisplay);
-        assertEquals(ULocale.getDefault(Category.FORMAT), orgFormat);
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.classpath b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.classpath
deleted file mode 100644
index 3bc2475..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.project b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.project
deleted file mode 100644
index 718a3c0..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>com.ibm.icu.base</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.core.resources.prefs b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.jdt.core.prefs b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index a8076c5..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,76 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=ignore
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.7
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.jdt.ui.prefs b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 5693f2f..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Thu Dec 14 11:50:17 EST 2006
-eclipse.preferences.version=1
-internal.default.compliance=default
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/META-INF/MANIFEST.MF b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/META-INF/MANIFEST.MF
deleted file mode 100644
index 4450dcd..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: com.ibm.icu.base; singleton:=true
-Bundle-Version: @BUILD_VERSION@
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-Copyright: @COPYRIGHT@
-Export-Package: com.ibm.icu.text;base=true;version="@IMPL_VERSION@",
- com.ibm.icu.util;base=true;version="@IMPL_VERSION@",
- com.ibm.icu.math;base=true;version="@IMPL_VERSION@",
- com.ibm.icu.impl;x-internal:=true,
- com.ibm.icu.impl.locale;x-internal:=true
-Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/build.properties b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/build.properties
deleted file mode 100644
index 1e07dde..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2011 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.. = src/
-output.. = bin/
-src.includes = about.html,\
-               about_files/
-bin.includes = .,\
-               about.html,\
-               about_files/,\
-               plugin.properties,\
-               META-INF/
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/plugin.properties b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/plugin.properties
deleted file mode 100644
index 4da4d9c..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2011 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = International Components for Unicode for Java (ICU4J) Replacement plug-in
-providerName = IBM Corporation
\ No newline at end of file
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/ICUCache.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/ICUCache.java
deleted file mode 100644
index 2eab100..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/ICUCache.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- ***************************************************************************
- * Copyright (c) 2007-2011 International Business Machines Corporation and *
- * others.  All rights reserved.                                           *
- ***************************************************************************
-*/
-
-package com.ibm.icu.impl;
-
-public interface ICUCache<K, V> {
-    // Type of reference holding the Map instance
-    public static final int SOFT = 0;
-    public static final int WEAK = 1;
-
-    // NULL object, which may be used for a cache key
-    public static final Object NULL = new Object();
-
-    public void clear();
-    public void put(K key, V value);
-    public V get(Object key);
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleIDParser.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleIDParser.java
deleted file mode 100644
index 9ee790a..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleIDParser.java
+++ /dev/null
@@ -1,745 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-* Copyright (C) 2003-2012, International Business Machines Corporation and   *
-* others. All Rights Reserved.                                               *
-******************************************************************************
-*/
-
-package com.ibm.icu.impl;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-import com.ibm.icu.impl.locale.AsciiUtil;
-
-/**
- * Utility class to parse and normalize locale ids (including POSIX style)
- */
-public final class LocaleIDParser {
-    
-    /**
-     * Char array representing the locale ID.
-     */
-    private char[] id;
-    
-    /**
-     * Current position in {@link #id} (while parsing).
-     */
-    private int index;
-    
-    /**
-     * Temporary buffer for parsed sections of data.
-     */
-    private StringBuilder buffer;
-    
-    // um, don't handle POSIX ids unless we request it.  why not?  well... because.
-    private boolean canonicalize;
-    private boolean hadCountry;
-
-    // used when canonicalizing
-    Map<String, String> keywords;
-    String baseName;
-
-    /**
-     * Parsing constants.
-     */
-    private static final char KEYWORD_SEPARATOR     = '@';
-    private static final char HYPHEN                = '-';
-    private static final char KEYWORD_ASSIGN        = '=';
-    private static final char COMMA                 = ',';
-    private static final char ITEM_SEPARATOR        = ';';
-    private static final char DOT                   = '.';
-    private static final char UNDERSCORE            = '_';
-
-    public LocaleIDParser(String localeID) {
-        this(localeID, false);
-    }
-
-    public LocaleIDParser(String localeID, boolean canonicalize) {
-        id = localeID.toCharArray();
-        index = 0;
-        buffer = new StringBuilder(id.length + 5);
-        this.canonicalize = canonicalize;
-    }
-
-    private void reset() {
-        index = 0;
-        buffer = new StringBuilder(id.length + 5);
-    }
-
-    // utilities for working on text in the buffer
-    
-    /**
-     * Append c to the buffer.
-     */
-    private void append(char c) {
-        buffer.append(c);
-    }
-    
-    private void addSeparator() {
-        append(UNDERSCORE);
-    }
-
-    /**
-     * Returns the text in the buffer from start to blen as a String.
-     */
-    private String getString(int start) {
-        return buffer.substring(start);
-    }
-
-    /**
-     * Set the length of the buffer to pos, then append the string.
-     */
-    private void set(int pos, String s) {
-        buffer.delete(pos, buffer.length());
-        buffer.insert(pos, s);
-    }
-
-    /**
-     * Append the string to the buffer.
-     */
-    private void append(String s) {
-        buffer.append(s);
-    }
-
-    // utilities for parsing text out of the id
-
-    /**
-     * Character to indicate no more text is available in the id.
-     */
-    private static final char DONE = '\uffff';
-
-    /**
-     * Returns the character at index in the id, and advance index.  The returned character
-     * is DONE if index was at the limit of the buffer.  The index is advanced regardless
-     * so that decrementing the index will always 'unget' the last character returned.
-     */
-    private char next() {
-        if (index == id.length) {
-            index++;
-            return DONE;
-        }
-
-        return id[index++];
-    }
-
-    /**
-     * Advance index until the next terminator or id separator, and leave it there.
-     */
-    private void skipUntilTerminatorOrIDSeparator() {
-        while (!isTerminatorOrIDSeparator(next()));
-        --index;
-    }
-
-    /**
-     * Returns true if the character at index in the id is a terminator.
-     */
-    private boolean atTerminator() {
-        return index >= id.length || isTerminator(id[index]);
-    }
-
-    /**
-     * Returns true if the character is a terminator (keyword separator, dot, or DONE).
-     * Dot is a terminator because of the POSIX form, where dot precedes the codepage.
-     */
-    private boolean isTerminator(char c) {
-        // always terminate at DOT, even if not handling POSIX.  It's an error...
-        return c == KEYWORD_SEPARATOR || c == DONE || c == DOT;
-    }
-
-    /**
-     * Returns true if the character is a terminator or id separator.
-     */
-    private boolean isTerminatorOrIDSeparator(char c) {
-        return c == UNDERSCORE || c == HYPHEN || isTerminator(c);
-    }
-
-    /**
-     * Returns true if the start of the buffer has an experimental or private language
-     * prefix, the pattern '[ixIX][-_].' shows the syntax checked.
-     */
-    private boolean haveExperimentalLanguagePrefix() {
-        if (id.length > 2) {
-            char c = id[1];
-            if (c == HYPHEN || c == UNDERSCORE) {
-                c = id[0];
-                return c == 'x' || c == 'X' || c == 'i' || c == 'I';
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if a value separator occurs at or after index.
-     */
-    private boolean haveKeywordAssign() {
-        // assume it is safe to start from index
-        for (int i = index; i < id.length; ++i) {
-            if (id[i] == KEYWORD_ASSIGN) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Advance index past language, and accumulate normalized language code in buffer.
-     * Index must be at 0 when this is called.  Index is left at a terminator or id
-     * separator.  Returns the start of the language code in the buffer.
-     */
-    private int parseLanguage() {
-        int startLength = buffer.length();
-        
-        if (haveExperimentalLanguagePrefix()) {
-            append(AsciiUtil.toLower(id[0]));
-            append(HYPHEN);
-            index = 2;
-        }
-
-        char c;
-        while(!isTerminatorOrIDSeparator(c = next())) {
-            append(AsciiUtil.toLower(c));
-        }
-        --index; // unget
-
-        if (buffer.length() - startLength == 3) {
-            String lang = LocaleIDs.threeToTwoLetterLanguage(getString(0));
-            if (lang != null) {
-                set(0, lang);
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * Advance index past language.  Index must be at 0 when this is called.  Index
-     * is left at a terminator or id separator.
-     */
-    private void skipLanguage() {
-        if (haveExperimentalLanguagePrefix()) {
-            index = 2;
-        }
-        skipUntilTerminatorOrIDSeparator();
-    }
-
-    /**
-     * Advance index past script, and accumulate normalized script in buffer.
-     * Index must be immediately after the language.
-     * If the item at this position is not a script (is not four characters
-     * long) leave index and buffer unchanged.  Otherwise index is left at
-     * a terminator or id separator.  Returns the start of the script code
-     * in the buffer (this may be equal to the buffer length, if there is no
-     * script).
-     */
-    private int parseScript() {
-        if (!atTerminator()) {
-            int oldIndex = index; // save original index
-            ++index;
-
-            int oldBlen = buffer.length(); // get before append hyphen, if we truncate everything is undone
-            char c;
-            boolean firstPass = true;
-            while(!isTerminatorOrIDSeparator(c = next()) && AsciiUtil.isAlpha(c)) {
-                if (firstPass) {
-                    addSeparator();
-                    append(AsciiUtil.toUpper(c));
-                    firstPass = false;
-                } else {
-                    append(AsciiUtil.toLower(c));
-                }
-            }
-            --index; // unget
-
-            /* If it's not exactly 4 characters long, then it's not a script. */
-            if (index - oldIndex != 5) { // +1 to account for separator
-                index = oldIndex;
-                buffer.delete(oldBlen, buffer.length());
-            } else {
-                oldBlen++; // index past hyphen, for clients who want to extract just the script
-            }
-
-            return oldBlen;
-        }
-        return buffer.length();
-    }
-
-    /**
-     * Advance index past script.
-     * Index must be immediately after the language and IDSeparator.
-     * If the item at this position is not a script (is not four characters
-     * long) leave index.  Otherwise index is left at a terminator or
-     * id separator.
-     */
-    private void skipScript() {
-        if (!atTerminator()) {
-            int oldIndex = index;
-            ++index;
-            
-            char c;
-            while (!isTerminatorOrIDSeparator(c = next()) && AsciiUtil.isAlpha(c));
-            --index;
-
-            if (index - oldIndex != 5) { // +1 to account for separator
-                index = oldIndex;
-            }
-        }
-    }
-
-    /**
-     * Advance index past country, and accumulate normalized country in buffer.
-     * Index must be immediately after the script (if there is one, else language)
-     * and IDSeparator.  Return the start of the country code in the buffer.
-     */
-    private int parseCountry() {
-        if (!atTerminator()) {
-            int oldIndex = index;
-            ++index;
-
-            int oldBlen = buffer.length();
-            char c;
-            boolean firstPass = true;
-            while (!isTerminatorOrIDSeparator(c = next())) {
-                if (firstPass) { // first, add hyphen
-                    hadCountry = true; // we have a country, let variant parsing know
-                    addSeparator();
-                    ++oldBlen; // increment past hyphen
-                    firstPass = false;
-                }
-                append(AsciiUtil.toUpper(c));
-            }
-            --index; // unget
-
-            int charsAppended = buffer.length() - oldBlen;
-
-            if (charsAppended == 0) {
-                // Do nothing.
-            }
-            else if (charsAppended < 2 || charsAppended > 3) {
-                // It's not a country, so return index and blen to
-                // their previous values.
-                index = oldIndex;
-                --oldBlen;
-                buffer.delete(oldBlen, buffer.length());
-                hadCountry = false;
-            }
-            else if (charsAppended == 3) {
-                String region = LocaleIDs.threeToTwoLetterRegion(getString(oldBlen));
-                if (region != null) {
-                    set(oldBlen, region);
-                }
-            }
-
-            return oldBlen;
-        }
-
-        return buffer.length();
-    }
-
-    /**
-     * Advance index past country.
-     * Index must be immediately after the script (if there is one, else language)
-     * and IDSeparator.
-     */
-    private void skipCountry() {
-        if (!atTerminator()) {
-            if (id[index] == UNDERSCORE || id[index] == HYPHEN) {
-                ++index;
-            }
-            /*
-             * Save the index point after the separator, since the format
-             * requires two separators if the country is not present.
-             */
-            int oldIndex = index;
-
-            skipUntilTerminatorOrIDSeparator();
-            int charsSkipped = index - oldIndex;
-            if (charsSkipped < 2 || charsSkipped > 3) {
-                index = oldIndex;
-            }
-        }
-    }
-
-    /**
-     * Advance index past variant, and accumulate normalized variant in buffer.  This ignores
-     * the codepage information from POSIX ids.  Index must be immediately after the country
-     * or script.  Index is left at the keyword separator or at the end of the text.  Return
-     * the start of the variant code in the buffer.
-     *
-     * In standard form, we can have the following forms:
-     * ll__VVVV
-     * ll_CC_VVVV
-     * ll_Ssss_VVVV
-     * ll_Ssss_CC_VVVV
-     *
-     * This also handles POSIX ids, which can have the following forms (pppp is code page id):
-     * ll_CC.pppp          --> ll_CC
-     * ll_CC.pppp@VVVV     --> ll_CC_VVVV
-     * ll_CC@VVVV          --> ll_CC_VVVV
-     *
-     * We identify this use of '@' in POSIX ids by looking for an '=' following
-     * the '@'.  If there is one, we consider '@' to start a keyword list, instead of
-     * being part of a POSIX id.
-     *
-     * Note:  since it was decided that we want an option to not handle POSIX ids, this
-     * becomes a bit more complex.
-     */
-    private int parseVariant() {
-        int oldBlen = buffer.length();
-
-        boolean start = true;
-        boolean needSeparator = true;
-        boolean skipping = false;
-        char c;
-        boolean firstPass = true;
-        
-        while ((c = next()) != DONE) {
-            if (c == DOT) {
-                start = false;
-                skipping = true;
-            } else if (c == KEYWORD_SEPARATOR) {
-                if (haveKeywordAssign()) {
-                    break;
-                }
-                skipping = false;
-                start = false;
-                needSeparator = true; // add another underscore if we have more text
-            } else if (start) {
-                start = false;
-                if (c != UNDERSCORE && c != HYPHEN) {
-                    index--;
-                }
-            } else if (!skipping) {
-                if (needSeparator) {
-                    needSeparator = false;
-                    if (firstPass && !hadCountry) { // no country, we'll need two
-                        addSeparator();
-                        ++oldBlen; // for sure
-                    }
-                    addSeparator();
-                    if (firstPass) { // only for the first separator
-                        ++oldBlen;
-                        firstPass = false;
-                    }
-                }
-                c = AsciiUtil.toUpper(c);
-                if (c == HYPHEN || c == COMMA) {
-                    c = UNDERSCORE;
-                }
-                append(c);
-            }
-        }
-        --index; // unget
-
-        return oldBlen;
-    }
-
-    // no need for skipvariant, to get the keywords we'll just scan directly for
-    // the keyword separator
-
-    /**
-     * Returns the normalized language id, or the empty string.
-     */
-    public String getLanguage() {
-        reset();
-        return getString(parseLanguage());
-    }
-
-    /**
-     * Returns the normalized script id, or the empty string.
-     */
-    public String getScript() {
-        reset();
-        skipLanguage();
-        return getString(parseScript());
-    }
-
-    /**
-     * return the normalized country id, or the empty string.
-     */
-    public String getCountry() {
-        reset();
-        skipLanguage();
-        skipScript();
-        return getString(parseCountry());
-    }
-
-    /**
-     * Returns the normalized variant id, or the empty string.
-     */
-    public String getVariant() {
-        reset();
-        skipLanguage();
-        skipScript();
-        skipCountry();
-        return getString(parseVariant());
-    }
-
-    /**
-     * Returns the language, script, country, and variant as separate strings.
-     */
-    public String[] getLanguageScriptCountryVariant() {
-        reset();
-        return new String[] {
-                getString(parseLanguage()),
-                getString(parseScript()),
-                getString(parseCountry()),
-                getString(parseVariant())
-        };
-    }
-
-    public void setBaseName(String baseName) {
-        this.baseName = baseName;
-    }
-
-    public void parseBaseName() {
-        if (baseName != null) {
-            set(0, baseName);
-        } else {
-            reset();
-            parseLanguage();
-            parseScript();
-            parseCountry();
-            parseVariant();
-
-            // catch unwanted trailing underscore after country if there was no variant
-            int len = buffer.length();
-            if (len > 0 && buffer.charAt(len - 1) == UNDERSCORE) {
-                buffer.deleteCharAt(len - 1);
-            }
-        }
-    }
-
-    /**
-     * Returns the normalized base form of the locale id.  The base
-     * form does not include keywords.
-     */
-    public String getBaseName() {
-        if (baseName != null) {
-            return baseName;
-        }
-        parseBaseName();
-        return getString(0);
-    }
-
-    /**
-     * Returns the normalized full form of the locale id.  The full
-     * form includes keywords if they are present.
-     */
-    public String getName() {
-        parseBaseName();
-        parseKeywords();
-        return getString(0);
-    }
-
-    // keyword utilities
-
-    /**
-     * If we have keywords, advance index to the start of the keywords and return true,
-     * otherwise return false.
-     */
-    private boolean setToKeywordStart() {
-        for (int i = index; i < id.length; ++i) {
-            if (id[i] == KEYWORD_SEPARATOR) {
-                if (canonicalize) {
-                    for (int j = ++i; j < id.length; ++j) { // increment i past separator for return
-                        if (id[j] == KEYWORD_ASSIGN) {
-                            index = i;
-                            return true;
-                        }
-                    }
-                } else {
-                    if (++i < id.length) {
-                        index = i;
-                        return true;
-                    }
-                }
-                break;
-            }
-        }
-        return false;
-    }
-
-    private static boolean isDoneOrKeywordAssign(char c) {
-        return c == DONE || c == KEYWORD_ASSIGN;
-    }
-
-    private static boolean isDoneOrItemSeparator(char c) {
-        return c == DONE || c == ITEM_SEPARATOR;
-    }
-
-    private String getKeyword() {
-        int start = index;
-        while (!isDoneOrKeywordAssign(next())) {
-        }
-        --index;
-        return AsciiUtil.toLowerString(new String(id, start, index-start).trim());
-    }
-
-    private String getValue() {
-        int start = index;
-        while (!isDoneOrItemSeparator(next())) {
-        }
-        --index;
-        return new String(id, start, index-start).trim(); // leave case alone
-    }
-
-    private Comparator<String> getKeyComparator() {
-        final Comparator<String> comp = new Comparator<String>() {
-            public int compare(String lhs, String rhs) {
-                return lhs.compareTo(rhs);
-            }
-        };
-        return comp;
-    }
-
-    /**
-     * Returns a map of the keywords and values, or null if there are none.
-     */
-    public Map<String, String> getKeywordMap() {
-        if (keywords == null) {
-            TreeMap<String, String> m = null;
-            if (setToKeywordStart()) {
-                // trim spaces and convert to lower case, both keywords and values.
-                do {
-                    String key = getKeyword();
-                    if (key.length() == 0) {
-                        break;
-                    }
-                    char c = next();
-                    if (c != KEYWORD_ASSIGN) {
-                        // throw new IllegalArgumentException("key '" + key + "' missing a value.");
-                        if (c == DONE) {
-                            break;
-                        } else {
-                            continue;
-                        }
-                    }
-                    String value = getValue();
-                    if (value.length() == 0) {
-                        // throw new IllegalArgumentException("key '" + key + "' missing a value.");
-                        continue;
-                    }
-                    if (m == null) {
-                        m = new TreeMap<String, String>(getKeyComparator());
-                    } else if (m.containsKey(key)) {
-                        // throw new IllegalArgumentException("key '" + key + "' already has a value.");
-                        continue;
-                    }
-                    m.put(key, value);
-                } while (next() == ITEM_SEPARATOR);
-            }
-            keywords = m != null ? m : Collections.<String, String>emptyMap();
-        }
-
-        return keywords;
-    }
-
-
-    /**
-     * Parse the keywords and return start of the string in the buffer.
-     */
-    private int parseKeywords() {
-        int oldBlen = buffer.length();
-        Map<String, String> m = getKeywordMap();
-        if (!m.isEmpty()) {
-            boolean first = true;
-            for (Map.Entry<String, String> e : m.entrySet()) {
-                append(first ? KEYWORD_SEPARATOR : ITEM_SEPARATOR);
-                first = false;
-                append(e.getKey());
-                append(KEYWORD_ASSIGN);
-                append(e.getValue());
-            }
-            if (first == false) {
-                ++oldBlen;
-            }
-        }
-        return oldBlen;
-    }
-
-    /**
-     * Returns an iterator over the keywords, or null if we have an empty map.
-     */
-    public Iterator<String> getKeywords() {
-        Map<String, String> m = getKeywordMap();
-        return m.isEmpty() ? null : m.keySet().iterator();
-    }
-
-    /**
-     * Returns the value for the named keyword, or null if the keyword is not
-     * present.
-     */
-    public String getKeywordValue(String keywordName) {
-        Map<String, String> m = getKeywordMap();
-        return m.isEmpty() ? null : m.get(AsciiUtil.toLowerString(keywordName.trim()));
-    }
-
-    /**
-     * Set the keyword value only if it is not already set to something else.
-     */
-    public void defaultKeywordValue(String keywordName, String value) {
-        setKeywordValue(keywordName, value, false);
-    }
-
-    /**
-     * Set the value for the named keyword, or unset it if value is null.  If
-     * keywordName itself is null, unset all keywords.  If keywordName is not null,
-     * value must not be null.
-     */
-    public void setKeywordValue(String keywordName, String value) {
-        setKeywordValue(keywordName, value, true);
-    }
-
-    /**
-     * Set the value for the named keyword, or unset it if value is null.  If
-     * keywordName itself is null, unset all keywords.  If keywordName is not null,
-     * value must not be null.  If reset is true, ignore any previous value for
-     * the keyword, otherwise do not change the keyword (including removal of
-     * one or all keywords).
-     */
-    private void setKeywordValue(String keywordName, String value, boolean reset) {
-        if (keywordName == null) {
-            if (reset) {
-                // force new map, ignore value
-                keywords = Collections.<String, String>emptyMap();
-            }
-        } else {
-            keywordName = AsciiUtil.toLowerString(keywordName.trim());
-            if (keywordName.length() == 0) {
-                throw new IllegalArgumentException("keyword must not be empty");
-            }
-            if (value != null) {
-                value = value.trim();
-                if (value.length() == 0) {
-                    throw new IllegalArgumentException("value must not be empty");
-                }
-            }
-            Map<String, String> m = getKeywordMap();
-            if (m.isEmpty()) { // it is EMPTY_MAP
-                if (value != null) {
-                    // force new map
-                    keywords = new TreeMap<String, String>(getKeyComparator());
-                    keywords.put(keywordName, value.trim());
-                }
-            } else {
-                if (reset || !m.containsKey(keywordName)) {
-                    if (value != null) {
-                        m.put(keywordName, value);
-                    } else {
-                        m.remove(keywordName);
-                        if (m.isEmpty()) {
-                            // force new map
-                            keywords = Collections.<String, String>emptyMap();
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleIDs.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleIDs.java
deleted file mode 100644
index dda9d57..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleIDs.java
+++ /dev/null
@@ -1,538 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl;
-
-import java.util.MissingResourceException;
-
-import com.ibm.icu.util.ULocale;
-
-
-/**
- * Utilities for mapping between old and new language, country, and other
- * locale ID related names.
- */
-public class LocaleIDs {
-
-    /**
-     * Returns a list of all 2-letter country codes defined in ISO 3166.
-     * Can be used to create Locales.
-     * @stable ICU 3.0
-     */
-    public static String[] getISOCountries() {
-        initCountryTables();
-        return _countries.clone();
-    }
-
-    /**
-     * Returns a list of all 2-letter language codes defined in ISO 639.
-     * Can be used to create Locales.
-     * [NOTE:  ISO 639 is not a stable standard-- some languages' codes have changed.
-     * The list this function returns includes both the new and the old codes for the
-     * languages whose codes have changed.]
-     * @stable ICU 3.0
-     */
-    public static String[] getISOLanguages() {
-        initLanguageTables();
-        return _languages.clone();
-    }
-
-    /**
-     * Returns a three-letter abbreviation for the provided country.  If the provided
-     * country is empty, returns the empty string.  Otherwise, returns
-     * an uppercase ISO 3166 3-letter country code.
-     * @exception MissingResourceException Throws MissingResourceException if the
-     * three-letter country abbreviation is not available for this locale.
-     * @stable ICU 3.0
-     */
-    public static String getISO3Country(String country){
-        initCountryTables();
-
-        int offset = findIndex(_countries, country);
-        if(offset>=0){
-            return _countries3[offset];
-        }else{
-            offset = findIndex(_obsoleteCountries, country);
-            if(offset>=0){
-                return _obsoleteCountries3[offset];
-            }
-        }
-        return "";
-    }
-    /**
-     * Returns a three-letter abbreviation for the language.  If language is
-     * empty, returns the empty string.  Otherwise, returns
-     * a lowercase ISO 639-2/T language code.
-     * The ISO 639-2 language codes can be found on-line at
-     *   <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a>
-     * @exception MissingResourceException Throws MissingResourceException if the
-     * three-letter language abbreviation is not available for this locale.
-     * @stable ICU 3.0
-     */
-    public static String getISO3Language(String language) {
-        initLanguageTables();
-
-        int offset = findIndex(_languages, language);
-        if(offset>=0){
-            return _languages3[offset];
-        } else {
-            offset = findIndex(_obsoleteLanguages, language);
-            if (offset >= 0) {
-                return _obsoleteLanguages3[offset];
-            }
-        }
-        return "";
-    }
-
-    public static String threeToTwoLetterLanguage(String lang) {
-        initLanguageTables();
-
-        /* convert 3 character code to 2 character code if possible *CWB*/
-        int offset = findIndex(_languages3, lang);
-        if (offset >= 0) {
-            return _languages[offset];
-        }
-
-        offset = findIndex(_obsoleteLanguages3, lang);
-        if (offset >= 0) {
-            return _obsoleteLanguages[offset];
-        }
-
-        return null;
-    }
-
-    public static String threeToTwoLetterRegion(String region) {
-        initCountryTables();
-
-        /* convert 3 character code to 2 character code if possible *CWB*/
-        int offset = findIndex(_countries3, region);
-        if (offset >= 0) {
-            return _countries[offset];
-        }
-
-        offset = findIndex(_obsoleteCountries3, region);
-        if (offset >= 0) {
-            return _obsoleteCountries[offset];
-        }
-
-        return null;
-    }
-
-    /**
-     * linear search of the string array. the arrays are unfortunately ordered by the
-     * two-letter target code, not the three-letter search code, which seems backwards.
-     */
-    private static int findIndex(String[] array, String target){
-        for (int i = 0; i < array.length; i++) {
-            if (target.equals(array[i])) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-
-    /**
-     * Tables used in normalizing portions of the id.
-     */
-    /* tables updated per http://lcweb.loc.gov/standards/iso639-2/
-       to include the revisions up to 2001/7/27 *CWB*/
-    /* The 3 character codes are the terminology codes like RFC 3066.
-       This is compatible with prior ICU codes */
-    /* "in" "iw" "ji" "jw" & "sh" have been withdrawn but are still in
-       the table but now at the end of the table because
-       3 character codes are duplicates.  This avoids bad searches
-       going from 3 to 2 character codes.*/
-    /* The range qaa-qtz is reserved for local use. */
-
-    private static String[] _languages;
-    private static String[] _replacementLanguages;
-    private static String[] _obsoleteLanguages;
-    private static String[] _languages3;
-    private static String[] _obsoleteLanguages3;
-
-    // Avoid initializing languages tables unless we have to.
-    private static void initLanguageTables() {
-        if (_languages == null) {
-
-            /* This list MUST be in sorted order, and MUST contain the two-letter codes
-               if one exists otherwise use the three letter code */
-            String[] tempLanguages = {
-                "aa",  "ab",  "ace", "ach", "ada", "ady", "ae",  "af",  "afa",
-                "afh", "ak",  "akk", "ale", "alg", "am",  "an",  "ang", "apa",
-                "ar",  "arc", "arn", "arp", "art", "arw", "as",  "ast",
-                "ath", "aus", "av",  "awa", "ay",  "az",  "ba",  "bad",
-                "bai", "bal", "ban", "bas", "bat", "be",  "bej",
-                "bem", "ber", "bg",  "bh",  "bho", "bi",  "bik", "bin",
-                "bla", "bm",  "bn",  "bnt", "bo",  "br",  "bra", "bs",
-                "btk", "bua", "bug", "byn", "ca",  "cad", "cai", "car", "cau",
-                "ce",  "ceb", "cel", "ch",  "chb", "chg", "chk", "chm",
-                "chn", "cho", "chp", "chr", "chy", "cmc", "co",  "cop",
-                "cpe", "cpf", "cpp", "cr",  "crh", "crp", "cs",  "csb", "cu",  "cus",
-                "cv",  "cy",  "da",  "dak", "dar", "day", "de",  "del", "den",
-                "dgr", "din", "doi", "dra", "dsb", "dua", "dum", "dv",  "dyu",
-                "dz",  "ee",  "efi", "egy", "eka", "el",  "elx", "en",
-                "enm", "eo",  "es",  "et",  "eu",  "ewo", "fa",
-                "fan", "fat", "ff",  "fi",  "fiu", "fj",  "fo",  "fon",
-                "fr",  "frm", "fro", "fur", "fy",  "ga",  "gaa", "gay",
-                "gba", "gd",  "gem", "gez", "gil", "gl",  "gmh", "gn",
-                "goh", "gon", "gor", "got", "grb", "grc", "gu",  "gv",
-                "gwi", "ha",  "hai", "haw", "he",  "hi",  "hil", "him",
-                "hit", "hmn", "ho",  "hr",  "hsb", "ht",  "hu",  "hup", "hy",  "hz",
-                "ia",  "iba", "id",  "ie",  "ig",  "ii",  "ijo", "ik",
-                "ilo", "inc", "ine", "inh", "io",  "ira", "iro", "is",  "it",
-                "iu",  "ja",  "jbo", "jpr", "jrb", "jv",  "ka",  "kaa", "kab",
-                "kac", "kam", "kar", "kaw", "kbd", "kg",  "kha", "khi",
-                "kho", "ki",  "kj",  "kk",  "kl",  "km",  "kmb", "kn",
-                "ko",  "kok", "kos", "kpe", "kr",  "krc", "kro", "kru", "ks",
-                "ku",  "kum", "kut", "kv",  "kw",  "ky",  "la",  "lad",
-                "lah", "lam", "lb",  "lez", "lg",  "li",  "ln",  "lo",  "lol",
-                "loz", "lt",  "lu",  "lua", "lui", "lun", "luo", "lus",
-                "lv",  "mad", "mag", "mai", "mak", "man", "map", "mas",
-                "mdf", "mdr", "men", "mg",  "mga", "mh",  "mi",  "mic", "min",
-                "mis", "mk",  "mkh", "ml",  "mn",  "mnc", "mni", "mno",
-                "mo",  "moh", "mos", "mr",  "ms",  "mt",  "mul", "mun",
-                "mus", "mwr", "my",  "myn", "myv", "na",  "nah", "nai", "nap",
-                "nb",  "nd",  "nds", "ne",  "new", "ng",  "nia", "nic",
-                "niu", "nl",  "nn",  "no",  "nog", "non", "nr",  "nso", "nub",
-                "nv",  "nwc", "ny",  "nym", "nyn", "nyo", "nzi", "oc",  "oj",
-                "om",  "or",  "os",  "osa", "ota", "oto", "pa",  "paa",
-                "pag", "pal", "pam", "pap", "pau", "peo", "phi", "phn",
-                "pi",  "pl",  "pon", "pra", "pro", "ps",  "pt",  "qu",
-                "raj", "rap", "rar", "rm",  "rn",  "ro",  "roa", "rom",
-                "ru",  "rup", "rw",  "sa",  "sad", "sah", "sai", "sal", "sam",
-                "sas", "sat", "sc",  "sco", "sd",  "se",  "sel", "sem",
-                "sg",  "sga", "sgn", "shn", "si",  "sid", "sio", "sit",
-                "sk",  "sl",  "sla", "sm",  "sma", "smi", "smj", "smn",
-                "sms", "sn",  "snk", "so",  "sog", "son", "sq",  "sr",
-                "srr", "ss",  "ssa", "st",  "su",  "suk", "sus", "sux",
-                "sv",  "sw",  "syr", "ta",  "tai", "te",  "tem", "ter",
-                "tet", "tg",  "th",  "ti",  "tig", "tiv", "tk",  "tkl",
-                "tl",  "tlh", "tli", "tmh", "tn",  "to",  "tog", "tpi", "tr",
-                "ts",  "tsi", "tt",  "tum", "tup", "tut", "tvl", "tw",
-                "ty",  "tyv", "udm", "ug",  "uga", "uk",  "umb", "und", "ur",
-                "uz",  "vai", "ve",  "vi",  "vo",  "vot", "wa",  "wak",
-                "wal", "war", "was", "wen", "wo",  "xal", "xh",  "yao", "yap",
-                "yi",  "yo",  "ypk", "za",  "zap", "zen", "zh",  "znd",
-                "zu",  "zun",
-            };
-
-            String[] tempReplacementLanguages = {
-                "id", "he", "yi", "jv", "sr", "nb",/* replacement language codes */
-            };
-
-            String[] tempObsoleteLanguages = {
-                "in", "iw", "ji", "jw", "sh", "no",    /* obsolete language codes */
-            };
-
-            /* This list MUST contain a three-letter code for every two-letter code in the
-               list above, and they MUST ne in the same order (i.e., the same language must
-               be in the same place in both lists)! */
-            String[] tempLanguages3 = {
-                /*"aa",  "ab",  "ace", "ach", "ada", "ady", "ae",  "af",  "afa",    */
-                "aar", "abk", "ace", "ach", "ada", "ady", "ave", "afr", "afa",
-                /*"afh", "ak",  "akk", "ale", "alg", "am",  "an",  "ang", "apa",    */
-                "afh", "aka", "akk", "ale", "alg", "amh", "arg", "ang", "apa",
-                /*"ar",  "arc", "arn", "arp", "art", "arw", "as",  "ast",    */
-                "ara", "arc", "arn", "arp", "art", "arw", "asm", "ast",
-                /*"ath", "aus", "av",  "awa", "ay",  "az",  "ba",  "bad",    */
-                "ath", "aus", "ava", "awa", "aym", "aze", "bak", "bad",
-                /*"bai", "bal", "ban", "bas", "bat", "be",  "bej",    */
-                "bai", "bal", "ban", "bas", "bat", "bel", "bej",
-                /*"bem", "ber", "bg",  "bh",  "bho", "bi",  "bik", "bin",    */
-                "bem", "ber", "bul", "bih", "bho", "bis", "bik", "bin",
-                /*"bla", "bm",  "bn",  "bnt", "bo",  "br",  "bra", "bs",     */
-                "bla", "bam",  "ben", "bnt", "bod", "bre", "bra", "bos",
-                /*"btk", "bua", "bug", "byn", "ca",  "cad", "cai", "car", "cau",    */
-                "btk", "bua", "bug", "byn", "cat", "cad", "cai", "car", "cau",
-                /*"ce",  "ceb", "cel", "ch",  "chb", "chg", "chk", "chm",    */
-                "che", "ceb", "cel", "cha", "chb", "chg", "chk", "chm",
-                /*"chn", "cho", "chp", "chr", "chy", "cmc", "co",  "cop",    */
-                "chn", "cho", "chp", "chr", "chy", "cmc", "cos", "cop",
-                /*"cpe", "cpf", "cpp", "cr",  "crh", "crp", "cs",  "csb", "cu",  "cus",    */
-                "cpe", "cpf", "cpp", "cre", "crh", "crp", "ces", "csb", "chu", "cus",
-                /*"cv",  "cy",  "da",  "dak", "dar", "day", "de",  "del", "den",    */
-                "chv", "cym", "dan", "dak", "dar", "day", "deu", "del", "den",
-                /*"dgr", "din", "doi", "dra", "dsb", "dua", "dum", "dv",  "dyu",    */
-                "dgr", "din", "doi", "dra", "dsb", "dua", "dum", "div", "dyu",
-                /*"dz",  "ee",  "efi", "egy", "eka", "el",  "elx", "en",     */
-                "dzo", "ewe", "efi", "egy", "eka", "ell", "elx", "eng",
-                /*"enm", "eo",  "es",  "et",  "eu",  "ewo", "fa",     */
-                "enm", "epo", "spa", "est", "eus", "ewo", "fas",
-                /*"fan", "fat", "ff",  "fi",  "fiu", "fj",  "fo",  "fon",    */
-                "fan", "fat", "ful", "fin", "fiu", "fij", "fao", "fon",
-                /*"fr",  "frm", "fro", "fur", "fy",  "ga",  "gaa", "gay",    */
-                "fra", "frm", "fro", "fur", "fry", "gle", "gaa", "gay",
-                /*"gba", "gd",  "gem", "gez", "gil", "gl",  "gmh", "gn",     */
-                "gba", "gla", "gem", "gez", "gil", "glg", "gmh", "grn",
-                /*"goh", "gon", "gor", "got", "grb", "grc", "gu",  "gv",     */
-                "goh", "gon", "gor", "got", "grb", "grc", "guj", "glv",
-                /*"gwi", "ha",  "hai", "haw", "he",  "hi",  "hil", "him",    */
-                "gwi", "hau", "hai", "haw", "heb", "hin", "hil", "him",
-                /*"hit", "hmn", "ho",  "hr",  "hsb", "ht",  "hu",  "hup", "hy",  "hz",     */
-                "hit", "hmn", "hmo", "hrv", "hsb", "hat", "hun", "hup", "hye", "her",
-                /*"ia",  "iba", "id",  "ie",  "ig",  "ii",  "ijo", "ik",     */
-                "ina", "iba", "ind", "ile", "ibo", "iii", "ijo", "ipk",
-                /*"ilo", "inc", "ine", "inh", "io",  "ira", "iro", "is",  "it",      */
-                "ilo", "inc", "ine", "inh", "ido", "ira", "iro", "isl", "ita",
-                /*"iu",  "ja",  "jbo", "jpr", "jrb", "jv",  "ka",  "kaa", "kab",   */
-                "iku", "jpn", "jbo", "jpr", "jrb", "jaw", "kat", "kaa", "kab",
-                /*"kac", "kam", "kar", "kaw", "kbd", "kg",  "kha", "khi",    */
-                "kac", "kam", "kar", "kaw", "kbd", "kon", "kha", "khi",
-                /*"kho", "ki",  "kj",  "kk",  "kl",  "km",  "kmb", "kn",     */
-                "kho", "kik", "kua", "kaz", "kal", "khm", "kmb", "kan",
-                /*"ko",  "kok", "kos", "kpe", "kr",  "krc", "kro", "kru", "ks",     */
-                "kor", "kok", "kos", "kpe", "kau", "krc", "kro", "kru", "kas",
-                /*"ku",  "kum", "kut", "kv",  "kw",  "ky",  "la",  "lad",    */
-                "kur", "kum", "kut", "kom", "cor", "kir", "lat", "lad",
-                /*"lah", "lam", "lb",  "lez", "lg",  "li",  "ln",  "lo",  "lol",    */
-                "lah", "lam", "ltz", "lez", "lug", "lim", "lin", "lao", "lol",
-                /*"loz", "lt",  "lu",  "lua", "lui", "lun", "luo", "lus",    */
-                "loz", "lit", "lub", "lua", "lui", "lun", "luo", "lus",
-                /*"lv",  "mad", "mag", "mai", "mak", "man", "map", "mas",    */
-                "lav", "mad", "mag", "mai", "mak", "man", "map", "mas",
-                /*"mdf", "mdr", "men", "mg",  "mga", "mh",  "mi",  "mic", "min",    */
-                "mdf", "mdr", "men", "mlg", "mga", "mah", "mri", "mic", "min",
-                /*"mis", "mk",  "mkh", "ml",  "mn",  "mnc", "mni", "mno",    */
-                "mis", "mkd", "mkh", "mal", "mon", "mnc", "mni", "mno",
-                /*"mo",  "moh", "mos", "mr",  "ms",  "mt",  "mul", "mun",    */
-                "mol", "moh", "mos", "mar", "msa", "mlt", "mul", "mun",
-                /*"mus", "mwr", "my",  "myn", "myv", "na",  "nah", "nai", "nap",    */
-                "mus", "mwr", "mya", "myn", "myv", "nau", "nah", "nai", "nap",
-                /*"nb",  "nd",  "nds", "ne",  "new", "ng",  "nia", "nic",    */
-                "nob", "nde", "nds", "nep", "new", "ndo", "nia", "nic",
-                /*"niu", "nl",  "nn",  "no",  "nog", "non", "nr",  "nso", "nub",    */
-                "niu", "nld", "nno", "nor", "nog", "non", "nbl", "nso", "nub",
-                /*"nv",  "nwc", "ny",  "nym", "nyn", "nyo", "nzi", "oc",  "oj",     */
-                "nav", "nwc", "nya", "nym", "nyn", "nyo", "nzi", "oci", "oji",
-                /*"om",  "or",  "os",  "osa", "ota", "oto", "pa",  "paa",    */
-                "orm", "ori", "oss", "osa", "ota", "oto", "pan", "paa",
-                /*"pag", "pal", "pam", "pap", "pau", "peo", "phi", "phn",    */
-                "pag", "pal", "pam", "pap", "pau", "peo", "phi", "phn",
-                /*"pi",  "pl",  "pon", "pra", "pro", "ps",  "pt",  "qu",     */
-                "pli", "pol", "pon", "pra", "pro", "pus", "por", "que",
-                /*"raj", "rap", "rar", "rm",  "rn",  "ro",  "roa", "rom",    */
-                "raj", "rap", "rar", "roh", "run", "ron", "roa", "rom",
-                /*"ru",  "rup", "rw",  "sa",  "sad", "sah", "sai", "sal", "sam",    */
-                "rus", "rup", "kin", "san", "sad", "sah", "sai", "sal", "sam",
-                /*"sas", "sat", "sc",  "sco", "sd",  "se",  "sel", "sem",    */
-                "sas", "sat", "srd", "sco", "snd", "sme", "sel", "sem",
-                /*"sg",  "sga", "sgn", "shn", "si",  "sid", "sio", "sit",    */
-                "sag", "sga", "sgn", "shn", "sin", "sid", "sio", "sit",
-                /*"sk",  "sl",  "sla", "sm",  "sma", "smi", "smj", "smn",    */
-                "slk", "slv", "sla", "smo", "sma", "smi", "smj", "smn",
-                /*"sms", "sn",  "snk", "so",  "sog", "son", "sq",  "sr",     */
-                "sms", "sna", "snk", "som", "sog", "son", "sqi", "srp",
-                /*"srr", "ss",  "ssa", "st",  "su",  "suk", "sus", "sux",    */
-                "srr", "ssw", "ssa", "sot", "sun", "suk", "sus", "sux",
-                /*"sv",  "sw",  "syr", "ta",  "tai", "te",  "tem", "ter",    */
-                "swe", "swa", "syr", "tam", "tai", "tel", "tem", "ter",
-                /*"tet", "tg",  "th",  "ti",  "tig", "tiv", "tk",  "tkl",    */
-                "tet", "tgk", "tha", "tir", "tig", "tiv", "tuk", "tkl",
-                /*"tl",  "tlh", "tli", "tmh", "tn",  "to",  "tog", "tpi", "tr",     */
-                "tgl", "tlh", "tli", "tmh", "tsn", "ton", "tog", "tpi", "tur",
-                /*"ts",  "tsi", "tt",  "tum", "tup", "tut", "tvl", "tw",     */
-                "tso", "tsi", "tat", "tum", "tup", "tut", "tvl", "twi",
-                /*"ty",  "tyv", "udm", "ug",  "uga", "uk",  "umb", "und", "ur",     */
-                "tah", "tyv", "udm", "uig", "uga", "ukr", "umb", "und", "urd",
-                /*"uz",  "vai", "ve",  "vi",  "vo",  "vot", "wa",  "wak",    */
-                "uzb", "vai", "ven", "vie", "vol", "vot", "wln", "wak",
-                /*"wal", "war", "was", "wen", "wo",  "xal", "xh",  "yao", "yap",    */
-                "wal", "war", "was", "wen", "wol", "xal", "xho", "yao", "yap",
-                /*"yi",  "yo",  "ypk", "za",  "zap", "zen", "zh",  "znd",    */
-                "yid", "yor", "ypk", "zha", "zap", "zen", "zho", "znd",
-                /*"zu",  "zun",                                              */
-                "zul", "zun",
-            };
-
-            String[] tempObsoleteLanguages3 = {
-                /* "in",  "iw",  "ji",  "jw",  "sh", */
-                "ind", "heb", "yid", "jaw", "srp",
-            };
-
-            synchronized (ULocale.class) {
-                if (_languages == null) {
-                    _languages = tempLanguages;
-                    _replacementLanguages = tempReplacementLanguages;
-                    _obsoleteLanguages = tempObsoleteLanguages;
-                    _languages3 = tempLanguages3;
-                    _obsoleteLanguages3 = tempObsoleteLanguages3;
-                }
-            }
-        }
-    }
-
-    private static String[] _countries;
-    private static String[] _deprecatedCountries;
-    private static String[] _replacementCountries;
-    private static String[] _obsoleteCountries;
-    private static String[] _countries3;
-    private static String[] _obsoleteCountries3;
-
-    // Avoid initializing country tables unless we have to.
-    private static void initCountryTables() {
-        if (_countries == null) {
-            /* ZR(ZAR) is now CD(COD) and FX(FXX) is PS(PSE) as per
-               http://www.evertype.com/standards/iso3166/iso3166-1-en.html
-               added new codes keeping the old ones for compatibility
-               updated to include 1999/12/03 revisions *CWB*/
-
-            /* RO(ROM) is now RO(ROU) according to
-               http://www.iso.org/iso/en/prods-services/iso3166ma/03updates-on-iso-3166/nlv3e-rou.html
-            */
-
-            /* This list MUST be in sorted order, and MUST contain only two-letter codes! */
-            String[] tempCountries = {
-                "AD",  "AE",  "AF",  "AG",  "AI",  "AL",  "AM",  "AN",
-                "AO",  "AQ",  "AR",  "AS",  "AT",  "AU",  "AW",  "AX",  "AZ",
-                "BA",  "BB",  "BD",  "BE",  "BF",  "BG",  "BH",  "BI",
-                "BJ",  "BL",  "BM",  "BN",  "BO",  "BR",  "BS",  "BT",  "BV",
-                "BW",  "BY",  "BZ",  "CA",  "CC",  "CD",  "CF",  "CG",
-                "CH",  "CI",  "CK",  "CL",  "CM",  "CN",  "CO",  "CR",
-                "CU",  "CV",  "CX",  "CY",  "CZ",  "DE",  "DJ",  "DK",
-                "DM",  "DO",  "DZ",  "EC",  "EE",  "EG",  "EH",  "ER",
-                "ES",  "ET",  "FI",  "FJ",  "FK",  "FM",  "FO",  "FR",
-                "GA",  "GB",  "GD",  "GE",  "GF",  "GG",  "GH",  "GI",  "GL",
-                "GM",  "GN",  "GP",  "GQ",  "GR",  "GS",  "GT",  "GU",
-                "GW",  "GY",  "HK",  "HM",  "HN",  "HR",  "HT",  "HU",
-                "ID",  "IE",  "IL",  "IM",  "IN",  "IO",  "IQ",  "IR",  "IS",
-                "IT",  "JE",  "JM",  "JO",  "JP",  "KE",  "KG",  "KH",  "KI",
-                "KM",  "KN",  "KP",  "KR",  "KW",  "KY",  "KZ",  "LA",
-                "LB",  "LC",  "LI",  "LK",  "LR",  "LS",  "LT",  "LU",
-                "LV",  "LY",  "MA",  "MC",  "MD",  "ME",  "MF",  "MG",  "MH",  "MK",
-                "ML",  "MM",  "MN",  "MO",  "MP",  "MQ",  "MR",  "MS",
-                "MT",  "MU",  "MV",  "MW",  "MX",  "MY",  "MZ",  "NA",
-                "NC",  "NE",  "NF",  "NG",  "NI",  "NL",  "NO",  "NP",
-                "NR",  "NU",  "NZ",  "OM",  "PA",  "PE",  "PF",  "PG",
-                "PH",  "PK",  "PL",  "PM",  "PN",  "PR",  "PS",  "PT",
-                "PW",  "PY",  "QA",  "RE",  "RO",  "RS",  "RU",  "RW",  "SA",
-                "SB",  "SC",  "SD",  "SE",  "SG",  "SH",  "SI",  "SJ",
-                "SK",  "SL",  "SM",  "SN",  "SO",  "SR",  "ST",  "SV",
-                "SY",  "SZ",  "TC",  "TD",  "TF",  "TG",  "TH",  "TJ",
-                "TK",  "TL",  "TM",  "TN",  "TO",  "TR",  "TT",  "TV",
-                "TW",  "TZ",  "UA",  "UG",  "UM",  "US",  "UY",  "UZ",
-                "VA",  "VC",  "VE",  "VG",  "VI",  "VN",  "VU",  "WF",
-                "WS",  "YE",  "YT",  "ZA",  "ZM",  "ZW",
-            };
-
-            /* this table is used for 3 letter codes */
-            String[] tempObsoleteCountries = {
-                "FX",  "CS",  "RO",  "TP",  "YU",  "ZR",  /* obsolete country codes */
-            };
-
-            String[] tempDeprecatedCountries = {
-               "BU", "CS", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR" /* deprecated country list */
-            };
-            String[] tempReplacementCountries = {
-           /*  "BU", "CS", "DY", "FX", "HV", "NH", "RH", "TP", "YU", "ZR" */
-               "MM", "RS", "BJ", "FR", "BF", "VU", "ZW", "TL", "RS", "CD",   /* replacement country codes */
-            };
-
-            /* This list MUST contain a three-letter code for every two-letter code in
-               the above list, and they MUST be listed in the same order! */
-            String[] tempCountries3 = {
-                /*  "AD",  "AE",  "AF",  "AG",  "AI",  "AL",  "AM",  "AN",     */
-                    "AND", "ARE", "AFG", "ATG", "AIA", "ALB", "ARM", "ANT",
-                /*  "AO",  "AQ",  "AR",  "AS",  "AT",  "AU",  "AW",  "AX",  "AZ",     */
-                    "AGO", "ATA", "ARG", "ASM", "AUT", "AUS", "ABW", "ALA", "AZE",
-                /*  "BA",  "BB",  "BD",  "BE",  "BF",  "BG",  "BH",  "BI",     */
-                    "BIH", "BRB", "BGD", "BEL", "BFA", "BGR", "BHR", "BDI",
-                /*  "BJ",  "BL",  "BM",  "BN",  "BO",  "BR",  "BS",  "BT",  "BV",     */
-                    "BEN", "BLM", "BMU", "BRN", "BOL", "BRA", "BHS", "BTN", "BVT",
-                /*  "BW",  "BY",  "BZ",  "CA",  "CC",  "CD",  "CF",  "CG",     */
-                    "BWA", "BLR", "BLZ", "CAN", "CCK", "COD", "CAF", "COG",
-                /*  "CH",  "CI",  "CK",  "CL",  "CM",  "CN",  "CO",  "CR",     */
-                    "CHE", "CIV", "COK", "CHL", "CMR", "CHN", "COL", "CRI",
-                /*  "CU",  "CV",  "CX",  "CY",  "CZ",  "DE",  "DJ",  "DK",     */
-                    "CUB", "CPV", "CXR", "CYP", "CZE", "DEU", "DJI", "DNK",
-                /*  "DM",  "DO",  "DZ",  "EC",  "EE",  "EG",  "EH",  "ER",     */
-                    "DMA", "DOM", "DZA", "ECU", "EST", "EGY", "ESH", "ERI",
-                /*  "ES",  "ET",  "FI",  "FJ",  "FK",  "FM",  "FO",  "FR",     */
-                    "ESP", "ETH", "FIN", "FJI", "FLK", "FSM", "FRO", "FRA",
-                /*  "GA",  "GB",  "GD",  "GE",  "GF",  "GG",  "GH",  "GI",  "GL",     */
-                    "GAB", "GBR", "GRD", "GEO", "GUF", "GGY", "GHA", "GIB", "GRL",
-                /*  "GM",  "GN",  "GP",  "GQ",  "GR",  "GS",  "GT",  "GU",     */
-                    "GMB", "GIN", "GLP", "GNQ", "GRC", "SGS", "GTM", "GUM",
-                /*  "GW",  "GY",  "HK",  "HM",  "HN",  "HR",  "HT",  "HU",     */
-                    "GNB", "GUY", "HKG", "HMD", "HND", "HRV", "HTI", "HUN",
-                /*  "ID",  "IE",  "IL",  "IM",  "IN",  "IO",  "IQ",  "IR",  "IS" */
-                    "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL",
-                /*  "IT",  "JE",  "JM",  "JO",  "JP",  "KE",  "KG",  "KH",  "KI",     */
-                    "ITA", "JEY", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR",
-                /*  "KM",  "KN",  "KP",  "KR",  "KW",  "KY",  "KZ",  "LA",     */
-                    "COM", "KNA", "PRK", "KOR", "KWT", "CYM", "KAZ", "LAO",
-                /*  "LB",  "LC",  "LI",  "LK",  "LR",  "LS",  "LT",  "LU",     */
-                    "LBN", "LCA", "LIE", "LKA", "LBR", "LSO", "LTU", "LUX",
-                /*  "LV",  "LY",  "MA",  "MC",  "MD",  "ME",  "MF",  "MG",  "MH",  "MK",     */
-                    "LVA", "LBY", "MAR", "MCO", "MDA", "MNE", "MAF", "MDG", "MHL", "MKD",
-                /*  "ML",  "MM",  "MN",  "MO",  "MP",  "MQ",  "MR",  "MS",     */
-                    "MLI", "MMR", "MNG", "MAC", "MNP", "MTQ", "MRT", "MSR",
-                /*  "MT",  "MU",  "MV",  "MW",  "MX",  "MY",  "MZ",  "NA",     */
-                    "MLT", "MUS", "MDV", "MWI", "MEX", "MYS", "MOZ", "NAM",
-                /*  "NC",  "NE",  "NF",  "NG",  "NI",  "NL",  "NO",  "NP",     */
-                    "NCL", "NER", "NFK", "NGA", "NIC", "NLD", "NOR", "NPL",
-                /*  "NR",  "NU",  "NZ",  "OM",  "PA",  "PE",  "PF",  "PG",     */
-                    "NRU", "NIU", "NZL", "OMN", "PAN", "PER", "PYF", "PNG",
-                /*  "PH",  "PK",  "PL",  "PM",  "PN",  "PR",  "PS",  "PT",     */
-                    "PHL", "PAK", "POL", "SPM", "PCN", "PRI", "PSE", "PRT",
-                /*  "PW",  "PY",  "QA",  "RE",  "RO",  "RS",  "RU",  "RW",  "SA",     */
-                    "PLW", "PRY", "QAT", "REU", "ROU", "SRB", "RUS", "RWA", "SAU",
-                /*  "SB",  "SC",  "SD",  "SE",  "SG",  "SH",  "SI",  "SJ",     */
-                    "SLB", "SYC", "SDN", "SWE", "SGP", "SHN", "SVN", "SJM",
-                /*  "SK",  "SL",  "SM",  "SN",  "SO",  "SR",  "ST",  "SV",     */
-                    "SVK", "SLE", "SMR", "SEN", "SOM", "SUR", "STP", "SLV",
-                /*  "SY",  "SZ",  "TC",  "TD",  "TF",  "TG",  "TH",  "TJ",     */
-                    "SYR", "SWZ", "TCA", "TCD", "ATF", "TGO", "THA", "TJK",
-                /*  "TK",  "TL",  "TM",  "TN",  "TO",  "TR",  "TT",  "TV",     */
-                    "TKL", "TLS", "TKM", "TUN", "TON", "TUR", "TTO", "TUV",
-                /*  "TW",  "TZ",  "UA",  "UG",  "UM",  "US",  "UY",  "UZ",     */
-                    "TWN", "TZA", "UKR", "UGA", "UMI", "USA", "URY", "UZB",
-                /*  "VA",  "VC",  "VE",  "VG",  "VI",  "VN",  "VU",  "WF",     */
-                    "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF",
-                /*  "WS",  "YE",  "YT",  "ZA",  "ZM",  "ZW"          */
-                    "WSM", "YEM", "MYT", "ZAF", "ZMB", "ZWE",
-            };
-
-            String[] tempObsoleteCountries3 = {
-                /*"FX",  "CS",  "RO",  "TP",  "YU",  "ZR",   */
-                "FXX", "SCG", "ROM", "TMP", "YUG", "ZAR",
-            };
-
-            synchronized (ULocale.class) {
-                if (_countries == null) {
-                    _countries = tempCountries;
-                    _deprecatedCountries = tempDeprecatedCountries;
-                    _replacementCountries = tempReplacementCountries;
-                    _obsoleteCountries = tempObsoleteCountries;
-                    _countries3 = tempCountries3;
-                    _obsoleteCountries3 = tempObsoleteCountries3;
-                }
-            }
-        }
-    }
-
-    public static String getCurrentCountryID(String oldID){
-        initCountryTables();
-        int offset = findIndex(_deprecatedCountries, oldID);
-        if (offset >= 0) {
-            return _replacementCountries[offset];
-        }
-        return oldID;
-    }
-
-    public static String getCurrentLanguageID(String oldID){
-        initLanguageTables();
-        int offset = findIndex(_obsoleteLanguages, oldID);
-        if (offset >= 0) {
-            return _replacementLanguages[offset];
-        }
-        return oldID;
-    }
-
-
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleUtility.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleUtility.java
deleted file mode 100644
index 07291f7..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/LocaleUtility.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- ******************************************************************************
- * Copyright (C) 1996-2011, International Business Machines Corporation and   *
- * others. All Rights Reserved.                                               *
- ******************************************************************************
- *
- ******************************************************************************
- */
- 
-package com.ibm.icu.impl;
-
-import java.util.Locale;
-
-/**
- * A class to hold utility functions missing from java.util.Locale.
- */
-public class LocaleUtility {
-
-    /**
-     * A helper function to convert a string of the form
-     * aa_BB_CC to a locale object.  Why isn't this in Locale?
-     */
-    public static Locale getLocaleFromName(String name) {
-        String language = "";
-        String country = "";
-        String variant = "";
-
-        int i1 = name.indexOf('_');
-        if (i1 < 0) {
-            language = name;
-        } else {
-            language = name.substring(0, i1);
-            ++i1;
-            int i2 = name.indexOf('_', i1);
-            if (i2 < 0) {
-                country = name.substring(i1);
-            } else {
-                country = name.substring(i1, i2);
-                variant = name.substring(i2+1);
-            }
-        }
-
-        return new Locale(language, country, variant);
-    }
-
-    /**
-     * Compare two locale strings of the form aa_BB_CC, and
-     * return true if parent is a 'strict' fallback of child, that is,
-     * if child =~ "^parent(_.+)*" (roughly).
-     */
-    public static boolean isFallbackOf(String parent, String child) {
-        if (!child.startsWith(parent)) {
-            return false;
-        }
-        int i = parent.length();
-        return (i == child.length() ||
-                child.charAt(i) == '_');
-    }
-
-    /**
-     * Compare two locales, and return true if the parent is a
-     * 'strict' fallback of the child (parent string is a fallback
-     * of child string).
-     */
-    public static boolean isFallbackOf(Locale parent, Locale child) {
-        return isFallbackOf(parent.toString(), child.toString());
-    }
-
-
-    /*
-     * Convenience method that calls canonicalLocaleString(String) with
-     * locale.toString();
-     */
-    /*public static String canonicalLocaleString(Locale locale) {
-        return canonicalLocaleString(locale.toString());
-    }*/
-
-    /*
-     * You'd think that Locale canonicalizes, since it munges the
-     * renamed languages, but it doesn't quite.  It forces the region
-     * to be upper case but doesn't do anything about the language or
-     * variant.  Our canonical form is 'lower_UPPER_UPPER'.  
-     */
-    /*public static String canonicalLocaleString(String id) {
-        if (id != null) {
-            int x = id.indexOf("_");
-            if (x == -1) {
-                id = id.toLowerCase(Locale.ENGLISH);
-            } else {
-                StringBuffer buf = new StringBuffer();
-                buf.append(id.substring(0, x).toLowerCase(Locale.ENGLISH));
-                buf.append(id.substring(x).toUpperCase(Locale.ENGLISH));
-
-                int len = buf.length();
-                int n = len;
-                while (--n >= 0 && buf.charAt(n) == '_') {
-                }
-                if (++n != len) {
-                    buf.delete(n, len);
-                }
-                id = buf.toString();
-            }
-        }
-        return id;
-    }*/
-
-    /**
-     * Fallback from the given locale name by removing the rightmost _-delimited
-     * element. If there is none, return the root locale ("", "", ""). If this
-     * is the root locale, return null. NOTE: The string "root" is not
-     * recognized; do not use it.
-     * 
-     * @return a new Locale that is a fallback from the given locale, or null.
-     */
-    public static Locale fallback(Locale loc) {
-
-        // Split the locale into parts and remove the rightmost part
-        String[] parts = new String[]
-            { loc.getLanguage(), loc.getCountry(), loc.getVariant() };
-        int i;
-        for (i=2; i>=0; --i) {
-            if (parts[i].length() != 0) {
-                parts[i] = "";
-                break;
-            }
-        }
-        if (i<0) {
-            return null; // All parts were empty
-        }
-        return new Locale(parts[0], parts[1], parts[2]);
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/SimpleCache.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/SimpleCache.java
deleted file mode 100644
index 2e274e6..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/SimpleCache.java
+++ /dev/null
@@ -1,75 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- ****************************************************************************
- * Copyright (c) 2007-2011 International Business Machines Corporation and  *
- * others.  All rights reserved.                                            *
- ****************************************************************************
- */
-
-package com.ibm.icu.impl;
-
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-import java.lang.ref.WeakReference;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-public class SimpleCache<K, V> implements ICUCache<K, V> {
-    private static final int DEFAULT_CAPACITY = 16;
-
-    private Reference<Map<K, V>> cacheRef = null;
-    private int type = ICUCache.SOFT;
-    private int capacity = DEFAULT_CAPACITY;
-
-    public SimpleCache() {
-    }
-
-    public SimpleCache(int cacheType) {
-        this(cacheType, DEFAULT_CAPACITY);
-    }
-
-    public SimpleCache(int cacheType, int initialCapacity) {
-        if (cacheType == ICUCache.WEAK) {
-            type = cacheType;
-        }
-        if (initialCapacity > 0) {
-            capacity = initialCapacity;
-        }
-    }
-
-    public V get(Object key) {
-        Reference<Map<K, V>> ref = cacheRef;
-        if (ref != null) {
-            Map<K, V> map = ref.get();
-            if (map != null) {
-                return map.get(key);
-            }
-        }
-        return null;
-    }
-
-    public void put(K key, V value) {
-        Reference<Map<K, V>> ref = cacheRef;
-        Map<K, V> map = null;
-        if (ref != null) {
-            map = ref.get();
-        }
-        if (map == null) {
-            map = Collections.synchronizedMap(new HashMap<K, V>(capacity));
-            if (type == ICUCache.WEAK) {
-                ref = new WeakReference<Map<K, V>>(map);
-            } else {
-                ref = new SoftReference<Map<K, V>>(map);
-            }
-            cacheRef = ref;
-        }
-        map.put(key, value);
-    }
-
-    public void clear() {
-        cacheRef = null;
-    }
-
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/AsciiUtil.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/AsciiUtil.java
deleted file mode 100644
index 8bc5dcc..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/AsciiUtil.java
+++ /dev/null
@@ -1,185 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-public final class AsciiUtil {
-    public static boolean caseIgnoreMatch(String s1, String s2) {
-        if (s1 == s2) {
-            return true;
-        }
-        int len = s1.length();
-        if (len != s2.length()) {
-            return false;
-        }
-        int i = 0;
-        while (i < len) {
-            char c1 = s1.charAt(i);
-            char c2 = s2.charAt(i);
-            if (c1 != c2 && toLower(c1) != toLower(c2)) {
-                break;
-            }
-            i++;
-        }
-        return (i == len);
-    }
-
-    public static int caseIgnoreCompare(String s1, String s2) {
-        if (s1 == s2) {
-            return 0;
-        }
-        return AsciiUtil.toLowerString(s1).compareTo(AsciiUtil.toLowerString(s2));
-    }
-
-
-    public static char toUpper(char c) {
-        if (c >= 'a' && c <= 'z') {
-            c -= 0x20;
-        }
-        return c;
-    }
-
-    public static char toLower(char c) {
-        if (c >= 'A' && c <= 'Z') {
-            c += 0x20;
-        }
-        return c;
-    }
-
-    public static String toLowerString(String s) {
-        int idx = 0;
-        for (; idx < s.length(); idx++) {
-            char c = s.charAt(idx);
-            if (c >= 'A' && c <= 'Z') {
-                break;
-            }
-        }
-        if (idx == s.length()) {
-            return s;
-        }
-        StringBuilder buf = new StringBuilder(s.substring(0, idx));
-        for (; idx < s.length(); idx++) {
-            buf.append(toLower(s.charAt(idx)));
-        }
-        return buf.toString();
-    }
-
-    public static String toUpperString(String s) {
-        int idx = 0;
-        for (; idx < s.length(); idx++) {
-            char c = s.charAt(idx);
-            if (c >= 'a' && c <= 'z') {
-                break;
-            }
-        }
-        if (idx == s.length()) {
-            return s;
-        }
-        StringBuilder buf = new StringBuilder(s.substring(0, idx));
-        for (; idx < s.length(); idx++) {
-            buf.append(toUpper(s.charAt(idx)));
-        }
-        return buf.toString();
-    }
-
-    public static String toTitleString(String s) {
-        if (s.length() == 0) {
-            return s;
-        }
-        int idx = 0;
-        char c = s.charAt(idx);
-        if (!(c >= 'a' && c <= 'z')) {
-            for (idx = 1; idx < s.length(); idx++) {
-                if (c >= 'A' && c <= 'Z') {
-                    break;
-                }
-            }
-        }
-        if (idx == s.length()) {
-            return s;
-        }
-        StringBuilder buf = new StringBuilder(s.substring(0, idx));
-        if (idx == 0) {
-            buf.append(toUpper(s.charAt(idx)));
-            idx++;
-        }
-        for (; idx < s.length(); idx++) {
-            buf.append(toLower(s.charAt(idx)));
-        }
-        return buf.toString();
-    }
-
-    public static boolean isAlpha(char c) {
-        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
-    }
-
-    public static boolean isAlphaString(String s) {
-        boolean b = true;
-        for (int i = 0; i < s.length(); i++) {
-            if (!isAlpha(s.charAt(i))) {
-                b = false;
-                break;
-            }
-        }
-        return b;
-    }
-
-    public static boolean isNumeric(char c) {
-        return (c >= '0' && c <= '9');
-    }
-
-    public static boolean isNumericString(String s) {
-        boolean b = true;
-        for (int i = 0; i < s.length(); i++) {
-            if (!isNumeric(s.charAt(i))) {
-                b = false;
-                break;
-            }
-        }
-        return b;
-    }
-
-    public static boolean isAlphaNumeric(char c) {
-        return isAlpha(c) || isNumeric(c);
-    }
-
-    public static boolean isAlphaNumericString(String s) {
-        boolean b = true;
-        for (int i = 0; i < s.length(); i++) {
-            if (!isAlphaNumeric(s.charAt(i))) {
-                b = false;
-                break;
-            }
-        }
-        return b;
-    }
-
-    public static class CaseInsensitiveKey {
-        private String _key;
-        private int _hash;
-
-        public CaseInsensitiveKey(String key) {
-            _key = key;
-            _hash = AsciiUtil.toLowerString(key).hashCode();
-        }
-
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o instanceof CaseInsensitiveKey) {
-                return AsciiUtil.caseIgnoreMatch(_key, ((CaseInsensitiveKey)o)._key);
-            }
-            return false;
-        }
-
-        public int hashCode() {
-            return _hash;
-        }
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/BaseLocale.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/BaseLocale.java
deleted file mode 100644
index a4ef30d..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/BaseLocale.java
+++ /dev/null
@@ -1,259 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-
-package com.ibm.icu.impl.locale;
-
-
-public final class BaseLocale {
-
-    private static final boolean JDKIMPL = false;
-
-    public static final String SEP = "_";
-
-    private static final Cache CACHE = new Cache();
-    public static final BaseLocale ROOT = BaseLocale.getInstance("", "", "", "");
-
-    private String _language = "";
-    private String _script = "";
-    private String _region = "";
-    private String _variant = "";
-
-    private transient volatile int _hash = 0;
-
-    private BaseLocale(String language, String script, String region, String variant) {
-        if (language != null) {
-            _language = AsciiUtil.toLowerString(language).intern();
-        }
-        if (script != null) {
-            _script = AsciiUtil.toTitleString(script).intern();
-        }
-        if (region != null) {
-            _region = AsciiUtil.toUpperString(region).intern();
-        }
-        if (variant != null) {
-            if (JDKIMPL) {
-                // preserve upper/lower cases
-                _variant = variant.intern();
-            } else {
-                _variant = AsciiUtil.toUpperString(variant).intern();
-            }
-        }
-    }
-
-    public static BaseLocale getInstance(String language, String script, String region, String variant) {
-        if (JDKIMPL) {
-            // JDK uses deprecated ISO639.1 language codes for he, yi and id
-            if (AsciiUtil.caseIgnoreMatch(language, "he")) {
-                language = "iw";
-            } else if (AsciiUtil.caseIgnoreMatch(language, "yi")) {
-                language = "ji";
-            } else if (AsciiUtil.caseIgnoreMatch(language, "id")) {
-                language = "in";
-            }
-        }
-        Key key = new Key(language, script, region, variant);
-        BaseLocale baseLocale = CACHE.get(key);
-        return baseLocale;
-    }
-
-    public String getLanguage() {
-        return _language;
-    }
-
-    public String getScript() {
-        return _script;
-    }
-
-    public String getRegion() {
-        return _region;
-    }
-
-    public String getVariant() {
-        return _variant;
-    }
-
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof BaseLocale)) {
-            return false;
-        }
-        BaseLocale other = (BaseLocale)obj;
-        return hashCode() == other.hashCode()
-                && _language.equals(other._language)
-                && _script.equals(other._script)
-                && _region.equals(other._region)
-                && _variant.equals(other._variant);
-    }
-
-    public String toString() {
-        StringBuilder buf = new StringBuilder();
-        if (_language.length() > 0) {
-            buf.append("language=");
-            buf.append(_language);
-        }
-        if (_script.length() > 0) {
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append("script=");
-            buf.append(_script);
-        }
-        if (_region.length() > 0) {
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append("region=");
-            buf.append(_region);
-        }
-        if (_variant.length() > 0) {
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append("variant=");
-            buf.append(_variant);
-        }
-        return buf.toString();
-    }
-
-    public int hashCode() {
-        int h = _hash;
-        if (h == 0) {
-            // Generating a hash value from language, script, region and variant
-            for (int i = 0; i < _language.length(); i++) {
-                h = 31*h + _language.charAt(i);
-            }
-            for (int i = 0; i < _script.length(); i++) {
-                h = 31*h + _script.charAt(i);
-            }
-            for (int i = 0; i < _region.length(); i++) {
-                h = 31*h + _region.charAt(i);
-            }
-            for (int i = 0; i < _variant.length(); i++) {
-                h = 31*h + _variant.charAt(i);
-            }
-            _hash = h;
-        }
-        return h;
-    }
-
-    private static class Key implements Comparable<Key> {
-        private String _lang = "";
-        private String _scrt = "";
-        private String _regn = "";
-        private String _vart = "";
-
-        private volatile int _hash; // Default to 0
-
-        public Key(String language, String script, String region, String variant) {
-            if (language != null) {
-                _lang = language;
-            }
-            if (script != null) {
-                _scrt = script;
-            }
-            if (region != null) {
-                _regn = region;
-            }
-            if (variant != null) {
-                _vart = variant;
-            }
-        }
-
-        public boolean equals(Object obj) {
-            if (JDKIMPL) {
-                return (this == obj) ||
-                        (obj instanceof Key)
-                        && AsciiUtil.caseIgnoreMatch(((Key)obj)._lang, this._lang)
-                        && AsciiUtil.caseIgnoreMatch(((Key)obj)._scrt, this._scrt)
-                        && AsciiUtil.caseIgnoreMatch(((Key)obj)._regn, this._regn)
-                        && ((Key)obj)._vart.equals(_vart); // variant is case sensitive in JDK!
-            }
-            return (this == obj) ||
-                    (obj instanceof Key)
-                    && AsciiUtil.caseIgnoreMatch(((Key)obj)._lang, this._lang)
-                    && AsciiUtil.caseIgnoreMatch(((Key)obj)._scrt, this._scrt)
-                    && AsciiUtil.caseIgnoreMatch(((Key)obj)._regn, this._regn)
-                    && AsciiUtil.caseIgnoreMatch(((Key)obj)._vart, this._vart);
-        }
-
-        public int compareTo(Key other) {
-            int res = AsciiUtil.caseIgnoreCompare(this._lang, other._lang);
-            if (res == 0) {
-                res = AsciiUtil.caseIgnoreCompare(this._scrt, other._scrt);
-                if (res == 0) {
-                    res = AsciiUtil.caseIgnoreCompare(this._regn, other._regn);
-                    if (res == 0) {
-                        if (JDKIMPL) {
-                            res = this._vart.compareTo(other._vart);
-                        } else {
-                            res = AsciiUtil.caseIgnoreCompare(this._vart, other._vart);
-                        }
-                    }
-                }
-            }
-            return res;
-        }
-
-        public int hashCode() {
-            int h = _hash;
-            if (h == 0) {
-                // Generating a hash value from language, script, region and variant
-                for (int i = 0; i < _lang.length(); i++) {
-                    h = 31*h + AsciiUtil.toLower(_lang.charAt(i));
-                }
-                for (int i = 0; i < _scrt.length(); i++) {
-                    h = 31*h + AsciiUtil.toLower(_scrt.charAt(i));
-                }
-                for (int i = 0; i < _regn.length(); i++) {
-                    h = 31*h + AsciiUtil.toLower(_regn.charAt(i));
-                }
-                for (int i = 0; i < _vart.length(); i++) {
-                    if (JDKIMPL) {
-                        h = 31*h + _vart.charAt(i);
-                    } else {
-                        h = 31*h + AsciiUtil.toLower(_vart.charAt(i));
-                    }
-                }
-                _hash = h;
-            }
-            return h;
-        }
-
-        public static Key normalize(Key key) {
-            String lang = AsciiUtil.toLowerString(key._lang).intern();
-            String scrt = AsciiUtil.toTitleString(key._scrt).intern();
-            String regn = AsciiUtil.toUpperString(key._regn).intern();
-            String vart;
-            if (JDKIMPL) {
-                // preserve upper/lower cases
-                vart = key._vart.intern();
-            } else {
-                vart = AsciiUtil.toUpperString(key._vart).intern();
-            }
-            return new Key(lang, scrt, regn, vart);
-        }
-    }
-
-    private static class Cache extends LocaleObjectCache<Key, BaseLocale> {
-
-        public Cache() {
-        }
-
-        protected Key normalizeKey(Key key) {
-            return Key.normalize(key);
-        }
-
-        protected BaseLocale createObject(Key key) {
-            return new BaseLocale(key._lang, key._scrt, key._regn, key._vart);
-        }
-
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/Extension.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/Extension.java
deleted file mode 100644
index a6f5206..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/Extension.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-
-public class Extension {
-    private char _key;
-    protected String _value;
-
-    protected Extension(char key) {
-        _key = key;
-    }
-
-    Extension(char key, String value) {
-        _key = key;
-        _value = value;
-    }
-
-    public char getKey() {
-        return _key;
-    }
-
-    public String getValue() {
-        return _value;
-    }
-
-    public String getID() {
-        return _key + LanguageTag.SEP + _value;
-    }
-
-    public String toString() {
-        return getID();
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/InternalLocaleBuilder.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/InternalLocaleBuilder.java
deleted file mode 100644
index 7535ddc..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/InternalLocaleBuilder.java
+++ /dev/null
@@ -1,686 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public final class InternalLocaleBuilder {
-
-    private static final boolean JDKIMPL = false;
-
-    private String _language = "";
-    private String _script = "";
-    private String _region = "";
-    private String _variant = "";
-
-    private static final CaseInsensitiveChar PRIVUSE_KEY = new CaseInsensitiveChar(LanguageTag.PRIVATEUSE.charAt(0));
-
-    private HashMap<CaseInsensitiveChar, String> _extensions;
-    private HashSet<CaseInsensitiveString> _uattributes;
-    private HashMap<CaseInsensitiveString, String> _ukeywords;
-
-
-    public InternalLocaleBuilder() {
-    }
-
-    public InternalLocaleBuilder setLanguage(String language) throws LocaleSyntaxException {
-        if (language == null || language.length() == 0) {
-            _language = "";
-        } else {
-            if (!LanguageTag.isLanguage(language)) {
-                throw new LocaleSyntaxException("Ill-formed language: " + language, 0);
-            }
-            _language = language;
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder setScript(String script) throws LocaleSyntaxException {
-        if (script == null || script.length() == 0) {
-            _script = "";
-        } else {
-            if (!LanguageTag.isScript(script)) {
-                throw new LocaleSyntaxException("Ill-formed script: " + script, 0);
-            }
-            _script = script;
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder setRegion(String region) throws LocaleSyntaxException {
-        if (region == null || region.length() == 0) {
-            _region = "";
-        } else {
-            if (!LanguageTag.isRegion(region)) {
-                throw new LocaleSyntaxException("Ill-formed region: " + region, 0);
-            }
-            _region = region;
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder setVariant(String variant) throws LocaleSyntaxException {
-        if (variant == null || variant.length() == 0) {
-            _variant = "";
-        } else {
-            // normalize separators to "_"
-            String var = variant.replaceAll(LanguageTag.SEP, BaseLocale.SEP);
-            int errIdx = checkVariants(var, BaseLocale.SEP);
-            if (errIdx != -1) {
-                throw new LocaleSyntaxException("Ill-formed variant: " + variant, errIdx);
-            }
-            _variant = var;
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder addUnicodeLocaleAttribute(String attribute) throws LocaleSyntaxException {
-        if (attribute == null || !UnicodeLocaleExtension.isAttribute(attribute)) {
-            throw new LocaleSyntaxException("Ill-formed Unicode locale attribute: " + attribute);
-        }
-        // Use case insensitive string to prevent duplication
-        if (_uattributes == null) {
-            _uattributes = new HashSet<CaseInsensitiveString>(4);
-        }
-        _uattributes.add(new CaseInsensitiveString(attribute));
-        return this;
-    }
-
-    public InternalLocaleBuilder removeUnicodeLocaleAttribute(String attribute) throws LocaleSyntaxException {
-        if (attribute == null || !UnicodeLocaleExtension.isAttribute(attribute)) {
-            throw new LocaleSyntaxException("Ill-formed Unicode locale attribute: " + attribute);
-        }
-        if (_uattributes != null) {
-            _uattributes.remove(new CaseInsensitiveString(attribute));
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder setUnicodeLocaleKeyword(String key, String type) throws LocaleSyntaxException {
-        if (!UnicodeLocaleExtension.isKey(key)) {
-            throw new LocaleSyntaxException("Ill-formed Unicode locale keyword key: " + key);
-        }
-
-        CaseInsensitiveString cikey = new CaseInsensitiveString(key);
-        if (type == null) {
-            if (_ukeywords != null) {
-                // null type is used for remove the key
-                _ukeywords.remove(cikey);
-            }
-        } else {
-            if (type.length() != 0) {
-                // normalize separator to "-"
-                String tp = type.replaceAll(BaseLocale.SEP, LanguageTag.SEP);
-                // validate
-                StringTokenIterator itr = new StringTokenIterator(tp, LanguageTag.SEP);
-                while (!itr.isDone()) {
-                    String s = itr.current();
-                    if (!UnicodeLocaleExtension.isTypeSubtag(s)) {
-                        throw new LocaleSyntaxException("Ill-formed Unicode locale keyword type: " + type, itr.currentStart());
-                    }
-                    itr.next();
-                }
-            }
-            if (_ukeywords == null) {
-                _ukeywords = new HashMap<CaseInsensitiveString, String>(4);
-            }
-            _ukeywords.put(cikey, type);
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder setExtension(char singleton, String value) throws LocaleSyntaxException {
-        // validate key
-        boolean isBcpPrivateuse = LanguageTag.isPrivateusePrefixChar(singleton);
-        if (!isBcpPrivateuse && !LanguageTag.isExtensionSingletonChar(singleton)) {
-            throw new LocaleSyntaxException("Ill-formed extension key: " + singleton);
-        }
-
-        boolean remove = (value == null || value.length() == 0);
-        CaseInsensitiveChar key = new CaseInsensitiveChar(singleton);
-
-        if (remove) {
-            if (UnicodeLocaleExtension.isSingletonChar(key.value())) {
-                // clear entire Unicode locale extension
-                if (_uattributes != null) {
-                    _uattributes.clear();
-                }
-                if (_ukeywords != null) {
-                    _ukeywords.clear();
-                }
-            } else {
-                if (_extensions != null && _extensions.containsKey(key)) {
-                    _extensions.remove(key);
-                }
-            }
-        } else {
-            // validate value
-            String val = value.replaceAll(BaseLocale.SEP, LanguageTag.SEP);
-            StringTokenIterator itr = new StringTokenIterator(val, LanguageTag.SEP);
-            while (!itr.isDone()) {
-                String s = itr.current();
-                boolean validSubtag;
-                if (isBcpPrivateuse) {
-                    validSubtag = LanguageTag.isPrivateuseSubtag(s);
-                } else {
-                    validSubtag = LanguageTag.isExtensionSubtag(s);
-                }
-                if (!validSubtag) {
-                    throw new LocaleSyntaxException("Ill-formed extension value: " + s, itr.currentStart());
-                }
-                itr.next();
-            }
-
-            if (UnicodeLocaleExtension.isSingletonChar(key.value())) {
-                setUnicodeLocaleExtension(val);
-            } else {
-                if (_extensions == null) {
-                    _extensions = new HashMap<CaseInsensitiveChar, String>(4);
-                }
-                _extensions.put(key, val);
-            }
-        }
-        return this;
-    }
-
-    /*
-     * Set extension/private subtags in a single string representation
-     */
-    public InternalLocaleBuilder setExtensions(String subtags) throws LocaleSyntaxException {
-        if (subtags == null || subtags.length() == 0) {
-            clearExtensions();
-            return this;
-        }
-        subtags = subtags.replaceAll(BaseLocale.SEP, LanguageTag.SEP);
-        StringTokenIterator itr = new StringTokenIterator(subtags, LanguageTag.SEP);
-
-        List<String> extensions = null;
-        String privateuse = null;
-
-        int parsed = 0;
-        int start;
-
-        // Make a list of extension subtags
-        while (!itr.isDone()) {
-            String s = itr.current();
-            if (LanguageTag.isExtensionSingleton(s)) {
-                start = itr.currentStart();
-                String singleton = s;
-                StringBuilder sb = new StringBuilder(singleton);
-
-                itr.next();
-                while (!itr.isDone()) {
-                    s = itr.current();
-                    if (LanguageTag.isExtensionSubtag(s)) {
-                        sb.append(LanguageTag.SEP).append(s);
-                        parsed = itr.currentEnd();
-                    } else {
-                        break;
-                    }
-                    itr.next();
-                }
-
-                if (parsed < start) {
-                    throw new LocaleSyntaxException("Incomplete extension '" + singleton + "'", start);
-                }
-
-                if (extensions == null) {
-                    extensions = new ArrayList<String>(4);
-                }
-                extensions.add(sb.toString());
-            } else {
-                break;
-            }
-        }
-        if (!itr.isDone()) {
-            String s = itr.current();
-            if (LanguageTag.isPrivateusePrefix(s)) {
-                start = itr.currentStart();
-                StringBuilder sb = new StringBuilder(s);
-
-                itr.next();
-                while (!itr.isDone()) {
-                    s = itr.current();
-                    if (!LanguageTag.isPrivateuseSubtag(s)) {
-                        break;
-                    }
-                    sb.append(LanguageTag.SEP).append(s);
-                    parsed = itr.currentEnd();
-
-                    itr.next();
-                }
-                if (parsed <= start) {
-                    throw new LocaleSyntaxException("Incomplete privateuse:" + subtags.substring(start), start);
-                } else {
-                    privateuse = sb.toString();
-                }
-            }
-        }
-
-        if (!itr.isDone()) {
-            throw new LocaleSyntaxException("Ill-formed extension subtags:" + subtags.substring(itr.currentStart()), itr.currentStart());
-        }
-
-        return setExtensions(extensions, privateuse);
-    }
-
-    /*
-     * Set a list of BCP47 extensions and private use subtags
-     * BCP47 extensions are already validated and well-formed, but may contain duplicates
-     */
-    private InternalLocaleBuilder setExtensions(List<String> bcpExtensions, String privateuse) {
-        clearExtensions();
-
-        if (bcpExtensions != null && bcpExtensions.size() > 0) {
-            HashSet<CaseInsensitiveChar> processedExtensions = new HashSet<CaseInsensitiveChar>(bcpExtensions.size());
-            for (String bcpExt : bcpExtensions) {
-                CaseInsensitiveChar key = new CaseInsensitiveChar(bcpExt.charAt(0));
-                // ignore duplicates
-                if (!processedExtensions.contains(key)) {
-                    // each extension string contains singleton, e.g. "a-abc-def"
-                    if (UnicodeLocaleExtension.isSingletonChar(key.value())) {
-                        setUnicodeLocaleExtension(bcpExt.substring(2));
-                    } else {
-                        if (_extensions == null) {
-                            _extensions = new HashMap<CaseInsensitiveChar, String>(4);
-                        }
-                        _extensions.put(key, bcpExt.substring(2));
-                    }
-                }
-            }
-        }
-        if (privateuse != null && privateuse.length() > 0) {
-            // privateuse string contains prefix, e.g. "x-abc-def"
-            if (_extensions == null) {
-                _extensions = new HashMap<CaseInsensitiveChar, String>(1);
-            }
-            _extensions.put(new CaseInsensitiveChar(privateuse.charAt(0)), privateuse.substring(2));
-        }
-
-        return this;
-    }
-
-    /*
-     * Reset Builder's internal state with the given language tag
-     */
-    public InternalLocaleBuilder setLanguageTag(LanguageTag langtag) {
-        clear();
-        if (langtag.getExtlangs().size() > 0) {
-            _language = langtag.getExtlangs().get(0);
-        } else {
-            String language = langtag.getLanguage();
-            if (!language.equals(LanguageTag.UNDETERMINED)) {
-                _language = language;
-            }
-        }
-        _script = langtag.getScript();
-        _region = langtag.getRegion();
-
-        List<String> bcpVariants = langtag.getVariants();
-        if (bcpVariants.size() > 0) {
-            StringBuilder var = new StringBuilder(bcpVariants.get(0));
-            for (int i = 1; i < bcpVariants.size(); i++) {
-                var.append(BaseLocale.SEP).append(bcpVariants.get(i));
-            }
-            _variant = var.toString();
-        }
-
-        setExtensions(langtag.getExtensions(), langtag.getPrivateuse());
-
-        return this;
-    }
-
-    public InternalLocaleBuilder setLocale(BaseLocale base, LocaleExtensions extensions) throws LocaleSyntaxException {
-        String language = base.getLanguage();
-        String script = base.getScript();
-        String region = base.getRegion();
-        String variant = base.getVariant();
-
-        if (JDKIMPL) {
-            // Special backward compatibility support
-
-            // Exception 1 - ja_JP_JP
-            if (language.equals("ja") && region.equals("JP") && variant.equals("JP")) {
-                // When locale ja_JP_JP is created, ca-japanese is always there.
-                // The builder ignores the variant "JP"
-                assert("japanese".equals(extensions.getUnicodeLocaleType("ca")));
-                variant = "";
-            }
-            // Exception 2 - th_TH_TH
-            else if (language.equals("th") && region.equals("TH") && variant.equals("TH")) {
-                // When locale th_TH_TH is created, nu-thai is always there.
-                // The builder ignores the variant "TH"
-                assert("thai".equals(extensions.getUnicodeLocaleType("nu")));
-                variant = "";
-            }
-            // Exception 3 - no_NO_NY
-            else if (language.equals("no") && region.equals("NO") && variant.equals("NY")) {
-                // no_NO_NY is a valid locale and used by Java 6 or older versions.
-                // The build ignores the variant "NY" and change the language to "nn".
-                language = "nn";
-                variant = "";
-            }
-        }
-
-        // Validate base locale fields before updating internal state.
-        // LocaleExtensions always store validated/canonicalized values,
-        // so no checks are necessary.
-        if (language.length() > 0 && !LanguageTag.isLanguage(language)) {
-            throw new LocaleSyntaxException("Ill-formed language: " + language);
-        }
-
-        if (script.length() > 0 && !LanguageTag.isScript(script)) {
-            throw new LocaleSyntaxException("Ill-formed script: " + script);
-        }
-
-        if (region.length() > 0 && !LanguageTag.isRegion(region)) {
-            throw new LocaleSyntaxException("Ill-formed region: " + region);
-        }
-
-        if (variant.length() > 0) {
-            int errIdx = checkVariants(variant, BaseLocale.SEP);
-            if (errIdx != -1) {
-                throw new LocaleSyntaxException("Ill-formed variant: " + variant, errIdx);
-            }
-        }
-
-        // The input locale is validated at this point.
-        // Now, updating builder's internal fields.
-        _language = language;
-        _script = script;
-        _region = region;
-        _variant = variant;
-        clearExtensions();
-
-        Set<Character> extKeys = (extensions == null) ? null : extensions.getKeys();
-        if (extKeys != null) {
-            // map extensions back to builder's internal format
-            for (Character key : extKeys) {
-                Extension e = extensions.getExtension(key);
-                if (e instanceof UnicodeLocaleExtension) {
-                    UnicodeLocaleExtension ue = (UnicodeLocaleExtension)e;
-                    for (String uatr : ue.getUnicodeLocaleAttributes()) {
-                        if (_uattributes == null) {
-                            _uattributes = new HashSet<CaseInsensitiveString>(4);
-                        }
-                        _uattributes.add(new CaseInsensitiveString(uatr));
-                    }
-                    for (String ukey : ue.getUnicodeLocaleKeys()) {
-                        if (_ukeywords == null) {
-                            _ukeywords = new HashMap<CaseInsensitiveString, String>(4);
-                        }
-                        _ukeywords.put(new CaseInsensitiveString(ukey), ue.getUnicodeLocaleType(ukey));
-                    }
-                } else {
-                    if (_extensions == null) {
-                        _extensions = new HashMap<CaseInsensitiveChar, String>(4);
-                    }
-                    _extensions.put(new CaseInsensitiveChar(key.charValue()), e.getValue());
-                }
-            }
-        }
-        return this;
-    }
-
-    public InternalLocaleBuilder clear() {
-        _language = "";
-        _script = "";
-        _region = "";
-        _variant = "";
-        clearExtensions();
-        return this;
-    }
-
-    public InternalLocaleBuilder clearExtensions() {
-        if (_extensions != null) {
-            _extensions.clear();
-        }
-        if (_uattributes != null) {
-            _uattributes.clear();
-        }
-        if (_ukeywords != null) {
-            _ukeywords.clear();
-        }
-        return this;
-    }
-
-    public BaseLocale getBaseLocale() {
-        String language = _language;
-        String script = _script;
-        String region = _region;
-        String variant = _variant;
-
-        // Special private use subtag sequence identified by "lvariant" will be
-        // interpreted as Java variant.
-        if (_extensions != null) {
-            String privuse = _extensions.get(PRIVUSE_KEY);
-            if (privuse != null) {
-                StringTokenIterator itr = new StringTokenIterator(privuse, LanguageTag.SEP);
-                boolean sawPrefix = false;
-                int privVarStart = -1;
-                while (!itr.isDone()) {
-                    if (sawPrefix) {
-                        privVarStart = itr.currentStart();
-                        break;
-                    }
-                    if (AsciiUtil.caseIgnoreMatch(itr.current(), LanguageTag.PRIVUSE_VARIANT_PREFIX)) {
-                        sawPrefix = true;
-                    }
-                    itr.next();
-                }
-                if (privVarStart != -1) {
-                    StringBuilder sb = new StringBuilder(variant);
-                    if (sb.length() != 0) {
-                        sb.append(BaseLocale.SEP);
-                    }
-                    sb.append(privuse.substring(privVarStart).replaceAll(LanguageTag.SEP, BaseLocale.SEP));
-                    variant = sb.toString();
-                }
-            }
-        }
-
-        return BaseLocale.getInstance(language, script, region, variant);
-    }
-
-    public LocaleExtensions getLocaleExtensions() {
-        if ((_extensions == null || _extensions.size() == 0)
-                && (_uattributes == null || _uattributes.size() == 0)
-                && (_ukeywords == null || _ukeywords.size() == 0)) {
-            return LocaleExtensions.EMPTY_EXTENSIONS;
-        }
-
-        return new LocaleExtensions(_extensions, _uattributes, _ukeywords);
-    }
-
-    /*
-     * Remove special private use subtag sequence identified by "lvariant"
-     * and return the rest. Only used by LocaleExtensions
-     */
-    static String removePrivateuseVariant(String privuseVal) {
-        StringTokenIterator itr = new StringTokenIterator(privuseVal, LanguageTag.SEP);
-
-        // Note: privateuse value "abc-lvariant" is unchanged
-        // because no subtags after "lvariant".
-
-        int prefixStart = -1;
-        boolean sawPrivuseVar = false;
-        while (!itr.isDone()) {
-            if (prefixStart != -1) {
-                // Note: privateuse value "abc-lvariant" is unchanged
-                // because no subtags after "lvariant".
-                sawPrivuseVar = true;
-                break;
-            }
-            if (AsciiUtil.caseIgnoreMatch(itr.current(), LanguageTag.PRIVUSE_VARIANT_PREFIX)) {
-                prefixStart = itr.currentStart();
-            }
-            itr.next();
-        }
-        if (!sawPrivuseVar) {
-            return privuseVal;
-        }
-
-        assert(prefixStart == 0 || prefixStart > 1);
-        return (prefixStart == 0) ? null : privuseVal.substring(0, prefixStart -1);
-    }
-
-    /*
-     * Check if the given variant subtags separated by the given
-     * separator(s) are valid
-     */
-    private int checkVariants(String variants, String sep) {
-        StringTokenIterator itr = new StringTokenIterator(variants, sep);
-        while (!itr.isDone()) {
-            String s = itr.current();
-            if (!LanguageTag.isVariant(s)) {
-                return itr.currentStart();
-            }
-            itr.next();
-        }
-        return -1;
-    }
-
-    /*
-     * Private methods parsing Unicode Locale Extension subtags.
-     * Duplicated attributes/keywords will be ignored.
-     * The input must be a valid extension subtags (excluding singleton).
-     */
-    private void setUnicodeLocaleExtension(String subtags) {
-        // wipe out existing attributes/keywords
-        if (_uattributes != null) {
-            _uattributes.clear();
-        }
-        if (_ukeywords != null) {
-            _ukeywords.clear();
-        }
-
-        StringTokenIterator itr = new StringTokenIterator(subtags, LanguageTag.SEP);
-
-        // parse attributes
-        while (!itr.isDone()) {
-            if (!UnicodeLocaleExtension.isAttribute(itr.current())) {
-                break;
-            }
-            if (_uattributes == null) {
-                _uattributes = new HashSet<CaseInsensitiveString>(4);
-            }
-            _uattributes.add(new CaseInsensitiveString(itr.current()));
-            itr.next();
-        }
-
-        // parse keywords
-        CaseInsensitiveString key = null;
-        String type;
-        int typeStart = -1;
-        int typeEnd = -1;
-        while (!itr.isDone()) {
-            if (key != null) {
-                if (UnicodeLocaleExtension.isKey(itr.current())) {
-                    // next keyword - emit previous one
-                    assert(typeStart == -1 || typeEnd != -1);
-                    type = (typeStart == -1) ? "" : subtags.substring(typeStart, typeEnd);
-                    if (_ukeywords == null) {
-                        _ukeywords = new HashMap<CaseInsensitiveString, String>(4);
-                    }
-                    _ukeywords.put(key, type);
-
-                    // reset keyword info
-                    CaseInsensitiveString tmpKey = new CaseInsensitiveString(itr.current());
-                    key = _ukeywords.containsKey(tmpKey) ? null : tmpKey;
-                    typeStart = typeEnd = -1;
-                } else {
-                    if (typeStart == -1) {
-                        typeStart = itr.currentStart();
-                    }
-                    typeEnd = itr.currentEnd();
-                }
-            } else if (UnicodeLocaleExtension.isKey(itr.current())) {
-                // 1. first keyword or
-                // 2. next keyword, but previous one was duplicate
-                key = new CaseInsensitiveString(itr.current());
-                if (_ukeywords != null && _ukeywords.containsKey(key)) {
-                    // duplicate
-                    key = null;
-                }
-            }
-
-            if (!itr.hasNext()) {
-                if (key != null) {
-                    // last keyword
-                    assert(typeStart == -1 || typeEnd != -1);
-                    type = (typeStart == -1) ? "" : subtags.substring(typeStart, typeEnd);
-                    if (_ukeywords == null) {
-                        _ukeywords = new HashMap<CaseInsensitiveString, String>(4);
-                    }
-                    _ukeywords.put(key, type);
-                }
-                break;
-            }
-
-            itr.next();
-        }
-    }
-
-    static class CaseInsensitiveString {
-        private String _s;
-
-        CaseInsensitiveString(String s) {
-            _s = s;
-        }
-
-        public String value() {
-            return _s;
-        }
-
-        public int hashCode() {
-            return AsciiUtil.toLowerString(_s).hashCode();
-        }
-
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (!(obj instanceof CaseInsensitiveString)) {
-                return false;
-            }
-            return AsciiUtil.caseIgnoreMatch(_s, ((CaseInsensitiveString)obj).value());
-        }
-    }
-
-    static class CaseInsensitiveChar {
-        private char _c;
-
-        CaseInsensitiveChar(char c) {
-            _c = c;
-        }
-
-        public char value() {
-            return _c;
-        }
-
-        public int hashCode() {
-            return AsciiUtil.toLower(_c);
-        }
-
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (!(obj instanceof CaseInsensitiveChar)) {
-                return false;
-            }
-            return _c ==  AsciiUtil.toLower(((CaseInsensitiveChar)obj).value());
-        }
-
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LanguageTag.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LanguageTag.java
deleted file mode 100644
index e54a5dd..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LanguageTag.java
+++ /dev/null
@@ -1,681 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2010-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class LanguageTag {
-    private static final boolean JDKIMPL = false;
-
-    //
-    // static fields
-    //
-    public static final String SEP = "-";
-    public static final String PRIVATEUSE = "x";
-    public static String UNDETERMINED = "und";
-    public static final String PRIVUSE_VARIANT_PREFIX = "lvariant";
-
-    //
-    // Language subtag fields
-    //
-    private String _language = "";      // language subtag
-    private String _script = "";        // script subtag
-    private String _region = "";        // region subtag
-    private String _privateuse = "";    // privateuse
-
-    private List<String> _extlangs = Collections.emptyList();   // extlang subtags
-    private List<String> _variants = Collections.emptyList();   // variant subtags
-    private List<String> _extensions = Collections.emptyList(); // extensions
-
-    // The Map contains legacy language tags (marked as “Type: grandfathered” in BCP 47)
-    // and their preferred mappings from BCP 47.
-    private static final Map<AsciiUtil.CaseInsensitiveKey, String[]> LEGACY =
-        new HashMap<AsciiUtil.CaseInsensitiveKey, String[]>();
-
-    static {
-        // legacy        = irregular           ; non-redundant tags registered
-        //               / regular             ; during the RFC 3066 era
-        //
-        // irregular     = "en-GB-oed"         ; irregular tags do not match
-        //               / "i-ami"             ; the 'langtag' production and
-        //               / "i-bnn"             ; would not otherwise be
-        //               / "i-default"         ; considered 'well-formed'
-        //               / "i-enochian"        ; These tags are all valid,
-        //               / "i-hak"             ; but most are deprecated
-        //               / "i-klingon"         ; in favor of more modern
-        //               / "i-lux"             ; subtags or subtag
-        //               / "i-mingo"           ; combination
-        //               / "i-navajo"
-        //               / "i-pwn"
-        //               / "i-tao"
-        //               / "i-tay"
-        //               / "i-tsu"
-        //               / "sgn-BE-FR"
-        //               / "sgn-BE-NL"
-        //               / "sgn-CH-DE"
-        //
-        // regular       = "art-lojban"        ; these tags match the 'langtag'
-        //               / "cel-gaulish"       ; production, but their subtags
-        //               / "no-bok"            ; are not extended language
-        //               / "no-nyn"            ; or variant subtags: their meaning
-        //               / "zh-guoyu"          ; is defined by their registration
-        //               / "zh-hakka"          ; and all of these are deprecated
-        //               / "zh-min"            ; in favor of a more modern
-        //               / "zh-min-nan"        ; subtag or sequence of subtags
-        //               / "zh-xiang"
-
-        final String[][] entries = {
-          //{"tag",         "preferred"},
-            {"art-lojban",  "jbo"},
-            {"cel-gaulish", "xtg-x-cel-gaulish"},   // fallback
-            {"en-GB-oed",   "en-GB-x-oed"},         // fallback
-            {"i-ami",       "ami"},
-            {"i-bnn",       "bnn"},
-            {"i-default",   "en-x-i-default"},      // fallback
-            {"i-enochian",  "und-x-i-enochian"},    // fallback
-            {"i-hak",       "hak"},
-            {"i-klingon",   "tlh"},
-            {"i-lux",       "lb"},
-            {"i-mingo",     "see-x-i-mingo"},       // fallback
-            {"i-navajo",    "nv"},
-            {"i-pwn",       "pwn"},
-            {"i-tao",       "tao"},
-            {"i-tay",       "tay"},
-            {"i-tsu",       "tsu"},
-            {"no-bok",      "nb"},
-            {"no-nyn",      "nn"},
-            {"sgn-BE-FR",   "sfb"},
-            {"sgn-BE-NL",   "vgt"},
-            {"sgn-CH-DE",   "sgg"},
-            {"zh-guoyu",    "cmn"},
-            {"zh-hakka",    "hak"},
-            {"zh-min",      "nan-x-zh-min"},        // fallback
-            {"zh-min-nan",  "nan"},
-            {"zh-xiang",    "hsn"},
-        };
-        for (String[] e : entries) {
-            LEGACY.put(new AsciiUtil.CaseInsensitiveKey(e[0]), e);
-        }
-    }
-
-    private LanguageTag() {
-    }
-
-    /**
-     * See BCP 47 “Tags for Identifying Languages”:
-     * https://www.rfc-editor.org/info/bcp47 -->
-     * https://www.rfc-editor.org/rfc/rfc5646.html#section-2.1
-     */
-    public static LanguageTag parse(String languageTag, ParseStatus sts) {
-        if (sts == null) {
-            sts = new ParseStatus();
-        } else {
-            sts.reset();
-        }
-
-        StringTokenIterator itr;
-
-        String[] gfmap = LEGACY.get(new AsciiUtil.CaseInsensitiveKey(languageTag));
-        if (gfmap != null) {
-            // use preferred mapping
-            itr = new StringTokenIterator(gfmap[1], SEP);
-        } else {
-            itr = new StringTokenIterator(languageTag, SEP);
-        }
-
-        LanguageTag tag = new LanguageTag();
-
-        // langtag must start with either language or privateuse
-        if (tag.parseLanguage(itr, sts)) {
-            tag.parseExtlangs(itr, sts);
-            tag.parseScript(itr, sts);
-            tag.parseRegion(itr, sts);
-            tag.parseVariants(itr, sts);
-            tag.parseExtensions(itr, sts);
-        }
-        tag.parsePrivateuse(itr, sts);
-
-        if (!itr.isDone() && !sts.isError()) {
-            String s = itr.current();
-            sts._errorIndex = itr.currentStart();
-            if (s.length() == 0) {
-                sts._errorMsg = "Empty subtag";
-            } else {
-                sts._errorMsg = "Invalid subtag: " + s; 
-            }
-        }
-
-        return tag;
-    }
-
-    //
-    // Language subtag parsers
-    //
-
-    private boolean parseLanguage(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        String s = itr.current();
-        if (isLanguage(s)) {
-            found = true;
-            _language = s;
-            sts._parseLength = itr.currentEnd();
-            itr.next();
-        }
-
-        return found;
-    }
-
-    private boolean parseExtlangs(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        while (!itr.isDone()) {
-            String s = itr.current();
-            if (!isExtlang(s)) {
-                break;
-            }
-            found = true;
-            if (_extlangs.isEmpty()) {
-                _extlangs = new ArrayList<String>(3);
-            }
-            _extlangs.add(s);
-            sts._parseLength = itr.currentEnd();
-            itr.next();
-
-            if (_extlangs.size() == 3) {
-                // Maximum 3 extlangs
-                break;
-            }
-        }
-
-        return found;
-    }
-
-    private boolean parseScript(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        String s = itr.current();
-        if (isScript(s)) {
-            found = true;
-            _script = s;
-            sts._parseLength = itr.currentEnd();
-            itr.next();
-        }
-
-        return found;
-    }
-
-    private boolean parseRegion(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        String s = itr.current();
-        if (isRegion(s)) {
-            found = true;
-            _region = s;
-            sts._parseLength = itr.currentEnd();
-            itr.next();
-        }
-
-        return found;
-    }
-
-    private boolean parseVariants(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        while (!itr.isDone()) {
-            String s = itr.current();
-            if (!isVariant(s)) {
-                break;
-            }
-            found = true;
-            if (_variants.isEmpty()) {
-                _variants = new ArrayList<String>(3);
-            }
-            _variants.add(s);
-            sts._parseLength = itr.currentEnd();
-            itr.next();
-        }
-
-        return found;
-    }
-
-    private boolean parseExtensions(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        while (!itr.isDone()) {
-            String s = itr.current();
-            if (isExtensionSingleton(s)) {
-                int start = itr.currentStart();
-                String singleton = s;
-                StringBuilder sb = new StringBuilder(singleton);
-
-                itr.next();
-                while (!itr.isDone()) {
-                    s = itr.current();
-                    if (isExtensionSubtag(s)) {
-                        sb.append(SEP).append(s);
-                        sts._parseLength = itr.currentEnd();
-                    } else {
-                        break;
-                    }
-                    itr.next();
-                }
-
-                if (sts._parseLength <= start) {
-                    sts._errorIndex = start;
-                    sts._errorMsg = "Incomplete extension '" + singleton + "'";
-                    break;
-                }
-
-                if (_extensions.size() == 0) {
-                    _extensions = new ArrayList<String>(4);
-                }
-                _extensions.add(sb.toString());
-                found = true;
-            } else {
-                break;
-            }
-        }
-        return found;
-    }
-
-    private boolean parsePrivateuse(StringTokenIterator itr, ParseStatus sts) {
-        if (itr.isDone() || sts.isError()) {
-            return false;
-        }
-
-        boolean found = false;
-
-        String s = itr.current();
-        if (isPrivateusePrefix(s)) {
-            int start = itr.currentStart();
-            StringBuilder sb = new StringBuilder(s);
-
-            itr.next();
-            while (!itr.isDone()) {
-                s = itr.current();
-                if (!isPrivateuseSubtag(s)) {
-                    break;
-                }
-                sb.append(SEP).append(s);
-                sts._parseLength = itr.currentEnd();
-
-                itr.next();
-            }
-
-            if (sts._parseLength <= start) {
-                // need at least 1 private subtag
-                sts._errorIndex = start;
-                sts._errorMsg = "Incomplete privateuse";
-            } else {
-                _privateuse = sb.toString();
-                found = true;
-            }
-        }
-
-        return found;
-    }
-
-    public static LanguageTag parseLocale(BaseLocale baseLocale, LocaleExtensions localeExtensions) {
-        LanguageTag tag = new LanguageTag();
-
-        String language = baseLocale.getLanguage();
-        String script = baseLocale.getScript();
-        String region = baseLocale.getRegion();
-        String variant = baseLocale.getVariant();
-
-        boolean hasSubtag = false;
-
-        String privuseVar = null;   // store ill-formed variant subtags
-
-        if (language.length() > 0 && isLanguage(language)) {
-            // Convert a deprecated language code used by Java to
-            // a new code
-            if (language.equals("iw")) {
-                language = "he";
-            } else if (language.equals("ji")) {
-                language = "yi";
-            } else if (language.equals("in")) {
-                language = "id";
-            }
-            tag._language = language;
-        }
-
-        if (script.length() > 0 && isScript(script)) {
-            tag._script = canonicalizeScript(script);
-            hasSubtag = true;
-        }
-
-        if (region.length() > 0 && isRegion(region)) {
-            tag._region = canonicalizeRegion(region);
-            hasSubtag = true;
-        }
-
-        if (JDKIMPL) {
-            // Special handling for no_NO_NY - use nn_NO for language tag
-            if (tag._language.equals("no") && tag._region.equals("NO") && variant.equals("NY")) {
-                tag._language = "nn";
-                variant = "";
-            }
-        }
-
-        if (variant.length() > 0) {
-            List<String> variants = null;
-            StringTokenIterator varitr = new StringTokenIterator(variant, BaseLocale.SEP);
-            while (!varitr.isDone()) {
-                String var = varitr.current();
-                if (!isVariant(var)) {
-                    break;
-                }
-                if (variants == null) {
-                    variants = new ArrayList<String>();
-                }
-                if (JDKIMPL) {
-                    variants.add(var);  // Do not canonicalize!
-                } else {
-                    variants.add(canonicalizeVariant(var));
-                }
-                varitr.next();
-            }
-            if (variants != null) {
-                tag._variants = variants;
-                hasSubtag = true;
-            }
-            if (!varitr.isDone()) {
-                // ill-formed variant subtags
-                StringBuilder buf = new StringBuilder();
-                while (!varitr.isDone()) {
-                    String prvv = varitr.current();
-                    if (!isPrivateuseSubtag(prvv)) {
-                        // cannot use private use subtag - truncated
-                        break;
-                    }
-                    if (buf.length() > 0) {
-                        buf.append(SEP);
-                    }
-                    if (!JDKIMPL) {
-                        prvv = AsciiUtil.toLowerString(prvv);
-                    }
-                    buf.append(prvv);
-                    varitr.next();
-                }
-                if (buf.length() > 0) {
-                    privuseVar = buf.toString();
-                }
-            }
-        }
-
-        List<String> extensions = null;
-        String privateuse = null;
-
-        Set<Character> locextKeys = localeExtensions.getKeys();
-        for (Character locextKey : locextKeys) {
-            Extension ext = localeExtensions.getExtension(locextKey);
-            if (isPrivateusePrefixChar(locextKey.charValue())) {
-                privateuse = ext.getValue();
-            } else {
-                if (extensions == null) {
-                    extensions = new ArrayList<String>();
-                }
-                extensions.add(locextKey.toString() + SEP + ext.getValue());
-            }
-        }
-
-        if (extensions != null) {
-            tag._extensions = extensions;
-            hasSubtag = true;
-        }
-
-        // append ill-formed variant subtags to private use
-        if (privuseVar != null) {
-            if (privateuse == null) {
-                privateuse = PRIVUSE_VARIANT_PREFIX + SEP + privuseVar;
-            } else {
-                privateuse = privateuse + SEP + PRIVUSE_VARIANT_PREFIX + SEP + privuseVar.replace(BaseLocale.SEP, SEP);
-            }
-        }
-
-        if (privateuse != null) {
-            tag._privateuse = privateuse;
-        }
-
-        if (tag._language.length() == 0 && (hasSubtag || privateuse == null)) {
-            // use lang "und" when 1) no language is available AND
-            // 2) any of other subtags other than private use are available or
-            // no private use tag is available
-            tag._language = UNDETERMINED;
-        }
-
-        return tag;
-    }
-
-    //
-    // Getter methods for language subtag fields
-    //
-
-    public String getLanguage() {
-        return _language;
-    }
-
-    public List<String> getExtlangs() {
-        return Collections.unmodifiableList(_extlangs);
-    }
-
-    public String getScript() {
-        return _script;
-    }
-
-    public String getRegion() {
-        return _region;
-    }
-
-    public List<String> getVariants() {
-        return Collections.unmodifiableList(_variants);
-    }
-
-    public List<String> getExtensions() {
-        return Collections.unmodifiableList(_extensions);
-    }
-
-    public String getPrivateuse() {
-        return _privateuse;
-    }
-
-    //
-    // Language subtag syntax checking methods
-    //
-
-    public static boolean isLanguage(String s) {
-        // language      = 2*3ALPHA            ; shortest ISO 639 code
-        //                 ["-" extlang]       ; sometimes followed by
-        //                                     ;   extended language subtags
-        //               / 4ALPHA              ; or reserved for future use
-        //               / 5*8ALPHA            ; or registered language subtag
-        return (s.length() >= 2) && (s.length() <= 8) && AsciiUtil.isAlphaString(s);
-    }
-
-    public static boolean isExtlang(String s) {
-        // extlang       = 3ALPHA              ; selected ISO 639 codes
-        //                 *2("-" 3ALPHA)      ; permanently reserved
-        return (s.length() == 3) && AsciiUtil.isAlphaString(s);
-    }
-
-    public static boolean isScript(String s) {
-        // script        = 4ALPHA              ; ISO 15924 code
-        return (s.length() == 4) && AsciiUtil.isAlphaString(s);
-    }
-
-    public static boolean isRegion(String s) {
-        // region        = 2ALPHA              ; ISO 3166-1 code
-        //               / 3DIGIT              ; UN M.49 code
-        return ((s.length() == 2) && AsciiUtil.isAlphaString(s))
-                || ((s.length() == 3) && AsciiUtil.isNumericString(s));
-    }
-
-    public static boolean isVariant(String s) {
-        // variant       = 5*8alphanum         ; registered variants
-        //               / (DIGIT 3alphanum)
-        int len = s.length();
-        if (len >= 5 && len <= 8) {
-            return AsciiUtil.isAlphaNumericString(s);
-        }
-        if (len == 4) {
-            return AsciiUtil.isNumeric(s.charAt(0))
-                    && AsciiUtil.isAlphaNumeric(s.charAt(1))
-                    && AsciiUtil.isAlphaNumeric(s.charAt(2))
-                    && AsciiUtil.isAlphaNumeric(s.charAt(3));
-        }
-        return false;
-    }
-
-    public static boolean isExtensionSingleton(String s) {
-        // singleton     = DIGIT               ; 0 - 9
-        //               / %x41-57             ; A - W
-        //               / %x59-5A             ; Y - Z
-        //               / %x61-77             ; a - w
-        //               / %x79-7A             ; y - z
-
-        return (s.length() == 1)
-                && AsciiUtil.isAlphaString(s)
-                && !AsciiUtil.caseIgnoreMatch(PRIVATEUSE, s);
-    }
-
-    public static boolean isExtensionSingletonChar(char c) {
-        return isExtensionSingleton(String.valueOf(c));
-    }
-
-    public static boolean isExtensionSubtag(String s) {
-        // extension     = singleton 1*("-" (2*8alphanum))
-        return (s.length() >= 2) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s);
-    }
-
-    public static boolean isPrivateusePrefix(String s) {
-        // privateuse    = "x" 1*("-" (1*8alphanum))
-        return (s.length() == 1)
-                && AsciiUtil.caseIgnoreMatch(PRIVATEUSE, s);
-    }
-
-    public static boolean isPrivateusePrefixChar(char c) {
-        return (AsciiUtil.caseIgnoreMatch(PRIVATEUSE, String.valueOf(c)));
-    }
-
-    public static boolean isPrivateuseSubtag(String s) {
-        // privateuse    = "x" 1*("-" (1*8alphanum))
-        return (s.length() >= 1) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s);
-    }
-
-    //
-    // Language subtag canonicalization methods
-    //
-
-    public static String canonicalizeLanguage(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizeExtlang(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizeScript(String s) {
-        return AsciiUtil.toTitleString(s);
-    }
-
-    public static String canonicalizeRegion(String s) {
-        return AsciiUtil.toUpperString(s);
-    }
-
-    public static String canonicalizeVariant(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizeExtension(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizeExtensionSingleton(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizeExtensionSubtag(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizePrivateuse(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public static String canonicalizePrivateuseSubtag(String s) {
-        return AsciiUtil.toLowerString(s);
-    }
-
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        if (_language.length() > 0) {
-            sb.append(_language);
-
-            for (String extlang : _extlangs) {
-                sb.append(SEP).append(extlang);
-            }
-
-            if (_script.length() > 0) {
-                sb.append(SEP).append(_script);
-            }
-
-            if (_region.length() > 0) {
-                sb.append(SEP).append(_region);
-            }
-
-            for (String variant : _extlangs) {
-                sb.append(SEP).append(variant);
-            }
-
-            for (String extension : _extensions) {
-                sb.append(SEP).append(extension);
-            }
-        }
-        if (_privateuse.length() > 0) {
-            if (sb.length() > 0) {
-                sb.append(SEP);
-            }
-            sb.append(_privateuse);
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleExtensions.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleExtensions.java
deleted file mode 100644
index 1d0626a..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleExtensions.java
+++ /dev/null
@@ -1,223 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import com.ibm.icu.impl.locale.InternalLocaleBuilder.CaseInsensitiveChar;
-import com.ibm.icu.impl.locale.InternalLocaleBuilder.CaseInsensitiveString;
-
-
-public class LocaleExtensions {
-
-    private SortedMap<Character, Extension> _map;
-    private String _id;
-
-    private static final SortedMap<Character, Extension> EMPTY_MAP =
-        Collections.unmodifiableSortedMap(new TreeMap<Character, Extension>());
-
-    public static final LocaleExtensions EMPTY_EXTENSIONS;
-    public static final LocaleExtensions CALENDAR_JAPANESE;
-    public static final LocaleExtensions NUMBER_THAI;
-
-    static {
-        EMPTY_EXTENSIONS = new LocaleExtensions();
-        EMPTY_EXTENSIONS._id = "";
-        EMPTY_EXTENSIONS._map = EMPTY_MAP;
-
-        CALENDAR_JAPANESE = new LocaleExtensions();
-        CALENDAR_JAPANESE._id = "u-ca-japanese";
-        CALENDAR_JAPANESE._map = new TreeMap<Character, Extension>();
-        CALENDAR_JAPANESE._map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), UnicodeLocaleExtension.CA_JAPANESE);
-
-        NUMBER_THAI = new LocaleExtensions();
-        NUMBER_THAI._id = "u-nu-thai";
-        NUMBER_THAI._map = new TreeMap<Character, Extension>();
-        NUMBER_THAI._map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), UnicodeLocaleExtension.NU_THAI);
-    }
-
-    private LocaleExtensions() {
-    }
-
-    /*
-     * Package local constructor, only used by InternalLocaleBuilder.
-     */
-    LocaleExtensions(Map<CaseInsensitiveChar, String> extensions,
-            Set<CaseInsensitiveString> uattributes, Map<CaseInsensitiveString, String> ukeywords) {
-        boolean hasExtension = (extensions != null && extensions.size() > 0);
-        boolean hasUAttributes = (uattributes != null && uattributes.size() > 0);
-        boolean hasUKeywords = (ukeywords != null && ukeywords.size() > 0);
-
-        if (!hasExtension && !hasUAttributes && !hasUKeywords) {
-            _map = EMPTY_MAP;
-            _id = "";
-            return;
-        }
-
-        // Build extension map
-        _map = new TreeMap<Character, Extension>();
-        if (hasExtension) {
-            for (Entry<CaseInsensitiveChar, String> ext : extensions.entrySet()) {
-                char key = AsciiUtil.toLower(ext.getKey().value());
-                String value = ext.getValue();
-
-                if (LanguageTag.isPrivateusePrefixChar(key)) {
-                    // we need to exclude special variant in privuateuse, e.g. "x-abc-lvariant-DEF"
-                    value = InternalLocaleBuilder.removePrivateuseVariant(value);
-                    if (value == null) {
-                        continue;
-                    }
-                }
-
-                Extension e = new Extension(key, AsciiUtil.toLowerString(value));
-                _map.put(Character.valueOf(key), e);
-            }
-        }
-
-        if (hasUAttributes || hasUKeywords) {
-            TreeSet<String> uaset = null;
-            TreeMap<String, String> ukmap = null;
-
-            if (hasUAttributes) {
-                uaset = new TreeSet<String>();
-                for (CaseInsensitiveString cis : uattributes) {
-                    uaset.add(AsciiUtil.toLowerString(cis.value()));
-                }
-            }
-
-            if (hasUKeywords) {
-                ukmap = new TreeMap<String, String>();
-                for (Entry<CaseInsensitiveString, String> kwd : ukeywords.entrySet()) {
-                    String key = AsciiUtil.toLowerString(kwd.getKey().value());
-                    String type = AsciiUtil.toLowerString(kwd.getValue());
-                    ukmap.put(key, type);
-                }
-            }
-
-            UnicodeLocaleExtension ule = new UnicodeLocaleExtension(uaset, ukmap);
-            _map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), ule);
-        }
-
-        if (_map.size() == 0) {
-            // this could happen when only privuateuse with special variant
-            _map = EMPTY_MAP;
-            _id = "";
-        } else {
-            _id = toID(_map);
-        }
-    }
-
-    public Set<Character> getKeys() {
-        return Collections.unmodifiableSet(_map.keySet());
-    }
-
-    public Extension getExtension(Character key) {
-        return _map.get(Character.valueOf(AsciiUtil.toLower(key.charValue())));
-    }
-
-    public String getExtensionValue(Character key) {
-        Extension ext = _map.get(Character.valueOf(AsciiUtil.toLower(key.charValue())));
-        if (ext == null) {
-            return null;
-        }
-        return ext.getValue();
-    }
-
-    public Set<String> getUnicodeLocaleAttributes() {
-        Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON));
-        if (ext == null) {
-            return Collections.emptySet();
-        }
-        assert (ext instanceof UnicodeLocaleExtension);
-        return ((UnicodeLocaleExtension)ext).getUnicodeLocaleAttributes();
-    }
-
-    public Set<String> getUnicodeLocaleKeys() {
-        Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON));
-        if (ext == null) {
-            return Collections.emptySet();
-        }
-        assert (ext instanceof UnicodeLocaleExtension);
-        return ((UnicodeLocaleExtension)ext).getUnicodeLocaleKeys();
-    }
-
-    public String getUnicodeLocaleType(String unicodeLocaleKey) {
-        Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON));
-        if (ext == null) {
-            return null;
-        }
-        assert (ext instanceof UnicodeLocaleExtension);
-        return ((UnicodeLocaleExtension)ext).getUnicodeLocaleType(AsciiUtil.toLowerString(unicodeLocaleKey));
-    }
-
-    public boolean isEmpty() {
-        return _map.isEmpty();
-    }
-
-    public static boolean isValidKey(char c) {
-        return LanguageTag.isExtensionSingletonChar(c) || LanguageTag.isPrivateusePrefixChar(c);
-    }
-
-    public static boolean isValidUnicodeLocaleKey(String ukey) {
-        return UnicodeLocaleExtension.isKey(ukey);
-    }
-
-    private static String toID(SortedMap<Character, Extension> map) {
-        StringBuilder buf = new StringBuilder();
-        Extension privuse = null;
-        for (Entry<Character, Extension> entry : map.entrySet()) {
-            char singleton = entry.getKey().charValue();
-            Extension extension = entry.getValue();
-            if (LanguageTag.isPrivateusePrefixChar(singleton)) {
-                privuse = extension;
-            } else {
-                if (buf.length() > 0) {
-                    buf.append(LanguageTag.SEP);
-                }
-                buf.append(extension);
-            }
-        }
-        if (privuse != null) {
-            if (buf.length() > 0) {
-                buf.append(LanguageTag.SEP);
-            }
-            buf.append(privuse);
-        }
-        return buf.toString();
-    }
-
-
-    public String toString() {
-        return _id;
-    }
-
-    public String getID() {
-        return _id;
-    }
-
-    public int hashCode() {
-        return _id.hashCode();
-    }
-
-    public boolean equals(Object other) {
-        if (this == other) {
-            return true;
-        }
-        if (!(other instanceof LocaleExtensions)) {
-            return false;
-        }
-        return this._id.equals(((LocaleExtensions)other)._id);
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleObjectCache.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleObjectCache.java
deleted file mode 100644
index 92d7318..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleObjectCache.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.SoftReference;
-import java.util.concurrent.ConcurrentHashMap;
-
-public abstract class LocaleObjectCache<K, V> {
-    private ConcurrentHashMap<K, CacheEntry<K, V>> _map;
-    private ReferenceQueue<V> _queue = new ReferenceQueue<V>();
-
-    public LocaleObjectCache() {
-        this(16, 0.75f, 16);
-    }
-
-    public LocaleObjectCache(int initialCapacity, float loadFactor, int concurrencyLevel) {
-        _map = new ConcurrentHashMap<K, CacheEntry<K, V>>(initialCapacity, loadFactor, concurrencyLevel);
-    }
-
-    public V get(K key) {
-        V value = null;
-
-        cleanStaleEntries();
-        CacheEntry<K, V> entry = _map.get(key);
-        if (entry != null) {
-            value = entry.get();
-        }
-        if (value == null) {
-            key = normalizeKey(key);
-            V newVal = createObject(key);
-            if (key == null || newVal == null) {
-                // subclass must return non-null key/value object
-                return null;
-            }
-
-            CacheEntry<K, V> newEntry = new CacheEntry<K, V>(key, newVal, _queue);
-
-            while (value == null) {
-                cleanStaleEntries();
-                entry = _map.putIfAbsent(key, newEntry);
-                if (entry == null) {
-                    value = newVal;
-                    break;
-                } else {
-                    value = entry.get();
-                }
-            }
-        }
-        return value;
-    }
-
-    @SuppressWarnings("unchecked")
-    private void cleanStaleEntries() {
-        CacheEntry<K, V> entry;
-        while ((entry = (CacheEntry<K, V>)_queue.poll()) != null) {
-            _map.remove(entry.getKey());
-        }
-    }
-
-    protected abstract V createObject(K key);
-
-    protected K normalizeKey(K key) {
-        return key;
-    }
-
-    private static class CacheEntry<K, V> extends SoftReference<V> {
-        private K _key;
-
-        CacheEntry(K key, V value, ReferenceQueue<V> queue) {
-            super(value, queue);
-            _key = key;
-        }
-
-        K getKey() {
-            return _key;
-        }
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleSyntaxException.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleSyntaxException.java
deleted file mode 100644
index f0f99d2..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/LocaleSyntaxException.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-public class LocaleSyntaxException extends Exception {
-
-    private static final long serialVersionUID = 1L;
-
-    private int _index = -1;
-
-    public LocaleSyntaxException(String msg) {
-        this(msg, 0);
-    }
-
-    public LocaleSyntaxException(String msg, int errorIndex) {
-        super(msg);
-        _index = errorIndex;
-    }
-
-    public int getErrorIndex() {
-        return _index;
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/ParseStatus.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/ParseStatus.java
deleted file mode 100644
index 2934f7b..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/ParseStatus.java
+++ /dev/null
@@ -1,37 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2010-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-public class ParseStatus {
-    int _parseLength = 0;
-    int _errorIndex = -1;
-    String _errorMsg = null;
-
-    public void reset() {
-        _parseLength = 0;
-        _errorIndex = -1;
-        _errorMsg = null;
-    }
-
-    public boolean isError() {
-        return (_errorIndex >= 0);
-    }
-
-    public int getErrorIndex() {
-        return _errorIndex;
-    }
-
-    public int getParseLength() {
-        return _parseLength;
-    }
-
-    public String getErrorMessage() {
-        return _errorMsg;
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/StringTokenIterator.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/StringTokenIterator.java
deleted file mode 100644
index 38bd83b..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/StringTokenIterator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-public class StringTokenIterator {
-    private String _text;
-    private String _dlms;
-
-    private String _token;
-    private int _start;
-    private int _end;
-    private boolean _done;
-
-    public StringTokenIterator(String text, String dlms) {
-        _text = text;
-        _dlms = dlms;
-        setStart(0);
-    }
-
-    public String first() {
-        setStart(0);
-        return _token;
-    }
-
-    public String current() {
-        return _token;
-    }
-
-    public int currentStart() {
-        return _start;
-    }
-
-    public int currentEnd() {
-        return _end;
-    }
-
-    public boolean isDone() {
-        return _done;
-    }
-
-    public String next() {
-        if (hasNext()) {
-            _start = _end + 1;
-            _end = nextDelimiter(_start);
-            _token = _text.substring(_start, _end);
-        } else {
-            _start = _end;
-            _token = null;
-            _done = true;
-        }
-        return _token;
-    }
-
-    public boolean hasNext() {
-        return (_end < _text.length());
-    }
-
-    public StringTokenIterator setStart(int offset) {
-        if (offset > _text.length()) {
-            throw new IndexOutOfBoundsException();
-        }
-        _start = offset;
-        _end = nextDelimiter(_start);
-        _token = _text.substring(_start, _end);
-        _done = false;
-        return this;
-    }
-
-    public StringTokenIterator setText(String text) {
-        _text = text;
-        setStart(0);
-        return this;
-    }
-
-    private int nextDelimiter(int start) {
-        int idx = start;
-        outer: while (idx < _text.length()) {
-            char c = _text.charAt(idx);
-            for (int i = 0; i < _dlms.length(); i++) {
-                if (c == _dlms.charAt(i)) {
-                    break outer;
-                }
-            }
-            idx++;
-        }
-        return idx;
-    }
-}
-
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/UnicodeLocaleExtension.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/UnicodeLocaleExtension.java
deleted file mode 100644
index a69ecef..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/impl/locale/UnicodeLocaleExtension.java
+++ /dev/null
@@ -1,104 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines Corporation and    *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package com.ibm.icu.impl.locale;
-
-import java.util.Collections;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-public class UnicodeLocaleExtension extends Extension {
-    public static final char SINGLETON = 'u';
-
-    private static final SortedSet<String> EMPTY_SORTED_SET = new TreeSet<String>();
-    private static final SortedMap<String, String> EMPTY_SORTED_MAP = new TreeMap<String, String>();
-
-    private SortedSet<String> _attributes = EMPTY_SORTED_SET;
-    private SortedMap<String, String> _keywords = EMPTY_SORTED_MAP;
-
-    public static final UnicodeLocaleExtension CA_JAPANESE;
-    public static final UnicodeLocaleExtension NU_THAI;
-
-    static {
-        CA_JAPANESE = new UnicodeLocaleExtension();
-        CA_JAPANESE._keywords = new TreeMap<String, String>();
-        CA_JAPANESE._keywords.put("ca", "japanese");
-        CA_JAPANESE._value = "ca-japanese";
-
-        NU_THAI = new UnicodeLocaleExtension();
-        NU_THAI._keywords = new TreeMap<String, String>();
-        NU_THAI._keywords.put("nu", "thai");
-        NU_THAI._value = "nu-thai";
-    }
-
-    private UnicodeLocaleExtension() {
-        super(SINGLETON);
-    }
-
-    UnicodeLocaleExtension(SortedSet<String> attributes, SortedMap<String, String> keywords) {
-        this();
-        if (attributes != null && attributes.size() > 0) {
-            _attributes = attributes;
-        }
-        if (keywords != null && keywords.size() > 0) {
-            _keywords = keywords;
-        }
-
-        if (_attributes.size() > 0 || _keywords.size() > 0) {
-            StringBuilder sb = new StringBuilder();
-            for (String attribute : _attributes) {
-                sb.append(LanguageTag.SEP).append(attribute);
-            }
-            for (Entry<String, String> keyword : _keywords.entrySet()) {
-                String key = keyword.getKey();
-                String value = keyword.getValue();
-
-                sb.append(LanguageTag.SEP).append(key);
-                if (value.length() > 0) {
-                    sb.append(LanguageTag.SEP).append(value);
-                }
-            }
-            _value = sb.substring(1);   // skip leading '-'
-        }
-    }
-
-    public Set<String> getUnicodeLocaleAttributes() {
-        return Collections.unmodifiableSet(_attributes);
-    }
-
-    public Set<String> getUnicodeLocaleKeys() {
-        return Collections.unmodifiableSet(_keywords.keySet());
-    }
-
-    public String getUnicodeLocaleType(String unicodeLocaleKey) {
-        return _keywords.get(unicodeLocaleKey);
-    }
-
-    public static boolean isSingletonChar(char c) {
-        return (SINGLETON == AsciiUtil.toLower(c));
-    }
-
-    public static boolean isAttribute(String s) {
-        // 3*8alphanum
-        return (s.length() >= 3) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s);
-    }
-
-    public static boolean isKey(String s) {
-        // 2alphanum
-        return (s.length() == 2) && AsciiUtil.isAlphaNumericString(s);
-    }
-
-    public static boolean isTypeSubtag(String s) {
-        // 3*8alphanum
-        return (s.length() >= 3) && (s.length() <= 8) && AsciiUtil.isAlphaNumericString(s);
-    }
-}
diff --git a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/math/BigDecimal.java b/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/math/BigDecimal.java
deleted file mode 100644
index 5edef9b..0000000
--- a/icu4j/eclipse-build/plugins.template/com.ibm.icu.base/src/com/ibm/icu/math/BigDecimal.java
+++ /dev/null
@@ -1,3882 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/* Generated from 'BigDecimal.nrx' 8 Sep 2000 11:10:50 [v2.00] */
-/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
-package com.ibm.icu.math;
-
-import java.math.BigInteger;
-
-/* ------------------------------------------------------------------ */
-/* BigDecimal -- Decimal arithmetic for Java                          */
-/* ------------------------------------------------------------------ */
-/* Copyright IBM Corporation, 1996-2011.  All Rights Reserved.       */
-/*                                                                    */
-/* The BigDecimal class provides immutable arbitrary-precision        */
-/* floating point (including integer) decimal numbers.                */
-/*                                                                    */
-/* As the numbers are decimal, there is an exact correspondence       */
-/* between an instance of a BigDecimal object and its String          */
-/* representation; the BigDecimal class provides direct conversions   */
-/* to and from String and character array objects, and well as        */
-/* conversions to and from the Java primitive types (which may not    */
-/* be exact).                                                         */
-/* ------------------------------------------------------------------ */
-/* Notes:                                                             */
-/*                                                                    */
-/* 1. A BigDecimal object is never changed in value once constructed; */
-/*    this avoids the need for locking.  Note in particular that the  */
-/*    mantissa array may be shared between many BigDecimal objects,   */
-/*    so that once exposed it must not be altered.                    */
-/*                                                                    */
-/* 2. This class looks at MathContext class fields directly (for      */
-/*    performance).  It must not and does not change them.            */
-/*                                                                    */
-/* 3. Exponent checking is delayed until finish(), as we know         */
-/*    intermediate calculations cannot cause 31-bit overflow.         */
-/*    [This assertion depends on MAX_DIGITS in MathContext.]          */
-/*                                                                    */
-/* 4. Comments for the public API now follow the javadoc conventions. */
-/*    The NetRexx -comments option is used to pass these comments     */
-/*    through to the generated Java code (with -format, if desired).  */
-/*                                                                    */
-/* 5. System.arraycopy is faster than explicit loop as follows        */
-/*      Mean length 4:  equal                                         */
-/*      Mean length 8:  x2                                            */
-/*      Mean length 16: x3                                            */
-/*      Mean length 24: x4                                            */
-/*    From prior experience, we expect mean length a little below 8,  */
-/*    but arraycopy is still the one to use, in general, until later  */
-/*    measurements suggest otherwise.                                 */
-/*                                                                    */
-/* 6. 'DMSRCN' referred to below is the original (1981) IBM S/370     */
-/*    assembler code implementation of the algorithms below; it is    */
-/*    now called IXXRCN and is available with the OS/390 and VM/ESA   */
-/*    operating systems.                                              */
-/* ------------------------------------------------------------------ */
-/* Change History:                                                    */
-/* 1997.09.02 Initial version (derived from netrexx.lang classes)     */
-/* 1997.09.12 Add lostDigits checking                                 */
-/* 1997.10.06 Change mantissa to a byte array                         */
-/* 1997.11.22 Rework power [did not prepare arguments, etc.]          */
-/* 1997.12.13 multiply did not prepare arguments                      */
-/* 1997.12.14 add did not prepare and align arguments correctly       */
-/* 1998.05.02 0.07 packaging changes suggested by Sun and Oracle      */
-/* 1998.05.21 adjust remainder operator finalization                  */
-/* 1998.06.04 rework to pass MathContext to finish() and round()      */
-/* 1998.06.06 change format to use round(); support rounding modes    */
-/* 1998.06.25 rename to BigDecimal and begin merge                    */
-/*            zero can now have trailing zeros (i.e., exp\=0)         */
-/* 1998.06.28 new methods: movePointXxxx, scale, toBigInteger         */
-/*                         unscaledValue, valueof                     */
-/* 1998.07.01 improve byteaddsub to allow array reuse, etc.           */
-/* 1998.07.01 make null testing explicit to avoid JIT bug [Win32]     */
-/* 1998.07.07 scaled division  [divide(BigDecimal, int, int)]         */
-/* 1998.07.08 setScale, faster equals                                 */
-/* 1998.07.11 allow 1E6 (no sign) <sigh>; new double/float conversion */
-/* 1998.10.12 change package to com.ibm.icu.math                          */
-/* 1998.12.14 power operator no longer rounds RHS [to match ANSI]     */
-/*            add toBigDecimal() and BigDecimal(java.math.BigDecimal) */
-/* 1998.12.29 improve byteaddsub by using table lookup                */
-/* 1999.02.04 lostdigits=0 behaviour rounds instead of digits+1 guard */
-/* 1999.02.05 cleaner code for BigDecimal(char[])                     */
-/* 1999.02.06 add javadoc comments                                    */
-/* 1999.02.11 format() changed from 7 to 2 method form                */
-/* 1999.03.05 null pointer checking is no longer explicit             */
-/* 1999.03.05 simplify; changes from discussion with J. Bloch:        */
-/*            null no longer permitted for MathContext; drop boolean, */
-/*            byte, char, float, short constructor, deprecate double  */
-/*            constructor, no blanks in string constructor, add       */
-/*            offset and length version of char[] constructor;        */
-/*            add valueOf(double); drop booleanValue, charValue;      */
-/*            add ...Exact versions of remaining converters           */
-/* 1999.03.13 add toBigIntegerExact                                   */
-/* 1999.03.13 1.00 release to IBM Centre for Java Technology          */
-/* 1999.05.27 1.01 correct 0-0.2 bug under scaled arithmetic          */
-/* 1999.06.29 1.02 constructors should not allow exponent > 9 digits  */
-/* 1999.07.03 1.03 lost digits should not be checked if digits=0      */
-/* 1999.07.06      lost digits Exception message changed              */
-/* 1999.07.10 1.04 more work on 0-0.2 (scaled arithmetic)             */
-/* 1999.07.17      improve messages from pow method                   */
-/* 1999.08.08      performance tweaks                                 */
-/* 1999.08.15      fastpath in multiply                               */
-/* 1999.11.05 1.05 fix problem in intValueExact [e.g., 5555555555]    */
-/* 1999.12.22 1.06 remove multiply fastpath, and improve performance  */
-/* 2000.01.01      copyright update [Y2K has arrived]                 */
-/* 2000.06.18 1.08 no longer deprecate BigDecimal(double)             */
-/* ------------------------------------------------------------------ */
-
-/**
- * The <code>BigDecimal</code> class implements immutable arbitrary-precision decimal numbers. The methods of the
- * <code>BigDecimal</code> class provide operations for fixed and floating point arithmetic, comparison, format
- * conversions, and hashing.
- * <p>
- * As the numbers are decimal, there is an exact correspondence between an instance of a <code>BigDecimal</code> object
- * and its <code>String</code> representation; the <code>BigDecimal</code> class provides direct conversions to and from
- * <code>String</code> and character array (<code>char[]</code>) objects, as well as conversions to and from the Java
- * primitive types (which may not be exact) and <code>BigInteger</code>.
- * <p>
- * In the descriptions of constructors and methods in this documentation, the value of a <code>BigDecimal</code> number
- * object is shown as the result of invoking the <code>toString()</code> method on the object. The internal
- * representation of a decimal number is neither defined nor exposed, and is not permitted to affect the result of any
- * operation.
- * <p>
- * The floating point arithmetic provided by this class is defined by the ANSI X3.274-1996 standard, and is also
- * documented at <code>http://www2.hursley.ibm.com/decimal</code> <br>
- * <i>[This URL will change.]</i>
- * 
- * <h3>Operator methods</h3>
- * <p>
- * Operations on <code>BigDecimal</code> numbers are controlled by a {@link MathContext} object, which provides the
- * context (precision and other information) for the operation. Methods that can take a <code>MathContext</code>
- * parameter implement the standard arithmetic operators for <code>BigDecimal</code> objects and are known as
- * <i>operator methods</i>. The default settings provided by the constant {@link MathContext#DEFAULT} (<code>digits=9,
- * form=SCIENTIFIC, lostDigits=false, roundingMode=ROUND_HALF_UP</code>) perform general-purpose floating point
- * arithmetic to nine digits of precision. The <code>MathContext</code> parameter must not be <code>null</code>.
- * <p>
- * Each operator method also has a version provided which does not take a <code>MathContext</code> parameter. For this
- * version of each method, the context settings used are <code>digits=0,
- * form=PLAIN, lostDigits=false, roundingMode=ROUND_HALF_UP</code>; these settings perform fixed point arithmetic with
- * unlimited precision, as defined for the original BigDecimal class in Java 1.1 and Java 1.2.
- * <p>
- * For monadic operators, only the optional <code>MathContext</code> parameter is present; the operation acts upon the
- * current object.
- * <p>
- * For dyadic operators, a <code>BigDecimal</code> parameter is always present; it must not be <code>null</code>. The
- * operation acts with the current object being the left-hand operand and the <code>BigDecimal</code> parameter being
- * the right-hand operand.
- * <p>
- * For example, adding two <code>BigDecimal</code> objects referred to by the names <code>award</code> and
- * <code>extra</code> could be written as any of:
- * <p>
- * <code>
- *     award.add(extra)
- * <br>award.add(extra, MathContext.DEFAULT)
- * <br>award.add(extra, acontext)
- * </code>
- * <p>
- * (where <code>acontext</code> is a <code>MathContext</code> object), which would return a <code>BigDecimal</code>
- * object whose value is the result of adding <code>award</code> and <code>extra</code> under the appropriate context
- * settings.
- * <p>
- * When a <code>BigDecimal</code> operator method is used, a set of rules define what the result will be (and, by
- * implication, how the result would be represented as a character string). These rules are defined in the BigDecimal
- * arithmetic documentation (see the URL above), but in summary:
- * <ul>
- * <li>Results are normally calculated with up to some maximum number of significant digits. For example, if the
- * <code>MathContext</code> parameter for an operation were <code>MathContext.DEFAULT</code> then the result would be
- * rounded to 9 digits; the division of 2 by 3 would then result in 0.666666667. <br>
- * You can change the default of 9 significant digits by providing the method with a suitable <code>MathContext</code>
- * object. This lets you calculate using as many digits as you need -- thousands, if necessary. Fixed point (scaled)
- * arithmetic is indicated by using a <code>digits</code> setting of 0 (or omitting the <code>MathContext</code>
- * parameter). <br>
- * Similarly, you can change the algorithm used for rounding from the default "classic" algorithm.
- * <li>
- * In standard arithmetic (that is, when the <code>form</code> setting is not <code>PLAIN</code>), a zero result is
- * always expressed as the single digit <code>'0'</code> (that is, with no sign, decimal point, or exponent part).
- * <li>
- * Except for the division and power operators in standard arithmetic, trailing zeros are preserved (this is in contrast
- * to binary floating point operations and most electronic calculators, which lose the information about trailing zeros
- * in the fractional part of results). <br>
- * So, for example:
- * <p>
- * <code>
- *     new BigDecimal("2.40").add(     new BigDecimal("2"))      =&gt; "4.40"
- * <br>new BigDecimal("2.40").subtract(new BigDecimal("2"))      =&gt; "0.40"
- * <br>new BigDecimal("2.40").multiply(new BigDecimal("2"))      =&gt; "4.80"
- * <br>new BigDecimal("2.40").divide(  new BigDecimal("2"), def) =&gt; "1.2"
- * </code>
- * <p>
- * where the value on the right of the <code>=&gt;</code> would be the result of the operation, expressed as a
- * <code>String</code>, and <code>def</code> (in this and following examples) refers to <code>MathContext.DEFAULT</code>
- * ). This preservation of trailing zeros is desirable for most calculations (including financial calculations). If
- * necessary, trailing zeros may be easily removed using division by 1.
- * <li>
- * In standard arithmetic, exponential form is used for a result depending on its value and the current setting of
- * <code>digits</code> (the default is 9 digits). If the number of places needed before the decimal point exceeds the
- * <code>digits</code> setting, or the absolute value of the number is less than <code>0.000001</code>, then the number
- * will be expressed in exponential notation; thus
- * <p>
- * <code>
- *   new BigDecimal("1e+6").multiply(new BigDecimal("1e+6"), def)
- * </code>
- * <p>
- * results in <code>1E+12</code> instead of <code>1000000000000</code>, and
- * <p>
- * <code>
- *   new BigDecimal("1").divide(new BigDecimal("3E+10"), def)
- * </code>
- * <p>
- * results in <code>3.33333333E-11</code> instead of <code>0.0000000000333333333</code>.
- * <p>
- * The form of the exponential notation (scientific or engineering) is determined by the <code>form</code> setting.
- * <eul>
- * <p>
- * The names of methods in this class follow the conventions established by <code>java.lang.Number</code>,
- * <code>java.math.BigInteger</code>, and <code>java.math.BigDecimal</code> in Java 1.1 and Java 1.2.
- * 
- * @see MathContext
- * @author Mike Cowlishaw
- * @stable ICU 2.0
- */
-
-public class BigDecimal extends java.lang.Number implements java.io.Serializable, java.lang.Comparable<BigDecimal> {
-    // private static final java.lang.String $0="BigDecimal.nrx";
-
-    /* ----- Constants ----- */
-    /* properties constant public */// useful to others
-    /**
-     * The <code>BigDecimal</code> constant "0".
-     * 
-     * @see #ONE
-     * @see #TEN
-     * @stable ICU 2.0
-     */
-    public static final com.ibm.icu.math.BigDecimal ZERO = new com.ibm.icu.math.BigDecimal((long) 0); // use long as we
-                                                                                                      // want the int
-                                                                                                      // constructor
-    // .. to be able to use this, for speed
-
-    /**
-     * The <code>BigDecimal</code> constant "1".
-     * 
-     * @see #TEN
-     * @see #ZERO
-     * @stable ICU 2.0
-     */
-    public static final com.ibm.icu.math.BigDecimal ONE = new com.ibm.icu.math.BigDecimal((long) 1); // use long as we
-                                                                                                     // want the int
-                                                                                                     // constructor
-    // .. to be able to use this, for speed
-
-    /**
-     * The <code>BigDecimal</code> constant "10".
-     * 
-     * @see #ONE
-     * @see #ZERO
-     * @stable ICU 2.0
-     */
-    public static final com.ibm.icu.math.BigDecimal TEN = new com.ibm.icu.math.BigDecimal(10);
-
-    // the rounding modes (copied here for upwards compatibility)
-    /**
-     * Rounding mode to round to a more positive number.
-     * 
-     * @see MathContext#ROUND_CEILING
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_CEILING = com.ibm.icu.math.MathContext.ROUND_CEILING;
-
-    /**
-     * Rounding mode to round towards zero.
-     * 
-     * @see MathContext#ROUND_DOWN
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_DOWN = com.ibm.icu.math.MathContext.ROUND_DOWN;
-
-    /**
-     * Rounding mode to round to a more negative number.
-     * 
-     * @see MathContext#ROUND_FLOOR
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_FLOOR = com.ibm.icu.math.MathContext.ROUND_FLOOR;
-
-    /**
-     * Rounding mode to round to nearest neighbor, where an equidistant value is rounded down.
-     * 
-     * @see MathContext#ROUND_HALF_DOWN
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_HALF_DOWN = com.ibm.icu.math.MathContext.ROUND_HALF_DOWN;
-
-    /**
-     * Rounding mode to round to nearest neighbor, where an equidistant value is rounded to the nearest even neighbor.
-     * 
-     * @see MathContext#ROUND_HALF_EVEN
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_HALF_EVEN = com.ibm.icu.math.MathContext.ROUND_HALF_EVEN;
-
-    /**
-     * Rounding mode to round to nearest neighbor, where an equidistant value is rounded up.
-     * 
-     * @see MathContext#ROUND_HALF_UP
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_HALF_UP = com.ibm.icu.math.MathContext.ROUND_HALF_UP;
-
-    /**
-     * Rounding mode to assert that no rounding is necessary.
-     * 
-     * @see MathContext#ROUND_UNNECESSARY
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_UNNECESSARY = com.ibm.icu.math.MathContext.ROUND_UNNECESSARY;
-
-    /**
-     * Rounding mode to round away from zero.
-     * 
-     * @see MathContext#ROUND_UP
-     * @stable ICU 2.0
-     */
-    public static final int ROUND_UP = com.ibm.icu.math.MathContext.ROUND_UP;
-
-    /* properties constant private */// locals
-    private static final byte ispos = 1; // ind: indicates positive (must be 1)
-    private static final byte iszero = 0; // ind: indicates zero (must be 0)
-    private static final byte isneg = -1; // ind: indicates negative (must be -1)
-    // [later could add NaN, +/- infinity, here]
-
-    private static final int MinExp = -999999999; // minimum exponent allowed
-    private static final int MaxExp = 999999999; // maximum exponent allowed
-    private static final int MinArg = -999999999; // minimum argument integer
-    private static final int MaxArg = 999999999; // maximum argument integer
-
-    private static final com.ibm.icu.math.MathContext plainMC = new com.ibm.icu.math.MathContext(0,
-            com.ibm.icu.math.MathContext.PLAIN); // context for plain unlimited math
-
-    /* properties constant private unused */// present but not referenced
-    // Serialization version
-    private static final long serialVersionUID = 8245355804974198832L;
-
-    // private static final java.lang.String
-    // copyright=" Copyright (c) IBM Corporation 1996, 2000.  All rights reserved. ";
-
-    /* properties static private */
-    // Precalculated constant arrays (used by byteaddsub)
-    private static byte bytecar[] = new byte[(90 + 99) + 1]; // carry/borrow array
-    private static byte bytedig[] = diginit(); // next digit array
-
-    /* ----- Instance properties [all private and immutable] ----- */
-    /* properties private */
-
-    /**
-     * The indicator. This may take the values:
-     * <ul>
-     * <li>ispos -- the number is positive <li>iszero -- the number is zero <li>isneg -- the number is negative
-     * </ul>
-     * 
-     * @serial
-     */
-    private byte ind; // assumed undefined
-    // Note: some code below assumes IND = Sign [-1, 0, 1], at present.
-    // We only need two bits for this, but use a byte [also permits
-    // smooth future extension].
-
-    /**
-     * The formatting style. This may take the values:
-     * <ul>
-     * <li>MathContext.PLAIN -- no exponent needed <li>MathContext.SCIENTIFIC -- scientific notation required <li>
-     * MathContext.ENGINEERING -- engineering notation required
-     * </ul>
-     * <p>
-     * This property is an optimization; it allows us to defer number layout until it is actually needed as a string,
-     * hence avoiding unnecessary formatting.
-     * 
-     * @serial
-     */
-    private byte form = (byte) com.ibm.icu.math.MathContext.PLAIN; // assumed PLAIN
-    // We only need two bits for this, at present, but use a byte
-    // [again, to allow for smooth future extension]
-
-    /**
-     * The value of the mantissa.
-     * <p>
-     * Once constructed, this may become shared between several BigDecimal objects, so must not be altered.
-     * <p>
-     * For efficiency (speed), this is a byte array, with each byte taking a value of 0 -> 9.
-     * <p>
-     * If the first byte is 0 then the value of the number is zero (and mant.length=1, except when constructed from a
-     * plain number, for example, 0.000).
-     * 
-     * @serial
-     */
-    private byte mant[]; // assumed null
-
-    /**
-     * The exponent.
-     * <p>
-     * For fixed point arithmetic, scale is <code>-exp</code>, and can apply to zero.
-     * 
-     * Note that this property can have a value less than MinExp when the mantissa has more than one digit.
-     * 
-     * @serial
-     */
-    private int exp;
-
-    // assumed 0
-
-    /* ---------------------------------------------------------------- */
-    /* Constructors */
-    /* ---------------------------------------------------------------- */
-
-    /**
-     * Constructs a <code>BigDecimal</code> object from a <code>java.math.BigDecimal</code>.
-     * <p>
-     * Constructs a <code>BigDecimal</code> as though the parameter had been represented as a <code>String</code> (using
-     * its <code>toString</code> method) and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
-     * The parameter must not be <code>null</code>.
-     * <p>
-     * <i>(Note: this constructor is provided only in the <code>com.ibm.icu.math</code> version of the BigDecimal class.
-     * It would not be present in a <code>java.math</code> version.)</i>
-     * 
-     * @param bd The <code>BigDecimal</code> to be translated.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(java.math.BigDecimal bd) {
-        this(bd.toString());
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object from a <code>BigInteger</code>, with scale 0.
-     * <p>
-     * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the <code>BigInteger</code>,
-     * with a scale of zero. The value of the <code>BigDecimal</code> is identical to the value of the <code>BigInteger
-     * </code>. The parameter must not be <code>null</code>.
-     * <p>
-     * The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus sign (hyphen) if the
-     * <code>BigInteger</code> is negative. A leading zero will be present only if the <code>BigInteger</code> is zero.
-     * 
-     * @param bi The <code>BigInteger</code> to be converted.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(java.math.BigInteger bi) {
-        this(bi.toString(10));
-        return;
-    }
-
-    // exp remains 0
-
-    /**
-     * Constructs a <code>BigDecimal</code> object from a <code>BigInteger</code> and a scale.
-     * <p>
-     * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the <code>BigInteger</code>,
-     * scaled by the second parameter, which may not be negative. The value of the <code>BigDecimal</code> is the <code>
-     * BigInteger</code> divided by ten to the power of the scale. The <code>BigInteger</code> parameter must not be
-     * <code>null</code>.
-     * <p>
-     * The <code>BigDecimal</code> will contain only decimal digits, (with an embedded decimal point followed by <code>
-     * scale</code> decimal digits if the scale is positive), prefixed with a leading minus sign (hyphen) if the <code>
-     * BigInteger</code> is negative. A leading zero will be present only if the <code>BigInteger</code> is zero.
-     * 
-     * @param bi The <code>BigInteger</code> to be converted.
-     * @param scale The <code>int</code> specifying the scale.
-     * @throws NumberFormatException If the scale is negative.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(java.math.BigInteger bi, int scale) {
-        this(bi.toString(10));
-        if (scale < 0)
-            throw new java.lang.NumberFormatException("Negative scale:" + " " + scale);
-        exp = -scale; // exponent is -scale
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object from an array of characters.
-     * <p>
-     * Constructs a <code>BigDecimal</code> as though a <code>String</code> had been constructed from the character
-     * array and the {@link #BigDecimal(java.lang.String)} constructor had then been used. The parameter must not be
-     * <code>null</code>.
-     * <p>
-     * Using this constructor is faster than using the <code>BigDecimal(String)</code> constructor if the string is
-     * already available in character array form.
-     * 
-     * @param inchars The <code>char[]</code> array containing the number to be converted.
-     * @throws NumberFormatException If the parameter is not a valid number.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(char inchars[]) {
-        this(inchars, 0, inchars.length);
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object from an array of characters.
-     * <p>
-     * Constructs a <code>BigDecimal</code> as though a <code>String</code> had been constructed from the character
-     * array (or a subarray of that array) and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
-     * The first parameter must not be <code>null</code>, and the subarray must be wholly contained within it.
-     * <p>
-     * Using this constructor is faster than using the <code>BigDecimal(String)</code> constructor if the string is
-     * already available within a character array.
-     * 
-     * @param inchars The <code>char[]</code> array containing the number to be converted.
-     * @param offset The <code>int</code> offset into the array of the start of the number to be converted.
-     * @param length The <code>int</code> length of the number.
-     * @throws NumberFormatException If the parameter is not a valid number for any reason.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(char inchars[], int offset, int length) {
-        super();
-        boolean exotic;
-        boolean hadexp;
-        int d;
-        int dotoff;
-        int last;
-        int i = 0;
-        char si = 0;
-        boolean eneg = false;
-        int k = 0;
-        int elen = 0;
-        int j = 0;
-        char sj = 0;
-        int dvalue = 0;
-        int mag = 0;
-        // This is the primary constructor; all incoming strings end up
-        // here; it uses explicit (inline) parsing for speed and to avoid
-        // generating intermediate (temporary) objects of any kind.
-        // 1998.06.25: exponent form built only if E/e in string
-        // 1998.06.25: trailing zeros not removed for zero
-        // 1999.03.06: no embedded blanks; allow offset and length
-        if (length <= 0)
-            bad(inchars); // bad conversion (empty string)
-        // [bad offset will raise array bounds exception]
-
-        /* Handle and step past sign */
-        ind = ispos; // assume positive
-        if (inchars[offset] == ('-')) {
-            length--;
-            if (length == 0)
-                bad(inchars); // nothing after sign
-            ind = isneg;
-            offset++;
-        } else if (inchars[offset] == ('+')) {
-            length--;
-            if (length == 0)
-                bad(inchars); // nothing after sign
-            offset++;
-        }
-
-        /* We're at the start of the number */
-        exotic = false; // have extra digits
-        hadexp = false; // had explicit exponent
-        d = 0; // count of digits found
-        dotoff = -1; // offset where dot was found
-        last = -1; // last character of mantissa
-        {
-            int $1 = length;
-            i = offset;
-            i: for (; $1 > 0; $1--, i++) {
-                si = inchars[i];
-                if (si >= '0') // test for Arabic digit
-                    if (si <= '9') {
-                        last = i;
-                        d++; // still in mantissa
-                        continue i;
-                    }
-                if (si == '.') { // record and ignore
-                    if (dotoff >= 0)
-                        bad(inchars); // two dots
-                    dotoff = i - offset; // offset into mantissa
-                    continue i;
-                }
-                if (si != 'e')
-                    if (si != 'E') { // expect an extra digit
-                        if ((!(Character.isDigit(si))))
-                            bad(inchars); // not a number
-                        // defer the base 10 check until later to avoid extra method call
-                        exotic = true; // will need conversion later
-                        last = i;
-                        d++; // still in mantissa
-                        continue i;
-                    }
-                /* Found 'e' or 'E' -- now process explicit exponent */
-                // 1998.07.11: sign no longer required
-                if ((i - offset) > (length - 2))
-                    bad(inchars); // no room for even one digit
-                eneg = false;
-                if ((inchars[i + 1]) == ('-')) {
-                    eneg = true;
-                    k = i + 2;
-                } else if ((inchars[i + 1]) == ('+'))
-                    k = i + 2;
-                else
-                    k = i + 1;
-                // k is offset of first expected digit
-                elen = length - ((k - offset)); // possible number of digits
-                if ((elen == 0) | (elen > 9))
-                    bad(inchars); // 0 or more than 9 digits
-                {
-                    int $2 = elen;
-                    j = k;
-                    for (; $2 > 0; $2--, j++) {
-                        sj = inchars[j];
-                        if (sj < '0')
-                            bad(inchars); // always bad
-                        if (sj > '9') { // maybe an exotic digit
-                            if ((!(Character.isDigit(sj))))
-                                bad(inchars); // not a number
-                            dvalue = Character.digit(sj, 10); // check base
-                            if (dvalue < 0)
-                                bad(inchars); // not base 10
-                        } else
-                            dvalue = ((int) (sj)) - ((int) ('0'));
-                        exp = (exp * 10) + dvalue;
-                    }
-                }/* j */
-                if (eneg)
-                    exp = -exp; // was negative
-                hadexp = true; // remember we had one
-                break i; // we are done
-            }
-        }/* i */
-
-        /* Here when all inspected */
-        if (d == 0)
-            bad(inchars); // no mantissa digits
-        if (dotoff >= 0)
-            exp = (exp + dotoff) - d; // adjust exponent if had dot
-
-        /* strip leading zeros/dot (leave final if all 0's) */
-        {
-            int $3 = last - 1;
-            i = offset;
-            i: for (; i <= $3; i++) {
-                si = inchars[i];
-                if (si == '0') {
-                    offset++;
-                    dotoff--;
-                    d--;
-                } else if (si == '.') {
-                    offset++; // step past dot
-                    dotoff--;
-                } else if (si <= '9')
-                    break i;/* non-0 */
-                else {/* exotic */
-                    if ((Character.digit(si, 10)) != 0)
-                        break i; // non-0 or bad
-                    // is 0 .. strip like '0'
-                    offset++;
-                    dotoff--;
-                    d--;
-                }
-            }
-        }/* i */
-
-        /* Create the mantissa array */
-        mant = new byte[d]; // we know the length
-        j = offset; // input offset
-        if (exotic) {
-            do { // slow: check for exotica
-                {
-                    int $4 = d;
-                    i = 0;
-                    for (; $4 > 0; $4--, i++) {
-                        if (i == dotoff)
-                            j++; // at dot
-                        sj = inchars[j];
-                        if (sj <= '9')
-                            mant[i] = (byte) (((int) (sj)) - ((int) ('0')));/* easy */
-                        else {
-                            dvalue = Character.digit(sj, 10);
-                            if (dvalue < 0)
-                                bad(inchars); // not a number after all
-                            mant[i] = (byte) dvalue;
-                        }
-                        j++;
-                    }
-                }/* i */
-            } while (false);
-        }/* exotica */
-        else {
-            do {
-                {
-                    int $5 = d;
-                    i = 0;
-                    for (; $5 > 0; $5--, i++) {
-                        if (i == dotoff)
-                            j++;
-                        mant[i] = (byte) (((int) (inchars[j])) - ((int) ('0')));
-                        j++;
-                    }
-                }/* i */
-            } while (false);
-        }/* simple */
-
-        /* Looks good. Set the sign indicator and form, as needed. */
-        // Trailing zeros are preserved
-        // The rule here for form is:
-        // If no E-notation, then request plain notation
-        // Otherwise act as though add(0,DEFAULT) and request scientific notation
-        // [form is already PLAIN]
-        if (mant[0] == 0) {
-            ind = iszero; // force to show zero
-            // negative exponent is significant (e.g., -3 for 0.000) if plain
-            if (exp > 0)
-                exp = 0; // positive exponent can be ignored
-            if (hadexp) { // zero becomes single digit from add
-                mant = ZERO.mant;
-                exp = 0;
-            }
-        } else { // non-zero
-            // [ind was set earlier]
-            // now determine form
-            if (hadexp) {
-                form = (byte) com.ibm.icu.math.MathContext.SCIENTIFIC;
-                // 1999.06.29 check for overflow
-                mag = (exp + mant.length) - 1; // true exponent in scientific notation
-                if ((mag < MinExp) | (mag > MaxExp))
-                    bad(inchars);
-            }
-        }
-        // say 'BD(c[]): mant[0] mantlen exp ind form:' mant[0] mant.length exp ind form
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object directly from a <code>double</code>.
-     * <p>
-     * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 64-bit signed binary
-     * floating point parameter.
-     * <p>
-     * Note that this constructor it an exact conversion; it does not give the same result as converting <code>num
-     * </code> to a <code>String</code> using the <code>Double.toString()</code> method and then using the
-     * {@link #BigDecimal(java.lang.String)} constructor. To get that result, use the static {@link #valueOf(double)}
-     * method to construct a <code>BigDecimal</code> from a <code>double</code>.
-     * 
-     * @param num The <code>double</code> to be converted.
-     * @throws NumberFormatException If the parameter is infinite or not a number.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(double num) {
-        // 1999.03.06: use exactly the old algorithm
-        // 2000.01.01: note that this constructor does give an exact result,
-        // so perhaps it should not be deprecated
-        // 2000.06.18: no longer deprecated
-        this((new java.math.BigDecimal(num)).toString());
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object directly from a <code>int</code>.
-     * <p>
-     * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 32-bit signed binary
-     * integer parameter. The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus
-     * sign (hyphen) if the parameter is negative. A leading zero will be present only if the parameter is zero.
-     * 
-     * @param num The <code>int</code> to be converted.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(int num) {
-        super();
-        int mun;
-        int i = 0;
-        // We fastpath commoners
-        if (num <= 9)
-            if (num >= (-9)) {
-                do {
-                    // very common single digit case
-                    {/* select */
-                        if (num == 0) {
-                            mant = ZERO.mant;
-                            ind = iszero;
-                        } else if (num == 1) {
-                            mant = ONE.mant;
-                            ind = ispos;
-                        } else if (num == (-1)) {
-                            mant = ONE.mant;
-                            ind = isneg;
-                        } else {
-                            {
-                                mant = new byte[1];
-                                if (num > 0) {
-                                    mant[0] = (byte) num;
-                                    ind = ispos;
-                                } else { // num<-1
-                                    mant[0] = (byte) -num;
-                                    ind = isneg;
-                                }
-                            }
-                        }
-                    }
-                    return;
-                } while (false);
-            }/* singledigit */
-
-        /* We work on negative numbers so we handle the most negative number */
-        if (num > 0) {
-            ind = ispos;
-            num = -num;
-        } else
-            ind = isneg;/* negative */// [0 case already handled]
-        // [it is quicker, here, to pre-calculate the length with
-        // one loop, then allocate exactly the right length of byte array,
-        // then re-fill it with another loop]
-        mun = num; // working copy
-        {
-            i = 9;
-            i: for (;; i--) {
-                mun = mun / 10;
-                if (mun == 0)
-                    break i;
-            }
-        }/* i */
-        // i is the position of the leftmost digit placed
-        mant = new byte[10 - i];
-        {
-            i = (10 - i) - 1;
-            i: for (;; i--) {
-                mant[i] = (byte) -(((byte) (num % 10)));
-                num = num / 10;
-                if (num == 0)
-                    break i;
-            }
-        }/* i */
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object directly from a <code>long</code>.
-     * <p>
-     * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 64-bit signed binary
-     * integer parameter. The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus
-     * sign (hyphen) if the parameter is negative. A leading zero will be present only if the parameter is zero.
-     * 
-     * @param num The <code>long</code> to be converted.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(long num) {
-        super();
-        long mun;
-        int i = 0;
-        // Not really worth fastpathing commoners in this constructor [also,
-        // we use this to construct the static constants].
-        // This is much faster than: this(String.valueOf(num).toCharArray())
-        /* We work on negative num so we handle the most negative number */
-        if (num > 0) {
-            ind = ispos;
-            num = -num;
-        } else if (num == 0)
-            ind = iszero;
-        else
-            ind = isneg;/* negative */
-        mun = num;
-        {
-            i = 18;
-            i: for (;; i--) {
-                mun = mun / 10;
-                if (mun == 0)
-                    break i;
-            }
-        }/* i */
-        // i is the position of the leftmost digit placed
-        mant = new byte[19 - i];
-        {
-            i = (19 - i) - 1;
-            i: for (;; i--) {
-                mant[i] = (byte) -(((byte) (num % 10)));
-                num = num / 10;
-                if (num == 0)
-                    break i;
-            }
-        }/* i */
-        return;
-    }
-
-    /**
-     * Constructs a <code>BigDecimal</code> object from a <code>String</code>.
-     * <p>
-     * Constructs a <code>BigDecimal</code> from the parameter, which must not be <code>null</code> and must represent a
-     * valid <i>number</i>, as described formally in the documentation referred to {@link BigDecimal above}.
-     * <p>
-     * In summary, numbers in <code>String</code> form must have at least one digit, may have a leading sign, may have a
-     * decimal point, and exponential notation may be used. They follow conventional syntax, and may not contain blanks.
-     * <p>
-     * Some valid strings from which a <code>BigDecimal</code> might be constructed are:
-     * 
-     * <pre>
-     * 
-     * "0" -- Zero "12" -- A whole number "-76" -- A signed whole number "12.70" -- Some decimal places "+0.003" -- Plus
-     * sign is allowed "17." -- The same as 17 ".5" -- The same as 0.5 "4E+9" -- Exponential notation "0.73e-7" --
-     * Exponential notation
-     * 
-     * </pre>
-     * <p>
-     * (Exponential notation means that the number includes an optional sign and a power of ten following an
-     * '</code>E</code>' that indicates how the decimal point will be shifted. Thus the <code>"4E+9"</code> above is
-     * just a short way of writing <code>4000000000</code>, and the <code>"0.73e-7"</code> is short for <code>
-     * 0.000000073</code>.)
-     * <p>
-     * The <code>BigDecimal</code> constructed from the String is in a standard form, with no blanks, as though the
-     * {@link #add(BigDecimal)} method had been used to add zero to the number with unlimited precision. If the string
-     * uses exponential notation (that is, includes an <code>e</code> or an <code>E</code>), then the <code>BigDecimal
-     * </code> number will be expressed in scientific notation (where the power of ten is adjusted so there is a single
-     * non-zero digit to the left of the decimal point); in this case if the number is zero then it will be expressed as
-     * the single digit 0, and if non-zero it will have an exponent unless that exponent would be 0. The exponent must
-     * fit in nine digits both before and after it is expressed in scientific notation.
-     * <p>
-     * Any digits in the parameter must be decimal; that is, <code>Character.digit(c, 10)</code> (where </code>c</code>
-     * is the character in question) would not return -1.
-     * 
-     * @param string The <code>String</code> to be converted.
-     * @throws NumberFormatException If the parameter is not a valid number.
-     * @stable ICU 2.0
-     */
-
-    public BigDecimal(java.lang.String string) {
-        this(string.toCharArray(), 0, string.length());
-        return;
-    }
-
-    /* <sgml> Make a default BigDecimal object for local use. </sgml> */
-
-    private BigDecimal() {
-        super();
-        return;
-    }
-
-    /* ---------------------------------------------------------------- */
-    /* Operator methods [methods which take a context parameter] */
-    /* ---------------------------------------------------------------- */
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
-     * <p>
-     * The same as {@link #abs(MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will be <code>this.scale()</code>
-     * 
-     * @return A <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal abs() {
-        return this.abs(plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
-     * <p>
-     * If the current object is zero or positive, then the same result as invoking the {@link #plus(MathContext)} method
-     * with the same parameter is returned. Otherwise, the same result as invoking the {@link #negate(MathContext)}
-     * method with the same parameter is returned.
-     * 
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal abs(com.ibm.icu.math.MathContext set) {
-        if (this.ind == isneg)
-            return this.negate(set);
-        return this.plus(set);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this+rhs</code>, using fixed point arithmetic.
-     * <p>
-     * The same as {@link #add(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will be the maximum of the scales of the two operands.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the addition.
-     * @return A <code>BigDecimal</code> whose value is <code>this+rhs</code>, using fixed point arithmetic.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal add(com.ibm.icu.math.BigDecimal rhs) {
-        return this.add(rhs, plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>this+rhs</code>.
-     * <p>
-     * Implements the addition (<b><code>+</code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the addition.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>this+rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal add(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        com.ibm.icu.math.BigDecimal lhs;
-        int reqdig;
-        com.ibm.icu.math.BigDecimal res;
-        byte usel[];
-        int usellen;
-        byte user[];
-        int userlen;
-        int newlen = 0;
-        int tlen = 0;
-        int mult = 0;
-        byte t[] = null;
-        int ia = 0;
-        int ib = 0;
-        int ea = 0;
-        int eb = 0;
-        byte ca = 0;
-        byte cb = 0;
-        /* determine requested digits and form */
-        if (set.lostDigits)
-            checkdigits(rhs, set.digits);
-        lhs = this; // name for clarity and proxy
-
-        /* Quick exit for add floating 0 */
-        // plus() will optimize to return same object if possible
-        if (lhs.ind == 0)
-            if (set.form != com.ibm.icu.math.MathContext.PLAIN)
-                return rhs.plus(set);
-        if (rhs.ind == 0)
-            if (set.form != com.ibm.icu.math.MathContext.PLAIN)
-                return lhs.plus(set);
-
-        /* Prepare numbers (round, unless unlimited precision) */
-        reqdig = set.digits; // local copy (heavily used)
-        if (reqdig > 0) {
-            if (lhs.mant.length > reqdig)
-                lhs = clone(lhs).round(set);
-            if (rhs.mant.length > reqdig)
-                rhs = clone(rhs).round(set);
-            // [we could reuse the new LHS for result in this case]
-        }
-
-        res = new com.ibm.icu.math.BigDecimal(); // build result here
-
-        /*
-         * Now see how much we have to pad or truncate lhs or rhs in order to align the numbers. If one number is much
-         * larger than the other, then the smaller cannot affect the answer [but we may still need to pad with up to
-         * DIGITS trailing zeros].
-         */
-        // Note sign may be 0 if digits (reqdig) is 0
-        // usel and user will be the byte arrays passed to the adder; we'll
-        // use them on all paths except quick exits
-        usel = lhs.mant;
-        usellen = lhs.mant.length;
-        user = rhs.mant;
-        userlen = rhs.mant.length;
-        {
-            do {/* select */
-                if (lhs.exp == rhs.exp) {/* no padding needed */
-                    // This is the most common, and fastest, path
-                    res.exp = lhs.exp;
-                } else if (lhs.exp > rhs.exp) { // need to pad lhs and/or truncate rhs
-                    newlen = (usellen + lhs.exp) - rhs.exp;
-                    /*
-                     * If, after pad, lhs would be longer than rhs by digits+1 or more (and digits>0) then rhs cannot
-                     * affect answer, so we only need to pad up to a length of DIGITS+1.
-                     */
-                    if (newlen >= ((userlen + reqdig) + 1))
-                        if (reqdig > 0) {
-                            // LHS is sufficient
-                            res.mant = usel;
-                            res.exp = lhs.exp;
-                            res.ind = lhs.ind;
-                            if (usellen < reqdig) { // need 0 padding
-                                res.mant = extend(lhs.mant, reqdig);
-                                res.exp = res.exp - ((reqdig - usellen));
-                            }
-                            return res.finish(set, false);
-                        }
-                    // RHS may affect result
-                    res.exp = rhs.exp; // expected final exponent
-                    if (newlen > (reqdig + 1))
-                        if (reqdig > 0) {
-                            // LHS will be max; RHS truncated
-                            tlen = (newlen - reqdig) - 1; // truncation length
-                            userlen = userlen - tlen;
-                            res.exp = res.exp + tlen;
-                            newlen = reqdig + 1;
-                        }
-                    if (newlen > usellen)
-                        usellen = newlen; // need to pad LHS
-                } else { // need to pad rhs and/or truncate lhs
-                    newlen = (userlen + rhs.exp) - lhs.exp;
-                    if (newlen >= ((usellen + reqdig) + 1))
-                        if (reqdig > 0) {
-                            // RHS is sufficient
-                            res.mant = user;
-                            res.exp = rhs.exp;
-                            res.ind = rhs.ind;
-                            if (userlen < reqdig) { // need 0 padding
-                                res.mant = extend(rhs.mant, reqdig);
-                                res.exp = res.exp - ((reqdig - userlen));
-                            }
-                            return res.finish(set, false);
-                        }
-                    // LHS may affect result
-                    res.exp = lhs.exp; // expected final exponent
-                    if (newlen > (reqdig + 1))
-                        if (reqdig > 0) {
-                            // RHS will be max; LHS truncated
-                            tlen = (newlen - reqdig) - 1; // truncation length
-                            usellen = usellen - tlen;
-                            res.exp = res.exp + tlen;
-                            newlen = reqdig + 1;
-                        }
-                    if (newlen > userlen)
-                        userlen = newlen; // need to pad RHS
-                }
-            } while (false);
-        }/* padder */
-
-        /* OK, we have aligned mantissas. Now add or subtract. */
-        // 1998.06.27 Sign may now be 0 [e.g., 0.000] .. treat as positive
-        // 1999.05.27 Allow for 00 on lhs [is not larger than 2 on rhs]
-        // 1999.07.10 Allow for 00 on rhs [is not larger than 2 on rhs]
-        if (lhs.ind == iszero)
-            res.ind = ispos;
-        else
-            res.ind = lhs.ind; // likely sign, all paths
-        if (((lhs.ind == isneg) ? 1 : 0) == ((rhs.ind == isneg) ? 1 : 0)) // same sign, 0 non-negative
-            mult = 1;
-        else {
-            do { // different signs, so subtraction is needed
-                mult = -1; // will cause subtract
-                /*
-                 * Before we can subtract we must determine which is the larger, as our add/subtract routine only
-                 * handles non-negative results so we may need to swap the operands.
-                 */
-                {
-                    do {/* select */
-                        if (rhs.ind == iszero) {
-                            // original A bigger
-                        } else if ((usellen < userlen) | (lhs.ind == iszero)) { // original B bigger
-                            t = usel;
-                            usel = user;
-                            user = t; // swap
-                            tlen = usellen;
-                            usellen = userlen;
-                            userlen = tlen; // ..
-                            res.ind = (byte) -res.ind; // and set sign
-                        } else if (usellen > userlen) {
-                            // original A bigger
-                        } else {
-                            {/* logical lengths the same */// need compare
-                                /* may still need to swap: compare the strings */
-                                ia = 0;
-                                ib = 0;
-                                ea = usel.length - 1;
-                                eb = user.length - 1;
-                                {
-                                    compare: for (;;) {
-                                        if (ia <= ea)
-                                            ca = usel[ia];
-                                        else {
-                                            if (ib > eb) {/* identical */
-                                                if (set.form != com.ibm.icu.math.MathContext.PLAIN)
-                                                    return ZERO;
-                                                // [if PLAIN we must do the subtract, in case of 0.000 results]
-                                                break compare;
-                                            }
-                                            ca = (byte) 0;
-                                        }
-                                        if (ib <= eb)
-                                            cb = user[ib];
-                                        else
-                                            cb = (byte) 0;
-                                        if (ca != cb) {
-                                            if (ca < cb) {/* swap needed */
-                                                t = usel;
-                                                usel = user;
-                                                user = t; // swap
-                                                tlen = usellen;
-                                                usellen = userlen;
-                                                userlen = tlen; // ..
-                                                res.ind = (byte) -res.ind;
-                                            }
-                                            break compare;
-                                        }
-                                        /* mantissas the same, so far */
-                                        ia++;
-                                        ib++;
-                                    }
-                                }/* compare */
-                            } // lengths the same
-                        }
-                    } while (false);
-                }/* swaptest */
-            } while (false);
-        }/* signdiff */
-
-        /* here, A is > B if subtracting */
-        // add [A+B*1] or subtract [A+(B*-1)]
-        res.mant = byteaddsub(usel, usellen, user, userlen, mult, false);
-        // [reuse possible only after chop; accounting makes not worthwhile]
-
-        // Finish() rounds before stripping leading 0's, then sets form, etc.
-        return res.finish(set, false);
-    }
-
-    /**
-     * Compares this <code>BigDecimal</code> to another, using unlimited precision.
-     * <p>
-     * The same as {@link #compareTo(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
-     * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
-     * @return An <code>int</code> whose value is -1, 0, or 1 as <code>this</code> is numerically less than, equal to,
-     *         or greater than <code>rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public int compareTo(com.ibm.icu.math.BigDecimal rhs) {
-        return this.compareTo(rhs, plainMC);
-    }
-
-    /**
-     * Compares this <code>BigDecimal</code> to another.
-     * <p>
-     * Implements numeric comparison, (as defined in the decimal documentation, see {@link BigDecimal class header}),
-     * and returns a result of type <code>int</code>.
-     * <p>
-     * The result will be:
-     * <table cellpadding=2>
-     * <tr>
-     * <td align=right><b>-1</b></td> <td>if the current object is less than the first parameter</td>
-     * </tr>
-     * <tr>
-     * <td align=right><b>0</b></td> <td>if the current object is equal to the first parameter</td>
-     * </tr>
-     * <tr>
-     * <td align=right><b>1</b></td> <td>if the current object is greater than the first parameter.</td>
-     * </tr>
-     * </table>
-     * <p>
-     * A {@link #compareTo(BigDecimal)} method is also provided.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return An <code>int</code> whose value is -1, 0, or 1 as <code>this</code> is numerically less than, equal to,
-     *         or greater than <code>rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public int compareTo(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        int thislength = 0;
-        int i = 0;
-        com.ibm.icu.math.BigDecimal newrhs;
-        // rhs=null will raise NullPointerException, as per Comparable interface
-        if (set.lostDigits)
-            checkdigits(rhs, set.digits);
-        // [add will recheck in slowpath cases .. but would report -rhs]
-        if ((this.ind == rhs.ind) & (this.exp == rhs.exp)) {
-            /* sign & exponent the same [very common] */
-            thislength = this.mant.length;
-            if (thislength < rhs.mant.length)
-                return (byte) -this.ind;
-            if (thislength > rhs.mant.length)
-                return this.ind;
-            /*
-             * lengths are the same; we can do a straight mantissa compare unless maybe rounding [rounding is very
-             * unusual]
-             */
-            if ((thislength <= set.digits) | (set.digits == 0)) {
-                {
-                    int $6 = thislength;
-                    i = 0;
-                    for (; $6 > 0; $6--, i++) {
-                        if (this.mant[i] < rhs.mant[i])
-                            return (byte) -this.ind;
-                        if (this.mant[i] > rhs.mant[i])
-                            return this.ind;
-                    }
-                }/* i */
-                return 0; // identical
-            }
-            /* drop through for full comparison */
-        } else {
-            /* More fastpaths possible */
-            if (this.ind < rhs.ind)
-                return -1;
-            if (this.ind > rhs.ind)
-                return 1;
-        }
-        /* carry out a subtract to make the comparison */
-        newrhs = clone(rhs); // safe copy
-        newrhs.ind = (byte) -newrhs.ind; // prepare to subtract
-        return this.add(newrhs, set).ind; // add, and return sign of result
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic.
-     * <p>
-     * The same as {@link #divide(BigDecimal, int)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * rounding mode is {@link MathContext#ROUND_HALF_UP}.
-     * 
-     * The length of the decimal part (the scale) of the result will be the same as the scale of the current object, if
-     * the latter were formatted without exponential notation.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
-     * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic.
-     * @throws ArithmeticException If <code>rhs</code> is zero.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal divide(com.ibm.icu.math.BigDecimal rhs) {
-        return this.dodivide('D', rhs, plainMC, -1);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and a
-     * rounding mode.
-     * <p>
-     * The same as {@link #divide(BigDecimal, int, int)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * second parameter is <code>this.scale()</code>, and the third is <code>round</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will therefore be the same as the scale of the current
-     * object, if the latter were formatted without exponential notation.
-     * <p>
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
-     * @param round The <code>int</code> rounding mode to be used for the division (see the {@link MathContext} class).
-     * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and
-     *         the specified rounding mode.
-     * @throws IllegalArgumentException if <code>round</code> is not a valid rounding mode.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @throws ArithmeticException if <code>round</code> is {@link MathContext#ROUND_UNNECESSARY} and <code>this.scale()</code> is insufficient to represent the result exactly.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal divide(com.ibm.icu.math.BigDecimal rhs, int round) {
-        com.ibm.icu.math.MathContext set;
-        set = new com.ibm.icu.math.MathContext(0, com.ibm.icu.math.MathContext.PLAIN, false, round); // [checks round,
-                                                                                                     // too]
-        return this.dodivide('D', rhs, set, -1); // take scale from LHS
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and a
-     * given scale and rounding mode.
-     * <p>
-     * The same as {@link #divide(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
-     * <code>new MathContext(0, MathContext.PLAIN, false, round)</code>, except that the length of the decimal part (the
-     * scale) to be used for the result is explicit rather than being taken from <code>this</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will be the same as the scale of the current object, if
-     * the latter were formatted without exponential notation.
-     * <p>
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
-     * @param scale The <code>int</code> scale to be used for the result.
-     * @param round The <code>int</code> rounding mode to be used for the division (see the {@link MathContext} class).
-     * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and
-     *         the specified rounding mode.
-     * @throws IllegalArgumentException if <code>round</code> is not a valid rounding mode.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @throws ArithmeticException if <code>scale</code> is negative.
-     * @throws ArithmeticException if <code>round</code> is {@link MathContext#ROUND_UNNECESSARY} and <code>scale</code> is insufficient
-     *             to represent the result exactly.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal divide(com.ibm.icu.math.BigDecimal rhs, int scale, int round) {
-        com.ibm.icu.math.MathContext set;
-        if (scale < 0)
-            throw new java.lang.ArithmeticException("Negative scale:" + " " + scale);
-        set = new com.ibm.icu.math.MathContext(0, com.ibm.icu.math.MathContext.PLAIN, false, round); // [checks round]
-        return this.dodivide('D', rhs, set, scale);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>this/rhs</code>.
-     * <p>
-     * Implements the division (<b><code>/</code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>this/rhs</code>.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal divide(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        return this.dodivide('D', rhs, set, -1);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
-     * <p>
-     * The same as {@link #divideInteger(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs
-     * </code>, and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the integer division.
-     * @return A <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal divideInteger(com.ibm.icu.math.BigDecimal rhs) {
-        // scale 0 to drop .000 when plain
-        return this.dodivide('I', rhs, plainMC, 0);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
-     * <p>
-     * Implements the integer division operator (as defined in the decimal documentation, see {@link BigDecimal class
-     * header}), and returns the result as a <code>BigDecimal</code> object.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the integer division.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @throws ArithmeticException if the result will not fit in the number of digits specified for the context.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal divideInteger(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        // scale 0 to drop .000 when plain
-        return this.dodivide('I', rhs, set, 0);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
-     * <p>
-     * The same as {@link #max(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
-     * @return A <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal max(com.ibm.icu.math.BigDecimal rhs) {
-        return this.max(rhs, plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
-     * <p>
-     * Returns the larger of the current object and the first parameter.
-     * <p>
-     * If calling the {@link #compareTo(BigDecimal, MathContext)} method with the same parameters would return <code>1
-     * </code> or <code>0</code>, then the result of calling the {@link #plus(MathContext)} method on the current object
-     * (using the same <code>MathContext</code> parameter) is returned. Otherwise, the result of calling the
-     * {@link #plus(MathContext)} method on the first parameter object (using the same <code>MathContext</code>
-     * parameter) is returned.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal max(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        if ((this.compareTo(rhs, set)) >= 0)
-            return this.plus(set);
-        else
-            return rhs.plus(set);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
-     * <p>
-     * The same as {@link #min(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
-     * @return A <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal min(com.ibm.icu.math.BigDecimal rhs) {
-        return this.min(rhs, plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
-     * <p>
-     * Returns the smaller of the current object and the first parameter.
-     * <p>
-     * If calling the {@link #compareTo(BigDecimal, MathContext)} method with the same parameters would return <code>-1
-     * </code> or <code>0</code>, then the result of calling the {@link #plus(MathContext)} method on the current object
-     * (using the same <code>MathContext</code> parameter) is returned. Otherwise, the result of calling the
-     * {@link #plus(MathContext)} method on the first parameter object (using the same <code>MathContext</code>
-     * parameter) is returned.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal min(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        if ((this.compareTo(rhs, set)) <= 0)
-            return this.plus(set);
-        else
-            return rhs.plus(set);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this*rhs</code>, using fixed point arithmetic.
-     * <p>
-     * The same as {@link #add(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will be the sum of the scales of the operands, if they
-     * were formatted without exponential notation.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the multiplication.
-     * @return A <code>BigDecimal</code> whose value is <code>this*rhs</code>, using fixed point arithmetic.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal multiply(com.ibm.icu.math.BigDecimal rhs) {
-        return this.multiply(rhs, plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>this*rhs</code>.
-     * <p>
-     * Implements the multiplication (<b><code> </code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the multiplication.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>this*rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal multiply(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        com.ibm.icu.math.BigDecimal lhs;
-        int padding;
-        int reqdig;
-        byte multer[] = null;
-        byte multand[] = null;
-        int multandlen;
-        int acclen = 0;
-        com.ibm.icu.math.BigDecimal res;
-        byte acc[];
-        int n = 0;
-        byte mult = 0;
-        if (set.lostDigits)
-            checkdigits(rhs, set.digits);
-        lhs = this; // name for clarity and proxy
-
-        /* Prepare numbers (truncate, unless unlimited precision) */
-        padding = 0; // trailing 0's to add
-        reqdig = set.digits; // local copy
-        if (reqdig > 0) {
-            if (lhs.mant.length > reqdig)
-                lhs = clone(lhs).round(set);
-            if (rhs.mant.length > reqdig)
-                rhs = clone(rhs).round(set);
-            // [we could reuse the new LHS for result in this case]
-        } else {/* unlimited */
-            // fixed point arithmetic will want every trailing 0; we add these
-            // after the calculation rather than before, for speed.
-            if (lhs.exp > 0)
-                padding = padding + lhs.exp;
-            if (rhs.exp > 0)
-                padding = padding + rhs.exp;
-        }
-
-        // For best speed, as in DMSRCN, we use the shorter number as the
-        // multiplier and the longer as the multiplicand.
-        // 1999.12.22: We used to special case when the result would fit in
-        // a long, but with Java 1.3 this gave no advantage.
-        if (lhs.mant.length < rhs.mant.length) {
-            multer = lhs.mant;
-            multand = rhs.mant;
-        } else {
-            multer = rhs.mant;
-            multand = lhs.mant;
-        }
-
-        /* Calculate how long result byte array will be */
-        multandlen = (multer.length + multand.length) - 1; // effective length
-        // optimize for 75% of the cases where a carry is expected...
-        if ((multer[0] * multand[0]) > 9)
-            acclen = multandlen + 1;
-        else
-            acclen = multandlen;
-
-        /* Now the main long multiplication loop */
-        res = new com.ibm.icu.math.BigDecimal(); // where we'll build result
-        acc = new byte[acclen]; // accumulator, all zeros
-        // 1998.07.01: calculate from left to right so that accumulator goes
-        // to likely final length on first addition; this avoids a one-digit
-        // extension (and object allocation) each time around the loop.
-        // Initial number therefore has virtual zeros added to right.
-        {
-            int $7 = multer.length;
-            n = 0;
-            for (; $7 > 0; $7--, n++) {
-                mult = multer[n];
-                if (mult != 0) { // [optimization]
-                    // accumulate [accumulator is reusable array]
-                    acc = byteaddsub(acc, acc.length, multand, multandlen, mult, true);
-                }
-                // divide multiplicand by 10 for next digit to right
-                multandlen--; // 'virtual length'
-            }
-        }/* n */
-
-        res.ind = (byte) (lhs.ind * rhs.ind); // final sign
-        res.exp = (lhs.exp + rhs.exp) - padding; // final exponent
-        // [overflow is checked by finish]
-
-        /* add trailing zeros to the result, if necessary */
-        if (padding == 0)
-            res.mant = acc;
-        else
-            res.mant = extend(acc, acc.length + padding); // add trailing 0s
-        return res.finish(set, false);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>-this</code>.
-     * <p>
-     * The same as {@link #negate(MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>
-     * .
-     * <p>
-     * The length of the decimal part (the scale) of the result will be be <code>this.scale()</code>
-     * 
-     * 
-     * @return A <code>BigDecimal</code> whose value is <code>-this</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal negate() {
-        return this.negate(plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>-this</code>.
-     * <p>
-     * Implements the negation (Prefix <b><code>-</code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * 
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>-this</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal negate(com.ibm.icu.math.MathContext set) {
-        com.ibm.icu.math.BigDecimal res;
-        // Originally called minus(), changed to matched Java precedents
-        // This simply clones, flips the sign, and possibly rounds
-        if (set.lostDigits)
-            checkdigits((com.ibm.icu.math.BigDecimal) null, set.digits);
-        res = clone(this); // safe copy
-        res.ind = (byte) -res.ind;
-        return res.finish(set, false);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>+this</code>. Note that <code>this</code> is not
-     * necessarily a plain <code>BigDecimal</code>, but the result will always be.
-     * <p>
-     * The same as {@link #plus(MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will be be <code>this.scale()</code>
-     * 
-     * @return A <code>BigDecimal</code> whose value is <code>+this</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal plus() {
-        return this.plus(plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>+this</code>.
-     * <p>
-     * Implements the plus (Prefix <b><code>+</code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * <p>
-     * This method is useful for rounding or otherwise applying a context to a decimal value.
-     * 
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>+this</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal plus(com.ibm.icu.math.MathContext set) {
-        // This clones and forces the result to the new settings
-        // May return same object
-        if (set.lostDigits)
-            checkdigits((com.ibm.icu.math.BigDecimal) null, set.digits);
-        // Optimization: returns same object for some common cases
-        if (set.form == com.ibm.icu.math.MathContext.PLAIN)
-            if (this.form == com.ibm.icu.math.MathContext.PLAIN) {
-                if (this.mant.length <= set.digits)
-                    return this;
-                if (set.digits == 0)
-                    return this;
-            }
-        return clone(this).finish(set, false);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this**rhs</code>, using fixed point arithmetic.
-     * <p>
-     * The same as {@link #pow(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
-     * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * The parameter is the power to which the <code>this</code> will be raised; it must be in the range 0 through
-     * 999999999, and must have a decimal part of zero. Note that these restrictions may be removed in the future, so
-     * they should not be used as a test for a whole number.
-     * <p>
-     * In addition, the power must not be negative, as no <code>MathContext</code> is used and so the result would then
-     * always be 0.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the operation (the power).
-     * @return A <code>BigDecimal</code> whose value is <code>this**rhs</code>, using fixed point arithmetic.
-     * @throws ArithmeticException if <code>rhs</code> is out of range or is not a whole number.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal pow(com.ibm.icu.math.BigDecimal rhs) {
-        return this.pow(rhs, plainMC);
-    }
-
-    // The name for this method is inherited from the precedent set by the
-    // BigInteger and Math classes.
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>this**rhs</code>.
-     * <p>
-     * Implements the power (<b><code> </code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * <p>
-     * The first parameter is the power to which the <code>this</code> will be raised; it must be in the range
-     * -999999999 through 999999999, and must have a decimal part of zero. Note that these restrictions may be removed
-     * in the future, so they should not be used as a test for a whole number.
-     * <p>
-     * If the <code>digits</code> setting of the <code>MathContext</code> parameter is 0, the power must be zero or
-     * positive.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the operation (the power).
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>this**rhs</code>.
-     * @throws ArithmeticException if <code>rhs</code> is out of range or is not a whole number.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal pow(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        int n;
-        com.ibm.icu.math.BigDecimal lhs;
-        int reqdig;
-        int workdigits = 0;
-        int L = 0;
-        com.ibm.icu.math.MathContext workset;
-        com.ibm.icu.math.BigDecimal res;
-        boolean seenbit;
-        int i = 0;
-        if (set.lostDigits)
-            checkdigits(rhs, set.digits);
-        n = rhs.intcheck(MinArg, MaxArg); // check RHS by the rules
-        lhs = this; // clarified name
-
-        reqdig = set.digits; // local copy (heavily used)
-        if (reqdig == 0) {
-            if (rhs.ind == isneg)
-                throw new java.lang.ArithmeticException("Negative power:" + " " + rhs.toString());
-            workdigits = 0;
-        } else {/* non-0 digits */
-            if ((rhs.mant.length + rhs.exp) > reqdig)
-                throw new java.lang.ArithmeticException("Too many digits:" + " " + rhs.toString());
-
-            /* Round the lhs to DIGITS if need be */
-            if (lhs.mant.length > reqdig)
-                lhs = clone(lhs).round(set);
-
-            /* L for precision calculation [see ANSI X3.274-1996] */
-            L = rhs.mant.length + rhs.exp; // length without decimal zeros/exp
-            workdigits = (reqdig + L) + 1; // calculate the working DIGITS
-        }
-
-        /* Create a copy of set for working settings */
-        // Note: no need to check for lostDigits again.
-        // 1999.07.17 Note: this construction must follow RHS check
-        workset = new com.ibm.icu.math.MathContext(workdigits, set.form, false, set.roundingMode);
-
-        res = ONE; // accumulator
-        if (n == 0)
-            return res; // x**0 == 1
-        if (n < 0)
-            n = -n; // [rhs.ind records the sign]
-        seenbit = false; // set once we've seen a 1-bit
-        {
-            i = 1;
-            i: for (;; i++) { // for each bit [top bit ignored]
-                n = n + n; // shift left 1 bit
-                if (n < 0) { // top bit is set
-                    seenbit = true; // OK, we're off
-                    res = res.multiply(lhs, workset); // acc=acc*x
-                }
-                if (i == 31)
-                    break i; // that was the last bit
-                if ((!seenbit))
-                    continue i; // we don't have to square 1
-                res = res.multiply(res, workset); // acc=acc*acc [square]
-            }
-        }/* i */// 32 bits
-        if (rhs.ind < 0) // was a **-n [hence digits>0]
-            res = ONE.divide(res, workset); // .. so acc=1/acc
-        return res.finish(set, true); // round and strip [original digits]
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>, using fixed point
-     * arithmetic.
-     * <p>
-     * The same as {@link #remainder(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
-     * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * This is not the modulo operator -- the result may be negative.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the remainder operation.
-     * @return A <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>, using fixed point
-     *         arithmetic.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal remainder(com.ibm.icu.math.BigDecimal rhs) {
-        return this.dodivide('R', rhs, plainMC, -1);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>.
-     * <p>
-     * Implements the remainder operator (as defined in the decimal documentation, see {@link BigDecimal class header}),
-     * and returns the result as a <code>BigDecimal</code> object.
-     * <p>
-     * This is not the modulo operator -- the result may be negative.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the remainder operation.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is the remainder of <code>this+rhs</code>.
-     * @throws ArithmeticException if <code>rhs</code> is zero.
-     * @throws ArithmeticException  if the integer part of the result will not fit in the number of digits specified for the context.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal remainder(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        return this.dodivide('R', rhs, set, -1);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose value is <code>this-rhs</code>, using fixed point arithmetic.
-     * <p>
-     * The same as {@link #subtract(BigDecimal, MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
-     * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
-     * <p>
-     * The length of the decimal part (the scale) of the result will be the maximum of the scales of the two operands.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the subtraction.
-     * @return A <code>BigDecimal</code> whose value is <code>this-rhs</code>, using fixed point arithmetic.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal subtract(com.ibm.icu.math.BigDecimal rhs) {
-        return this.subtract(rhs, plainMC);
-    }
-
-    /**
-     * Returns a <code>BigDecimal</code> whose value is <code>this-rhs</code>.
-     * <p>
-     * Implements the subtraction (<b><code>-</code></b>) operator (as defined in the decimal documentation, see
-     * {@link BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
-     * 
-     * @param rhs The <code>BigDecimal</code> for the right hand side of the subtraction.
-     * @param set The <code>MathContext</code> arithmetic settings.
-     * @return A <code>BigDecimal</code> whose value is <code>this-rhs</code>.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal subtract(com.ibm.icu.math.BigDecimal rhs, com.ibm.icu.math.MathContext set) {
-        com.ibm.icu.math.BigDecimal newrhs;
-        if (set.lostDigits)
-            checkdigits(rhs, set.digits);
-        // [add will recheck .. but would report -rhs]
-        /* carry out the subtraction */
-        // we could fastpath -0, but it is too rare.
-        newrhs = clone(rhs); // safe copy
-        newrhs.ind = (byte) -newrhs.ind; // prepare to subtract
-        return this.add(newrhs, set); // arithmetic
-    }
-
-    /* ---------------------------------------------------------------- */
-    /* Other methods */
-    /* ---------------------------------------------------------------- */
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>byte</code>. If the <code>BigDecimal</code> has a non-zero
-     * decimal part or is out of the possible range for a <code>byte</code> (8-bit signed integer) result then an <code>
-     * ArithmeticException</code> is thrown.
-     * 
-     * @return A <code>byte</code> equal in value to <code>this</code>.
-     * @throws ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>byte</code>.
-     * @stable ICU 2.0
-     */
-
-    public byte byteValueExact() {
-        int num;
-        num = this.intValueExact(); // will check decimal part too
-        if ((num > 127) | (num < (-128)))
-            throw new java.lang.ArithmeticException("Conversion overflow:" + " " + this.toString());
-        return (byte) num;
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>double</code>. If the <code>BigDecimal</code> is out of the
-     * possible range for a <code>double</code> (64-bit signed floating point) result then an <code>ArithmeticException
-     * </code> is thrown.
-     * <p>
-     * The double produced is identical to result of expressing the <code>BigDecimal</code> as a <code>String</code> and
-     * then converting it using the <code>Double(String)</code> constructor; this can result in values of <code>
-     * Double.NEGATIVE_INFINITY</code> or <code>Double.POSITIVE_INFINITY</code>.
-     * 
-     * @return A <code>double</code> corresponding to <code>this</code>.
-     * @stable ICU 2.0
-     */
-
-    public double doubleValue() {
-        // We go via a String [as does BigDecimal in JDK 1.2]
-        // Next line could possibly raise NumberFormatException
-        return java.lang.Double.valueOf(this.toString()).doubleValue();
-    }
-
-    /**
-     * Compares this <code>BigDecimal</code> with <code>rhs</code> for equality.
-     * <p>
-     * If the parameter is <code>null</code>, or is not an instance of the BigDecimal type, or is not exactly equal to
-     * the current <code>BigDecimal</code> object, then <i>false</i> is returned. Otherwise, <i>true</i> is returned.
-     * <p>
-     * "Exactly equal", here, means that the <code>String</code> representations of the <code>BigDecimal</code> numbers
-     * are identical (they have the same characters in the same sequence).
-     * <p>
-     * The {@link #compareTo(BigDecimal, MathContext)} method should be used for more general comparisons.
-     * 
-     * @param obj The <code>Object</code> for the right hand side of the comparison.
-     * @return A <code>boolean</code> whose value <i>true</i> if and only if the operands have identical string
-     *         representations.
-     * @throws ClassCastException if <code>rhs</code> cannot be cast to a <code>BigDecimal</code> object.
-     * @stable ICU 2.0
-     * @see #compareTo(BigDecimal)
-     * @see #compareTo(BigDecimal, MathContext)
-     */
-
-    public boolean equals(java.lang.Object obj) {
-        com.ibm.icu.math.BigDecimal rhs;
-        int i = 0;
-        char lca[] = null;
-        char rca[] = null;
-        // We are equal iff toString of both are exactly the same
-        if (obj == null)
-            return false; // not equal
-        if ((!(((obj instanceof com.ibm.icu.math.BigDecimal)))))
-            return false; // not a decimal
-        rhs = (com.ibm.icu.math.BigDecimal) obj; // cast; we know it will work
-        if (this.ind != rhs.ind)
-            return false; // different signs never match
-        if (((this.mant.length == rhs.mant.length) & (this.exp == rhs.exp)) & (this.form == rhs.form))
-
-        { // mantissas say all
-            // here with equal-length byte arrays to compare
-            {
-                int $8 = this.mant.length;
-                i = 0;
-                for (; $8 > 0; $8--, i++) {
-                    if (this.mant[i] != rhs.mant[i])
-                        return false;
-                }
-            }/* i */
-        } else { // need proper layout
-            lca = this.layout(); // layout to character array
-            rca = rhs.layout();
-            if (lca.length != rca.length)
-                return false; // mismatch
-            // here with equal-length character arrays to compare
-            {
-                int $9 = lca.length;
-                i = 0;
-                for (; $9 > 0; $9--, i++) {
-                    if (lca[i] != rca[i])
-                        return false;
-                }
-            }/* i */
-        }
-        return true; // arrays have identical content
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>float</code>. If the <code>BigDecimal</code> is out of the
-     * possible range for a <code>float</code> (32-bit signed floating point) result then an <code>ArithmeticException
-     * </code> is thrown.
-     * <p>
-     * The float produced is identical to result of expressing the <code>BigDecimal</code> as a <code>String</code> and
-     * then converting it using the <code>Float(String)</code> constructor; this can result in values of <code>
-     * Float.NEGATIVE_INFINITY</code> or <code>Float.POSITIVE_INFINITY</code>.
-     * 
-     * @return A <code>float</code> corresponding to <code>this</code>.
-     * @stable ICU 2.0
-     */
-
-    public float floatValue() {
-        return java.lang.Float.valueOf(this.toString()).floatValue();
-    }
-
-    /**
-     * Returns the <code>String</code> representation of this <code>BigDecimal</code>, modified by layout parameters.
-     * <p>
-     * <i>This method is provided as a primitive for use by more sophisticated classes, such as <code>DecimalFormat
-     * </code>, that can apply locale-sensitive editing of the result. The level of formatting that it provides is a
-     * necessary part of the BigDecimal class as it is sensitive to and must follow the calculation and rounding rules
-     * for BigDecimal arithmetic. However, if the function is provided elsewhere, it may be removed from this class.
-     * </i>
-     * <p>
-     * The parameters, for both forms of the <code>format</code> method are all of type <code>int</code>. A value of -1
-     * for any parameter indicates that the default action or value for that parameter should be used.
-     * <p>
-     * The parameters, <code>before</code> and <code>after</code>, specify the number of characters to be used for the
-     * integer part and decimal part of the result respectively. Exponential notation is not used. If either parameter
-     * is -1 (which indicates the default action), the number of characters used will be exactly as many as are needed
-     * for that part.
-     * <p>
-     * <code>before</code> must be a positive number; if it is larger than is needed to contain the integer part, that
-     * part is padded on the left with blanks to the requested length. If <code>before</code> is not large enough to
-     * contain the integer part of the number (including the sign, for negative numbers) an exception is thrown.
-     * <p>
-     * <code>after</code> must be a non-negative number; if it is not the same size as the decimal part of the number,
-     * the number will be rounded (or extended with zeros) to fit. Specifying 0 for <code>after</code> will cause the
-     * number to be rounded to an integer (that is, it will have no decimal part or decimal point). The rounding method
-     * will be the default, <code>MathContext.ROUND_HALF_UP</code>.
-     * <p>
-     * Other rounding methods, and the use of exponential notation, can be selected by using
-     * {@link #format(int,int,int,int,int,int)}. Using the two-parameter form of the method has exactly the same effect
-     * as using the six-parameter form with the final four parameters all being -1.
-     * 
-     * @param before The <code>int</code> specifying the number of places before the decimal point. Use -1 for 'as many as are needed'.
-     * @param after The <code>int</code> specifying the number of places after the decimal point. Use -1 for 'as many as are needed'.
-     * @return A <code>String</code> representing this <code>BigDecimal</code>, laid out according to the specified parameters
-     * @throws ArithmeticException if the number cannot be laid out as requested.
-     * @throws IllegalArgumentException if a parameter is out of range.
-     * @stable ICU 2.0
-     * @see #toString
-     * @see #toCharArray
-     */
-
-    public java.lang.String format(int before, int after) {
-        return format(before, after, -1, -1, com.ibm.icu.math.MathContext.SCIENTIFIC, ROUND_HALF_UP);
-    }
-
-    /**
-     * Returns the <code>String</code> representation of this <code>BigDecimal</code>, modified by layout parameters and
-     * allowing exponential notation.
-     * <p>
-     * <i>This method is provided as a primitive for use by more sophisticated classes, such as <code>DecimalFormat
-     * </code>, that can apply locale-sensitive editing of the result. The level of formatting that it provides is a
-     * necessary part of the BigDecimal class as it is sensitive to and must follow the calculation and rounding rules
-     * for BigDecimal arithmetic. However, if the function is provided elsewhere, it may be removed from this class.
-     * </i>
-     * <p>
-     * The parameters are all of type <code>int</code>. A value of -1 for any parameter indicates that the default
-     * action or value for that parameter should be used.
-     * <p>
-     * The first two parameters (<code>before</code> and <code>after</code>) specify the number of characters to be used
-     * for the integer part and decimal part of the result respectively, as defined for {@link #format(int,int)}. If
-     * either of these is -1 (which indicates the default action), the number of characters used will be exactly as many
-     * as are needed for that part.
-     * <p>
-     * The remaining parameters control the use of exponential notation and rounding. Three (<code>explaces</code>,
-     * <code>exdigits</code>, and <code>exform</code>) control the exponent part of the result. As before, the default
-     * action for any of these parameters may be selected by using the value -1.
-     * <p>
-     * <code>explaces</code> must be a positive number; it sets the number of places (digits after the sign of the
-     * exponent) to be used for any exponent part, the default (when <code>explaces</code> is -1) being to use as many
-     * as are needed. If <code>explaces</code> is not -1, space is always reserved for an exponent; if one is not needed
-     * (for example, if the exponent will be 0) then <code>explaces</code>+2 blanks are appended to the result. <!--
-     * (This preserves vertical alignment of similarly formatted numbers in a monospace font.) --> If <code>explaces
-     * </code> is not -1 and is not large enough to contain the exponent, an exception is thrown.
-     * <p>
-     * <code>exdigits</code> sets the trigger point for use of exponential notation. If, before any rounding, the number
-     * of places needed before the decimal point exceeds <code>exdigits</code>, or if the absolute value of the result
-     * is less than <code>0.000001</code>, then exponential form will be used, provided that <code>exdigits</code> was
-     * specified. When <code>exdigits</code> is -1, exponential notation will never be used. If 0 is specified for
-     * <code>exdigits</code>, exponential notation is always used unless the exponent would be 0.
-     * <p>
-     * <code>exform</code> sets the form for exponential notation (if needed). It may be either
-     * {@link MathContext#SCIENTIFIC} or {@link MathContext#ENGINEERING}. If the latter, engineering, form is requested,
-     * up to three digits (plus sign, if negative) may be needed for the integer part of the result (<code>before</code>
-     * ). Otherwise, only one digit (plus sign, if negative) is needed.
-     * <p>
-     * Finally, the sixth argument, <code>exround</code>, selects the rounding algorithm to be used, and must be one of
-     * the values indicated by a public constant in the {@link MathContext} class whose name starts with <code>ROUND_
-     * </code>. The default (<code>ROUND_HALF_UP</code>) may also be selected by using the value -1, as before.
-     * <p>
-     * The special value <code>MathContext.ROUND_UNNECESSARY</code> may be used to detect whether non-zero digits are
-     * discarded -- if <code>exround</code> has this value than if non-zero digits would be discarded (rounded) during
-     * formatting then an <code>ArithmeticException</code> is thrown.
-     * 
-     * @param before The <code>int</code> specifying the number of places before the decimal point. Use -1 for 'as many as
-     *            are needed'.
-     * @param after The <code>int</code> specifying the number of places after the decimal point. Use -1 for 'as many as
-     *            are needed'.
-     * @param explaces The <code>int</code> specifying the number of places to be used for any exponent. Use -1 for 'as many
-     *            as are needed'.
-     * @param exdigits The <code>int</code> specifying the trigger (digits before the decimal point) which if exceeded causes
-     *            exponential notation to be used. Use 0 to force exponential notation. Use -1 to force plain notation
-     *            (no exponential notation).
-     * @param exformint The <code>int</code> specifying the form of exponential notation to be used (
-     *            {@link MathContext#SCIENTIFIC} or {@link MathContext#ENGINEERING}).
-     * @param exround The <code>int</code> specifying the rounding mode to use. Use -1 for the default,
-     *            {@link MathContext#ROUND_HALF_UP}.
-     * @return A <code>String</code> representing this <code>BigDecimal</code>, laid out according to the specified
-     *         parameters
-     * @throws ArithmeticException if the number cannot be laid out as requested.
-     * @throws IllegalArgumentException if a parameter is out of range.
-     * @see #toString
-     * @see #toCharArray
-     * @stable ICU 2.0
-     */
-
-    public java.lang.String format(int before, int after, int explaces, int exdigits, int exformint, int exround) {
-        com.ibm.icu.math.BigDecimal num;
-        int mag = 0;
-        int thisafter = 0;
-        int lead = 0;
-        byte newmant[] = null;
-        int chop = 0;
-        int need = 0;
-        int oldexp = 0;
-        char a[];
-        int p = 0;
-        char newa[] = null;
-        int i = 0;
-        int places = 0;
-
-        /* Check arguments */
-        if ((before < (-1)) | (before == 0))
-            badarg("format", 1, java.lang.String.valueOf(before));
-        if (after < (-1))
-            badarg("format", 2, java.lang.String.valueOf(after));
-        if ((explaces < (-1)) | (explaces == 0))
-            badarg("format", 3, java.lang.String.valueOf(explaces));
-        if (exdigits < (-1))
-            badarg("format", 4, java.lang.String.valueOf(explaces));
-        {/* select */
-            if (exformint == com.ibm.icu.math.MathContext.SCIENTIFIC) {
-            } else if (exformint == com.ibm.icu.math.MathContext.ENGINEERING) {
-            } else if (exformint == (-1))
-                exformint = com.ibm.icu.math.MathContext.SCIENTIFIC;
-            // note PLAIN isn't allowed
-            else {
-                badarg("format", 5, java.lang.String.valueOf(exformint));
-            }
-        }
-        // checking the rounding mode is done by trying to construct a
-        // MathContext object with that mode; it will fail if bad
-        if (exround != ROUND_HALF_UP) {
-            try { // if non-default...
-                if (exround == (-1))
-                    exround = ROUND_HALF_UP;
-                else
-                    new com.ibm.icu.math.MathContext(9, com.ibm.icu.math.MathContext.SCIENTIFIC, false, exround);
-            } catch (java.lang.IllegalArgumentException $10) {
-                badarg("format", 6, java.lang.String.valueOf(exround));
-            }
-        }
-
-        num = clone(this); // make private copy
-
-        /*
-         * Here: num is BigDecimal to format before is places before point [>0] after is places after point [>=0]
-         * explaces is exponent places [>0] exdigits is exponent digits [>=0] exformint is exponent form [one of two]
-         * exround is rounding mode [one of eight] 'before' through 'exdigits' are -1 if not specified
-         */
-
-        /* determine form */
-        {
-            do {/* select */
-                if (exdigits == (-1))
-                    num.form = (byte) com.ibm.icu.math.MathContext.PLAIN;
-                else if (num.ind == iszero)
-                    num.form = (byte) com.ibm.icu.math.MathContext.PLAIN;
-                else {
-                    // determine whether triggers
-                    mag = num.exp + num.mant.length;
-                    if (mag > exdigits)
-                        num.form = (byte) exformint;
-                    else if (mag < (-5))
-                        num.form = (byte) exformint;
-                    else
-                        num.form = (byte) com.ibm.icu.math.MathContext.PLAIN;
-                }
-            } while (false);
-        }/* setform */
-
-        /*
-         * If 'after' was specified then we may need to adjust the mantissa. This is a little tricky, as we must conform
-         * to the rules of exponential layout if necessary (e.g., we cannot end up with 10.0 if scientific).
-         */
-        if (after >= 0) {
-            setafter: for (;;) {
-                // calculate the current after-length
-                {/* select */
-                    if (num.form == com.ibm.icu.math.MathContext.PLAIN)
-                        thisafter = -num.exp; // has decimal part
-                    else if (num.form == com.ibm.icu.math.MathContext.SCIENTIFIC)
-                        thisafter = num.mant.length - 1;
-                    else { // engineering
-                        lead = (((num.exp + num.mant.length) - 1)) % 3; // exponent to use
-                        if (lead < 0)
-                            lead = 3 + lead; // negative exponent case
-                        lead++; // number of leading digits
-                        if (lead >= num.mant.length)
-                            thisafter = 0;
-                        else
-                            thisafter = num.mant.length - lead;
-                    }
-                }
-                if (thisafter == after)
-                    break setafter; // we're in luck
-                if (thisafter < after) { // need added trailing zeros
-                    // [thisafter can be negative]
-                    newmant = extend(num.mant, (num.mant.length + after) - thisafter);
-                    num.mant = newmant;
-                    num.exp = num.exp - ((after - thisafter)); // adjust exponent
-                    if (num.exp < MinExp)
-                        throw new java.lang.ArithmeticException("Exponent Overflow:" + " " + num.exp);
-                    break setafter;
-                }
-                // We have too many digits after the decimal point; this could
-                // cause a carry, which could change the mantissa...
-                // Watch out for implied leading zeros in PLAIN case
-                chop = thisafter - after; // digits to lop [is >0]
-                if (chop > num.mant.length) { // all digits go, no chance of carry
-                    // carry on with zero
-                    num.mant = ZERO.mant;
-                    num.ind = iszero;
-                    num.exp = 0;
-                    continue setafter; // recheck: we may need trailing zeros
-                }
-                // we have a digit to inspect from existing mantissa
-                // round the number as required
-                need = num.mant.length - chop; // digits to end up with [may be 0]
-                oldexp = num.exp; // save old exponent
-                num.round(need, exround);
-                // if the exponent grew by more than the digits we chopped, then
-                // we must have had a carry, so will need to recheck the layout
-                if ((num.exp - oldexp) == chop)
-                    break setafter; // number did not have carry
-                // mantissa got extended .. so go around and check again
-            }
-        }/* setafter */
-
-        a = num.layout(); // lay out, with exponent if required, etc.
-
-        /* Here we have laid-out number in 'a' */
-        // now apply 'before' and 'explaces' as needed
-        if (before > 0) {
-            // look for '.' or 'E'
-            {
-                int $11 = a.length;
-                p = 0;
-                p: for (; $11 > 0; $11--, p++) {
-                    if (a[p] == '.')
-                        break p;
-                    if (a[p] == 'E')
-                        break p;
-                }
-            }/* p */
-            // p is now offset of '.', 'E', or character after end of array
-            // that is, the current length of before part
-            if (p > before)
-                badarg("format", 1, java.lang.String.valueOf(before)); // won't fit
-            if (p < before) { // need leading blanks
-                newa = new char[(a.length + before) - p];
-                {
-                    int $12 = before - p;
-                    i = 0;
-                    for (; $12 > 0; $12--, i++) {
-                        newa[i] = ' ';
-                    }
-                }/* i */
-                java.lang.System.arraycopy((java.lang.Object) a, 0, (java.lang.Object) newa, i, a.length);
-                a = newa;
-            }
-            // [if p=before then it's just the right length]
-        }
-
-        if (explaces > 0) {
-            // look for 'E' [cannot be at offset 0]
-            {
-                int $13 = a.length - 1;
-                p = a.length - 1;
-                p: for (; $13 > 0; $13--, p--) {
-                    if (a[p] == 'E')
-                        break p;
-                }
-            }/* p */
-            // p is now offset of 'E', or 0
-            if (p == 0) { // no E part; add trailing blanks
-                newa = new char[(a.length + explaces) + 2];
-                java.lang.System.arraycopy((java.lang.Object) a, 0, (java.lang.Object) newa, 0, a.length);
-                {
-                    int $14 = explaces + 2;
-                    i = a.length;
-                    for (; $14 > 0; $14--, i++) {
-                        newa[i] = ' ';
-                    }
-                }/* i */
-                a = newa;
-            } else {/* found E */// may need to insert zeros
-                places = (a.length - p) - 2; // number so far
-                if (places > explaces)
-                    badarg("format", 3, java.lang.String.valueOf(explaces));
-                if (places < explaces) { // need to insert zeros
-                    newa = new char[(a.length + explaces) - places];
-                    java.lang.System.arraycopy((java.lang.Object) a, 0, (java.lang.Object) newa, 0, p + 2); // through E
-                                                                                                            // and sign
-                    {
-                        int $15 = explaces - places;
-                        i = p + 2;
-                        for (; $15 > 0; $15--, i++) {
-                            newa[i] = '0';
-                        }
-                    }/* i */
-                    java.lang.System.arraycopy((java.lang.Object) a, p + 2, (java.lang.Object) newa, i, places); // remainder
-                                                                                                                 // of
-                                                                                                                 // exponent
-                    a = newa;
-                }
-                // [if places=explaces then it's just the right length]
-            }
-        }
-        return new java.lang.String(a);
-    }
-
-    /**
-     * Returns the hashcode for this <code>BigDecimal</code>. This hashcode is suitable for use by the <code>
-     * java.util.Hashtable</code> class.
-     * <p>
-     * Note that two <code>BigDecimal</code> objects are only guaranteed to produce the same hashcode if they are
-     * exactly equal (that is, the <code>String</code> representations of the <code>BigDecimal</code> numbers are
-     * identical -- they have the same characters in the same sequence).
-     * 
-     * @return An <code>int</code> that is the hashcode for <code>this</code>.
-     * @stable ICU 2.0
-     */
-
-    public int hashCode() {
-        // Maybe calculate ourselves, later. If so, note that there can be
-        // more than one internal representation for a given toString() result.
-        return this.toString().hashCode();
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to an <code>int</code>. If the <code>BigDecimal</code> has a non-zero
-     * decimal part it is discarded. If the <code>BigDecimal</code> is out of the possible range for an <code>int</code>
-     * (32-bit signed integer) result then only the low-order 32 bits are used. (That is, the number may be
-     * <i>decapitated</i>.) To avoid unexpected errors when these conditions occur, use the {@link #intValueExact}
-     * method.
-     * 
-     * @return An <code>int</code> converted from <code>this</code>, truncated and decapitated if necessary.
-     * @stable ICU 2.0
-     */
-
-    public int intValue() {
-        return toBigInteger().intValue();
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to an <code>int</code>. If the <code>BigDecimal</code> has a non-zero
-     * decimal part or is out of the possible range for an <code>int</code> (32-bit signed integer) result then an
-     * <code>ArithmeticException</code> is thrown.
-     * 
-     * @return An <code>int</code> equal in value to <code>this</code>.
-     * @throws ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in an <code>int</code>.
-     * @stable ICU 2.0
-     */
-
-    public int intValueExact() {
-        int lodigit;
-        int useexp = 0;
-        int result;
-        int i = 0;
-        int topdig = 0;
-        // This does not use longValueExact() as the latter can be much
-        // slower.
-        // intcheck (from pow) relies on this to check decimal part
-        if (ind == iszero)
-            return 0; // easy, and quite common
-        /* test and drop any trailing decimal part */
-        lodigit = mant.length - 1;
-        if (exp < 0) {
-            lodigit = lodigit + exp; // reduces by -(-exp)
-            /* all decimal places must be 0 */
-            if ((!(allzero(mant, lodigit + 1))))
-                throw new java.lang.ArithmeticException("Decimal part non-zero:" + " " + this.toString());
-            if (lodigit < 0)
-                return 0; // -1<this<1
-            useexp = 0;
-        } else {/* >=0 */
-            if ((exp + lodigit) > 9) // early exit
-                throw new java.lang.ArithmeticException("Conversion overflow:" + " " + this.toString());
-            useexp = exp;
-        }
-        /* convert the mantissa to binary, inline for speed */
-        result = 0;
-        {
-            int $16 = lodigit + useexp;
-            i = 0;
-            for (; i <= $16; i++) {
-                result = result * 10;
-                if (i <= lodigit)
-                    result = result + mant[i];
-            }
-        }/* i */
-
-        /* Now, if the risky length, check for overflow */
-        if ((lodigit + useexp) == 9) {
-            // note we cannot just test for -ve result, as overflow can move a
-            // zero into the top bit [consider 5555555555]
-            topdig = result / 1000000000; // get top digit, preserving sign
-            if (topdig != mant[0]) { // digit must match and be positive
-                // except in the special case ...
-                if (result == java.lang.Integer.MIN_VALUE) // looks like the special
-                    if (ind == isneg) // really was negative
-                        if (mant[0] == 2)
-                            return result; // really had top digit 2
-                throw new java.lang.ArithmeticException("Conversion overflow:" + " " + this.toString());
-            }
-        }
-
-        /* Looks good */
-        if (ind == ispos)
-            return result;
-        return -result;
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>long</code>. If the <code>BigDecimal</code> has a non-zero
-     * decimal part it is discarded. If the <code>BigDecimal</code> is out of the possible range for a <code>long</code>
-     * (64-bit signed integer) result then only the low-order 64 bits are used. (That is, the number may be
-     * <i>decapitated</i>.) To avoid unexpected errors when these conditions occur, use the {@link #longValueExact}
-     * method.
-     * 
-     * @return A <code>long</code> converted from <code>this</code>, truncated and decapitated if necessary.
-     * @stable ICU 2.0
-     */
-
-    public long longValue() {
-        return toBigInteger().longValue();
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>long</code>. If the <code>BigDecimal</code> has a non-zero
-     * decimal part or is out of the possible range for a <code>long</code> (64-bit signed integer) result then an
-     * <code>ArithmeticException</code> is thrown.
-     * 
-     * @return A <code>long</code> equal in value to <code>this</code>.
-     * @throws ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>long</code>.
-     * @stable ICU 2.0
-     */
-
-    public long longValueExact() {
-        int lodigit;
-        int cstart = 0;
-        int useexp = 0;
-        long result;
-        int i = 0;
-        long topdig = 0;
-        // Identical to intValueExact except for result=long, and exp>=20 test
-        if (ind == 0)
-            return 0; // easy, and quite common
-        lodigit = mant.length - 1; // last included digit
-        if (exp < 0) {
-            lodigit = lodigit + exp; // -(-exp)
-            /* all decimal places must be 0 */
-            if (lodigit < 0)
-                cstart = 0;
-            else
-                cstart = lodigit + 1;
-            if ((!(allzero(mant, cstart))))
-                throw new java.lang.ArithmeticException("Decimal part non-zero:" + " " + this.toString());
-            if (lodigit < 0)
-                return 0; // -1<this<1
-            useexp = 0;
-        } else {/* >=0 */
-            if ((exp + mant.length) > 18) // early exit
-                throw new java.lang.ArithmeticException("Conversion overflow:" + " " + this.toString());
-            useexp = exp;
-        }
-
-        /* convert the mantissa to binary, inline for speed */
-        // note that we could safely use the 'test for wrap to negative'
-        // algorithm here, but instead we parallel the intValueExact
-        // algorithm for ease of checking and maintenance.
-        result = (long) 0;
-        {
-            int $17 = lodigit + useexp;
-            i = 0;
-            for (; i <= $17; i++) {
-                result = result * 10;
-                if (i <= lodigit)
-                    result = result + mant[i];
-            }
-        }/* i */
-
-        /* Now, if the risky length, check for overflow */
-        if ((lodigit + useexp) == 18) {
-            topdig = result / 1000000000000000000L; // get top digit, preserving sign
-            if (topdig != mant[0]) { // digit must match and be positive
-                // except in the special case ...
-                if (result == java.lang.Long.MIN_VALUE) // looks like the special
-                    if (ind == isneg) // really was negative
-                        if (mant[0] == 9)
-                            return result; // really had top digit 9
-                throw new java.lang.ArithmeticException("Conversion overflow:" + " " + this.toString());
-            }
-        }
-
-        /* Looks good */
-        if (ind == ispos)
-            return result;
-        return -result;
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose decimal point has been moved to the left by a specified number of
-     * positions. The parameter, <code>n</code>, specifies the number of positions to move the decimal point. That is,
-     * if <code>n</code> is 0 or positive, the number returned is given by:
-     * <p>
-     * <code> this.multiply(TEN.pow(new BigDecimal(-n))) </code>
-     * <p>
-     * <code>n</code> may be negative, in which case the method returns the same result as <code>movePointRight(-n)
-     * </code>.
-     * 
-     * @param n The <code>int</code> specifying the number of places to move the decimal point leftwards.
-     * @return A <code>BigDecimal</code> derived from <code>this</code>, with the decimal point moved <code>n</code>
-     *         places to the left.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal movePointLeft(int n) {
-        com.ibm.icu.math.BigDecimal res;
-        // very little point in optimizing for shift of 0
-        res = clone(this);
-        res.exp = res.exp - n;
-        return res.finish(plainMC, false); // finish sets form and checks exponent
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> whose decimal point has been moved to the right by a specified number of
-     * positions. The parameter, <code>n</code>, specifies the number of positions to move the decimal point. That is,
-     * if <code>n</code> is 0 or positive, the number returned is given by:
-     * <p>
-     * <code> this.multiply(TEN.pow(new BigDecimal(n))) </code>
-     * <p>
-     * <code>n</code> may be negative, in which case the method returns the same result as <code>movePointLeft(-n)
-     * </code>.
-     * 
-     * @param n The <code>int</code> specifying the number of places to move the decimal point rightwards.
-     * @return A <code>BigDecimal</code> derived from <code>this</code>, with the decimal point moved <code>n</code>
-     *         places to the right.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal movePointRight(int n) {
-        com.ibm.icu.math.BigDecimal res;
-        res = clone(this);
-        res.exp = res.exp + n;
-        return res.finish(plainMC, false);
-    }
-
-    /**
-     * Returns the scale of this <code>BigDecimal</code>. Returns a non-negative <code>int</code> which is the scale of
-     * the number. The scale is the number of digits in the decimal part of the number if the number were formatted
-     * without exponential notation.
-     * 
-     * @return An <code>int</code> whose value is the scale of this <code>BigDecimal</code>.
-     * @stable ICU 2.0
-     */
-
-    public int scale() {
-        if (exp >= 0)
-            return 0; // scale can never be negative
-        return -exp;
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> with a given scale.
-     * <p>
-     * If the given scale (which must be zero or positive) is the same as or greater than the length of the decimal part
-     * (the scale) of this <code>BigDecimal</code> then trailing zeros will be added to the decimal part as necessary.
-     * <p>
-     * If the given scale is less than the length of the decimal part (the scale) of this <code>BigDecimal</code> then
-     * trailing digits will be removed, and in this case an <code>ArithmeticException</code> is thrown if any discarded
-     * digits are non-zero.
-     * <p>
-     * The same as {@link #setScale(int, int)}, where the first parameter is the scale, and the second is <code>
-     * MathContext.ROUND_UNNECESSARY</code>.
-     * 
-     * @param scale The <code>int</code> specifying the scale of the resulting <code>BigDecimal</code>.
-     * @return A plain <code>BigDecimal</code> with the given scale.
-     * @throws ArithmeticException if <code>scale</code> is negative.
-     * @throws ArithmeticException if reducing scale would discard non-zero digits.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal setScale(int scale) {
-        return setScale(scale, ROUND_UNNECESSARY);
-    }
-
-    /**
-     * Returns a plain <code>BigDecimal</code> with a given scale.
-     * <p>
-     * If the given scale (which must be zero or positive) is the same as or greater than the length of the decimal part
-     * (the scale) of this <code>BigDecimal</code> then trailing zeros will be added to the decimal part as necessary.
-     * <p>
-     * If the given scale is less than the length of the decimal part (the scale) of this <code>BigDecimal</code> then
-     * trailing digits will be removed, and the rounding mode given by the second parameter is used to determine if the
-     * remaining digits are affected by a carry. In this case, an <code>IllegalArgumentException</code> is thrown if
-     * <code>round</code> is not a valid rounding mode.
-     * <p>
-     * If <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>, an <code>ArithmeticException</code> is
-     * thrown if any discarded digits are non-zero.
-     * 
-     * @param scale The <code>int</code> specifying the scale of the resulting <code>BigDecimal</code>.
-     * @param round The <code>int</code> rounding mode to be used for the division (see the {@link MathContext} class).
-     * @return A plain <code>BigDecimal</code> with the given scale.
-     * @throws IllegalArgumentException if <code>round</code> is not a valid rounding mode.
-     * @throws ArithmeticException if <code>scale</code> is negative.
-     * @throws ArithmeticException if <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>, and reducing scale would discard
-     *             non-zero digits.
-     * @stable ICU 2.0
-     */
-
-    public com.ibm.icu.math.BigDecimal setScale(int scale, int round) {
-        int ourscale;
-        com.ibm.icu.math.BigDecimal res;
-        int padding = 0;
-        int newlen = 0;
-        // at present this naughtily only checks the round value if it is
-        // needed (used), for speed
-        ourscale = this.scale();
-        if (ourscale == scale) // already correct scale
-            if (this.form == com.ibm.icu.math.MathContext.PLAIN) // .. and form
-                return this;
-        res = clone(this); // need copy
-        if (ourscale <= scale) { // simply zero-padding/changing form
-            // if ourscale is 0 we may have lots of 0s to add
-            if (ourscale == 0)
-                padding = res.exp + scale;
-            else
-                padding = scale - ourscale;
-            res.mant = extend(res.mant, res.mant.length + padding);
-            res.exp = -scale; // as requested
-        } else {/* ourscale>scale: shortening, probably */
-            if (scale < 0)
-                throw new java.lang.ArithmeticException("Negative scale:" + " " + scale);
-            // [round() will raise exception if invalid round]
-            newlen = res.mant.length - ((ourscale - scale)); // [<=0 is OK]
-            res = res.round(newlen, round); // round to required length
-            // This could have shifted left if round (say) 0.9->1[.0]
-            // Repair if so by adding a zero and reducing exponent
-            if (res.exp != -scale) {
-                res.mant = extend(res.mant, res.mant.length + 1);
-                res.exp = res.exp - 1;
-            }
-        }
-        res.form = (byte) com.ibm.icu.math.MathContext.PLAIN; // by definition
-        return res;
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>short</code>. If the <code>BigDecimal</code> has a non-zero
-     * decimal part or is out of the possible range for a <code>short</code> (16-bit signed integer) result then an
-     * <code>ArithmeticException</code> is thrown.
-     * 
-     * @return A <code>short</code> equal in value to <code>this</code>.
-     * @throws ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>short</code>.
-     * @stable ICU 2.0
-     */
-
-    public short shortValueExact() {
-        int num;
-        num = this.intValueExact(); // will check decimal part too
-        if ((num > 32767) | (num < (-32768)))
-            throw new java.lang.ArithmeticException("Conversion overflow:" + " " + this.toString());
-        return (short) num;
-    }
-
-    /**
-     * Returns the sign of this <code>BigDecimal</code>, as an <code>int</code>. This returns the <i>signum</i> function
-     * value that represents the sign of this <code>BigDecimal</code>. That is, -1 if the <code>BigDecimal</code> is
-     * negative, 0 if it is numerically equal to zero, or 1 if it is positive.
-     * 
-     * @return An <code>int</code> which is -1 if the <code>BigDecimal</code> is negative, 0 if it is numerically equal
-     *         to zero, or 1 if it is positive.
-     * @stable ICU 2.0
-     */
-
-    public int signum() {
-        return (int) this.ind; // [note this assumes values for ind.]
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>java.math.BigDecimal</code>.
-     * <p>
-     * This is an exact conversion; the result is the same as if the <code>BigDecimal</code> were formatted as a plain
-     * number without any rounding or exponent and then the <code>java.math.BigDecimal(java.lang.String)</code>
-     * constructor were used to construct the result.
-     * <p>
-     * <i>(Note: this method is provided only in the <code>com.ibm.icu.math</code> version of the BigDecimal class. It
-     * would not be present in a <code>java.math</code> version.)</i>
-     * 
-     * @return The <code>java.math.BigDecimal</code> equal in value to this <code>BigDecimal</code>.
-     * @stable ICU 2.0
-     */
-
-    public java.math.BigDecimal toBigDecimal() {
-        return new java.math.BigDecimal(this.unscaledValue(), this.scale());
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>java.math.BigInteger</code>.
-     * <p>
-     * Any decimal part is truncated (discarded). If an exception is desired should the decimal part be non-zero, use
-     * {@link #toBigIntegerExact()}.
-     * 
-     * @return The <code>java.math.BigInteger</code> equal in value to the integer part of this <code>BigDecimal</code>.
-     * @stable ICU 2.0
-     */
-
-    public java.math.BigInteger toBigInteger() {
-        com.ibm.icu.math.BigDecimal res = null;
-        int newlen = 0;
-        byte newmant[] = null;
-        {/* select */
-            if ((exp >= 0) & (form == com.ibm.icu.math.MathContext.PLAIN))
-                res = this; // can layout simply
-            else if (exp >= 0) {
-                res = clone(this); // safe copy
-                res.form = (byte) com.ibm.icu.math.MathContext.PLAIN; // .. and request PLAIN
-            } else {
-                { // exp<0; scale to be truncated
-                    // we could use divideInteger, but we may as well be quicker
-                    if (-this.exp >= this.mant.length)
-                        res = ZERO; // all blows away
-                    else {
-                        res = clone(this); // safe copy
-                        newlen = res.mant.length + res.exp;
-                        newmant = new byte[newlen]; // [shorter]
-                        java.lang.System.arraycopy((java.lang.Object) res.mant, 0, (java.lang.Object) newmant, 0,
-                                newlen);
-                        res.mant = newmant;
-                        res.form = (byte) com.ibm.icu.math.MathContext.PLAIN;
-                        res.exp = 0;
-                    }
-                }
-            }
-        }
-        return new BigInteger(new java.lang.String(res.layout()));
-    }
-
-    /**
-     * Converts this <code>BigDecimal</code> to a <code>java.math.BigInteger</code>.
-     * <p>
-     * An exception is thrown if the decimal part (if any) is non-zero.
-     * 
-     * @return The <code>java.math.BigInteger</code> equal in value to the integer part of this <code>BigDecimal</code>.
-     * @throws ArithmeticException if <code>this</code> has a non-zero decimal part.
-     * @stable ICU 2.0
-     */
-
-    public java.math.BigInteger toBigIntegerExact() {
-        /* test any trailing decimal part */
-        if (exp < 0) { // possible decimal part
-            /* all decimal places must be 0; note exp<0 */
-            if ((!(allzero(mant, mant.length + exp))))
-                throw new java.lang.ArithmeticException("Decimal part non-zero:" + " " + this.toString());
-        }
-        return toBigInteger();
-    }
-
-    /**
-     * Returns the <code>BigDecimal</code> as a character array. The result of this method is the same as using the
-     * sequence <code>toString().toCharArray()</code>, but avoids creating the intermediate <code>String</code> and
-     * <code>char[]</code> objects.
-     * 
-     * @return The <code>char[]</code> array corresponding to this <code>BigDecimal</code>.
-     * @stable ICU 2.0
-     */
-
-    public char[] toCharArray() {
-        return layout();
-    }
-
-    /**
-     * Returns the <code>BigDecimal</code> as a <code>String</code>. This returns a <code>String</code> that exactly
-     * represents this <code>BigDecimal</code>, as defined in the decimal documentation (see {@link BigDecimal class
-     * header}).
-     * <p>
-     * By definition, using the {@link #BigDecimal(String)} constructor on the result <code>String</code> will create a
-     * <code>BigDecimal</code> that is exactly equal to the original <code>BigDecimal</code>.
-     * 
-     * @return The <code>String</code> exactly corresponding to this <code>BigDecimal</code>.
-     * @see #format(int, int)
-     * @see #format(int, int, int, int, int, int)
-     * @see #toCharArray()
-     * @stable ICU 2.0
-     */
-
-    public java.lang.String toString() {
-        return new java.lang.String(layout());
-    }
-
-    /**
-     * Returns the number as a <code>BigInteger</code> after removing the scale. That is, the number is expressed as a
-     * plain number, any decimal point is then removed (retaining the digits of any decimal part), and the result is
-     * then converted to a <code>BigInteger</code>.
-     * 
-     * @return The <code>java.math.BigInteger</code> equal in value to this <code>BigDecimal</code> multiplied by ten to
-     *         the power of <code>this.scale()</code>.
-     * @stable ICU 2.0
-     */
-
-    public java.math.BigInteger unscaledValue() {
-        com.ibm.icu.math.BigDecimal res = null;
-        if (exp >= 0)
-            res = this;
-        else {
-            res = clone(this); // safe copy
-            res.exp = 0; // drop scale
-        }
-        return res.toBigInteger();
-    }
-
-    /**
-     * Translates a <code>double</code> to a <code>BigDecimal</code>.
-     * <p>
-     * Returns a <code>BigDecimal</code> which is the decimal representation of the 64-bit signed binary floating point
-     * parameter. If the parameter is infinite, or is not a number (NaN), a <code>NumberFormatException</code> is
-     * thrown.
-     * <p>
-     * The number is constructed as though <code>num</code> had been converted to a <code>String</code> using the <code>
-     * Double.toString()</code> method and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
-     * This is typically not an exact conversion.
-     * 
-     * @param dub The <code>double</code> to be translated.
-     * @return The <code>BigDecimal</code> equal in value to <code>dub</code>.
-     * @throws NumberFormatException if the parameter is infinite or not a number.
-     * @stable ICU 2.0
-     */
-