[124920] Create a tool that generates a report of adopters' usage of WTP code
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/META-INF/MANIFEST.MF b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/META-INF/MANIFEST.MF
index dac8dd9..74f1c2e 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/META-INF/MANIFEST.MF
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/META-INF/MANIFEST.MF
@@ -5,6 +5,7 @@
 Bundle-Version: 1.0.0
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wtp.releng.tools.component,
+ org.eclipse.wtp.releng.tools.component.adopters,
  org.eclipse.wtp.releng.tools.component.api,
  org.eclipse.wtp.releng.tools.component.api.compatibility,
  org.eclipse.wtp.releng.tools.component.api.progress,
@@ -13,12 +14,14 @@
  org.eclipse.wtp.releng.tools.component.api.violation,
  org.eclipse.wtp.releng.tools.component.classes,
  org.eclipse.wtp.releng.tools.component.codecoverage,
+ org.eclipse.wtp.releng.tools.component.dependency,
  org.eclipse.wtp.releng.tools.component.images,
  org.eclipse.wtp.releng.tools.component.internal,
  org.eclipse.wtp.releng.tools.component.java,
  org.eclipse.wtp.releng.tools.component.javadoc,
  org.eclipse.wtp.releng.tools.component.model,
  org.eclipse.wtp.releng.tools.component.piagent,
+ org.eclipse.wtp.releng.tools.component.tptp,
  org.eclipse.wtp.releng.tools.component.use,
  org.eclipse.wtp.releng.tools.component.util,
  org.eclipse.wtp.releng.tools.component.violation,
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/plugin.xml b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/plugin.xml
index 47dd6dd..b57c394 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/plugin.xml
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/plugin.xml
@@ -47,6 +47,15 @@
       </application>
    </extension>
    <extension
+      id="SimpleClass2Reference"
+      point="org.eclipse.core.runtime.applications">
+      <application>
+         <run
+            class="org.eclipse.wtp.releng.tools.component.adopters.SimpleClass2Reference">
+         </run>
+      </application>
+   </extension>
+   <extension
       id="APIRefCompatibilityScanner"
       point="org.eclipse.core.runtime.applications">
       <application>
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/APIRefCompatibilityScanner.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/APIRefCompatibilityScanner.java
index 6ba2e3c..ca99fb0 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/APIRefCompatibilityScanner.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/APIRefCompatibilityScanner.java
@@ -255,7 +255,7 @@
             // use reflection, needed for java.* packages
             currClassAPI = loadClass(className);
           }
-          refs.addClassRef(currClassRef);
+// TODO:          refs.addClassRef(currClassRef);
         }
       }
       else if (elementName.equals("method") || qName.equals("method"))
@@ -265,8 +265,8 @@
         if (hasMethod(currClassAPI, name, desc))
           return;
         int refCount2 = Integer.parseInt(attributes.getValue("ref"));
-        if (refs.getClassRef(currClassRef.getName()) == null)
-          refs.addClassRef(currClassRef);
+// TODO:        if (refs.getClassRef(currClassRef.getName()) == null)
+// TODO:          refs.addClassRef(currClassRef);
         MethodRef methodRef = new MethodRef();
         methodRef.setName(name);
         methodRef.setDescriptor(desc);
@@ -280,8 +280,8 @@
           return;
         String desc = attributes.getValue("desc");
         int refCount2 = Integer.parseInt(attributes.getValue("ref"));
