Запрет копирования и вставки, есть ли способ поделиться подробностями форматирования Java - PullRequest
7 голосов
/ 12 марта 2011

У нас есть 5-10 разработчиков, работающих над Eclipse с Java, здесь, в нашем магазине, и мы часто отлаживаем классы, которые не поддерживают отладку toString().

А вот и Деталь форматирования , чтобы сохранить день. Ура! Но только мой день. Если я хочу поделиться радостью с моими коллегами-разработчиками, я ДУМАЮ, что я должен сделать некоторое копирование и вставку, как и они.

Это отстой. У нас есть N различных систем контроля версий, которые работают в Eclipse ... кажется, что это то, что люди хотели бы обойти.

Ничего в диалоге file-> export ... Ничего через поиск в онлайн-справке. Ничего.

Мне удалось отследить хотя бы некоторые настройки до /workspace/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.dbug.ui.prefs, но есть основания полагать, что это еще не все. Кроме того, мысль о том, чтобы положить что-то глубоко в скрытую папку в систему управления версиями, заставляет меня нервничать.

Есть ли лучший способ поделиться деталями форматеров? В идеале это было бы то, что мы могли бы просто проверить в нашем репозитории и распространить таким образом.

РЕДАКТИРОВАТЬ: я использую Helios, Service Release 1, идентификатор сборки 20100917-0705.


В дополнение к точке расширения javaLogicalStructures (для добавления логической структуры к заданным классам) есть также точка с именем detailPaneFactories. Но это для того, чтобы создать на панели текст (или что-то еще, благодаря этой точке расширения), к которому обращается средство форматирования деталей. Ни один из них не позволяет расширителям перечислять существующие средства форматирования деталей (или логические структуры в этом отношении).

В нижней части расширения detailPaneFactories есть кое-что интересное:

    Supplied Implementation:
    The debug platform contributes a detail pane factory providing a default 
    text source viewer detail pane. The default detail pane displays textual
    details of a selected element based on the corresponding debug model 
    presentation's implementation of computeDetail(IValue value, 
    IValueDetailListener listener). 

computeDetail звучит многообещающе. Я буду держать вас в курсе (если кто-то еще не победит меня ... ура щедрости).

Хм ... org.eclipse.jdt.debug.ui.JavaDebugUtils.getPreferenceStore () звучит многообещающе, но я все равно предпочел бы не писать плагин для этого сам.

Ах ... хорошо. Вот код org.eclipse.jdt.internal.debug.ui.JavaDetailFormattersManager, используемый для их загрузки:

    /**
     * Populate the detail formatters map with data from preferences.
     */
    private void populateDetailFormattersMap() {
            String[] detailFormattersList= JavaDebugOptionsManager.parseList(JDIDebugUIPlugin.getDefault().getPreferenceStore().getString(IJDIPreferencesConstants.PREF_DETAIL_FORMATTERS_LIST));
            fDetailFormattersMap= new HashMap(detailFormattersList.length / 3);
            for (int i= 0, length= detailFormattersList.length; i < length;) {
                    String typeName= detailFormattersList[i++];
                    String snippet= detailFormattersList[i++].replace('\u0000', ',');
                    boolean enabled= ! JavaDetailFormattersPreferencePage.DETAIL_FORMATTER_IS_DISABLED.equals(detailFormattersList[i++]);
                    fDetailFormattersMap.put(typeName, new DetailFormatter(typeName, snippet, enabled));
            }
    }

Таким образом, строка в хранилище настроек - это просто набор CSV с именами типов, фрагментами, включенными, именами типов ... замените \ u0000 на, во фрагментах, и все готово.

Это обрабатывает экспорт (черт, вы можете просто сбросить строку настроек целиком).

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

OTOH, я бы действительно скорее не полагался бы на внутреннюю работу класса в *.internal.*.

Ответы [ 4 ]

3 голосов
/ 29 января 2012

Из Eclipse 3.8 и 4.2 M5 - Новое и достойное внимания :

Форматировщики деталей теперь можно экспортировать как отдельные настройки .
Ранееединственный способ поделиться подробными форматерами - это экспортировать все настройки рабочего пространства.

detail formatter export

Это закрывает ошибку 224815 , упомянутую Брайаном Де Алвисом в его ответе :
"Сделать экспортеры форматируемых деталей" (с этим патчем )

2 голосов
/ 14 марта 2011

Несмотря на то, что в мастере экспорта настроек нет ничего явного, при экспорте всего будет также написано средство форматирования деталей. Просто найдите в выходном файле /instance/org.eclipse.jdt.debug.ui/org.eclipse.jdt.debug.ui.detail_formatters и поделитесь только этими строками.

Обновление: Кажется, что в импортере есть ошибка, вы должны удалить префикс /instance/ из каждой строки перед импортом файла.

В качестве альтернативы, поскольку они хранятся в файле свойств в метаданных рабочей области, вы можете поделиться этим (хотя вы, вероятно, перезапишете другие параметры отладки, если просто скопируете файл): ${workspace}\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.debug.ui.prefs

1 голос
/ 10 января 2012

Эта проблема была зарегистрирована в Eclipse Bugzilla как ошибка 224815 . Проблема заключается в том, что при настройке передачи предпочтений импорта / экспорта были упущены средства форматирования деталей. Исправление, если оно принято, должно быть в 3.8 / 4.2 M6, которое должно выйти в конце января.

1 голос
/ 15 марта 2011

Использование «макроса» может помочь в этом.

Вам придется

  1. Установить плагин, который позволит вам записывать макросы
  2. Начать запись макросаи настройте средства форматирования Detail с помощью меню Eclipse
  3. Сохраните и сохраните этот макрос в некотором общем каталоге
  4. Установите этот плагин и запустите макрос на ПК, используемых другими разработчиками

Oneтакой плагин: http://sourceforge.net/projects/practicalmacro/reviews/

...