Новое в 3.2 (JDT)

Ниже перечислены наиболее значимые изменения средств разработки на Java, вошедшие в выпуск 3.2 Eclipse, а именно:

Ознакомьтесь также с разделом Платформа Eclipse - новое в 3.2, где описаны нововведения платформы.

Рефакторинг Java

Рефакторинг Представить косвенный вызов

Новый рефакторинг Представить косвенный вызов позволяет перенаправить все вызовы метода другому методу. Новый метод будет вызывать исходный метод. Реализацию по умолчанию нового метода можно заменить любой другой по своему выбору.

Такое перенаправление может быть полезно, если в метод требуется добавить новые функции, но:

  • Метод невозможно изменить, потому что он входит в библиотеку.
  • Метод запрещено изменять, потому что он входит в API.

Используйте перенаправление для исправления ошибок или как быстрый способ добавить код до или после вызова метода.

Для того чтобы выполнить рефакторинг Представить косвенный вызов, выберите метод, вызовите Рефакторинг > Представить косвенный вызов... и укажите имя и класс, объявляющий новый метод.

Представить косвенный вызов

Метод будет добавлен в выбранный объявляющий класс.

Представить косвенный вызов - обновление

Все ссылки будут обновлены с вызовом нового метода.

Представить косвенный вызов - результат

Рефакторинг Извлечь базовый класс

Новый рефакторинг Извлечь базовый класс позволяет извлечь общий базовый класс из ряда дочерних типов. Выбранные дочерние типы становятся прямыми производными классами извлеченного базового класса. Кроме того, операция Извлечь базовый класс позволяет использовать извлеченный базовый класс в коде там, где это возможно.

В следующем примере JavaEditorTests и PropertiesEditorTests являются одноуровневыми классами. На первом рисунке показана иерархия типов до рефакторинга.

иерархия типов

На следующем рисунке показана иерархия типов после извлечения EditorTests с помощью рефакторинга Извлечь базовый класс.

иерархия после рефакторинга

Этот рефакторинг вызывается в меню Рефакторинг > Извлечь базовый класс.

Мастер очистки

Мастер очистки может вызываться с любым числом исходных файлов Java, пакетов или для всего проекта Java. Он выполняет следующие функции:

  • исправление нескольких неполадок сразу
  • приведение кода к принятому стилю

Далее приведены примеры его операций:

  • добавить фигурные скобки для всех блоков 'if', 'while' или 'for'
  • уточнить обращение к полям с помощью 'this'
  • использовать 'final', где это возможно

Для того чтобы код на Java 1.4 был совместим с 5.0, используйте мастер очистки, чтобы:

  • преобразовать все циклы for в расширенные циклы for.
  • пометить все переопределяющие методы аннотацией @Override

мастер очистки

Выберите проект, пакет или файл и вызовите мастер в меню Исходный текст > Очистить....

Хронология рефакторинга

Операции рефакторинга, выполняемые JDT, записываются в are now tracked in a хронологию рефакторинга. Система рефакторинга сохраняет подробную информацию об операциях рефакторинга в рабочей области.

Хронологию рефакторинга можно просмотреть и изменить в меню Рефакторинг > Хронология

хронология рефакторинга

Работа со сценариями рефакторинга

Операции рефакторинга в локальной рабочей области можно экспортировать в сценарий рефакторинга и выполнить в любой рабочей области.

Сценарии рефакторинга позволяют автоматизировать задачи исправления измененных API или применения сложных исправлений.

Создайте сценарий рефакторинга из хронологии рефакторинга, вызвав Рефакторинг > Создать сценарий....

Создать сценарий

Для того чтобы применить сценарий рефакторинга в другой рабочей области, используйте Рефакторинг > Применить сценарий...

Новая точка расширения позволяет включать поддержку сценариев рефакторинга при написании модулей. Дополнительная информация приведена в описании точки расширения org.eclipse.ltk.core.refactoring.refactoringContributions.

Экспорт файла JAR вместе с операциями рефакторинга

