<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Modified JDT Core for AspectJ</title>
  </head>

  <body>
    <h2>What is this shadows thing all about?</h2>

    <p>This module is 99% identical to the official jdt.core codebase
    from eclipse.org.  The main line of this code should always be
    identical to the main line of the jdt.core development.  Several
    changes are required to this module in order to make it work for
    aspectj.  These changes are all captured as a branch from some
    tagged jdt.core release.  At the time of this writing, the most
    recent jdt.core version is v_312.  The needed changes for aspectj
    are captured in the branch aj_v_312.<p>

    <p>If you need to make small changes to jdt.core to support
    aspectj you should do that by working in the most recent aj_tag
    branch.  Once you've made your changes, follow the steps under
    build the compiled jar and move it into modules so that your changes
    will be available to the build process and other developers.</p>

    <p>The reason for this weird structure is to achieve the following
    desired properties:</p>

    <ul>
      <li>Most people working with AspectJ should treat this code as a
      black box that can't be changed.  Exposing it only as a .jar
      helps achieve this (we also include a src zip for debugging purposes).
      </li>

      <li>This code needs to periodically go through a difficult 3-way
      merge process.  After exploring many options, I found that the
      most effective way to achieve this was with a cvs structure
      where the HEAD follows the "official" jdt core work from
      eclipse, and the AspectJ changes are represented as branches.
      This makes moving to a new eclipse release as easy as possible.
      The instructions for doing this are captured below.</li>

      <li>"experts" should be able to check out the currently active
      branch of org.eclipse.jdt.core from shadows into their eclipse
      workspace instead of the static .jar from modules.  The current
      arrangement makes this possible without updating the
      dependencies.Most people working with AspectJ should treat this code as a
      black box that can't be changed.  Exposing it only as a .jar
      helps achieve this (we also include a src zip for debugging purposes).
      </li>
    </ul>


    <h2>Moving to a new version of JDT Core</h2>

    <p>The following instructions are for updating to a new version of the official 
      JDT from eclipse.org.  We assume that new version is labeled as <b>TAG</b>.  You should
      expect this process to take from 4-24 hours depending on the degree of changes that
      have occurred in the official JDT system since the last time this synchronization was
      performed.</p>

    <p>General advice.  Set team properties to ignore whitespace and
    to compare actual contents of files.<p>

    <h3>Add the new <b>TAG</b> to the HEAD of org.aspectj/shadows</h3>
    <ol>
      <li>Check out org.aspectj/shadows from HEAD</li>

      <li>Use <code>ant get.tag -Dtag=<b>TAG</b></code> in this directory to overwrite
	  contents with the desired new <b>TAG</b></li>

      <li>Commit those changes to head using synchronize and examining changes for plausibility</li>

      <li>Tag this tree with <b>TAG</b> -- matching the official JDT tree exactly</li>

      <li>Make a branch in the tree called aj_<b>TAG</b> off of HEAD</li>
   </ol>

    <h3>Merge the AspectJ changes into the new version of jdt.core</h3>

    <p>This task is where the hard work happens.  The other two tasks are just book-keeping.
      </p>

    <ol>
      <li>Check out this new branch into an active AspectJ set of modules instead of the 
	pre-compiled version in modules.</li>

      <li><b>HARD:</b> Working in this new branch, merge in the changes from the previous version.  This 
	will take some careful work by hand.</li>

      <li>Use the build.xml file with the <code>makeJdtDepends</code>
      task found in this branch of org.jdt.core to replace the
      jdtDepends.jar and jdtDepends-src.zip with the latest versions
      of the eclipse core classes from a matching eclipse binary
      release.
      </li>

      <li>Rerun the parser generator to make sure you have the right tables and symbol values.
          This should be done with the python script in org.aspectj.ajdt.core/scripts/make_parser.py.
      </li>

      <li><b>HARD:</b> Fix compile errors, and then run the full test suite and fix any problems that arise.</li>
    </ol>

    <h3>Build the compiled jar and move it into modules</h3>    
    <ol>
      <li>Commit these working changes to the new branch</li>

      <li>Build jdtcore-for-aspectj.jar and jdtcore-for-aspectj-src.zip using the build.xml found in this
          branch of org.jdt.core.  These files will be put in the directory above the org.eclipse.jdt.core
          project so they won't be deleted by the next step.</li>

      <li>Delete the org.eclipse.jdt.core project from your workspace (be sure you've committed)</li>

      <li>Check out the org.eclipse.jdt.core project from modules</li>

      <li>Replace the jar and zip files in this project with the ones you made above.</li>

      <li>Run the tests one more time, and if nothing went wrong you're done.</li>
    </ol>
  </body>
</html>
