|
|
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
Привет, Помогите выбрать направление в задаче по препроцессингу java кода. На примере ее кратко можно сформулировать так: Имеется некая сущность A с полем AA. Программист может написать так: Код: plaintext 1. 2. 3. 4. Но при кодогенерации нужно получить так: Код: plaintext 1. 2. 3. 4. В жизне понятно все будет сложнее. Но задача так или иначе сводится к трансляции одних java конструкций в другие. Хочется выбрать правильный инструмент для решения. В какую сторону стоит посмотреть ? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 14:47:58 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
В Java 6 есть API компилятора. В том числе позволяет на лету подменять методы. Я видел какой-то модуль для работы с этим функционалом в NetBeans на Sun Tech Days в Питере весной, но название и входит ли стандартом - не помню. Nai tiruvantel ar varyuvantel i Valar tieyanna nu vilya Aiya Eärendil Elenion Ancalima! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:02:30 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18 В жизне понятно все будет сложнее. Ну так давай жизненый пример. И зачем это нужно, почему не может быть решено организационно/code review. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:11:05 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18 Хочется выбрать правильный инструмент для решения. В какую сторону стоит посмотреть ? Не совсем понял. Либо в сторону Groovy, либо в сторону antlr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:13:49 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
это не aspectJ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:15:59 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
Timm, к сожалению, жизненного примера пока нет. Нужно это для того, для сокрытия специфики EJB от "зеленого" прикладного программиста. Т.е. ему будет известно, что есть некая DTO A у нее есть поле AA, типа String. Есть Сервис B с методом BB, возвращаемым типом String. Значит в коде он может написать: A.AA = B.BB(); Дальше, в процессе генерации кода, все это должно развернуться в EJBшные лукапы, креейты, вызовы методов и т.д. Ну это если очень грубо. Более детально пока сам описать не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:22:51 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
Щас смотрю в сторону JavaCC + JJTree. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:24:00 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18Timm, к сожалению, жизненного примера пока нет. Нужно это для того, для сокрытия специфики EJB от "зеленого" прикладного программиста. Т.е. ему будет известно, что есть некая DTO A у нее есть поле AA, типа String. Есть Сервис B с методом BB, возвращаемым типом String. Значит в коде он может написать: A.AA = B.BB(); Дальше, в процессе генерации кода, все это должно развернуться в EJBшные лукапы, креейты, вызовы методов и т.д. Ну это если очень грубо. Более детально пока сам описать не могу. Бред какой-то. Из-за "зеленого" программиста городить такой огород. Не проще ли ему научиться EJB, ну или накрайняк оберните в фасад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:51:14 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
Если все так завязано на зеленых человечков, может им дать что-то скриптовое? А потом этот скрипт выполнять из EJB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 15:54:22 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18 Нужно это для того, для сокрытия специфики EJB от "зеленого" прикладного программиста. Эмм... Лучший вариант, имхо, решить организационные проблемы: провести тренинги/написать best practices/howto (короче - ликбез). Иначе стрельнет так что мама не горюй. Это если действительно нужно программисту. Если не программисту: постараться избавиться от кода. поглядеть в сторону jBPM или подобных продуктов. Ну и сформировать требования, в конце то концов )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 16:03:57 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
fixxer, согласен - бред. Blazkowicz, ну тогда нужно обоснование. А я его пока дать не могу. И все-таки пусть будет так, что нужно одни конструкции по определенным правилам переводить в другие. Хочется понять, какими силами можно решить задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 16:06:33 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
пользуйте bsf. там Код: plaintext 1. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 16:35:34 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18fixxer, согласен - бред. Blazkowicz, ну тогда нужно обоснование. А я его пока дать не могу. И все-таки пусть будет так, что нужно одни конструкции по определенным правилам переводить в другие. Хочется понять, какими силами можно решить задачу. Либо пример совсем не наглядный. Либо способ решения проблемы все равно выбран не правильно. Какая задача решается? Защита от зеленого разработчика или предоставление возможности кодить людям не продвинутым в программировании? С исходным примером не понятно как, например, IDE даст возможность написать код не согласованый с контрактом класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 17:03:50 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
Задача - из одного куска кода получить по некоторым правилам другой кусок кода :) Например, если в коде встретили "сущность.поле = <expression>;", то нужно написать - сущность.setПоле(<expression>); Конструкции из которых нужно переводить и в какие могут изменятся. Сейчас вижу решением - построение синтаксического дерева, указанными выше мной тулзами. Дальше - его обход и, либо изменение напрямую и потом флуш, либо после анализа дерева при флуше знать где на что заменять. Сейчас нашел три реализации построения синтаксического дерева. В чем плюсы/минусы каждого сходу понять не могу. Пытаюсь понять. Ситуация такая: мега спецы предположи, что это сделать можно и нужно сделать именно так. Сказали об этом другим мега дядькам. Если окажется, что этого сделать нельзя, то должно быть обоснование и на основании его будет приниматься решение о другой реализации. Но это все будет непросто и потребует много много бумажек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 17:53:16 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18Задача - из одного куска кода получить по некоторым правилам другой кусок кода :) Например, если в коде встретили "сущность.поле = <expression>;", то нужно написать - сущность.setПоле(<expression>); Конструкции из которых нужно переводить и в какие могут изменятся. Сейчас вижу решением - построение синтаксического дерева, указанными выше мной тулзами. Дальше - его обход и, либо изменение напрямую и потом флуш, либо после анализа дерева при флуше знать где на что заменять. Сейчас нашел три реализации построения синтаксического дерева. В чем плюсы/минусы каждого сходу понять не могу. Пытаюсь понять. Ситуация такая: мега спецы предположи, что это сделать можно и нужно сделать именно так. Сказали об этом другим мега дядькам. Если окажется, что этого сделать нельзя, то должно быть обоснование и на основании его будет приниматься решение о другой реализации. Но это все будет непросто и потребует много много бумажек. А какую задачу изначально решаете? Сентенции про зеленых программистов прозвучали как-то невнятно. Я в упор не могу понять чем и в какой ситуации может помочь замена вида сущность.поле = <expression>; --> сущность.setПоле(<expression>); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 18:06:05 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
steevy18Ситуация такая: мега спецы предположи, что это сделать можно и нужно сделать именно так. Сказали об этом другим мега дядькам. Если окажется, что этого сделать нельзя, то должно быть обоснование и на основании его будет приниматься решение о другой реализации. Но это все будет непросто и потребует много много бумажек. Одним словом никто точно не знает какая задача решается. Поэтому сами себе придумали проблему чтобы поломать голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2007, 18:11:44 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
fixxerА какую задачу изначально решаете? Из одних конструкций языка получить другие :) Для тех, кто занимается трансляторам - задача типовая. Парни, вы мне ничего не должны. Давайте не будем ломать головы над вопросами, типа "зачем это?". А подумаем как это сделать. Если вы не знаете, пожалуйста, не переполняйте ветку. Я сейчас не ищу альтернативного решения. Как только начну его искать, прямо об этом спрошу. Как из одного куска кода получить по некоторым правилам другой кусок кода. Например, из "сущность.поле = <expression>;", получить - сущность.setПоле(<expression>); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 06:34:21 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
Если конструкции не особо сложные, а такие как в первом посте - можно попробывать банально regexp'ами воспользоваться. Тоже, чем не вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 07:52:32 |
|
||
|
Препроцессинг java кода
|
|||
|---|---|---|---|
|
#18+
^ozzy^Если конструкции не особо сложные, а такие как в первом посте - можно попробывать банально regexp'ами воспользоваться. Тоже, чем не вариант. Да, такой вариант рассматривается, но конструкции теоретически могут быть сложные. И даже если их можно будет описать регекспами, то потом вряд ли в них кто-то сможет разобраться, даже автор :) Но реализация на регекспах в запасе, да, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2007, 09:01:08 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34791768&tid=2144649]: |
0ms |
get settings: |
13ms |
get forum list: |
26ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
78ms |
get topic data: |
20ms |
get forum data: |
4ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 317ms |
| total: | 572ms |

| 0 / 0 |