При экспорте файла JAR из рабочей области мастер экспорта JAR предлагает включить информацию о рефакторинге в файл JAR.

Выберите Файл > Экспорт... и далее Файл JAR. На первой странице мастера экспорта JAR выберите Экспортировать операции рефакторинга для выбранных проектов. Щелкните на ссылке, чтобы указать операции рефакторинга.

экспорт JAR вместе с рефакторингом

После этого клиенты смогут перенести старую версию файла JAR с помощью рефакторинга Рефакторинг> Перенести файл JAR.... Кроме того, если выбран файл JAR, то можно использовать также Путь компоновки > Перенести файл JAR....

Перенести файл JAR

Этот рефакторинг автоматически обновляет код, применяющий старую версию файла JAR.

Рефакторинг с учетом API

Часть операций рефакторинга были расширены для поддержки совместимости с API. При этом исходный элемент становится делегатом элемента, для которого был выполнен рефакторинг.

  • Переименовать метод
  • Переименовать поле (только константы)
  • Переместить метод
  • Представить параметр
  • Изменить сигнатуру

сделать исходный элемент делегатом

Генерация делегата для совместимости с API включается опцией Сохранить исходный метод как делегат переименованного в окне рефакторинга.

Переименование типов элементов с похожими именами

Рефакторинг Переименовать тип теперь работает с переменными и методами, имена которых схожи с именем изменяемого типа. Эта функция позволяет синхронизировать имена методов и переменных с именами типов.

обновить похожие объявления в UI

Для вызова рефакторинга используйте меню Рефакторинг > Переименовать...

Рефакторинг Переименовать пакет работает с вложенными пакетами

При необходимости при рефакторинге Переименовать пакет будут также переименованы вложенные пакеты.

Переименовать пакет

В этом примере junit.samples.money будет переименован в junit.examples.money.

Для вызова рефакторинга выберите пакет и используйте меню Рефакторинг > Переименовать...

Фильтрация предварительного просмотра рефакторинга

Предварительный просмотр рефакторинга теперь может выполняться с фильтрами. Это особенно полезно при обновлении совпадений в комментариях и строках, когда переименование ведется для элементов Java.

рефакторинг - предварительный просмотр

На рисунке показано окно переименования класса TestCase в TestCasee с фильтром для совпадений в тексте.

Можно также отфильтровать изменения, связанные с областью видимости элементов Java.

Редактор Java

Настраиваемый помощник по содержимому

Повторное нажатие Ctrl+Space в помощнике по содержимому позволяет предлагать варианты дополнения по циклу.

Отдельным категориям дополнений можно назначить разные комбинации клавиш, и на странице Дополнительно Java > Редактор > Помощник по содержимому > Дополнительно настроить, какие категории будут показаны по умолчанию в окне помощника по содержимому.

помощник по содержимому

Точка расширения org.eclipse.jdt.ui.javaCompletionProposalComputer позволяет разработчикам работать с вариантами дополнений и категориями помощника по содержимому для редактора Java.

Поддержка смешанного регистра в дополнениях кода

Дополнение кода поддерживает смешанный регистр в шаблонах. Например, в качестве дополнения для NPE будет предложено NullPointerException. Эта поддержка может быть выключена опцией Показать совпадения со смешанным регистром на странице помощник по содержимому Java > Редактор > Помощник по содержимому.

редактор Java - дополнение NPE

Быстрое меню для блоков кода

Быстрое меню Заключить в позволяет работать с блоками кода. Это меню можно расширить пользовательскими шаблонами. В шаблонах указываются переменные.

преобразование блока кода

Для вызова меню используйте Исходный код > Заключить в или нажмите Alt+Shift+Z.

На странице Java > Редактор > Шаблоны можно настроить шаблоны. Во всех шаблонах участвует переменная ${line_selection}.

Новые быстрые исправления

