# Incompatibilities between Eclipse 3.4 and 3.5

Eclipse changed in incompatible ways between 3.4 and 3.5 in ways that affect plug-ins. The following entries describe the areas that changed and provide instructions for migrating 3.4 plug-ins to 3.5. Note that you only need to look here if you are experiencing problems running your 3.4 plug-in on 3.5.

1. ILaunchConfiguration.getLocation() can return null
2. CustomizableIntroPart no longer implements IIntroConstants
3. IResourceChangeEvent.getResource() may return null for PRE_REFRESH events
4. Methods and fields that leaks internal types are no longer accessible
5. CommonNavigator#IS_LINKING_ENABLED_PROPERTY has changed its value
6. CommonNavigator#getInitialInput() has changed its return type

## 1. ILaunchConfiguration.getLocation() can return null

What is affected: Clients that call ILaunchConfiguration.getLocation()

Description: In release 3.4 and earlier, ILaunchConfiguration.getLocation() was not specified to return `null`. Since 3.5, launch configuration infrastructure has been enhanced to support storage on external file systems (EFS). The #getLocation() method returns a location in the local file system - however, since an external file system may not map to a local location, `null` can now be returned.

Action required: Clients that call ILaunchConfiguration.getLocation() should update code to handle a `null` result. The #getLocation() method has been deprecated since the return value is no longer reliable.

## 2. CustomizableIntroPart no longer implements IIntroConstants

What is affected:Clients that reference constants from IIntroConstants via CustomizableIntroPart

Description: In release 3.4 and earlier, CustomizableIntroPart implemented the internal class IIntroConstants. This had the side effect of accidentally exposing internal constants in an API class. Since Eclipse 3.5 this implements clause has been removed.

Action required: Clients that reference any of these constants will see a compilation error in the source and will need to replace the reference to the constant with a string literal of the same value. See bug 251472 for more information

## 3. IResourceChangeEvent.getResource() may return null for PRE_REFRESH events

What is affected: Clients that use IResourceChangeListeners and listen on IResourceChangeEvent#PRE_REFRESH events

Description: In release 3.4, clients were notified with PRE_REFRESH events only during a single project refresh. Since Eclipse 3.5, PRE_REFRESH events have been fired during every workspace refresh. For a workspace refresh IResourceChangeEvent.getResource() returns null. To determine the scope of the refresh (a project or the workspace), IResourceChangeEvent.getSource() should be used.

Action required: Clients that listens on PRE_REFRESH events should use IResourceChangeEvent.getSource() instead of IResourceChangeEvent.getResource() to determine the scope of the refresh. See bug 255325 for more information.

## 4. Methods and fields that leaks internal types are no longer accessible

What is affected: Clients that refer to ModelSynchronizeParticipant#refreshSchedule or call one of:

- ThreeWaySynchronizer#flush
- SubscriberParticipant#getRefreshSchedule
- SubscriberParticipant#setRefreshSchedule
- SubscriberParticipant#getSubscriberSyncInfoCollector

Description: In release 3.4 and earlier, ModelSynchronizeParticipant#refreshSchedule and methods mentioned above were made accessible. #refreshSchedule is declared as an internal type and referring it is illegal. Calling the methods was also illegal since attributes or returned parameters were internal types. Since Eclipse 3.5, the field and methods are no longer accessible.

Action required: Clients that illegally call the methods or refer ModelSynchronizeParticipant#refreshSchedule will see a compilation error in the source and will need to remove all the calls and references.

## 5. CommonNavigator#IS_LINKING_ENABLED_PROPERTY has changed its value

What is affected: Clients that reference CommonNavigator#IS_LINKING_ENABLED_PROPERTY

Description: In release 3.4 and earlier, CommonNavigator#IS_LINKING_ENABLED_PROPERTY had the value of 1. This value was the same as the IWorkbenchPartConstants#PROP_TITLE which caused confusion when properties changed. Since Eclipse 3.5 the value of this property was changed to something that does not conflict with other property values.

Action required: Any code that refers to CommonNavigator#IS_LINKING_ENABLED_PROPERTY must be recompiled to get the correct value.

## 6. CommonNavigator#getInitialInput() has changed its return type

What is affected: Clients that illegally subclass CommonNavigator

Description: In release 3.4 and earlier, CommonNavigator#getInitialInput() returned a type of IAdaptable, in release 3.5 this has been changed to by Object to allow greater flexibility. Subclassing the CommonNavigator is supported only in the 3.5 release, however this note is included because we are aware that many clients have subclassed CommonNavigator in prior releases.

Action required: If you override CommonNavigator#getInitialInput(), you will need to fix and recompile your code to use the new return type of Object. See bug 143430 for more information.