Package edu.rice.cs.drjava.platform

This package provides a framework for abstracting platform-specific calls away from the platform-independent DrJava codebase.

See:
          Description

Interface Summary
PlatformSupport Central interface for all platform-specific code in DrJava.
 

Class Summary
PlatformFactory Factory class for accessing the appropriate platform-specific implementation of the PlatformSupport interface.
 

Package edu.rice.cs.drjava.platform Description

This package provides a framework for abstracting platform-specific calls away from the platform-independent DrJava codebase. The main code tree contains platform-independent code to access and execute the platform-specific implementations, which are kept in separate code trees.

The PlatformSupport interface defines the calls which must be supported by all platform implementations. DefaultPlatform provides a platform-independent implementation. For convenience, all platform implementations extend DefaultPlatform, inheriting default implementations for all methods that are not tailored for that platform. PlatformFactory is a factory class which contains all logic for identifying the host platform and instantiating the appropriate PlatformSupport implementation. This is performed statically, and the result is stored as a singleton field for easy access. Client code can access platform-specific calls like so: PlatformFactory.ONLY.method(). PlatformFactory currently differentiates between Windows, Mac OS X, and the default platform. Note that in order to reference a new platform implementation, it must already be compiled and added to the classpath. The current platforms are built with special ant targets which add the class files to platforms.jar in the lib directory.

In order to add a new platform-specific feature to DrJava, you must follow these steps:

  1. Add a new method to PlatformSupport. Make sure it is properly documented.
  2. Provide a default implementation in DefaultPlatform. Often this will be an empty method body. Document why it does what it does (or doesn't).
  3. Privode a platform-specific implementation for the necessary platforms. Platforms which will use the default method do not need to be modified.
  4. Write a test case that reveals the platform-specific behavior, or ensures that all platforms produce expected results.
  5. Rebuild the modified platform code using the appropriate systems.