Я строю свой плагин в Helios SR2.Было бы приятно поддержать Галилея, но я не слишком беспокоюсь об этом на данный момент.Windows 7: 64-битная, 64-битная JVM (1.6_21 IIRC).
У меня есть поле swt.custom.CCombo
, заполненное отображаемыми значениями списка записей.У меня есть карта «отображаемое значение» -> «значение хранилища».
Я хочу сохранить значение хранилища и отобразить отображаемое значение.Иди к черту.
Я использую привязку данных с BeanObservables, IObservables, DataBindingContext, и все такое прочее.
Мой текущий подход (который не работает или я бы не стал спрашивать)создать свой собственный UpdateValueStrategy
с пользовательским IConverter
, который будет внутренне отображаться между ними.
В настоящее время я пытаюсь расширить org.eclipse.core.databinding.conversion.Converter
, потому что IConverter отмечен @noimplement
и @noextend
.@noimplement
утверждает, что клиенты должны расширять Converter
вместо непосредственной реализации IConverter (даже несмотря на то, что Converter довольно тривиален).
К сожалению, Java-компилятор Eclipse говорит мне, что нет-нет:
Ограничение доступа: преобразователь типов недоступен из-за ограничения на требуемую библиотеку {install} \ plugins \ org.eclipse.core.databinding_1.3.100.I20100601-0800.jar
В соответствующем «.api_description» я вижу следующий XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<component name="org.eclipse.core.databinding_1.3.100.I20100601-0800" version="1.2">
<plugin id="org.eclipse.core.databinding_1.3.100.I20100601-0800"/>
<package name="org.eclipse.core.databinding" visibility="1">
<type name="ObservablesManager" restrictions="2"/>
<type name="UpdateListStrategy" restrictions="0">
<method name="useMoveAndReplace" restrictions="8" signature="()Z"/>
</type>
</package>
<package name="org.eclipse.core.databinding.conversion" visibility="1">
<type name="IConverter" restrictions="3"/>
</package>
</component>
С помощью Google Code я вижу, что visibility="1"
означает общедоступный API.Хорошо, отлично.
restrictions="3"
с другой стороны, означает @noextend @noimplement.Звучит знакомо?Хорошо, отлично.
Но кажется, что ограничения на IConverter стираются на Converter, делая невозможным использование.Я не могу расширить Converter, и я не могу вызвать super(blah, blah)
из моего конструктора.Интересно, что компилятор не жалуется на мою реализацию public Object convert(Object fromObject)
, даже несмотря на то, что у Converter нет его собственной, поэтому можно подумать, что ограничения IConverter
будут применяться.
Очевидно, нет.
У кого-нибудь есть
- Совершенно другой подход?
- Некоторые способы превратить это ограничение доступа в представление, желательно локальным способом, чтобы я не делал ничего глупого в другом месте.
Я обнаружил «ограниченный доступ»настройки для компилятора и переключили его на «предупреждение», а не «ошибка».Тем не менее, я надеюсь, что я могу сделать что-то менее глобальное.Я продолжу с этим в это время, но альтернатива была бы хороша.