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