This document details what needs to be done in ajdt.core and 
shadows/org.eclipse.jdt.core to provide full integration with the eclipse
JDT model and to support AJDT.

0) Unit testing
=============================================================================
0.1) Determine how we can write efficient and comprehensive unit tests for all
that follows given the difficult swizzling etc. involved in creating a working
plugin.

1) Builder integration
=============================================================================

This work package enables the building of AspectJ projects in batch and 
incremental mode, with problems found during compilation reported back to the
tasks view. It also supports management of the Aspectjrt.jar classpath variable
for AspectJ projects.

A new subclass of JavaBuilder, AspectJBuilder has been introduced. This 
delegates to AjIncrementalImageBuilder and AjBatchImageBuilder to perform
builds. 

1.1) Basic builder support - builds from source only, outputs to project
specified output directories, problem reporting integration.

1.2) Add support for inpath, outjar, aspectpath in building.
  This task depends on IAspectJProject and implementation being able to
  manage and persist AspectJ specific path elements (see 3).
  1.2.1) batch mode
  1.2.2) incremental mode (requires delta processing)
  
1.3) Aspectjrt classpath variable

2) Reconciling  & structure building
=============================================================================

This work package enables updating of structure based views as the contents of
an editor buffer is edited, and reporting of warnings and errors (early error
annotations) in the editor buffer.

When a CompilationUnit is asked to build its structure, it creates a 
CompilationUnitStructureRequestor which is fed structure information by a 
SourceElementParser (see 4). It also creates a new CompilationUnitProblemFinder
(Compiler subclass) and compiles the unit with it to detect any problems.

2.1) Determine how to build AjCompilerAdapter for CompilationUnitProblemFinders
(which are created outside of AspectJBuilder). This involves where and how
BcelWorld etc. are managed for the project.

2.2) As changes are made in an editor buffer, a CompilationUnitResolver continually
compiles the source and reports problems. This is another compiler subclass, and
we also need to determine how to build an AjCompilerAdapter for it.

3) Java Model Extension
=============================================================================

This work package is a needed foundation for almost any UI function that works
with program structure or elements (e.g. to display AspectJ content in an 
outline view).

This requires the creation of AspectJ element interfaces in the IJavaElement
hierarchy, and then corresponding classes that implement them.

3.1) In the package org.aspectj.ajdt.core :

* IAspectJModelExtension (extends org.eclipse.jdt.core.IModelExtension)
* IAspectJElement   (root interface for aspectj elements)
* IAjType  (extends IType, adds isAspect() )
* IAspect (extends IAjType)
* IAdvice
* IPointcut
* IDeclareErrorOrWarning
* IDeclareParents
* IDeclareSoft
* IInterTypeField
* IInterTypeMethod
* IAspectJProject

3.2) In the package org.aspectj.ajdt.internal.core, for each interface above, 
add SourceXXX and SourceXXXElementInfo classes.

3.3) In the package org.aspectj.ajdt.core.jdom, add classes IDOMxxx for each
interface in 3.1., plus implementation classes and SimpleDOMBuilder extension.

3.4) In the package org.aspectj.ajdt.internal.compiler.env, add an 
IGenericXXX and ISourceXXX interface for each element in 3.1 (these are 
implemented by the classes in 3.2).

4) Source Element Parsing (Java Model creation)
=============================================================================

This work package populates the structure model on which the outline views
etc. depend. 

4.1) Extend ISourceElementRequestor with AspectJ AST nodes

4.2) Extend SourceElementParser to implement appropriate requestor callbacks

4.3) The 5 implementors of ISourceElementRequestor need updating to do the
appropriate thing with AspectJ elements:

 * CompilationUnitStructureRequestor   (for outline view etc.)
 * SimpleDOMBuilder                    (used by portions of UI that generate
                                        code - refactoring? what else?)
 * SourceElementRequestorAdapter
 * SourceIndexRequestor				   (used by indexer, for searching and
                                        type hierarchy)
 * SourceMapper						   (used when attaching source to a jar file)

4.4) This seems to be the point at which we need to implement the 
IExtensionFactory so that we can cleanly create Aj versions of the above 
without polluting the JDT (see UI design of the same).

5) DOM extensions
=============================================================================

This work package enables the source code of an aspectJ program to be 
modelled as a structured document. Which user-interface actions will be 
broken without this??? (refactoring?)