Далее перечислены некоторые новые быстрые исправления:

  • исправление доступа к примитивному типу

    исправление доступа к примитивному типу

    Это быстрое исправление позволяет работать внутри одного файла. Более сложные операции выполняются как рефакторинг Определить аргументы параметризуемого типа.

  • добавить недостающую аннотацию

    добавить недостающую аннотацию

  • добавить новый элемент аннотации

    добавить новый элемент аннотации

Поддержка категорий

Категории определяются в комментариях Javadoc для типов, методов и полей с помощью тега @category.

исходный код с категориями

Категории показываются в панелях Схема и Элементы и в быстрой схеме. Меню Вид позволяет выбрать отображаемые категории.

Схема с категориями

Все элементы можно свернуть

Если включено сворачивание, то поля, инициализаторы и комментарии можно свернуть, как методы.

сворачивание

Предусмотрены команды сворачивания и разворачивания всех комментариев, всех элементов и пр. Эти команды входят в контекстное меню Свернуть редактора Java на вертикальной линейке.

Линейка и схема для внешних файлов Java

В редакторе Java есть вертикальная линейка, а панели Схема и Быстрая схема могут отображать схему внешних файлов Java и файлов Java из хранилищ.

Линейка

Компилятор Java

Совместимость с Java SE 6.0

Реализована полная совместимость с Java SE 6.0. Например, атрибуты StackMapTable (см. JSR 202) создаются в файлах .class с целью 1.6.

совместимость с 6.0

Анализ пустых ссылок

Компилятор Java может выполнять простой анализ пустых ссылок для локальных переменных.

Эта диагностика включается на странице Ошибки/предупреждения Java > Компилятор > Ошибки/предупреждения, параметр Возможные ошибки программирования > Пустые ссылки.

редактор Java - пустые ссылки

Учтите, что этот анализ выполняется только в очевидных случаях. Предупреждение выдается для явных нарушений, но не для всех потенциальных случаев.

В режиме совместимости с 5.0 предупреждения о пустых ссылках выключаются параметром @SuppressWarnings("null").

Улучшенное исправление синтаксических ошибок

Внутренний синтаксический анализатор Java сделан более устойчивым к синтаксическим ошибкам. В Eclipse 3.1 синтаксическая ошибка приводила к тому, что последующие ошибки не показывались. Теперь анализатор продолжает обработку файла после обнаружения операторов с ошибками.

В следующем примере показано, как обнаруживается неверная ссылка на метод bar(), несмотря на отсутствующую точку с запятой в предыдущем операторе.

редактор Java - работа с синтаксисом

Это позволяет выполнять рефакторинг с одним файлом, где есть синтаксические ошибки. Например, можно переименовать или извлечь локальную переменную из метода, который ее не полностью реализован.

Извлечение локальной переменной из неполного метода

Обработка настраиваемых ошибок как не фатальных

Опция Считать настраиваемые ошибки фатальными на странице параметров Компоновка Java > Компилятор > Компоновка позволяет указать, будут ли настраиваемые ошибки считаться фатальными. По умолчанию эта опция включена.

Если эта опция выключена, то скомпилированный код можно выполнить, несмотря на наличие в нем ошибок.

Обнаружение лишних тегов $NON-NLS$

Теперь можно найти лишние теги $NON-NLS$. Неполадка возникает, если строка комментария начинается с //$NON-NLS-x$, но в той же строке нет соответствующего текста.

Эти сообщения можно выключить так же, как и сообщения об обнаружении неэкспортированных строк. Для этого на странице Ошибки/предупреждения Java > Компилятор > Ошибки/предупреждения предусмотрен параметр Стиль кода > Неэкспортированные строки (лишние или отсутствующие теги $NON-NLS).

редактор Java - лишние теги

Для того чтобы удалить лишние теги, используйте быстрое исправление (Ctrl+1), или Ctrl+1, Ctrl+Enter.

Обнаружение использования примитивных типов

Теперь можно обнаружить использование примитивных типов. Примитивный тип - это ссылка на параметризуемый тип без аргумента типа, например, List вместо List<Element>.

