| 
    Revised October 31, 2002 | 
  
   
     | 
     
       This document explains our (high level) plan for 
        the future of Eclipse's external tools and Ant support. It explains how 
        external tools will be created, configured, executed, and used as project 
        builders. For the purposes of this document, Ant scripts are considered 
        a kind of external tool. However, Ant will have additional first class 
        integration in the Eclipse IDE. 
      Items are marked with priorities - P1, P2, P3. 
        Items marked as P1 are items that we plan to implement for Eclipse 2.1. 
        Items marked as P2 are likely to be implemented. Items marked as P3 are 
        not committed, or are investigation items. 
     | 
  
   
    | Presentation | 
  
   
     | 
    External Tools | 
  
   
     | 
     
      
        - (P1) The external tools drop down menu in the 
          toolbar will remain. It will contain a history of recently launched 
          external tools, and an option to configure external tools.
 
        - (P1) When the "Configure..." action 
          is invoked, a dialog will open that looks much like the "Launch 
          Configuration Dialog" - except it will be named the "External 
          Tools" Dialog. It will have a tree on the left hand side with root 
          nodes representing types of external tools, and leaf nodes representing 
          instances of external tools. The right hand portion of the dialog will 
          contain tabs used for displaying/editing the attributes of the selected 
          external tool.
 
        - (P1) By default, two types of external tools are provided - Programs 
          and Ant Scripts.
 
        - (P1) The user can create a new instanceof a program/ant script by 
          selecting the external tool type (root node), and pressing "new".
 
        - (P1) External tools will appear in the debug view when launched (as 
          processes), with console history.
 
        - (P1) An external tool can be executed from the "External Tools" 
          dialog, or from the external tools history.
 
       
     | 
  
   
     | 
    Ant | 
  
   
     | 
     
      
        - (P1) In addition to being able to create/execute 
          an Ant script for the "External Tools" dialog, an Ant View 
          will be provided. The Ant View will display the structural outline of 
          one or more Ant scripts
 
        - (P1) The Ant View will support the execution 
          of one or more selected targets.
 
        - (P1) An Ant script may be added to the Ant View 
          via a pop-up menu action in the navigator - i.e. select an Ant file 
          and use the "Show in Ant View" action (although we need to 
          do this carefully so the action does not appear for all XML files).
 
        - (P2) An Ant script may be added to the Ant View 
          via drag & drop.
 
        - (P1) An Ant script may be added to the Ant View, 
          by invoking the "Find Ant Scripts" action in the Ant View. 
          This will search the workspace for Ant scripts, and allow the user to 
          select Ant Scripts to add to the view.
 
        - (P3) An editor will be provided for Ant scripts, 
          with syntax coloring, code assist, and an outliner.
 
        - (P3) Ant scripts will always be run in verbose 
          mode (behind the scences), such that the user can obtain extra information 
          after the fact. The console will filter the verbose output unless the 
          user decides to look at it.
 
        - (P1) From the Ant view, the user will be allowed 
          to edit the properties of the script via a "Properties..." 
          action. This will open the External Tools dialog on the Ant script, 
          such that its attributes can be modified.
 
        - (P2) As a possible enhancement, a specialized 
          version of the "External Tools" dialog may be created that 
          displays only one external tool (i.e. no tree on the left hand side 
          where all tools are displayed). This could be used for the "Properties..." 
          action.
 
       
     | 
  
   
     | 
    Console | 
  
   
     | 
     
      
        - (P1) The existing External Tools "Log Console" 
          will be integrated with the debugger's "Console View". The 
          "Console View" will be enhanced with an API such that clients 
          may implement "content providers" for the console, allowing 
          arbitray streams of output to be displayed in the console, with custom 
          coloring. As well, the console will support keyboard input, which is 
          written to an input stream.
 
        - (P2) The debug console will be enhanced to support 
          the notion of "structured output". A content provider that 
          provides "structured output" will be responsible for a tree 
          content provider to populate a tree/index that corresponds to its textual 
          output. When a node in the tree is selected, corresponding output will 
          be highlighted in the console view.
 
        - (P2) The debug console can be toggled between 
          three modes - text output only, structured output only, or a combination 
          of strucutred/textual output.
 
        - (P2) The console API will support the notion 
          of hyperlinks. Clients will be able to add hyperlinks to a console document 
          (character ranges). The console will perform mouse tracking, and notify 
          clients when a link is activated (the implementation of which, is up 
          to the client).
 
       
     | 
  
   
     | 
    Project Builders | 
  
   
     | 
     
      
        - (P1) Currently, a (*new*) tool may be configured 
          as a project builder, which is invoked when a project is built. We will 
          maintain this fuctionality.
 
        - (P2) In addition, we'd like to allow the user 
          to choose from existing external tools, when adding a builder to a project.
 
        - (P2) An external tool, registered as a builder 
          can be edited with the specialized "External Tools" dialog 
          that supports the editing of a single external tool.
 
       
     | 
  
   
    | Implementation | 
  
   
     | 
    Launch configurations | 
  
   
     | 
     
      
        - (P1) The implementation of external tool objects 
          is very similar to launch configurations (a set of attributes that are 
          interpreted by a launcher). We intend to implement/persist external 
          tools as a new launch configuration type.
 
        - (P1) Existing launch configuration extension points will be used to 
          define types of external tools and UIs (tabs) for editing their properties 
          - launchConfigurationTypes, and launchConfigurationTabGroups.
 
        - (P1) A special version of the launch config 
          dialog will be used to display external tool launch cofigurations.
 
        - (P2) The debug platform may add new API to allow 
          this specializatoin of the launch configuration dialog.
 
        - (P1) External tools will not appear in the regular 
          launch configuration dialog.
 
        - (P2) We may add the notion of "variables" to 
          the launch configuration framework. This code currently exists in the 
          external tools framework, but we believe it would make sense in the 
          launch config framework and thus plan to push it down. This feature 
          should improve our shared launch configuration story. Even better, we 
          would like variables to be part of the platform.
 
        - (P1) When the user selects "Run Ant..." 
          from the navigator, any existing launch configuration for the selected 
          Ant script will be run. Otherwise, a default Ant launch configiuration 
          will be created and run.
 
       
     | 
  
   
     | 
    Debug view | 
  
   
     | 
     
      
        - (P1) When an external tool is run, it will appear 
          in the debug view.
 
        - (P2) We may provide the ability to terminate 
          running tools from this view (it depends on the implementation of the 
          external tool).
 
       
     | 
  
   
     | 
    Project Builders | 
  
   
     | 
     
      
        - (P1) External tool project builders are stored 
          by translating a launch configuration into an ICommand.
 
        - (P3) If possible the ICommand should reference 
          the associated launch configuration handle, rather than duplicating 
          the storage of all of the launch configuration attributes. There are 
          issues here that need investigation - i.e. sharing project builders. 
          This would require the launch configuration to also be shared (and of 
          course, the ant script that it points to).
 
       
     | 
  
   
    | Future Enhancements | 
  
   
     | 
    Debugging Ant Scripts | 
  
   
     | 
     
      
        - (P3) Debugging Ant scripts - breakpoint and 
          stepping support.
 
        - (P3) Debugging Ant tasks under development.
 
       
     |