Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GWT: Generator. Откуда брать GeneratorContext? Пытаюсь изучать генераторы GWT 
:(
    Опции темы
SherbAnt
Дата 6.2.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.1.2007

Репутация: нет
Всего: 3



Добрый вечер, коллеги.

В GWT есть пакет com/google/gwt/core/ext/typeinfo

С помощью него можно получать некоторую информацию о неизвестном классе (по крайней мере на данный момент я так думаю). Вроде "reflection для бедных". Поправьте если я ошибаюсь. 

Пытаясь во всем этом разобраться, наткнулся на вот такую статью

Вот в этом куске:
Код

String packageName;
TypeOracle typeOracle = context.getTypeOracle(); 
        try { 
            JClassType classType = typeOracle.getType(typeName); 
            packageName = classType.getPackage().getName(); 


используется некий context. Он нужен что бы получить в итоге JClassType, который дает нужную информацию.
Выше видно, что context - это GeneratorContext и он передается как параметр:
Код

public String generate(TreeLogger logger, GeneratorContext  context, String typeName)


Вот тут видно, что это интерфейс. 
Теперь собственно вопрос: Как с этим context работать? Откуда его получать? Настройка GWT через xml? 
Вообщем уповаю на разум коллектива и отдельных его представителей  smile   smile  smile 
PM MAIL Skype   Вверх
andyhomes
Дата 6.2.2010, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



Цитата(SherbAnt @  6.2.2010,  22:55 Найти цитируемый пост)
Теперь собственно вопрос: Как с этим context работать? Откуда его получать?

Начнем с того, что метод generate() вызовет компилятор, который без контекста вас не оставит smile
он передаст экземпляр конкретной реализации этого интерфейса.

А работать с ним очень просто - посредством обращения к методам интерфейса.

Вот, еще статья:
Deferred Binding using Generators

И еще посмотрите исходники примера Showcase, там тоже генератор используется.
PM MAIL   Вверх
SherbAnt
Дата 16.2.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.1.2007

Репутация: нет
Всего: 3



@andyhomes : спасибо, ссылками очень помог.

Курсовую сдал вовремя.

Вот этот кусок статьи помог понять общий принцип работы. Может кому то сэкономит пять минут на переводе.


Код

Отложенное обязательство (Deferred Binding) - это метод, используемый компилятором GWT для создания и выбора конкретной реализации класса, 
на основе набора параметров.
 В сущности, Отложенное Обязательство - это GWT ответ на Java reflection. Это позволяет GWT разработчикам производить несколько 
вариантов их приложений под разные браузеры, и иметь только один из них действительно загруженный и запущеный в браузере.

У Отложенного Обязательства есть несколько выгод:
- снижает размер сгенерированного JavaScript кода, таким образом клиенту будет необходимо скачать только код необходимый для запуска
 под определенным браузером (использованно в Internationalization модуле).
-сохраняет время разработчиков, автоматически генерируя код имплементирующий интерфейс или создающий прокси класс (использованно в GWT RPC модуле).

Некоторые части GWT по умолчанию используют технологию Отложенного Обязательства, как часть собственной имплементации, 
но это не видно пользователю API. Например различные виджеты (widgets) и панели (panels), используют ОО для имплементации браузерспецифичной логики.

Некоторые возможности GWT требуют от пользователя API явного вызова ОО, путем проектирования классов, 
следующих определенным правилам и создания экземпляров классов с GWT.create (класса), в том числе GWT RPC и i18n.

Есть два пути по которым класс может быть изменен используя Отбоженное Обязательство:
- Изменяемость: класс меняется в зависимости от правил заданных к конфигурации.
- Генерация кода: класс будет создан как результат вызова генератора кода во время компиляции.

ОО полностью настраиваем, и нет необходимости редактировать сорцы GWT. Он настраивается через элементы <replace-with> и <generate-with> в xml файле.
Правила ОО задаются в build модуле через элемент <inherits>.

Определение подкласса Генератора очень похоже на определения плагина к компилятору GWT.

Генератор вызывается для получения имплементации класса до того как произошло преобразование Java к JavaScript. 
Имплементация генератора содержит один метод, который должет выводить Java код в файл и возвращать имя сгенерированного класса как строку.
TypeOracle - это объект, содержащий информацию об уже разобранном коде Java, который может потребоваться генератору.




Это сообщение отредактировал(а) SherbAnt - 16.2.2010, 20:28
PM MAIL Skype   Вверх
andyhomes
Дата 16.2.2010, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 14.7.2009

Репутация: 2
Всего: 2



"Отложенное обязательство"?
Что за бред?

"В сущности, Отложенное Обязательство - это GWT ответ на Java reflection." - чушь. Они никак не коррелируют.


Цитата(SherbAnt @  16.2.2010,  20:24 Найти цитируемый пост)
Может кому то сэкономит пять минут на переводе.

Сэкономить 5 минут можно только если не читать ваши сентенции.

... и хорошо, что препод "не рубит" (да и вряд ли читал smile )

PM MAIL   Вверх
Nofate
Дата 18.2.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 2
Всего: 8



"Binding" - это, наверное, все-таки связывание, а не обязательство...


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
SherbAnt
Дата 2.5.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.1.2007

Репутация: нет
Всего: 3



Цитата(andyhomes @  17.2.2010,  00:22 Найти цитируемый пост)
"В сущности, Отложенное Обязательство - это GWT ответ на Java reflection." - чушь. Они никак не коррелируют.


Что ж вы такой нервный. Если вам это кажется чушью - советую сказать это непосредственно автору.
Я привел лишь свой вариант перевода. Согласен, что он не совсем удачный.
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.