Эта диагностика включается независимо от операций с непроверяемым типом на странице Ошибки/предупреждения Java > Компилятор > Ошибки/предупреждения, параметр Параметризуемые типы > Использование примитивного типа.

редактор Java - использование примитивного типа

Это предупреждение не показывается при добавлении @SuppressWarnings("unchecked").

Для исправления этой ошибки есть также быстрое исправление.

Обнаружение присвоения параметрам методов

Присвоение параметрам метода возможно по правилам языка, но не рекомендуется.

Для того чтобы обнаруживать такие присвоения, на странице Ошибки/предупреждения Java > Компилятор > Ошибки/предупреждения предусмотрен параметр Стиль кода > Присвоение параметрам.

редактор Java - предупреждение

Обнаружение лишних меток

Компилятор Java может находить лишние метки операторов.

Эта диагностика включается на странице Ошибки/предупреждения Java > Компилятор > Ошибки/предупреждения, параметр Лишний код > Неиспользуемые метки break/continue.

редактор Java - использование примитивного типа

Обнаружение прохода сквозь ветви switch

Компилятор Java может находить возможные проходы сквозь ветви case. Пустые метки case разрешены.

Эта диагностика включается на странице Ошибки/предупреждения Java > Компилятор > Ошибки/предупреждения, параметр Возможные ошибки программирования > Проход сквозь метки case.

редактор Java - предупреждение

Предусмотрено быстрое исправление, добавляющее оператор break к предыдущей ветви case.

Улучшение быстродействия работы с большими файлами

Предельный размер внутреннего кэша Java теперь зависит от максимального размера кучи (аргумент -Xmx для большинства JVM), передаваемого виртуальной машине Java в Eclipse.

Увеличение размера кучи положительно сказывается на производительности при работе с большими файлами .jar в пути к классам.

Повторное создание измененных файлов .class

Компоновщик Java может повторно создавать измененные или удаленные файлы .class в выходной папке по исходным файлам.

Это настраивается на странице Компоновка Java > Компилятор > Компоновка, параметр Выходная папка > Повторно создать измененные файлы .class.

Панель Javadoc и всплывающие подсказки из Javadoc

Панель Javadoc и всплывающие подсказки из Javadoc могут получать информацию из вложенного Javadoc библиотек, для которых нет исходного кода.

Инструментарий JUnit

Поддержка JUnit 4

Поддержка JUnit теперь включает выполнение тестов JUnit 4. Дополнительная информация приведена на сайте www.junit.org.

  • Используйте мастер Создать тестовый набор JUnit для генерации тестового класса JUnit 4:
    поддержка JUnit 4 в мастере Создать тестовый набор
  • Используйте библиотеку JUnit для добавления в путь компоновки
    Добавить библиотеку JUnit 4
  • Запускайте тесты JUnit 4, как обычно, Выполнить как JUnit
  • Игнорируйте тесты, помечая их как @Ignore

Хронология JUnit

Панель JUnit поддерживает параллельные тесты. Хронология позволяет переключаться между активными и недавними тестами. Тесты можно повторно запустить из хронологии, не останавливая уже выполняемые тесты.

хронология JUnit

Это работает и с JUnit 3, и с JUnit 4.

Отладчик Java
Среды выполнения

Среда выполнения описывает рабочие функции, например, J2SE-1.4. Указав JRE для запуска, отладки и компоновки, вы настраиваете среду выполнения. На странице Среда выполнения Java > Установленные JRE > Среды выполнения показаны установленные в рабочей области JRE, совместимые со средами выполнения. JRE, в точности совпадающие с требованиями среды выполнения, показаны полужирным, а предоставляющие дополнительные возможности - обычным шрифтом. Если для среды выполнения подходит более чем одна JRE, можно выбрать JRE по умолчанию для этой среды.

Среда выполнения

Путь компоновки или конфигурация запуска со ссылкой на среду выполнения обеспечивают большую гибкость, чем явное указание JRE, поскольку среда выполнения JRE может быть получена независимо от ее имени. Указать среду выполнения для запуска и компоновки можно на вкладке JRE или в мастере Изменить библиотеку.

