Java module separations

Vitezslav Stejskal <[email protected]> Mon, 12 May 2003 13:51:03 +0200
Newsgroups gmane.comp.java.netbeans.modules.projects.devel
Message-ID <[email protected]>
Hi people,

we are thinking about the way how to split the code in java module(s) 
into more manageable pieces reflecting the logical structure of features 
provided by the module. The goals which we would like to achieve by the 
separation are:

- separate independent pieces of code
- clean up the APIs and SPIs by removing inappropriate dependencies
- make hard to mess up things again in the future
- allow modules building on top of java APIs to pick up only those 
pieces which they are interested in
- improve the understandability of the code and lower the maintenance costs

Let me outline the suggested set of modules and briefly describe the 
functionality covered by them. Some modules listed below already exist 
others will be created.

* java - This module provides integration of all the services and 
functions provided by other modules in the Netbeans IDE. It has no API 
nor SPI, but a lot of GUI.

* java/api - This is the basic java API module. Now it contains all the 
java APIs mixed together, but they should be separated from there. It 
will contain only the ClassPath API because of keeping the backward 
compatibility with Netbeans 3.4/3.5.

* java/platform - This module will contain the generic support for java 
platforms, mostly the API and SPI for maintaining platforms registry, 
definition of platform services, etc.

* java/j2se - This is the implementation of J2SE platform support 
including services like compilation, execution, etc.

* java/projects - The projects support for java developement. It will 
contain things like JavaProject, CompilationUnit, ProjectPath, etc.

* java/editor - The java editor kit.

* java/completion - The java editor code completion support.

* java/srcmodel - Java Source Hierarchy

The intermodule depenencies are shown on the graph below, it doesn't 
show dependencies on Open API and other external modules. Modules are 
grouped to two groups - projects dependent and projects independent.

* projects independent:
java/api
java/platform depend on java/api
java/j2se depends on java/api, java/platform

* projects dependent
java/projects depends on java/api, java/platform
java/srcmodel depends on java/projects
java/completion depends on java/api, java/projects, java/srcmodel
java/editor depends on java/completion, java/api, java/projects, 
java/srcmodel
java depends on all other modules

This is the first sketch and details are very likely to change when we 
will proceed with implementation.

Any comments, suggestions?
-vita