<!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>
