* There have been several requests for APIs to manipulate bundle definition files - MANIFEST.MF, plugin.xml, and build.properties.

* There have been several requests for APIs to manipulate bundle definition files - MANIFEST.MF, plugin.xml, and build.properties.

+

+

== API Tooling ==

+

+

* Enhance API analysis to avoid false positives. Leak detection can be improved to not report problems when an internal superclass does not expose any visible members. Some API use problems should not be reported for bundles that are friends - for example, a bundle that is a friend should be able to implement restricted interfaces from its friend.

+

* Allow a public visibile type to be restricted for 'internal/private' use only. This allows classes that need to be visible for implementation purposes to be effectively private.

+

* Support API analysis for pure Java projects (not just plug-ins).

+

* Seek performance improvements - perhaps by integrating with the Java builder as a compilation participant, and implementing an MRU cache of API descriptions.

+

* Support edit time analysis similar to the Java editor. This would flag API problems as the user types without having to save/build.

+

* Analyze extension points and extensions for compatibility.

+

* Analyze prerequisite bundles for version range compatibility. The analysis would determine if all references to a preqrequiste bundle are satisfied by a pariticular version of that bundle - or which versions of a preqrequisite bundle are API compatible. NOTE: this would not guarentee runtime behavior to be correct.

+

* Support searching an API baseline (existing product) for references/use of an API or internal code.

+

* Support for package versioning.

+

* Analyze JRE/system library references for illegal use based on bundle required execution environment. For example, if a bundle claims to run on J2SE-1.4, there should be no references to methods introduced in J2SE-1.5.

Revision as of 10:55, 17 June 2008

Contents

Introduction

This page contains blue sky thinking about the kind of things we would like to see in PDE's future. This is a place to collect ideas - it does not represent a committment to implement the ideas.

Target Management

Enhance target platform provisioning. Leverage p2 to create and configure profiles that can be used as target platforms, and leverage p2 to reflect on the contents of a profile. One could compose a target platform by installing features into a profile from p2 repositories.

Simplify and improve the user interface for defining and managing multiple targets in the workspace. Eventually, it would be nice to be able to support more than one target platform in the workspace (i.e. allow different projects to compile against different target platforms). Currently targets can be defined by target files or by the "target platform" user preference. Perhaps a preference page that allowed multiple targets to be defined (like the API Baselines or Installed JREs page) would be more intuitive. Creating/editing a target would open a wizard to modify that specific target, and a check box could be used to specify the "active" workspace target.

Source Management

Simiplify the installation of source for debugging and developing against the target platform. For example, a user is debugging something and enters a class for which they have no source. There should be a simple way to install source for the associated bundle.

Building

Improve the common self-hosting scenario of exporting a plug-in (bundle) and running with it. It would be nice to be able to build, export, and install a bundle (or set of bundles) into the running SDK with the click of a button (or at least from within one wizard).

Workspace based building. Currently, the build process is Ant based and does not leverage workspace builders or project specific settings. As the number of builders/settings grows a workspace based build would allow for simpler integration and better report generation with the build process. A challenge here is around bootstrapping a pure source build scenario.

Authoring

Enhance authoring tools for p2. Traditionally Eclipse has been feature based. Moving forward we need to decide if features still make sense, or if we should encourage the use of installable units. One could imagine tools to author, export/build, and publish installable units.

File Manipulation

There have been several requests for APIs to manipulate bundle definition files - MANIFEST.MF, plugin.xml, and build.properties.

API Tooling

Enhance API analysis to avoid false positives. Leak detection can be improved to not report problems when an internal superclass does not expose any visible members. Some API use problems should not be reported for bundles that are friends - for example, a bundle that is a friend should be able to implement restricted interfaces from its friend.

Allow a public visibile type to be restricted for 'internal/private' use only. This allows classes that need to be visible for implementation purposes to be effectively private.

Support API analysis for pure Java projects (not just plug-ins).

Seek performance improvements - perhaps by integrating with the Java builder as a compilation participant, and implementing an MRU cache of API descriptions.

Support edit time analysis similar to the Java editor. This would flag API problems as the user types without having to save/build.

Analyze extension points and extensions for compatibility.

Analyze prerequisite bundles for version range compatibility. The analysis would determine if all references to a preqrequiste bundle are satisfied by a pariticular version of that bundle - or which versions of a preqrequisite bundle are API compatible. NOTE: this would not guarentee runtime behavior to be correct.

Support searching an API baseline (existing product) for references/use of an API or internal code.

Support for package versioning.

Analyze JRE/system library references for illegal use based on bundle required execution environment. For example, if a bundle claims to run on J2SE-1.4, there should be no references to methods introduced in J2SE-1.5.