Mica is a common plugin architecture for creating Debian Linux and Maemo cross-development environments based on Eclipse.

|   Maemo IDE Common Architecture


Second Beta: 2.0.0M5 (2009/07/03)

This is the first public release of Mica, coordinated with the ESbox and PluThon Beta 2 Releases (also 2.0.0M5). See the 2nd Edition ESbox and PluThon pages.

Mica is based on Eclipse Ganymede SR2 and PyDev 1.4.4.

Recent Improvements

  • Updated Flasher wizard to support native (locally installed) flashers
  • Remove SSH IP-address based launch configuration. All launches use RSE connections now.
  • Rename SSH/RSE launch to "Copy Programs" and SBRSH launch to "Mount Project" to make their purpose clearer.
  • Ensure that a launch shortcut and new launch configuration initialize defaults in the exact same way.
  • Fixes for Externalize Strings wizard [#4246] [#4048]
  • Usability and performance improvements for Valgrind and OProfile [#4190] [#4191] [#4192] [#4196] [#4247] [#4248] [#4249]
  • Added more Python project templates
  • Show contents of a built Debian project after building [#4032]
  • Fix confusing UI in Install Debian Package wizard [#4126]
  • Refactored Mica to make it independent of ESbox and to clearly delineate API from non-API
  • Updated public Javadoc for Mica
  • Updates to Mica Architecture Guide and Mica Developer's Guide
  • Introduce concept of "Project Builder Type" to allow a project to explicitly target Make, Autotools, Debian Make, etc. through a unique extension point than the "Project Type" (e.g. C/C++/Python).
  • Add support for gathering build artifacts from project types and builder types, so that, for example, the Copy Program launch type can guess more accurately what files need to be copied.
  • Fixed issues with C/C++ indexer path gathering. Now C++ projects will properly locate standard C++ includes and C/C++ projects will be able to locate includes in the same project. [#3108]
  • Fix Python debugging over SBRSH [#3954]
  • Fix issue with occasionally losing text from SSH processes [#4303]
  • Be sure to refresh build package lists when installing/removing packages [#4113]
  • Fix bug not honoring "Update package lists" option in Validate Installed Packages wizard [#4304]

Known issues

  • There will be a NullPointerException if you try to use support to automatically install OProfile on tablet and none of the repositories in the rootstrap on the device contain it. These are located in diablo/tools. Add this line:
    	deb diablo/tools free
    and then invoke apt-get update to install. [#4301]
  • The "Maemo device ..." connections for RSE are configured for the account "user". Please set up a password for this account first (log into the tablet, gain root, and set the password via passwd user), or select a different user name in the RSE target (right click > Configure... or right click > Properties in the Remote Systems view). You will not be able to change the user name in a dialog that prompts for a password.
  • There is a bug in RSE causing an exception when you attempt to copy default generated RSE connections. If you need to create more connections than those provided, then create a New Connection of system type SSH Only. [#4053].
  • For other issues, see the Mica bug tracker and search for items with Resolution = None.

Detailed Changes

Mica 2.0.0-I20090617

  • The template model and project wizard hierarchy were fixed to allow easier extension for foreign engines, better template filtering, and use for the template wizard in other non-project wizards.

    See the Templates and Project Wizards section of the Mica Architecture Guide for details.

  • Fixed some bugs with launch shortcut enablement. I had changed things to use the org.eclipse.core.resources.projectNature test, but this doesn't work on files or editor inputs. So I added org.maemo.mica.common.hasNature to do this correctly.
  • Added property testers for more convenient launch shortcut enablement checks. The C/C++ and Python launches in several products and plugins had a long series of repetitive checks, which were destined to need changes in the future, so these were condensed into org.maemo.mica.cpp.isCppLaunchable and org.maemo.mica.python.isPythonLaunchable. These plus the product nature checks, and some maemo SDK checks for emulator/remote/x86/armel targets, are sufficient for any currently supported launch.
  • Fixed an oversight with the Convert to Maemo projects wizards. The "Show up-to-date projects" checkbox only checked whether Mica recognized a project, but not whether the project is considered up to date for the wizard itself. (E.g. the "Convert to ESbox C/C++ project" wants to check whether the ESbox C/C++ nature is present; the check for a Mica C/C++ project type will succeed even without it.)
  • Revamped the IProcessLauncher* APIs to reduce code size and make things more consistent:
    • Make the IProcessLauncherFactory#createProcessLauncher() API accept ProcessLauncherParameters instead of a list of current directory, command line, and environment.
    • Remove ProcessLauncherCreator and instead have ProcessLauncherParameters provide multiple #create(...) methods which take the same patterns as it used to. So now the pattern is:
      	IProcessLauncherFactory factory = ...;
      	IPath cwd = ...;
      	List<String> cmdLine = CommandLineArguments.createFromVarArgs("ls", "-l"); 
      	IEnvironmentModifierBlock envBlock = ...;
      	IProcessLauncher launcher = factory.createProcessLauncher(
      		ProcessLauncherParameters.create(cwd, cmdLine, envBlock );

      or, in a more common case without environment block or current directory changes:

      	IProcessLauncherFactory factory = ...;
      	IProcessLauncher launcher = factory.createProcessLauncher(
      		ProcessLauncherParameters.create("ls", "-l") );
    • Fix confusing behavior in IProcessLauncherFactory#defaultEnvironmentModifierBlock().

      Previously, this returned a mutable block which a client could modify and which would "automagically" be used in a process launcher if no environment modifier block was passed explicitly. This kind of behavior meant that (1) the factory held state, and had to be recreated every time, and (2) it was confusing that passing either null or the modified environment block from #defaultEnvironmentModifierBlock() would have the same effect.

      Now, the method is named IProcessLauncherFactory#getDefaultEnvironmentModifierBlock() and always returns a copy of the default environment changes. The client can change this but must pass this block to when creating the process launcher for the changes to be used. If a null environment block is passed, then the unmodified default environment changes will be used.

      Also, this means that an ISDKTarget or IMachine may return the same IProcessLauncherFactory instance for #getProcessLauncherFactory() every time, which matches the documentation.

  • Split unit tests so that Mica has product-independent unit tests. Product extensions may implement Abstract...Test classes to create their own unit tests. Note, however, that all the tests expect some product-specific extensions to be provided, especially sdk_provider so that SDK-specific tests can be executed.
  • Cleaned up the package arrangement of API and non-API code to spell out what is really API and what is not. This distinction is spelled out in the Mica Developer's Guide, are repeated here. In order of specificity:
    • Packages named org.maemo.mica.internal.api.* should be used only by other Mica plugins or internally maintained products (ESbox, PluThon). Third-party plugins may use these, but there is no guarantee these will be stable, even from week to week.
    • Packages named org.maemo.mica.internal.* may be used only by the same plugin. In some cases, unit tests use these as well, but these are explicitly exposed via "x-friends".
    • Packages named org.maemo.mica.* are API. These will follow the standard Eclipse guidelines for APIs (so that binary compatibility is assured in the same major version). Note that the APIs will not be frozen until shortly before 2nd edition final.
  • Refactored SDK manager related classes used to locate ISDK and ISDKTarget instances.
    • Rename SDKFactory to SDKManager, since this doesn't create things but manages them
    • Provide a reduced interface via ISDKManager for the vast majority of uses (looking up SDKs and targets and attaching listeners). SDKManagerInternal can be used to get full access to SDKManager for use in internal API. This still exposes implementation details related to waiting for refreshing and/or force a refresh, and I plan to make this more predictable in the future.
    • Provide symmetric #getAllSDKs() to #getAllSDKTargets()
  • Cleaned up GeneralUtils, splitting it into functional groups (EFSFileUtils for file operations on IFileStore and IFileSystemAccess, ProductUtils to retrieve the product name, WorkspaceUtils to encapsulate some common Eclipse resource/seelection utilities)
    • And move GeneralUtils itself to internal API for the messy leftovers
    • Provide general method for getting the ".mica" path in MachineUtils#getTemporaryPath(IMachine)
    • Ensure that the file-based methods in EFSFileUtils take IProgressMonitor
    • Finish some progress monitor usage in Debian packaging, so we can actually cancel it.
    • Move EnvironmentModifierBlock into API rather than providing long-winded and unnecessary creator function in EnvironmentManager
    • Use PreferenceMigratorAdapter in our own implementations as recommended
  • Started work on improving OProfile and Valgrind usability. OProfile now supports running for longer than one launched process (though there is a known issue that you must manually Stop the profiler if you launch a second process under profiling). [#4190] [#4191] [#4192]
  • The Externalize Strings support now understands Python and Qt sources (though the latter is not hooked up to anything yet). [#4031]

Mica 2.0.0-I20090603

The goal for this sprint, in addition to fixing bugs after beta 1, is to make Mica more reusable by other IDEs. This is the first major round of refactoring to prepare for API stability after beta 2.

  • Launch configuration refactoring. [#3354]
    • Remove launch configuration extensions (which are currently ESbox-centric). Every product needs to define its own launch extensions now. See the migration guide for details.
    • Make abstract classes for launch delegates, shortcuts, and tab groups useful for most purposes
    • Unified the creation of launch configurations through ILaunchShortcut and launch configuration UI. [#3870], [#3854]
    • Added method to IProjectType to determine what files are build artifacts for SSH/RSE launches for C/C++ and Python. This reduces a lot of redundancy in individual launches. This routine should also come in handy in the future for Debian packaging autogeneration.
    • Removed the SSH IP-based launch protocol type. The SBRSH launch asks for an RSE connection now.
    • Renamed the SSH and SBRSH launches to be clearer and modified internal logic to avoid relying on the name of the protocol. Updated the launch protocol type ids so they won't need to change due to future refactorings.
  • Builder splitting. Make and Autotools builders are separated, so other Make-based builders may be added. There is a new extension point projectBuilderType and interface IProjectBuilderType to interact with builders for projects. These are distinct from the language for the project. So now, Python projects can be built from Debian imported packages.

    ESbox and PluThon project natures were also split so that each uses a Mica Python project nature and a product specific nature on top. This pattern has been extended to C/C++ as well, to ensure that future users of Mica do not drag in ESbox dependencies or branding. [#3932]

    See the Project and Builder Types section of the Mica Architecture Guide for details.

  • Conversion wizard updates. The Convert to ... Wizards for ESbox and PluThon have been rewritten from scratch. They support a cleaner UI now and work for C/C++ or Python. The wizard will guess the correct project and builder type.
  • Remove "ESbox" historical text references in source to avoid false assumptions that ESbox is "in" Mica still
  • Fixed internal IDs of *.cpp.templates and *.python.templates so they don't use *.esbox.* in the ID

Non-refactoring related features and bugfixes:

  • Remove IP-address based launch configurations [#3387]
  • Improve SSH exchange keys support for SBRSH [#3827]
  • Fix issues with "Run standalone" option being reset or initialized inconsistently [#4026]
  • Add more Python code templates: GTK, multimedia, Hildon widgets, ...
  • Fixes for Externalize Strings wizard:
    • Ensure that Externalize Strings wizard works with current localized C/C++ project templates [#4029]
    • Improve UI for gettext [#4056]
    • Validate project setup in localized C/C++ project templates [#4030]
    • use Eclipse file APIs to modify files [#4048]