5.1) In the package org.aspectj.jdt.core.dom, add counterparts to the AspectJ nodes
already defined in org.aspectj.internal.compiler.ast (not needed first time
round?)
5.2) Extend IDocumentElementRequestor interface
5.3) Extend DocumentElementParser
5.4) Extend DOMBuilder
5.5) Extend DOMFactory
5.6) Add CreateAspectJXxxOperation classes

6) Code completion / code assist
=============================================================================

This work package enables Ctrl+Space in an editor to offer completions on
pointcut names, aspect names, and inter-type declared methods and fields.

6.1) Extend ICompletionRequestor interface
6.2) Extend ICompletionRequestor implementors (there are 9, 7 of which are
anonymous inner classes)
6.3) Extend CompletionEngine with pointcut
6.4) Extend ISelectionRequestor with pointcut
6.5) Investigate changes to SelectionEngine
6.6) Extend CompletionKeyword family
6.7) Add CompletionOnPointcut
6.8) Investigate changes to CompletionParser and CompletionScanner classes
6.9) Investigate changes in AssistParser
6.10) Extend keywords in 'impl' package
6.11) Add SelectionOnxxx classes for AspectJ in 'select' package
6.12) Investigate changes to SelectionParser and SelectionScanner

7) Type Hierarchy
=============================================================================
This work package enables the type hierarchy view to correctly display the
hierarchy for aspects.

7.1) Override hierarchy methods in IAjType
7.2) Extend ChangeCollector
7.3) Extend TypeHierarchy
7.4) Extend HierarchyBinaryType

8) ".aj" File extension
=============================================================================
This work package ensures that AJDT treats .java and .aj files as equivalent.

8.1) update SuffixConstants class
8.2) update Util class

9) Java Model inclusion
=============================================================================
This work package ensures that all types in pure Java projects are visible 
inside the AspectJ model.

Extend model generation logic to look at project that have either the
AspectJ nature, OR the Java nature.

10) Class formatting and dissassembling
=============================================================================

This work package enables 'editing' of a .class file to present a view that
is aware of AspectJ elements (rather than seeing the generated aj-synthetic
stuff etc.).

(can be deferred for now)

10.1) Make jdt.internal.compiler.classfmt aware of aj-synthetic
10.2) Make "" understand aj-attributes for pointcut, advice etc.
10.3) Extend Field and MethodInfo with isAjSynthetic()
10.4) Extend jdt.internal.core.util.Dissassembler for aspectj

11) Quick-fix support
=============================================================================
This work package enables quick fix suggestions to be made for AspectJ elements.

11.1) Extend ICorrectionRequestor interface
11.2) Update implementors (in UI)

12) Code formatting
=============================================================================
This work package ensures that formatting AspectJ source doesn't mess up 
pointcut declarations etc.

12.1) Update implementation of DefaultCodeFormatter for AspectJ
12.2) Extend CodeFormatterVisitor

13) Searching
=============================================================================
This work package enables searching for AspectJ elements in the search dialog
and APIs.

13.1) Expand IJavaSearch constants for Aj
13.2) Expand SearchPattern for Aj
13.3) Changes to search algorithm required??
13.4) Extend ReferenceInfoAdapter
13.5) Extend IIndexSearchRequestor with aj types
13.6) Extend IndexSearchAdapter with aj types
13.7) Extend AbstractIndexer with aj types
13.8) Extend BinaryIndexer with aj types
13.9) Extend IIndexConstants
13.10) Extend SourceIndexRequestor (see also 4.3)
13.11) Add xxxLocator and Pattern classes for aj elements?

14) Sorting
=============================================================================
This work package enables the correct sorting of AspectJ program elements
when an outline view is set to 'sorted' mode rather than showing elements in
their declared order  (I think!).

14.1) Extend SortElementBuilder
14.2) Extend SortJavaElement

15) Cross-references
=============================================================================
This work package enables the cross-reference view and visualiser to 
correctly display the cross-cutting structure of an aspectj program.

15.1) Create cross-reference map on batch build (1 map for whole workspace)
15.2) Maintain cross-reference map on incremental build
15.3) Add interfaces to retrieve cross-references for AspectJ elements
15.4) Implement IXReferenceProvider

16) Name lookups
=============================================================================
I'm not sure what user interface features need this...

16.1) Extend IJavaElementRequestor
16.2) Extend SelectionRequestor, SingleTypeRequestor
16.3) Investigate other implementors

17) Version upgrade
=============================================================================
17.1) port to Eclipse 3.0 M9
17.2) port to Eclipse 3.0 final

18) JDT DEBUG
=============================================================================
18.1) Extend jdt.internal.debug.core.hcr.JavaParseTreeBuilder ?