вкладка JRE

Переменная запуска в системных свойствах

Новая переменная запуска позволяет динамически указать аргументы для программ на Java и VM из среды выполнения Eclipse. Эта переменная задает имя системного свойства, которое определяется при запуске.

Например, системное свойство java.home указывается как ${system_property:java.home}.

вкладка Аргументы

Обработка значений массивов

Помощник по содержимому и вычисления могут работать с массивами Java. Используйте this для ссылки на выбранный массив.

помощник по коду

Группы нитей Java

Функция Показать группы нитей позволяет скрыть или показать группы нитей в панели Отладка.

группы нитей

Экспортируемые записи динамического пути к классам

В динамический путь к классам можно включать только экспортированные записи из пути компоновки. По умолчанию динамический путь к классам включает все записи (включая неэкспортированные).

На вкладке Путь к классам выберите запись по умолчанию и нажмите Изменить..., чтобы настроить параметры.

путь к классам

динамический путь к классам

Приостановить нить или Приостановить VM

На странице Отладка Java > Отладка доступна опция, управляющая приостановкой на точке прерывания отдельной нити или всей VM.

Отладка

Разное

Индикатор типов Java

Индикатор типов Java можно включить на странице параметров оформление меток Общие > Вид > Оформление меток, чтобы найти первый тип в единице компиляции или файле класса. Интерфейсы, аннотации и перечисления выделяются метками, а обычные классы не выделяются.

индикатор типов Java

Поиск неисправных экспортированных строк

Теперь можно найти неисправные экспортированные строки. При этом будут найдены отсутствующие, лишние и повторяющиеся ключи.

Поиск неисправных экспортированных строк

Для поиска выберите файл свойства, пакет или весь проект и выберите Исходный код > Найти неисправные экспортируемые строки

Улучшенный механизм экспорта строк Eclipse

Механизм экспорта строк в Eclipse теперь поддерживает функции традиционного способа экспорта строк. При наведении мыши на ключ экспортированной строки в редакторе Java показывается подсказка для его значения.

всплывающие подсказки NLS

С помощью Ctrl+щелчок можно перейти сразу к записи в соответствующем файле свойств. В редакторе файла свойств Ctrl+щелчок позволяет найти место, где ключ применяется в коде.

Создание типа из фрагмента кода

Фрагмент кода с типом Java можно вставить в пакет или исходную папку, чтобы создать новую единицу компиляции. Например, выберите и скопируйте следующий фрагмент:
package pack;
   public class HelloWorld {
      public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
затем выберите исходную папку в панели Структура пакетов - Ctrl+V (Правка > Вставить). При этом автоматически будет создан пакет 'pack' и файл 'HelloWorld.java' с этим текстом.

Создание hashCode() и equals()

Новое действие позволяет создать методы hashCode() и equals(). Можно выбрать поля, на которых будет основана их реализация.

мастер Сгенерировать hash и equals

Для того чтобы вызвать действие, выберите тип и в меню выберите Исходный код > Сгенерировать hashCode() и equals()...

Форматирование кода в командной строке

Форматирование кода можно выполнить, не запуская пользовательский интерфейс Eclipse, в неинтерактивной программе форматирования. Программа форматирования кода в командной строке работает как обычное приложение Eclipse.

Следующая команда позволит отформатировать файлы в папке src с параметрами, заданными в файле config.prefs:

eclipse -application org.eclipse.jdt.core.JavaCodeFormatter -config d:/config.prefs c:/src

За дополнительной информацией обратитесь к разделу Работа с приложением форматирования.

Поддержка Java-подобных расширений

Поддерживаются файлы с кодом Java, расширение которых отличается от .java. Расширение типов файлов Java можно добавить на странице тип содержимого Общие > Типы содержимого (введите Текст > Исходный файл Java).

Структура пакетов с файлом 'Y.abc' для компиляции