-        if (refs.getClassRef(currClassRef.getName()) == null)
-          refs.addClassRef(currClassRef);
+// TODO:        if (refs.getClassRef(currClassRef.getName()) == null)
+// TODO:          refs.addClassRef(currClassRef);
         FieldRef fieldRef = new FieldRef();
         fieldRef.setName(name);
         fieldRef.setDescriptor(desc);
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/BreakageReport.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/BreakageReport.java
new file mode 100644
index 0000000..c13764d
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/BreakageReport.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.adopters;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import javax.xml.parsers.ParserConfigurationException;
+import org.xml.sax.SAXException;
+
+public class BreakageReport
+{
+  List refs;
+
+  public void addRefs(References ref)
+  {
+    if (refs == null)
+      refs = new ArrayList();
+    refs.add(ref);
+  }
+
+  public List getRefs()
+  {
+    if (refs == null)
+      return new ArrayList(0);
+    else
+      return new ArrayList(refs);
+  }
+
+  public void load(InputStream is) throws IOException, ParserConfigurationException, SAXException
+  {
+    byte[] b = new byte[1024];
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    int read = is.read(b);
+    while (read != -1)
+    {
+      baos.write(b, 0, read);
+      read = is.read(b);
+    }
+    is.close();
+    String content = baos.toString();
+    int start = content.indexOf("<references");
+    int end = content.indexOf("</references>");
+    int offset = "</references>".length();
+    while (start != -1 && end != -1)
+    {
+      String s = content.substring(start, end + offset);
+      References ref = new References();
+      ref.load(new ByteArrayInputStream(s.getBytes()));
+      addRefs(ref);
+      content = content.substring(end + offset);
+      start = content.indexOf("<references");
+      end = content.indexOf("</references>");
+    }
+  }
+
+  public void save(OutputStream os) throws IOException
+  {
+    byte[] content = toString().getBytes();
+    os.write(content);
+    os.close();
+  }
+
+  public String toString()
+  {
+    StringBuffer sb = new StringBuffer();
+    sb.append("<breakageReport>");
+    for (Iterator it = getRefs().iterator(); it.hasNext();)
+      sb.append(it.next().toString());
+    sb.append("</breakageReport>");
+    return sb.toString();
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/Plugin2API.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/Plugin2API.java
index 9598139..75e6201 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/Plugin2API.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/Plugin2API.java
@@ -15,6 +15,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -74,6 +75,12 @@
     return src;
   }
 
+  public void setSrc(String src)
+  {
+    this.src = new ArrayList(1);
+    this.src.add(src);
+  }
+
   public void setSrc(Collection src)
   {
     this.src = src;
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/PluginRef.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/PluginRef.java
new file mode 100644
index 0000000..0725dad
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/PluginRef.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.adopters;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class PluginRef
+{
+  private String id;
+  private Map classRefs;
+
+  public Collection getClassRefs()
+  {
+    if (classRefs == null)
+      return new ArrayList(0);
+    else
+      return new ArrayList(classRefs.values());
+  }
+
+  public ClassRef getClassRef(String className)
+  {
+    if (classRefs == null)
+      return null;
+    else
+      return (ClassRef)classRefs.get(className);
+  }
+
+  public void addClassRef(ClassRef classRef)
+  {
+    if (classRefs == null)
+      classRefs = new HashMap();
+    classRefs.put(classRef.getName(), classRef);
+  }
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setId(String id)
+  {
+    this.id = id;
+  }
+
+  public String toString()
+  {
+    StringBuffer sb = new StringBuffer();
+    sb.append("<plugin id=\"");
+    sb.append(getId());
+    sb.append("\">");
+    for (Iterator it = getClassRefs().iterator(); it.hasNext();)
+      sb.append(it.next().toString());
+    sb.append("</plugin>");
+    return sb.toString();
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/References.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/References.java
index 8650952..3e1a730 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/References.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/References.java
@@ -11,43 +11,73 @@
 
 package org.eclipse.wtp.releng.tools.component.adopters;
 
-
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
 
 public class References
 {
-  private Map classRefs;
+  private Map pluginRefs;
   private String name;
+  private String contactInfo;
+  private String refBuildId;
   private String includes;
   private String excludes;
   private String includePlugins;
   private String excludePlugins;
 
-  public Collection getClassRefs()
+  public String getContactInfo()
   {
-    if (classRefs != null)
-      return new ArrayList(classRefs.values());
+    return contactInfo;
+  }
+
+  public void setContactInfo(String contactInfo)
+  {
+    this.contactInfo = contactInfo;
+  }
+
+  public String getRefBuildId()
+  {
+    return refBuildId;
+  }
+
+  public void setRefBuildId(String refBuildId)
+  {
+    this.refBuildId = refBuildId;
+  }
+
+  public List getPluginRefs()
+  {
+    if (pluginRefs != null)
+      return new ArrayList(pluginRefs.values());
     else
       return new ArrayList(0);
   }
 
-  public ClassRef getClassRef(String name)
+  public PluginRef getPluginRef(String id)
   {
-    if (classRefs != null)
-      return (ClassRef)classRefs.get(name);
+    if (pluginRefs != null)
+      return (PluginRef)pluginRefs.get(id);
     else
       return null;
   }
 
-  public void addClassRef(ClassRef classRef)
+  public void addPluginRef(PluginRef pluginRef)
   {
-    if (classRefs == null)
-      classRefs = new HashMap();
-    classRefs.put(classRef.getName(), classRef);
+    if (pluginRefs == null)
+      pluginRefs = new HashMap();
+    pluginRefs.put(pluginRef.getId(), pluginRef);
   }
 
   public String getName()
@@ -100,11 +130,24 @@
     this.includePlugins = includePlugins;
   }
 
+  public void load(InputStream is) throws ParserConfigurationException, SAXException, IOException
+  {
+    SAXParserFactory factory = SAXParserFactory.newInstance();
+    factory.setNamespaceAware(false);
+    factory.setValidating(false);
+    SAXParser parser = factory.newSAXParser();
+    parser.parse(new InputSource(is), new ReferencesHandler());
+  }
+
   public String toString()
   {
     StringBuffer sb = new StringBuffer();
     sb.append("<references name=\"");
     sb.append(getName());
+    sb.append("\" contactInfo=\"");
+    sb.append(getContactInfo());
+    sb.append("\" refBuildId=\"");
+    sb.append(getRefBuildId());
     sb.append("\" includes=\"");
     sb.append(getIncludes());
     sb.append("\" excludes=\"");
@@ -114,9 +157,73 @@
     sb.append("\" excludePlugins=\"");
     sb.append(getExcludePlugins());
     sb.append("\">");
-    for (Iterator it = getClassRefs().iterator(); it.hasNext();)
+    for (Iterator it = getPluginRefs().iterator(); it.hasNext();)
       sb.append(it.next().toString());
     sb.append("</references>");
     return sb.toString();
   }
+
+  private class ReferencesHandler extends DefaultHandler
+  {
+    private PluginRef pluginRef;
+    private ClassRef classRef;
+
+    public void startElement(String uri, String elementName, String qName, Attributes attributes) throws SAXException
+    {
+      if (elementName.equals("references") || qName.equals("references"))
+      {
+        setName(attributes.getValue("name"));
+        setContactInfo(attributes.getValue("contactInfo"));
+        setRefBuildId(attributes.getValue("refBuildId"));
+        setIncludes(attributes.getValue("includes"));
+        setExcludes(attributes.getValue("excludes"));
+        setIncludePlugins(attributes.getValue("includePlugins"));
+        setExcludePlugins(attributes.getValue("excludePlugins"));
+      }
+      else if (elementName.equals("plugin") || qName.equals("plugin"))
+      {
+        pluginRef = new PluginRef();
+        pluginRef.setId(attributes.getValue("id"));
+        addPluginRef(pluginRef);
+      }
+      else if (elementName.equals("class") || qName.equals("class"))
+      {
+        classRef = new ClassRef();
+        classRef.setName(attributes.getValue("name"));
+        classRef.setRefCount(Integer.parseInt(attributes.getValue("ref")));
+        classRef.setSubclassCount(Integer.parseInt(attributes.getValue("subclass")));
+        classRef.setImplementCount(Integer.parseInt(attributes.getValue("impl")));
+        classRef.setInstantiateCount(Integer.parseInt(attributes.getValue("instantiate")));
+        pluginRef.addClassRef(classRef);
+      }
+      else if (elementName.equals("method") || qName.equals("method"))
+      {
+        MethodRef methodRef = new MethodRef();
+        methodRef.setName(attributes.getValue("name"));
+        methodRef.setDescriptor(attributes.getValue("desc"));
+        methodRef.setRefCount(Integer.parseInt(attributes.getValue("ref")));
+        classRef.addMethodRef(methodRef);
+      }
+      else if (elementName.equals("field") || qName.equals("field"))
+      {
+        FieldRef fieldRef = new FieldRef();
+        fieldRef.setName(attributes.getValue("name"));
+        fieldRef.setDescriptor(attributes.getValue("desc"));
+        fieldRef.setRefCount(Integer.parseInt(attributes.getValue("ref")));
+        classRef.addFieldRef(fieldRef);
+      }
+    }
+
+    public void endElement(String uri, String elementName, String qName, Attributes attributes) throws SAXException
+    {
+      if (elementName.equals("plugin") || qName.equals("plugin"))
+      {
+        pluginRef = null;
+      }
+      else if (elementName.equals("class") || qName.equals("class"))
+      {
+        classRef = null;
+      }
+    }
+  }
 }
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/SimpleClass2Reference.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/SimpleClass2Reference.java
index 06d6e03..c6f5c91 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/SimpleClass2Reference.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/adopters/SimpleClass2Reference.java
@@ -23,7 +23,10 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.StringTokenizer;
 import java.util.Vector;
+import org.eclipse.core.runtime.IPlatformRunnable;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.jdt.core.Signature;
 import org.eclipse.jdt.core.util.ClassFormatException;
 import org.eclipse.jdt.core.util.IClassFileReader;
@@ -36,6 +39,9 @@
 import org.eclipse.jdt.core.util.IMethodInfo;
 import org.eclipse.jdt.internal.core.util.ClassFileReader;
 import org.eclipse.wtp.releng.tools.component.ILocation;
+import org.eclipse.wtp.releng.tools.component.api.API2ComponentAPI;
+import org.eclipse.wtp.releng.tools.component.api.ComponentAPI;
+import org.eclipse.wtp.releng.tools.component.api.ComponentAPICache;
 import org.eclipse.wtp.releng.tools.component.classes.IClassVisitor;
 import org.eclipse.wtp.releng.tools.component.classes.LibVisitor;
 import org.eclipse.wtp.releng.tools.component.internal.FieldRef;
@@ -45,16 +51,33 @@
 import org.eclipse.wtp.releng.tools.component.util.CommandOptionParser;
 import org.eclipse.wtp.releng.tools.component.xsl.XSLUtil;
 
-public class SimpleClass2Reference implements IClassVisitor
+public class SimpleClass2Reference implements IPlatformRunnable, IClassVisitor
 {
   private String src;
+  private String base;
   private String output;
+  private ComponentAPICache compAPICache;
   private String html;
   private Collection includes;
   private Collection excludes;
   private Collection includePlugins;
   private Collection excludePlugins;
 
+  public void setCompAPIDir(String compAPIDir)
+  {
+    compAPICache = new ComponentAPICache(compAPIDir);
+  }
+
+  public String getBase()
+  {
+    return base;
+  }
+
+  public void setBase(String base)
+  {
+    this.base = base;
+  }
+
   public String getOutput()
   {
     return output;
@@ -169,12 +192,9 @@
   {
     try
     {
-      XSLUtil.transform
-      (
-        ClassLoader.getSystemResourceAsStream("org/eclipse/wtp/releng/tools/component/xsl/api-ref-compatibility.xsl"),
-        new ByteArrayInputStream(refs.toString().getBytes()),
-        new FileOutputStream(html)
-      );
+      int i = html.replace('\\', '/').lastIndexOf("/");
+      String htmlDir = i != -1 ? html.substring(0, i + 1) : html;
+      XSLUtil.transform(Platform.getBundle("org.eclipse.wtp.releng.tools.component.core").getResource("org/eclipse/wtp/releng/tools/component/xsl/api-ref-compatibility.xsl").openStream(), new ByteArrayInputStream(refs.toString().getBytes()), new FileOutputStream(html), htmlDir);
     }
     catch (Throwable e)
     {
@@ -196,7 +216,8 @@
       }
       catch (ClassFormatException e)
       {
-        throw new RuntimeException(e);
+        System.err.println("Plugin: " + pluginId + " Class: " + classLoc.getAbsolutePath());
+        //throw new RuntimeException(e);
       }
     }
     return true;
@@ -470,12 +491,21 @@
 
   private ClassRef getClassRef(String name)
   {
-    ClassRef classRef = refs.getClassRef(name);
+    ComponentAPI compAPI = compAPICache.getComponentAPIByClassName(name);
+    String pluginId = compAPI != null ? compAPI.getName() : "unknown";
+    PluginRef pluginRef = refs.getPluginRef(pluginId);
+    if (pluginRef == null)
+    {
+      pluginRef = new PluginRef();
+      pluginRef.setId(pluginId);
+      refs.addPluginRef(pluginRef);
+    }
+    ClassRef classRef = pluginRef.getClassRef(name);
     if (classRef == null)
     {
       classRef = new ClassRef();
       classRef.setName(name);
-      refs.addClassRef(classRef);
+      pluginRef.addClassRef(classRef);
     }
     return classRef;
   }
@@ -542,7 +572,7 @@
     return true;
   }
 
-  protected String addTrailingSeperator(String s)
+  protected static String addTrailingSeperator(String s)
   {
     if (s != null && !s.endsWith("/") && !s.endsWith("\\"))
     {
@@ -556,25 +586,107 @@
     }
   }
 
+  public Object run(Object arguments)
+  {
+    String src = System.getProperty("src");
+    String base = System.getProperty("base");
+    String output = System.getProperty("output");
+    String html = System.getProperty("html");
+    String includes = System.getProperty("includes");
+    String excludes = System.getProperty("excludes");
+    String includePlugins = System.getProperty("includePlugins");
+    String excludePlugins = System.getProperty("excludePlugins");
+    List args = new ArrayList();
+    args.add("-src");
+    args.add(src);
+    args.add("-base");
+    args.add(base);
+    args.add("-output");
+    args.add(output);
+    args.add("-html");
+    args.add(html);
+    if (includes != null)
+    {
+      args.add("-includes");
+      args.addAll(tokenize(includes));
+    }
+    if (excludes != null)
+    {
+      args.add("excludes");
+      args.addAll(tokenize(excludes));
+    }
+    if (includePlugins != null)
+    {
+      args.add("-includePlugins");
+      args.addAll(tokenize(includePlugins));
+    }
+    if (excludePlugins != null)
+    {
+      args.add("-excludePlugins");
+      args.addAll(tokenize(excludePlugins));
+    }
+    try
+    {
+      main((String[])args.toArray(new String[0]));
+    }
+    catch (Throwable t)
+    {
+      t.printStackTrace();
+    }
+    return IPlatformRunnable.EXIT_OK;
+  }
+
+  private List tokenize(String s)
+  {
+    StringTokenizer st = new StringTokenizer(s, ",");
+    List tokens = new ArrayList(st.countTokens());
+    while(st.hasMoreTokens())
+      tokens.add(st.nextToken());
+    return tokens;
+  }
+
   public static void main(String[] args)
   {
     CommandOptionParser optionParser = new CommandOptionParser(args);
     Map options = optionParser.getOptions();
     Collection src = (Collection)options.get("src");
+    Collection base = (Collection)options.get("base");
     Collection output = (Collection)options.get("output");
     Collection html = (Collection)options.get("html");
     Collection includes = (Collection)options.get("includes");
     Collection excludes = (Collection)options.get("excludes");
     Collection includePlugins = (Collection)options.get("includePlugins");
     Collection excludePlugins = (Collection)options.get("excludePlugins");
-    if (src == null || output == null || src.isEmpty() || output.isEmpty())
+    if (src == null || base == null || output == null || src.isEmpty() || base.isEmpty() || output.isEmpty())
     {
       printUsage();
       System.exit(-1);
     }
+
+    String outputString = (String)output.iterator().next();
+    int i = outputString.replace('\\', '/').lastIndexOf('/');
+    String outputDir = outputString.substring(0, i + 1);
+    String componentxml = outputDir + "_tmp_componentxml";
+    String componentapi = outputDir + "_tmp_componentapi";
+
+    Plugin2API plugin2API = new Plugin2API();
+    plugin2API.setSrc(base);
+    plugin2API.setOutputDir(componentxml);
+    plugin2API.execute();
+
+    API2ComponentAPI api2CompAPI = new API2ComponentAPI();
+    api2CompAPI.setApi(componentxml);
+    api2CompAPI.setSrc(base);
+    api2CompAPI.setOutputDir(componentapi);
+    api2CompAPI.setIncludeInnerClass(true);
+    api2CompAPI.setIncludeInterfaces(true);
+    api2CompAPI.execute();
+
     SimpleClass2Reference class2Ref = new SimpleClass2Reference();
     class2Ref.setSrc((String)src.iterator().next());
-    class2Ref.setOutput((String)output.iterator().next());
+    class2Ref.setBase((String)base.iterator().next());
+    class2Ref.setOutput(outputString);
+    class2Ref.setCompAPIDir(componentapi);
     class2Ref.setHTML((String)html.iterator().next());
     class2Ref.setIncludes(includes);
     class2Ref.setExcludes(excludes);
@@ -587,7 +699,8 @@
   {
     System.out.println("Usage: java org.eclipse.wtp.releng.tools.component.adopters.SimpleClass2Reference -src <src> -output <output> [-options]");
     System.out.println("");
-    System.out.println("\t-src\t\t<src>\t\tlocation of a Eclipse-based product");
+    System.out.println("\t-src\t\t<src>\t\tlocation of your Eclipse-based product");
+    System.out.println("\t-base\t\t<base>\t\tlocation of your base build");
     System.out.println("\t-output\t\t<output>\toutput file");
     System.out.println("");
     System.out.println("where options include:");
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/ComponentAPICache.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/ComponentAPICache.java
new file mode 100644
index 0000000..572d719
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/api/ComponentAPICache.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.api;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.wtp.releng.tools.component.ILocation;
+import org.eclipse.wtp.releng.tools.component.ILocationVisitor;
+import org.eclipse.wtp.releng.tools.component.internal.FileLocation;
+import org.eclipse.wtp.releng.tools.component.internal.Location;
+import org.eclipse.wtp.releng.tools.component.util.CommonUtil;
+
+public class ComponentAPICache
+{
+  private int size;
+  private String compAPIDir;
+  private List cachedIds = new ArrayList(size);
+  private List cachedCompAPIs = new ArrayList(size);
+
+  public ComponentAPICache(String compAPIDir)
+  {
+    this(20, compAPIDir);
+  }
+
+  public ComponentAPICache(int size, String compAPIDir)
+  {
+    this.size = size;
+    this.compAPIDir = CommonUtil.addTrailingSeperator(compAPIDir);
+  }
+
+  public ComponentAPI getComponentAPI(String id) throws IOException
+  {
+    int index = cachedIds.indexOf(id);
+    if (index != -1)
+    {
+      ComponentAPI compAPI = (ComponentAPI)cachedCompAPIs.get(index);
+      if (index != 0)
+      {
+        cachedIds.remove(index);
+        cachedCompAPIs.remove(index);
+        cachedIds.add(0, id);
+        cachedCompAPIs.add(0, compAPI);
+      }
+      return compAPI;
+    }
+    StringBuffer sb = new StringBuffer(compAPIDir);
+    sb.append(id);
+    sb.append("/api-info.xml");
+    File file = new File(sb.toString());
+    ComponentAPI compAPI = new ComponentAPI();
+    compAPI.setName(id);
+    compAPI.setLocation(new FileLocation(file));
+    if (file.exists())
+    {
+      compAPI.load();
+    }
+    if (cachedCompAPIs.size() == size)
+    {
+      cachedIds.remove(size - 1);
+      ((ComponentAPI)cachedCompAPIs.remove(size - 1)).save();
+    }
+    cachedIds.add(0, id);
+    cachedCompAPIs.add(0, compAPI);
+    return compAPI;
+  }
+
+  private Map pkg2Id;
+
+  public ComponentAPI getComponentAPIByClassName(String className)
+  {
+    if (pkg2Id == null)
+    {
+      pkg2Id = new HashMap();
+      ILocation dir = Location.createLocation(new File(compAPIDir));
+      LocationVisitor visitor = new LocationVisitor();
+      dir.accept(visitor);
+    }
+    int index = className.lastIndexOf('.');
+    String pkgName = (index != -1) ? className.substring(0, index) : "";
+    String localName = (index != -1) ? className.substring(index + 1) : className;
+    int innerClassIndex = localName.indexOf("$");
+    if (innerClassIndex != -1)
+    {
+      localName = localName.substring(0, innerClassIndex);
+    }
+    if (localName.endsWith("[]"))
+    {
+      localName = localName.substring(0, localName.length() - 2);
+    }
+    List ids = (List)pkg2Id.get(pkgName);
+    if (ids != null)
+    {
+      for (Iterator it = ids.iterator(); it.hasNext();)
+      {
+        try
+        {
+          ComponentAPI compAPI = getComponentAPI((String)it.next());
+          PackageAPI pkgAPI = compAPI.getPackageAPI(pkgName);
+          if (pkgAPI.getClassAPI(localName) != null)
+          {
+            return compAPI;
+          }
+        }
+        catch (IOException ioe)
+        {
+          ioe.printStackTrace();
+        }
+      }
+    }
+    return null;
+  }
+
+  private class LocationVisitor implements ILocationVisitor
+  {
+    public boolean accept(ILocation location)
+    {
+      String absPath = location.getAbsolutePath().replace('\\', '/');
+      if (absPath.endsWith("api-info.xml"))
+      {
+        String id = absPath.substring(0, absPath.length() - "/api-info.xml".length());
+        int i = id.lastIndexOf('/');
+        if (i != -1)
+        {
+          id = id.substring(i + 1);
+          try
+          {
+            ComponentAPI compAPI = new ComponentAPI();
+            compAPI.setLocation(location);
+            compAPI.load();
+            for (Iterator it = compAPI.getPackageAPIs().iterator(); it.hasNext();)
+            {
+              String pkgName = ((PackageAPI)it.next()).getName();
+              List ids = (List)pkg2Id.get(pkgName);
+              if (ids == null)
+              {
+                ids = new ArrayList();
+                pkg2Id.put(pkgName, ids);
+              }
+              ids.add(id);
+            }
+          }
+          catch (IOException ioe)
+          {
+            ioe.printStackTrace();
+          }
+        }
+      }
+      return true;
+    }
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/classes/Class2Reference.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/classes/Class2Reference.java
index d4a9039..e58fdae 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/classes/Class2Reference.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/classes/Class2Reference.java
@@ -177,7 +177,8 @@
       }
       catch (ClassFormatException e)
       {
-        throw new RuntimeException(e);
+        System.err.println("Plugin: " + pluginId + " Class: " + classLoc.getAbsolutePath());
+        //throw new RuntimeException(e);
       }
     }
     return true;
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/util/CommonUtil.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/util/CommonUtil.java
new file mode 100644
index 0000000..7e4d50c
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.core/src/org/eclipse/wtp/releng/tools/component/util/CommonUtil.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.util;
+
+
+public class CommonUtil
+{
+  private CommonUtil()
+  {
+  }
+
+  public static String addTrailingSeperator(String s)
+  {
+    if (s != null && !s.endsWith("/") && !s.endsWith("\\"))
+    {
+      StringBuffer sb = new StringBuffer(s);
+      sb.append('/');
+      return sb.toString();
+    }
+    else
+    {
+      return s;
+    }
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/META-INF/MANIFEST.MF b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/META-INF/MANIFEST.MF
index 21291fd..24da492 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/META-INF/MANIFEST.MF
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/META-INF/MANIFEST.MF
@@ -8,8 +8,11 @@
 Export-Package: org.eclipse.wtp.releng.tools.component.ui,
  org.eclipse.wtp.releng.tools.component.ui.internal,
  org.eclipse.wtp.releng.tools.component.ui.internal.action,
+ org.eclipse.wtp.releng.tools.component.ui.internal.adopter.action,
+ org.eclipse.wtp.releng.tools.component.ui.internal.adopter.preference,
  org.eclipse.wtp.releng.tools.component.ui.internal.editor,
- org.eclipse.wtp.releng.tools.component.ui.internal.job
+ org.eclipse.wtp.releng.tools.component.ui.internal.job,
+ org.eclipse.wtp.releng.tools.component.ui.internal.wizard
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.wtp.releng.tools.component.core,
@@ -18,5 +21,6 @@
  org.eclipse.ui.forms,
  org.eclipse.ui.ide,
  org.eclipse.pde.core,
- org.eclipse.pde.ui
+ org.eclipse.pde.ui,
+ org.eclipse.pde
 Eclipse-AutoStart: true
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.properties b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.properties
index 53c455b..3855deb 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.properties
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.properties
@@ -2,4 +2,8 @@
 LABEL_POPUP_ACTION_API_VIOLATION=Scan for API Violation
 LABEL_POPUP_ACTION_SCAN_4_MISSING_JAVADOC=Scan for Missing javadoc
 LABEL_POPUP_ACTION_SCAN_4_NON_API_DEPS=Scan for Non-API dependencies
-EDITOR_COMPONENT_XML=Component.xml Editor
\ No newline at end of file
+LABEL_POPUP_ACTION_APPLY_NON_API_DEPRECATION_POLICY=Apply non-API deprecation policy
+EDITOR_COMPONENT_XML=Component.xml Editor
+PREFERENCE_PAGE_USAGE_REPORT=Adopter Usage Reports
+LABEL_CATEGORY_API=API
+LABEL_VIEW_BREAKAGE=Breakage Report View
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.xml b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.xml
index 5a79b00..58d3782 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.xml
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/plugin.xml
@@ -42,4 +42,52 @@
       </objectContribution>
    </extension>
 
-</plugin>
+   <extension point="org.eclipse.ui.newWizards">
+      <category id="org.eclipse.wtp.releng.tools.component.core" name="API"/>
+      <wizard
+         name="API Reference Report"
+         icon="src/org/eclipse/wtp/releng/tools/component/images/Idea.jpg"
+         category="org.eclipse.wtp.releng.tools.component.core"
+         class="org.eclipse.wtp.releng.tools.component.ui.internal.wizard.APIRefCompatibilityWizard"
+         id="org.eclipse.wtp.releng.tools.component.ui.internal.wizard.APIRefCompatibilityWizard">
+      </wizard>
+   </extension>
+
+   <extension point="org.eclipse.ui.popupMenus">
+      <objectContribution
+         objectClass="org.eclipse.core.resources.IProject"
+         id="org.eclipse.wtp.releng.tools.component.ui.internal.adopter">
+         <menu
+            label="%LABEL_POPUP_MENU_API"
+            path="additions"
+            id="org.eclipse.wtp.releng.tools.component.ui.popupMenu">
+            <separator name="popupActions"/> 
+         </menu>
+         <action
+            label="%LABEL_POPUP_ACTION_APPLY_NON_API_DEPRECATION_POLICY"
+            class="org.eclipse.wtp.releng.tools.component.ui.internal.adopter.action.Scan4APIRefCompatibility"
+            menubarPath="org.eclipse.wtp.releng.tools.component.ui.popupMenu/popupActions"
+            id="org.eclipse.wtp.releng.tools.component.ui.internal.adopter.action.Scan4APIRefCompatibility"/> 
+      </objectContribution>
+   </extension>
+
+   <extension point="org.eclipse.ui.preferencePages">
+      <page
+         name="%PREFERENCE_PAGE_USAGE_REPORT"
+         class="org.eclipse.wtp.releng.tools.component.ui.internal.adopter.preference.UsageReportsPrefPage"
+         id="org.eclipse.wtp.releng.tools.component.ui.internal.adopter.preference.UsageReportsPrefPage">
+      </page>
+   </extension>
+
+   <extension point="org.eclipse.ui.views"> 
+      <category
+         id="org.eclipse.wtp.releng.tools.component.ui"
+         name="%LABEL_CATEGORY_API"/>
+      <view
+         id="org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view.BreakageReportView"
+         name="%LABEL_VIEW_BREAKAGE"
+         category="org.eclipse.wtp.releng.tools.component.ui"
+         class="org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view.BreakageReportView"/>
+</extension>
+
+</plugin>
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/Message.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/Message.java
new file mode 100644
index 0000000..33d2e13
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/Message.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.ui;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Message
+{
+  private static ResourceBundle bundle;
+
+  public static String getMessage(String key)
+  {
+    if (bundle == null)
+    {
+      try
+      {
+        bundle = ResourceBundle.getBundle("org.eclipse.wtp.releng.tools.component.ui.component");
+      }
+      catch (MissingResourceException e)
+      {
+        return key;
+      }
+    }
+    return bundle.getString(key);
+  }
+
+  public static String getMessage(String key, String[] subsitutes)
+  {
+    return MessageFormat.format(getMessage(key), subsitutes);
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/component.properties b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/component.properties
index 33b6c8e..8c392fa 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/component.properties
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/component.properties
@@ -49,4 +49,20 @@
 DIALOG_TITLE_ADD_COMPONENT_REFS=Add component references
 DIALOG_TITLE_ADD_PLUGINS=Add plug-ins
 DIALOG_TITLE_ADD_PACKAGES=Add packages
-DIALOG_TITLE_ADD_TYPES=Add types
\ No newline at end of file
+DIALOG_TITLE_ADD_TYPES=Add types
+
+ADOPTER_MISSING_CLASS=Class {0} is removed from plugin {1}
+ADOPTER_MISSING_METHOD=Method {0} is removed from class {1}
+ADOPTER_MISSING_FIELD=Field {0} is removed from class {1}
+
+LABEL_ADOPTER_USAGE_REPORTS=Projects containing adopter usage reports:
+LABEL_ADD=Add
+LABEL_REMOVE=Remove
+LABEL_PROJECT=Project
+
+TITLE_PROJECT_SELECTION_DIALOG=Project Selection Dialog
+TITLE_USAGE_REPORTS_NOT_FOUND=No Usage Reports Found
+TITLE_COMPATIBLE_WITH_USAGE_REPORTS=Compatible With Adopters' Usage Reports
+
+MSG_ERROR_PLEASE_ADD_USAGE_REPORTS=No usage reports found. Please go to preference and add the adopters' usage reports.
+MSG_INFO_COMPATIBLE_WITH_USAGE_REPORTS=APIs are compatible with adopters' usage reports.
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/ComponentUIPlugin.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/ComponentUIPlugin.java
index 65cb2e2..ca819ad 100644
--- a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/ComponentUIPlugin.java
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/ComponentUIPlugin.java
@@ -11,8 +11,7 @@
 
 package org.eclipse.wtp.releng.tools.component.ui.internal;
 
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.ui.IStartup;
 import org.eclipse.ui.plugin.*;
 import org.eclipse.wtp.releng.tools.component.ui.ComponentManager;
@@ -109,4 +108,9 @@
     }
     return resourceBundle;
   }
-}
+
+  public String getPluginStateLocation()
+  {
+    return Platform.getPluginStateLocation(this).addTrailingSeparator().toOSString();
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/action/Scan4APIRefCompatibility.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/action/Scan4APIRefCompatibility.java
new file mode 100644
index 0000000..3494f6d
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/action/Scan4APIRefCompatibility.java
@@ -0,0 +1,539 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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
+ *******************************************************************************/
+package org.eclipse.wtp.releng.tools.component.ui.internal.adopter.action;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.core.search.IJavaSearchConstants;
+import org.eclipse.jdt.core.search.IJavaSearchScope;
+import org.eclipse.jdt.core.search.SearchEngine;
+import org.eclipse.jdt.core.search.SearchMatch;
+import org.eclipse.jdt.core.search.SearchParticipant;
+import org.eclipse.jdt.core.search.SearchPattern;
+import org.eclipse.jdt.core.search.SearchRequestor;
+import org.eclipse.jdt.core.util.ClassFormatException;
+import org.eclipse.jdt.core.util.IClassFileReader;
+import org.eclipse.jdt.core.util.IFieldInfo;
+import org.eclipse.jdt.core.util.IMethodInfo;
+import org.eclipse.jdt.internal.core.util.ClassFileReader;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wtp.releng.tools.component.adopters.BreakageReport;
+import org.eclipse.wtp.releng.tools.component.adopters.ClassRef;
+import org.eclipse.wtp.releng.tools.component.adopters.FieldRef;
+import org.eclipse.wtp.releng.tools.component.adopters.MethodRef;
+import org.eclipse.wtp.releng.tools.component.adopters.PluginRef;
+import org.eclipse.wtp.releng.tools.component.adopters.References;
+import org.eclipse.wtp.releng.tools.component.api.ClassAPI;
+import org.eclipse.wtp.releng.tools.component.api.FieldAPI;
+import org.eclipse.wtp.releng.tools.component.api.MethodAPI;
+import org.eclipse.wtp.releng.tools.component.ui.Message;
+import org.eclipse.wtp.releng.tools.component.ui.internal.ComponentUIPlugin;
+import org.eclipse.wtp.releng.tools.component.ui.internal.adopter.preference.UsageReportsPrefPage;
+import org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view.BreakageReportView;
+
+public class Scan4APIRefCompatibility extends Action implements IActionDelegate
+{
+  public void run()
+  {
+    List refs = UsageReportsPrefPage.getReferences();
+    if (refs.isEmpty())
+    {
+      MessageDialog.openError(Display.getDefault().getActiveShell(), Message.getMessage("TITLE_USAGE_REPORTS_NOT_FOUND"), Message.getMessage("MSG_ERROR_PLEASE_ADD_USAGE_REPORTS"));
+      return;
+    }
+    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+    if (window != null)
+    {
+      IStructuredSelection selections = (IStructuredSelection)window.getSelectionService().getSelection();
+      for (Iterator it = selections.iterator(); it.hasNext();)
+      {
+        try
+        {
+          IProject project = (IProject)it.next();
+          IJavaProject javaProject = JavaCore.create(project);
+          IPath outputLoc = javaProject.getOutputLocation();
+          IFolder bin = (IFolder)ResourcesPlugin.getWorkspace().getRoot().findMember(outputLoc);
+          final Map classAPIs = new HashMap();
+          bin.accept(new IResourceProxyVisitor()
+          {
+            public boolean visit(IResourceProxy proxy) throws CoreException
+            {
+              if (proxy.getName().endsWith(".class"))
+              {
+                try
+                {
+                  IClassFileReader reader = read((IFile)proxy.requestResource());
+                  ClassAPI classAPI = new ClassAPI();
+                  String className = new String(reader.getClassName()).replace('/', '.');
+                  classAPI.setName(className);
+                  classAPI.setAccess(reader.getAccessFlags());
+                  classAPI.setSuperClass(new String(reader.getSuperclassName()).replace('/', '.'));
+                  char[][] interfaces = reader.getInterfaceNames();
+                  for (int i = 0; i < interfaces.length; i++)
+                  {
+                    classAPI.addInterface(new String(interfaces[i]).replace('/', '.'));
+                  }
+                  classAPIs.put(className, classAPI);
+                  IMethodInfo[] methods = reader.getMethodInfos();
+                  for (int i = 0; i < methods.length; i++)
+                  {
+                    MethodAPI methodAPI = new MethodAPI();
+                    methodAPI.setName(new String(methods[i].getName()));
+                    methodAPI.setDescriptor(new String(methods[i].getDescriptor()));
+                    classAPI.addMethodAPI(methodAPI);
+                  }
+                  IFieldInfo[] fields = reader.getFieldInfos();
+                  for (int i = 0; i < fields.length; i++)
+                  {
+                    FieldAPI fieldAPI = new FieldAPI();
+                    fieldAPI.setName(new String(fields[i].getName()));
+                    classAPI.addFieldAPI(fieldAPI);
+                  }
+                }
+                catch (Throwable t)
+                {
+                  t.printStackTrace();
+                }
+              }
+              return true;
+            }
+          }, IContainer.NONE);
+          String pluginId = project.getName();
+          BreakageReport breakageReport = new BreakageReport();
+          for (Iterator it4 = refs.iterator(); it4.hasNext();)
+          {
+            boolean isCompatible = true;
+            References ref = (References)it4.next();
+            References brokenRefs = new References();
+            brokenRefs.setName(ref.getName());
+            brokenRefs.setContactInfo(ref.getContactInfo());
+            brokenRefs.setRefBuildId(ref.getRefBuildId());
+            PluginRef pluginRef = ref.getPluginRef(pluginId);
+            if (pluginRef != null)
+            {
+              PluginRef brokenPluginRef = new PluginRef();
+              brokenPluginRef.setId(pluginId);
+              brokenRefs.addPluginRef(brokenPluginRef);
+              for (Iterator it2 = pluginRef.getClassRefs().iterator(); it2.hasNext();)
+              {
+                ClassRef classRef = (ClassRef)it2.next();
+                String className = classRef.getName();
+                if (className.endsWith("[]"))
+                  className = className.substring(0, className.length() - 2);
+                ClassAPI classAPI = (ClassAPI)classAPIs.get(className);
+                if (classAPI == null)
+                {
+                  brokenPluginRef.addClassRef(classRef);
+                  isCompatible = false;
+                }
+                else
+                {
+                  for (Iterator it3 = classRef.getMethodRefs().iterator(); it3.hasNext();)
+                  {
+                    MethodRef methodRef = (MethodRef)it3.next();
+                    String methodName = methodRef.getName();
+                    String methodDescriptor = methodRef.getDescriptor();
+                    if (!methodExists(classAPIs, className, methodName, methodDescriptor, javaProject))
+                    {
+                      ClassRef brokenClassRef = brokenPluginRef.getClassRef(className);
+                      if (brokenClassRef == null)
+                      {
+                        brokenClassRef = new ClassRef();
+                        brokenClassRef.setName(className);
+                        brokenPluginRef.addClassRef(brokenClassRef);
+                      }
+                      brokenClassRef.addMethodRef(methodRef);
+                      isCompatible = false;
+                    }
+                  }
+                  for (Iterator it3 = classRef.getFieldRefs().iterator(); it3.hasNext();)
+                  {
+                    FieldRef fieldRef = (FieldRef)it3.next();
+                    String fieldName = fieldRef.getName();
+                    if (!fieldExists(classAPIs, className, fieldName, javaProject))
+                    {
+                      ClassRef brokenClassRef = brokenPluginRef.getClassRef(className);
+                      if (brokenClassRef == null)
+                      {
+                        brokenClassRef = new ClassRef();
+                        brokenClassRef.setName(className);
+                        brokenPluginRef.addClassRef(brokenClassRef);
+                      }
+                      brokenClassRef.addFieldRef(fieldRef);
+                      isCompatible = false;
+                    }
+                  }
+                }
+              }
+            }
+            if (!isCompatible)
+            {
+              breakageReport.addRefs(brokenRefs);
+            }
+          }
+          if (breakageReport.getRefs().isEmpty())
+          {
+            MessageDialog.openInformation(Display.getDefault().getActiveShell(), Message.getMessage("TITLE_COMPATIBLE_WITH_USAGE_REPORTS"), Message.getMessage("MSG_INFO_COMPATIBLE_WITH_USAGE_REPORTS"));
+          }
+          else
+          {
+            String stateLoc = ComponentUIPlugin.getDefault().getPluginStateLocation();
+            StringBuffer sb = new StringBuffer();
+            sb.append(stateLoc);
+            sb.append(pluginId);
+            sb.append(".breakage");
+            breakageReport.save(new FileOutputStream(sb.toString()));
+            IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view.BreakageReportView");
+            view.setFocus();
+            ((BreakageReportView)view).refresh();
+          }
+        }
+        catch (Throwable t)
+        {
+          t.printStackTrace();
+        }
+      }
+    }
+  }
+
+  private IClassFileReader read(IFile file) throws IOException, ClassFormatException, CoreException
+  {
+    InputStream is = null;
+    ByteArrayOutputStream baos = null;
+    try
+    {
+      byte[] b = new byte[8192];
+      baos = new ByteArrayOutputStream(8192);
+      is = file.getContents();
+      for (int read = is.read(b); read != -1; read = is.read(b))
+      {
+        baos.write(b, 0, read);
+      }
+      is.close();
+      baos.close();
+      return new ClassFileReader(baos.toByteArray(), IClassFileReader.CONSTANT_POOL | IClassFileReader.METHOD_INFOS | IClassFileReader.METHOD_BODIES | IClassFileReader.FIELD_INFOS | IClassFileReader.SUPER_INTERFACES);
+    }
+    finally
+    {
+      if (is != null)
+      {
+        try
+        {
+          is.close();
+        }
+        catch (IOException e)
+        {
+        }
+      }
+      if (baos != null)
+      {
+        try
+        {
+          baos.close();
+        }
+        catch (IOException e)
+        {
+        }
+      }
+    }
+  }
+
+  private boolean methodExists(Map classAPIs, String className, String methodName, String methodDescriptor, IJavaProject javaProject)
+  {
+    ClassAPI classAPI = (ClassAPI)classAPIs.get(className);
+    if (classAPI != null)
+    {
+      if (classAPI.getMethodAPI(methodName, methodDescriptor) != null)
+      {
+        return true;
+      }
+      else
+      {
+        String superClassName = classAPI.getSuperClass();
+        boolean exists = methodExists(classAPIs, superClassName, methodName, methodDescriptor, javaProject);
+        if (exists)
+        {
+          return true;
+        }
+        for (Iterator it = classAPI.getInterfaces().iterator(); it.hasNext();)
+        {
+          String superInterfaceName = (String)it.next();
+          exists = methodExists(classAPIs, superInterfaceName, methodName, methodDescriptor, javaProject);
+          if (exists)
+          {
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+    else
+    {
+      try
+      {
+        IType type = getType(javaProject, className);
+        return methodExists(javaProject, type, methodName, toParameterTypes(methodDescriptor));
+      }
+      catch (Throwable t)
+      {
+        t.printStackTrace();
+        return false;
+      }
+    }
+  }
+
+  private boolean fieldExists(Map classAPIs, String className, String fieldName, IJavaProject javaProject)
+  {
+    ClassAPI classAPI = (ClassAPI)classAPIs.get(className);
+    if (classAPI != null)
+    {
+      if (classAPI.getFieldAPI(fieldName) != null)
+      {
+        return true;
+      }
+      else
+      {
+        String superClassName = classAPI.getSuperClass();
+        boolean exists = fieldExists(classAPIs, superClassName, fieldName, javaProject);
+        if (exists)
+        {
+          return true;
+        }
+        for (Iterator it = classAPI.getInterfaces().iterator(); it.hasNext();)
+        {
+          String superInterfaceName = (String)it.next();
+          exists = fieldExists(classAPIs, superInterfaceName, fieldName, javaProject);
+          if (exists)
+          {
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+    else
+    {
+      try
+      {
+        IType type = getType(javaProject, className);
+        return fieldExists(javaProject, type, fieldName);
+      }
+      catch (Throwable t)
+      {
+        t.printStackTrace();
+        return false;
+      }
+    }
+  }
+  private SearchEngine se = new SearchEngine();
+
+  private IType getType(IJavaProject javaProject, String className) throws CoreException
+  {
+    StringTokenizer innerClassTokens = null;
+    if (className.indexOf('$') != -1)
+    {
+      innerClassTokens = new StringTokenizer(className, "$");
+      className = innerClassTokens.nextToken();
+    }
+    SearchPattern spattern = SearchPattern.createPattern(className, IJavaSearchConstants.CLASS_AND_INTERFACE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH);
+    SearchParticipant[] sparticipant = new SearchParticipant[]{SearchEngine.getDefaultSearchParticipant()};
+    IJavaSearchScope ijss = SearchEngine.createJavaSearchScope(new IJavaElement[]{javaProject});
+    ClassSearchRequestor csr = new ClassSearchRequestor();
+    se.search(spattern, sparticipant, ijss, csr, new NullProgressMonitor());
+    IType type = csr.getType();
+    if (type == null)
+      return null;
+    if (innerClassTokens == null)
+      return type;
+    else
+    {
+      while (innerClassTokens.hasMoreTokens())
+      {
+        type = type.getType(innerClassTokens.nextToken());
+        if (type == null)
+          return null;
+      }
+      return type;
+    }
+  }
+
+  private String[] toParameterTypes(String desc)
+  {
+    String[] paramTypes = Signature.getParameterTypes(desc);
+    for (int i = 0; i < paramTypes.length; i++)
+    {
+      paramTypes[i] = paramTypes[i].replace('/', '.');
+    }
+    return paramTypes;
+  }
+
+  private boolean methodExists(IJavaProject javaProject, IType type, String name, String[] paramTypes) throws JavaModelException, CoreException
+  {
+    if (type != null)
+    {
+      IMethod method = type.getMethod(name, paramTypes);
+      if (method.exists())
+        return true;
+      if (type.isClass())
+      {
+        String superClassName = type.getSuperclassName();
+        if (superClassName != null)
+        {
+          IType superType = getType(javaProject, superClassName);
+          return methodExists(javaProject, superType, name, paramTypes);
+        }
+      }
+      else
+      {
+        String[] interfaceNames = type.getSuperInterfaceNames();
+        for (int i = 0; i < interfaceNames.length; i++)
+        {
+          if (methodExists(javaProject, getType(javaProject, interfaceNames[i]), name, paramTypes))
+          {
+            return true;
+          }
+        }
+      }
+    }
+    return false;
+  }
+
+  private boolean fieldExists(IJavaProject javaProject, IType type, String name) throws JavaModelException, CoreException
+  {
+    if (type != null)
+    {
+      IField field = type.getField(name);
+      if (field.exists())
+        return true;
+      if (type.isClass())
+      {
+        String superClassName = type.getSuperclassName();
+        if (superClassName != null)
+        {
+          IType superType = getType(javaProject, superClassName);
+          return fieldExists(javaProject, superType, name);
+        }
+      }
+      else
+      {
+        String[] interfaceNames = type.getSuperInterfaceNames();
+        for (int i = 0; i < interfaceNames.length; i++)
+        {
+          if (fieldExists(javaProject, getType(javaProject, interfaceNames[i]), name))
+          {
+            return true;
+          }
+        }
+      }
+    }
+    return false;
+  }
+
+  /*
+   * Commenting out this method for now. Please do not remove it
+   * just in case we need to use it in the future.
+   *
+  private IResource findJavaClass(IJavaProject javaProject, String className)
+  {
+    if (className.endsWith("[]"))
+      className = className.substring(0, className.length() - 2);
+    int index = className.indexOf('$');
+    if (index != -1)
+      className = className.substring(0, index);
+    try
+    {
+      IClasspathEntry[] cps = javaProject.getRawClasspath();
+      for (int i = 0; i < cps.length; i++)
+      {
+        if (cps[i].getEntryKind() == IClasspathEntry.CPE_SOURCE)
+        {
+          StringBuffer sb = new StringBuffer();
+          sb.append(cps[i].getPath().toString());
+          sb.append(className.replace('.', '/'));
+          sb.append(".java");
+          IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(sb.toString());
+          if (res != null && res.exists())
+          {
+            return res;
+          }
+        }
+      }
+    }
+    catch (JavaModelException jme)
+    {
+      jme.printStackTrace();
+    }
+    return javaProject.getProject();
+  }
+  */
+
+  public void run(IAction action)
+  {
+    run();
+  }
+
+  public void selectionChanged(IAction action, ISelection selection)
+  {
+  }
+  private class ClassSearchRequestor extends SearchRequestor
+  {
+    private IType type;
+
+    public IType getType()
+    {
+      return type;
+    }
+
+    public void acceptSearchMatch(SearchMatch match)
+    {
+      Object element = match.getElement();
+      if (element instanceof IType)
+      {
+        type = (IType)element;
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/preference/ProjectSelectionDialog.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/preference/ProjectSelectionDialog.java
new file mode 100644
index 0000000..3633103
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/preference/ProjectSelectionDialog.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 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
+ *******************************************************************************/
+package org.eclipse.wtp.releng.tools.component.ui.internal.adopter.preference;
+
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.DecoratingLabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.wtp.releng.tools.component.ui.Message;
+
+/**
+ * This class provides a dialog for browsing workspace resources. See also
+ * {@link DialogUtils#browseResources}.
+ */
+public class ProjectSelectionDialog extends Dialog
+{
+  private Tree tree;
+  private TreeViewer treeViewer;
+  private IProject[] selections;
+  private List excludes;
+
+  public ProjectSelectionDialog(Shell parent, List excludes)
+  {
+    super(parent);
+    setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
+    this.excludes = excludes;
+  }
+
+  public IProject[] getSelections()
+  {
+    return selections;
+  }
+
+  protected void cancelPressed()
+  {
+    selections = null;
+    setReturnCode(Dialog.CANCEL);
+    super.cancelPressed();
+  }
+
+  protected void okPressed()
+  {
+    ISelection selection = treeViewer.getSelection();
+    if (selection instanceof IStructuredSelection)
+    {
+      IStructuredSelection structuredSelection = (IStructuredSelection)selection;
+      selections = new IProject[structuredSelection.size()];
+      int i = 0;
+      for (Iterator it = structuredSelection.iterator(); it.hasNext();)
+      {
+        selections[i++] = (IProject)it.next();
+      }
+    }
+    setReturnCode(Dialog.OK);
+    super.okPressed();
+  }
+
+  protected void configureShell(Shell shell)
+  {
+    super.configureShell(shell);
+    shell.setText(Message.getMessage("TITLE_PROJECT_SELECTION_DIALOG"));
+  }
+
+  protected Control createDialogArea(Composite superparent)
+  {
+    Composite parent = new Composite(superparent, SWT.NONE);
+    GridLayout layout = new GridLayout();
+    layout.numColumns = 1;
+    parent.setLayout(layout);
+    parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+    GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
+    gd.widthHint = 400;
+    gd.heightHint = 300;
+    gd.grabExcessVerticalSpace = true;
+    gd.grabExcessHorizontalSpace = true;
+    parent.setLayoutData(gd);
+
+    tree = new Tree(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+    gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
+    gd.grabExcessVerticalSpace = true;
+    gd.grabExcessHorizontalSpace = true;
+    tree.setLayoutData(gd);
+
+    treeViewer = new TreeViewer(tree);
+    treeViewer.setContentProvider(new WorkbenchContentProvider());
+    treeViewer.setLabelProvider(new DecoratingLabelProvider(new WorkbenchLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
+    treeViewer.addFilter
+    (
+      new ViewerFilter()
+      {
+        public boolean select(Viewer viewer, Object parentObject, Object object)
+        {
+          if (object instanceof IProject && !excludes.contains(((IProject)object).getName()))
+            return true;
+          else
+            return false;
+        }
+      }
+    );
+    treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
+
+    org.eclipse.jface.dialogs.Dialog.applyDialogFont(superparent);
+    return parent;
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/preference/UsageReportsPrefPage.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/preference/UsageReportsPrefPage.java
new file mode 100644
index 0000000..aa5f007
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/preference/UsageReportsPrefPage.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.ui.internal.adopter.preference;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResourceProxy;
+import org.eclipse.core.resources.IResourceProxyVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.wtp.releng.tools.component.adopters.References;
+import org.eclipse.wtp.releng.tools.component.ui.Message;
+import org.eclipse.wtp.releng.tools.component.ui.internal.ComponentUIPlugin;
+
+public class UsageReportsPrefPage extends PreferencePage implements IWorkbenchPreferencePage, SelectionListener
+{
+  private List reports;
+  private Button add;
+  private Button remove;
+
+  protected Control createContents(Composite superparent)
+  {
+    Composite parent = new Composite(superparent, SWT.NONE);    
+    GridLayout layout = new GridLayout();
+    layout.numColumns = 1;
+    parent.setLayout(layout);
+    parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+    Label label = new Label(parent, SWT.READ_ONLY | SWT.WRAP);
+    label.setText(Message.getMessage("LABEL_ADOPTER_USAGE_REPORTS"));
+    label.setLayoutData(new GridData( GridData.FILL_HORIZONTAL));
+
+    Composite c = new Composite(parent, SWT.NONE);
+    GridLayout gl = new GridLayout();
+    gl.numColumns = 2;
+    gl.marginHeight = 0;
+    gl.marginWidth = 0;
+    c.setLayout(gl);
+    c.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ));
+
+    reports = new List(c, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+    GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+    gd.widthHint = 256;
+    reports.setLayoutData(gd);
+
+    Composite c2 = new Composite(c, SWT.NONE);
+    gl = new GridLayout();
+    gl.numColumns = 1;
+    gl.marginHeight = 10;
+    gl.marginWidth = 0;
+    c2.setLayout(gl);
+
+    add = new Button(c2, SWT.PUSH);
+    add.setText(Message.getMessage("LABEL_ADD"));
+    add.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+    add.addSelectionListener(this);
+
+    remove = new Button(c2, SWT.PUSH);
+    remove.setText(Message.getMessage("LABEL_REMOVE"));
+    remove.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+    remove.addSelectionListener(this);
+
+    initValues();
+    return parent;
+  }
+
+  protected void performDefaults()
+  {
+    super.performDefaults();
+  }
+
+  /**
+   * Do anything necessary because the OK button has been pressed.
+   *  @return whether it is okay to close the preference page
+   */
+  public boolean performOk()
+  {
+    storeValues();
+    return true;
+  }
+
+  protected void performApply()
+  {
+    performOk();
+  }
+
+  private void initValues()
+  {
+    IPreferenceStore pref = ComponentUIPlugin.getDefault().getPreferenceStore();
+    String value = pref.getString("UsageReportPrefPage");
+    StringTokenizer st = new StringTokenizer(value, "#");
+    java.util.List projectNames = new ArrayList();
+    while (st.hasMoreTokens())
+    {
+      String token = st.nextToken();
+      reports.add(token);
+      projectNames.add(token);
+    }
+    reloadRefs(projectNames);
+  }
+
+  private void storeValues()
+  {
+    StringBuffer sb = new StringBuffer();
+    java.util.List projectNames = new ArrayList();
+    String[] s = reports.getItems();
+    for (int i = 0; i < s.length; i++)
+    {
+      sb.append(s[i]);
+      sb.append("#");
+      projectNames.add(s[i]);
+    }
+    if (sb.length() > 0)
+      sb.deleteCharAt(sb.length() - 1);
+    IPreferenceStore pref = ComponentUIPlugin.getDefault().getPreferenceStore();
+    pref.setValue("UsageReportPrefPage", sb.toString());
+    reloadRefs(projectNames);
+  }
+
+  public void init(IWorkbench desktop)
+  {
+  }
+
+  public void widgetDefaultSelected(SelectionEvent e)
+  {
+  }
+
+  public void widgetSelected(SelectionEvent e)
+  {
+    if (e.widget == add)
+    {
+      String[] excludes = reports.getItems();
+      java.util.List list = new ArrayList(excludes.length);
+      for (int i = 0; i < excludes.length; i++)
+      {
+        list.add(excludes[i]);
+      }
+      ProjectSelectionDialog dialog = new ProjectSelectionDialog(getShell(), list);
+      if (dialog.open() == Dialog.OK)
+      {
+        IProject[] projects = dialog.getSelections();
+        if (projects != null)
+        {
+          for (int i = 0; i < projects.length; i++)
+          {
+            reports.add(projects[i].getName());
+          }
+        }
+      }
+    }
+    else if (e.widget == remove)
+    {
+      reports.remove(reports.getSelectionIndices());
+    }
+  }
+
+  private static java.util.List refs = null;
+
+  public static java.util.List getReferences()
+  {
+    if (refs == null)
+    {
+      IPreferenceStore pref = ComponentUIPlugin.getDefault().getPreferenceStore();
+      String value = pref.getString("UsageReportPrefPage");
+      StringTokenizer st = new StringTokenizer(value, "#");
+      java.util.List projectNames = new ArrayList();
+      while (st.hasMoreTokens())
+      {
+        projectNames.add(st.nextToken());
+      }
+      reloadRefs(projectNames);
+    }
+    return refs;
+  }
+
+  private static void reloadRefs(java.util.List projectNames)
+  {
+    refs = new ArrayList();
+    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+    for (Iterator it = projectNames.iterator(); it.hasNext();)
+    {
+      IProject project = root.getProject((String)it.next());
+      if (project != null)
+      {
+        try
+        {
+          project.accept(new IResourceProxyVisitor()
+          {
+            public boolean visit(IResourceProxy proxy) throws CoreException
+            {
+              if (proxy.getName().endsWith(".xml"))
+              {
+                References ref = new References();
+                try
+                {
+                  ref.load(((IFile)proxy.requestResource()).getContents());
+                  refs.add(ref);
+                }
+                catch (Throwable t)
+                {
+                  t.printStackTrace();
+                }
+              }
+              return true;
+            }
+          }, IContainer.NONE);
+        }
+        catch (CoreException ce)
+        {
+          ce.printStackTrace();
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportContentProvider.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportContentProvider.java
new file mode 100644
index 0000000..a345d75
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportContentProvider.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 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
+ *******************************************************************************/
+package org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.wtp.releng.tools.component.adopters.BreakageReport;
+import org.eclipse.wtp.releng.tools.component.adopters.ClassRef;
+import org.eclipse.wtp.releng.tools.component.adopters.PluginRef;
+import org.eclipse.wtp.releng.tools.component.adopters.References;
+import org.eclipse.wtp.releng.tools.component.ui.internal.ComponentUIPlugin;
+
+/**
+ * View of server, their configurations and status.
+ */
+public class BreakageReportContentProvider implements ITreeContentProvider
+{
+  public Object[] getElements(Object value) 
+  {
+    if (value == Boolean.TRUE)
+    {
+      List reports = new ArrayList();
+      File f = new File(ComponentUIPlugin.getDefault().getPluginStateLocation());
+      File[] children = f.listFiles();
+      for (int i = 0; i < children.length; i++)
+      {
+        if (children[i].getName().endsWith(".breakage"))
+        {
+          try
+          {
+            BreakageReport breakageReport = new BreakageReport();
+            breakageReport.load(new FileInputStream(children[i]));
+            reports.add(breakageReport);
+          }
+          catch (Throwable t)
+          {
+            t.printStackTrace();
+          }
+        }
+      }
+      return reports.toArray(new BreakageReport[0]);
+    }
+    else
+    {
+      return new Object[0];
+    }
+  }
+
+  /*
+   * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+   */
+  public void dispose() 
+  {
+  }
+
+  /*
+   * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(Viewer, Object, Object)
+   */
+  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) 
+  {
+  }
+
+  /*
+   * @see oorg.eclipse.jface.viewers.ITreeContentProvider#getChildren(Object parentElement)
+   */
+  public Object[] getChildren(Object parentElement)
+  {
+    if (parentElement instanceof BreakageReport)
+    {
+      return ((BreakageReport)parentElement).getRefs().toArray(new References[0]);
+    }
+    else if (parentElement instanceof References)
+    {
+      References ref = (References)parentElement;
+      List classRefs = new ArrayList();
+      for (Iterator it = ref.getPluginRefs().iterator(); it.hasNext();)
+      {
+        PluginRef pluginRef = (PluginRef)it.next();
+        classRefs.addAll(pluginRef.getClassRefs());
+      }
+      return classRefs.toArray(new ClassRef[0]);
+    }
+    else if (parentElement instanceof ClassRef)
+    {
+      ClassRef classRef = (ClassRef)parentElement;
+      List l = new ArrayList();
+      l.addAll(classRef.getMethodRefs());
+      l.addAll(classRef.getFieldRefs());
+      return l.toArray();
+    }
+    else
+    {
+      return new Object[0];
+    }
+  }
+
+  /*
+   * @see oorg.eclipse.jface.viewers.ITreeContentProvider#getParent(Object element)
+   */
+  public Object getParent(Object element)
+  {
+    return null;
+  }
+
+  /**
+   * @see oorg.eclipse.jface.viewers.ITreeContentProvider#hasChildren(Object element)
+   */
+  public boolean hasChildren(Object element)
+  {
+    return (element instanceof BreakageReport) || (element instanceof References) || (element instanceof ClassRef);
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportLabelProvider.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportLabelProvider.java
new file mode 100644
index 0000000..833f35f
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportLabelProvider.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 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
+ *******************************************************************************/
+package org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view;
+
+import java.util.List;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wtp.releng.tools.component.adopters.BreakageReport;
+import org.eclipse.wtp.releng.tools.component.adopters.ClassRef;
+import org.eclipse.wtp.releng.tools.component.adopters.FieldRef;
+import org.eclipse.wtp.releng.tools.component.adopters.MethodRef;
+import org.eclipse.wtp.releng.tools.component.adopters.PluginRef;
+import org.eclipse.wtp.releng.tools.component.adopters.References;
+
+public class BreakageReportLabelProvider extends LabelProvider
+{
+  /**
+  * @see org.eclipse.jface.viewers.ILabelProvider#getImage(Object)
+  */
+  public Image getImage(Object arg0) 
+  { 
+    return null;
+  }
+
+  /**
+   * @see org.eclipse.jface.viewers.ILabelProvider#getText(Object)
+   */
+  public String getText(Object value) 
+  {
+    if (value instanceof BreakageReport)
+    {
+      BreakageReport report = (BreakageReport)value;
+      List refs = report.getRefs();
+      if (!refs.isEmpty())
+      {
+        References ref = (References)refs.get(0);
+        List pluginRefs = ref.getPluginRefs();
+        if (!pluginRefs.isEmpty())
+        {
+          PluginRef pluginRef = (PluginRef)pluginRefs.get(0);
+          return pluginRef.getId();
+        }
+      }
+      return "";
+    }
+    else if (value instanceof References)
+    {
+      return ((References)value).getContactInfo();
+    }
+    else if (value instanceof ClassRef)
+    {
+      return ((ClassRef)value).getName();
+    }
+    else if (value instanceof MethodRef)
+    {
+      MethodRef methodRef = (MethodRef)value;
+      StringBuffer sb = new StringBuffer();
+      sb.append(methodRef.getName());
+      sb.append(methodRef.getDescriptor());
+      return sb.toString();
+    }
+    else if (value instanceof FieldRef)
+    {
+      return ((FieldRef)value).getName();
+    }
+    else
+    {
+      return "";
+    }
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportView.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportView.java
new file mode 100644
index 0000000..04860cb
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/adopter/view/BreakageReportView.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 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
+ *******************************************************************************/
+package org.eclipse.wtp.releng.tools.component.ui.internal.adopter.view;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.part.ViewPart;
+
+public class BreakageReportView extends ViewPart
+{
+  protected Tree tree;
+  protected TreeViewer treeViewer;
+
+  public void createPartControl(Composite superparent)
+  {
+    Composite parent = new Composite(superparent, SWT.NONE);
+    GridLayout layout = new GridLayout();
+    layout.numColumns = 1;
+    parent.setLayout(layout);
+    parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+    GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
+    gd.grabExcessVerticalSpace = true;
+    gd.grabExcessHorizontalSpace = true;
+    parent.setLayoutData(gd);
+
+    tree = new Tree(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+    gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL);
+    gd.grabExcessVerticalSpace = true;
+    gd.grabExcessHorizontalSpace = true;
+    tree.setLayoutData(gd);
+
+    treeViewer = new TreeViewer(tree);
+    treeViewer.setContentProvider(new BreakageReportContentProvider());
+    treeViewer.setLabelProvider(new BreakageReportLabelProvider());
+    treeViewer.setInput(Boolean.TRUE);
+  }
+
+  public void setFocus()
+  {
+    if (tree != null)
+      tree.setFocus();
+  }
+
+  public void refresh()
+  {
+    treeViewer.setInput(Boolean.TRUE);
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/wizard/APIRefCompatibilityPage.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/wizard/APIRefCompatibilityPage.java
new file mode 100644
index 0000000..cb19364
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/wizard/APIRefCompatibilityPage.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.ui.internal.wizard;
+
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+public class APIRefCompatibilityPage extends WizardPage implements IWizardPage
+{
+  public APIRefCompatibilityPage()
+  {
+    super("");
+  }
+
+  public void createControl(Composite composite)
+  {
+    Composite parent = new Composite(composite, SWT.NONE);    
+    GridLayout layout = new GridLayout();
+    layout.numColumns = 1;
+    parent.setLayout(layout);
+    parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+    setControl(parent);
+
+    GridLayout gl = new GridLayout();
+    gl.numColumns = 1;
+    gl.marginHeight = 0;
+    gl.marginWidth = 0;
+    
+    Label srcLabel = new Label(parent, SWT.NONE);
+    srcLabel.setText("Enter the location of your product");
+  }
+}
\ No newline at end of file
diff --git a/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/wizard/APIRefCompatibilityWizard.java b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/wizard/APIRefCompatibilityWizard.java
new file mode 100644
index 0000000..7c0ae84
--- /dev/null
+++ b/archive/releng.builder/tools/apitools/org.eclipse.wtp.releng.tools.component.ui/src/org/eclipse/wtp/releng/tools/component/ui/internal/wizard/APIRefCompatibilityWizard.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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
+ *******************************************************************************/
+
+package org.eclipse.wtp.releng.tools.component.ui.internal.wizard;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+public class APIRefCompatibilityWizard extends Wizard implements INewWizard
+{
+  public void init(IWorkbench workbench, IStructuredSelection currentSelection)
+  {
+  }
+
+  public void addPages()
+  {
+    super.addPages();            
+    addPage(new APIRefCompatibilityPage());
+  }
+
+  public boolean performFinish()
+  {
+    return true;
+  }
+}
\ No newline at end of file