<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="en">

<head>
  <meta name="copyright"
    content="Copyright (c) IBM Corporation and others 2011, 2020. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page.">
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <link rel="STYLESHEET" href="../book.css" charset="ISO-8859-1" type="text/css">
  <title>Eclipse CDT Deprecated and Breaking API changes and removals</title>
</head>

<body>
  <h1>Eclipse CDT Deprecated and Breaking API changes and removals</h1>

  <p>
    Deprecated API can be marked for deletion without requiring a major version increment.
    See the <a href="https://wiki.eclipse.org/CDT/policy">policy</a> for the details.
    This section describes API removals that occurred in past releases, and upcoming removals in future releases.
  </p>

  <p>
    API Changes prior to CDT 10.0 / 2020-09.
  </p>
  <p>
    Prior to CDT 10 release API changes were published as part of the <a
      href="https://wiki.eclipse.org/CDT/User/NewInCDT">New and Noteworthy</a> entries for that release. From CDT 10
    forward breaking API changes are included in this document.
  </p>

  <p>
    API Changes in CDT 10.0.
  </p>
  <ol>
    <li><a href="#java11">Eclipse CDT requires Java 11 as a minimum to build and run.</a></li>
    <li><a href="#deprecatedRemovals">Some deprecated methods and classes have been removed.</a></li>
    <li><a href="#internals">Previously exported packages that were not API are now correctly marked as such.</a></li>
    <li><a href="#activators">Activators removed for all bundles where possible.</a></li>
    <li><a href="#NewClassCreationWizardPage">NewClassCreationWizardPage breaking changes.</a></li>
    <li><a href="#arduino">Arduino plug-ins and features removed.</a></li>
    <li><a href="#oldparsers">Remove LRParser, XLC and UPC.</a></li>
    <li><a href="#cdtutilsPlatform">Remove org.eclipse.cdt.utils.Platform.</a></li>
    <li><a href="#dsf">DSF and DSF-GDB API Changes.</a></li>
    <li><a href="#oldStyleProjects">Partial removal of CDT 3.X project support.</a></li>
    <li><a href="#optionsAPI">Removal of CDT Core Options API.</a></li>
    <li><a href="#terminal">TM Terminal has major changes to support new color and preference functionality.</a></li>
    <li><a href="#casesensitive">Environment Variables are always case sensitive in CDT.</a></li>
    <li><a href="#escaping">Environment variables no longer support \${ to avoid expanding.</a></li>
    <li><a href="#autocloseable">The binary parsers are now implement Autocloseable</a></li>
    <li><a href="#deductionremovedin10.0.0">ICPPASTDeductionGuide and ICPPASTParameterListOwner removed in CDT 10.0.1</a></li>
  </ol>
  <p>
    Planned Removals after June 2022
  </p>
  <ol>
    <li><a href="#binaryparsers">32-bit Binary parsers with 64-bit replacements</a></li>
    <li><a href="#baudrate">BaudRate enum in org.eclipse.cdt.serial</a></li>
  </ol>

  <hr>

  <h2>API Changes in CDT 10.0.</h2>
  <h3>1. <a name="java11">Eclipse CDT requires Java 11 as a minimum to build and run.</a></h3>
  <p>
    Java 11 or greater is required for CDT. This means that the BREE for all CDT bundles is now
    Java 11. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=562494" target="_blank">Bug 562494</a>.
  </p>
  <p>
    The previous workaround for single-sourcing Java 8 and Java 11 has been removed. This means the
    org.eclipse.tools.templates.freemarker.java11 bundle fragment has been removed. See <a
      href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=563494" target="_blank">Bug 563494</a>.
  </p>

  <h3>2. <a name="deprecatedRemovals">Some deprecated methods and classes have been removed.</a></h3>
  <p>
    Across the CDT code base some previously deprecated code has been removed.
    <ul>
      <li>EnvironmentReader.getRawEnvVars has been removed. Use EnvironmentReader.getEnvVars instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=564123" target="_blank">Bug 564123</a>.</li>
      <li>GDBJtagStartupTab.createRunOptionGroup has been removed. Override GDBJtagStartupTab.createRunGroup instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>IGDBJtagConstants.ATTR_JTAG_DEVICE has been removed. Use IGDBJtagConstants.ATTR_JTAG_DEVICE_ID to persist device ID rather than device name. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>IGDBJtagConstants.DEFAULT_JTAG_DEVICE has been removed. Use a local String if necessary. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>IGDBJtagConstants.DEFAULT_JTAG_DEVICE_ID has been removed. Use a local String if necessary. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>IGDBJtagDevice.getDefaultIpAddress has been removed. Implement IGDBJtagConnection and specify default_connection in JTagDevice extension XML instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>IGDBJtagDevice.getDefaultPortNumber has been removed. Implement IGDBJtagConnection and specify default_connection in JTagDevice extension XML instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>IGDBJtagDevice.doRemote has been removed. Implement IGDBJtagConnection.doRemote instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566462" target="_blank">Bug 566462</a>.</li>
      <li>PTY constructor PTY(boolean console) has been removed. Use PTY(Mode mode) instead.</li>
      <li>org.eclipse.cdt.core.browser.PathUtil has been removed. Use org.eclipse.cdt.utils.PathUtil instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=564123" target="_blank">Bug 564123</a>.</li>
      <li>org.eclipse.cdt.launch.ui.CMainTab has been removed. This was part of the long since removed CDI and has no use. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566530" target="_blank">Bug 566530</a>.</li>
      <li>org.eclipse.cdt.launch.ui.CMainCoreTab has been removed. This was part of the long since removed CDI and has no use. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566530" target="_blank">Bug 566530</a>.</li>
      <li>org.eclipse.cdt.launch.ui.CMainAttachTab has been removed. This was part of the long since removed CDI and has no use. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=566530" target="_blank">Bug 566530</a>.</li>
    </ul>
  </p>

  <h3>3. <a name="internals">Previously exported packages that were not API are now correctly marked as such.</a></h3>
  <p>
    A review of the previously exported API of CDT was performed. A lot of what was previously marked as public API has
    now been marked as internal. This means the API has either had <code>x-internal</code> or <code>x-friends</code>
    added to the <code>Export-Package</code> declarations.
  </p>
  <p>
    The following bundles have had all their packages exported as internal See <a
      href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=561389" target="_blank">Bug 561389</a>:
    <ul>
      <li>org.eclipse.cdt.cmake.ui</li>
      <li>org.eclipse.cdt.autotools.core</li>
      <li>org.eclipse.cdt.core.autotools.core</li>
      <li>org.eclipse.cdt.core.autotools.ui</li>
      <li>org.eclipse.cdt.autotools.tests</li>
      <li>org.eclipse.cdt.autotools.ui.tests</li>
      <li>org.eclipse.cdt.build.crossgcc</li>
      <li>org.eclipse.cdt.cmake.ui</li>
      <li>org.eclipse.cdt.build.gcc.core</li>
      <li>org.eclipse.cdt.build.gcc.ui</li>
      <li>org.eclipse.cdt.codan.checkers.ui.tests</li>
      <li>org.eclipse.tools.templates.ui</li>
    </ul>
  </p>
  <p>
    The following bundles had additional changes made to be able to mark packages as internal:
    <ul>
      org.eclipse.cdt.cmake.ui: renamed package "org.eclipse.cdt.cmake.ui.properties"
      to "org.eclipse.cdt.cmake.internal.ui.properties". See <a
        href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=561390" target="_blank">Bug 561390</a>
    </ul>
    <ul>
      org.eclipse.cdt.codan.checkers: marked package "org.eclipse.cdt.codan.checkers" as internal. See <a
        href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=561582" target="_blank">Bug 561582</a>
    </ul>
  </p>

  <h3>4. <a name="activators">Activators removed for all bundles where possible.</a></h3>
  <p>
    Where possible bundles have had their Activators removed. Some of these activators were API and are no longer
    available. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=561635" target="_blank">Bug 561635</a> for
    workarounds where items that used to be in Activators are still needed, such as logging and plug-ids.
  </p>
  <p>
    The following Activators that were API have been removed.
    <ul>
      <li>org.eclipse.tools.templates.ui</li>
    </ul>
  </p>

  <h3>5. <a name="NewClassCreationWizardPage">NewClassCreationWizardPage breaking changes.</a></h3>
  <p>
    The NewClassCreationWizardPage has some API breaking changes due to how some protected fields, especially
    <code>ALL_FIELDS</code> was used. While this breaks binary
    compatibility, no code changes should be needed in extenders, just compiling against the new version. See <a
      href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=510789" target="_blank">Bug 510789</a> and <a
      href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=561770" target="_blank">Bug 561770</a>.
  </p>

  <h3>6. <a name="arduino">Arduino plug-ins and features removed.</a></h3>
  <p>
    The CDT Arduino plug-ins and features have been removed. Arduino can still be used with CDT with manual maintenance
    of packages, etc. Or a third-party add-on such as <a href="https://eclipse.baeyens.it/">Sloeber</a> can be used as a
    replacement.
  </p>
  <p>
    The bundles and features that have been removed are:
    <ul>
      <li>org.eclipse.cdt.arduino-feature</li>
      <li>org.eclipse.cdt.arduino.core.tests</li>
      <li>org.eclipse.cdt.arduino.core</li>
      <li>org.eclipse.cdt.arduino.ui</li>
    </ul>
  </p>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=562498" target="_blank">Bug 562498</a>.
  </p>

  <h3>7. <a name="oldparsers">Remove LRParser, XLC and UPC.</a></h3>
  <p>
    The LR, UPC and XLC support have been removed from CDT. The bundles have not been maintained for a while and were
    not functional anymore.
  </p>
  <p>
    The bundles and features that have been removed are:
    <ul>
      <li>org.eclipse.cdt.core.lrparser.feature</li>
      <li>org.eclipse.cdt.core.lrparser.sdk.branding</li>
      <li>org.eclipse.cdt.core.lrparser.sdk.feature</li>
      <li>org.eclipse.cdt.core.lrparser.tests</li>
      <li>org.eclipse.cdt.core.lrparser</li>
      <li>org.eclipse.cdt.bupc-feature</li>
      <li>org.eclipse.cdt.core.parser.upc.feature</li>
      <li>org.eclipse.cdt.core.parser.upc.sdk.branding</li>
      <li>org.eclipse.cdt.core.parser.upc.sdk.feature</li>
      <li>org.eclipse.cdt.core.parser.upc.tests</li>
      <li>org.eclipse.cdt.core.parser.upc</li>
      <li>org.eclipse.cdt.managedbuilder.bupc.ui</li>
      <li>org.eclipse.cdt.core.lrparser.xlc.tests</li>
      <li>org.eclipse.cdt.core.lrparser.xlc</li>
      <li>org.eclipse.cdt.errorparsers.xlc.tests</li>
      <li>org.eclipse.cdt.errorparsers.xlc</li>
      <li>org.eclipse.cdt.make.xlc.core</li>
      <li>org.eclipse.cdt.managedbuilder.xlc.core</li>
      <li>org.eclipse.cdt.managedbuilder.xlc.ui</li>
      <li>org.eclipse.cdt.managedbuilder.xlupc.ui</li>
      <li>org.eclipse.cdt.xlc.feature</li>
      <li>org.eclipse.cdt.xlc.sdk-feature</li>
      <li>org.eclipse.cdt.xlc.sdk.branding</li>
    </ul>
  </p>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=562498" target="_blank">Bug 562498</a>.
  </p>

  <h3>8. <a name="cdtutilsPlatform">Remove org.eclipse.cdt.utils.Platform.</a></h3>
  <p>
    Class org.eclipse.cdt.utils.Platform has been removed. Use org.eclipse.core.runtime.Platform instead.
  </p>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=564123" target="_blank">Bug 564123</a>.
  </p>

  <h3>9. <a name="dsf">DSF and DSF-GDB API Changes</a></h3>
  <p>
    DSF and DSF-GDB have had some small API changes, but they are still breaking changes and are listed here:
  <ul>
    <li>org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate.getCLILabel(ILaunchConfiguration, String) has been removed.
      Use org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate.getCLILabel(GdbLaunch, ILaunchConfiguration, String)
      instead. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=564553" target="_blank">Bug 564553</a>.</li>
  </ul>
  </p>

  <h3>10. <a name="oldStyleProjects">Partial removal of CDT 3.X project support</a></h3>
  <p>
    CDT 3.X projects have been deprecated since CDT 4.0. Some classes supporting this old version have been removed:
  <ul>
    <li>org.eclipse.cdt.make.ui.wizards.ConvertToMakeProjectWizard</li>
    <li>org.eclipse.cdt.make.ui.wizards.ConvertToMakeProjectWizardPage</li>
    <li>org.eclipse.cdt.make.ui.wizards.MakeProjectWizardOptionPage</li>
    <li>org.eclipse.cdt.make.ui.wizards.NewMakeCCProjectWizard</li>
    <li>org.eclipse.cdt.make.ui.wizards.NewMakeCProjectWizard</li>
    <li>org.eclipse.cdt.make.ui.wizards.NewMakeProjectWizard</li>
  </ul>
  </p>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=564949" target="_blank">Bug 564949</a>.
  </p>

  <h3>11. <a name="optionsAPI">Removal of CDT Core Options API</a></h3>
  <p>
    The CDT Core Options API and implementation has been removed as now it is a part of Eclipse Equinox 4.16 Preferences API, the removed packages are:
  <ul>
    <li>org.eclipse.cdt.core.options</li>
    <li>org.eclipse.cdt.internal.core.options</li>
  </ul>
  </p>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=565154" target="_blank">Bug 565154</a>.
  </p>

  <h3>12. <a name="terminal">TM Terminal has major changes to support new color and preference functionality.</a></h3>
  <p>
    The TM Terminal's control (org.eclipse.tm.terminal.control) bundle has a major new version to support numerous API
    changes to support features such as new colors, preference sharing and some other code clean-up.
  </p>
  <ul>
    <li>org.eclipse.tm.terminal.model.Style removed and is mostly replaced by
      org.eclipse.tm.terminal.model.TerminalStyle. To handle
      new API and color handling, the entire Style class was replaced with TerminalStyle that operates in a similar way.
      Because some methods in TerminalStyle have similar signatures to those in removed Style class a new class was
      introduced to prevent accidental use of incorrect API. See <a
        href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.</li>
    <li>org.eclipse.tm.terminal.model.StyleColor removed. Replaced by a new way of representing standard color in the
      terminal using the new enum org.eclipse.tm.terminal.model.TerminalColor.. See <a
        href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
    </li>
    <li>org.eclipse.tm.terminal.model.ITerminalTextData method taking or returning Style now use TerminalStyle. See <a
        href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
    </li>
    <li>org.eclipse.tm.terminal.model.ITerminalTextDataReadOnly method taking or returning Style now use TerminalStyle.
      See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
    </li>
    <li>org.eclipse.tm.terminal.model.LineSegment method taking or returning Style now use TerminalStyle. See <a
        href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549697" target="_blank">Bug 562495</a>.
    </li>
  </ul>

  <h3>13. <a name="casesensitive">Environment Variables are always case sensitive in CDT.</a></h3>
  <p>
    The handling of environment and build variables in CDT has changed to being case sensitive. This means
    some API changes to remove methods such as isVariableCaseSensitive (see full list below). The PATH and
    dome other special environment variables in CDT are always uppercased, such as Path. See <a
    href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=564123" target="_blank">Bug 564123</a>.
  </p>
  <ul>
    <li>org.eclipse.cdt.managedbuilder.core.IBuilder.isVariableCaseSensitive() removed.</li>
    <li>org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider.isVariableCaseSensitive() removed.</li>
    <li>org.eclipse.cdt.core.envvar.IEnvironmentVariableManager.isVariableCaseSensitive() removed.</li></li>
  </ul>

  <h3>14. <a name="escaping">Environment variables no longer support \${ to avoid expanding.</a></h3>
  <p>
   This change is not literally an api change but will impact your code if you used \${ to not
    expand environment variables. It may impact your code if you import environment variables
    and had to workaround path\${childPath} resolving to path${childPath}. See <a
    href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=560330" target="_blank">Bug 560330</a>.
  </p>
  <ul>
    <li>org.eclipse.cdt.managedbuilder.core.IBuilder.isVariableCaseSensitive() removed.</li>
    <li>org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider.isVariableCaseSensitive() removed.</li>
    <li>org.eclipse.cdt.core.envvar.IEnvironmentVariableManager.isVariableCaseSensitive() removed.</li></li>
  </ul>


  <h3>15. <a name="autocloseable">The binary parsers are now implement AutoCloseable</a></h3>
  <p>
    The binary parsers part of CDT core now implement the AutoCloseable interface and can be used
    in try-with-resources blocks. See list below for all the classes that are now AutoCloseable. See <a
    href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=553674" target="_blank">Bug 553674</a>.
  </p>
  <ul>
    <li>org.eclipse.cdt.utils.coff.Exe</li>
    <li>org.eclipse.cdt.utils.coff.PE</li>
    <li>org.eclipse.cdt.utils.coff.PE64</li>
    <li>org.eclipse.cdt.utils.coff.PEArchive</li>
    <li>org.eclipse.cdt.utils.elf.Elf</li>
    <li>org.eclipse.cdt.utils.elf.ElfHelper</li>
    <li>org.eclipse.cdt.utils.AR</li>
    <li>org.eclipse.cdt.utils.elf.AR</li>
    <li>org.eclipse.cdt.utils.som.AR</li>
    <li>org.eclipse.cdt.utils.xcoff.AR</li>
    <li>org.eclipse.cdt.utils.macho.AR</li>
  </ul>


  <h3>16. <a name="deductionremovedin10.0.0">ICPPASTDeductionGuide and ICPPASTParameterListOwner removed in CDT 10.0.1</a></h3>
  <p>
    Classes org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeductionGuide and org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterListOwner
    which were added for CDT 10.0.0 have been removed in CDT 10.0.1.  See <a
    href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=567261" target="_blank">Bug 567261</a>.
  </p>


  <hr>

  <h2>Future Deletions</h2>
  <p>
    The items below can be removed after the given date or on the next major release, whichever is sooner. The details
    and discussion on the removal happens in the Bugzilla associated with the entry below. See
    the <a href="https://wiki.eclipse.org/CDT/policy">policy</a> for the details.
  </p>

  <h3>API Removals after June 2022</h3>

  <h3>1. <a name="binaryparsers">32-bit Binary parsers with 64-bit replacements</a></h3>
  <p>
    The following binary parser classes have replacements, mostly due to these versions not supporting 64-bit variants
    of the binary files. The new 64-bit parsers support both 32 and 64 bit files.
  </p>
  <ul>
    <li>org.eclipse.cdt.utils.coff.parser.CygwinPEBinaryArchive</li>
    <li>org.eclipse.cdt.utils.coff.parser.CygwinPEBinaryExecutable</li>
    <li>org.eclipse.cdt.utils.coff.parser.CygwinPEBinaryObject</li>
    <li>org.eclipse.cdt.utils.coff.parser.CygwinPEBinaryShared</li>
    <li>org.eclipse.cdt.utils.coff.parser.CygwinPEParser</li>
    <li>org.eclipse.cdt.utils.coff.parser.CygwinSymbol</li>
    <li>org.eclipse.cdt.utils.coff.parser.PEBinaryArchive</li>
    <li>org.eclipse.cdt.utils.coff.parser.PEBinaryExecutable</li>
    <li>org.eclipse.cdt.utils.coff.parser.PEBinaryObject</li>
    <li>org.eclipse.cdt.utils.coff.parser.PEBinaryShared</li>
    <li>org.eclipse.cdt.utils.coff.parser.PEParser</li>
    <li>org.eclipse.cdt.utils.macho.parser.MachOBinaryArchive</li>
    <li>org.eclipse.cdt.utils.macho.parser.MachOBinaryExecutable</li>
    <li>org.eclipse.cdt.utils.macho.parser.MachOBinaryObject</li>
    <li>org.eclipse.cdt.utils.macho.parser.MachOBinaryShared</li>
    <li>org.eclipse.cdt.utils.macho.parser.MachOParser</li>
  </ul>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=562495" target="_blank">Bug 562495</a>.
  </p>

  <h3>2. <a name="baudrate">BaudRate enum in org.eclipse.cdt.serial</a></h3>
  <p>
    The BaudRate enum in org.eclipse.cdt.serial package will be removed. The following
    APIs will be removed, listed with their replacement.
  </p>
  <ul>
    <li>org.eclipse.cdt.serial.BaudRate, use org.eclipse.cdt.serial.StandardBaudRates to obtain typical baud rate values
    </li>
    <li>org.eclipse.cdt.serial.SerialPort.setBaudRate(BaudRate), use
      org.eclipse.cdt.serial.SerialPort.setBaudRateValue(int) instead</li>
    <li>org.eclipse.cdt.serial.SerialPort.getBaudRate(), use org.eclipse.cdt.serial.SerialPort.getBaudRateValue()
      instead</li>
    <li>org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings.getBaudRate(), use
      org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings.getBaudRateValue() instead</li>
    <li>org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings.setBaudRate(BaudRate), use
      org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings.setBaudRateValue(int) instead</li>

  </ul>
  <p>
    See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=563108" target="_blank">Bug 563108</a>.
  </p>
</body>

</html>
