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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнить код во время компиляции программы 
:(
    Опции темы
Karadul
Дата 9.4.2013, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно ли, во время компиляции проверить, например, валидный ли регексп/url?

Это сообщение отредактировал(а) Karadul - 9.4.2013, 05:45
PM MAIL   Вверх
Killer_13
Дата 9.4.2013, 09:41 (ссылка)  | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если я не ошибаюсь, то нужно смотреть в сторону Reflection.
PM MAIL   Вверх
Stolzen
Дата 9.4.2013, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Возможно, можно применить тот же подход, который используется в Project Lombok

http://notatube.blogspot.co.uk/2010/11/pro...-explained.html


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 9.4.2013, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Stolzen @  9.4.2013,  10:24 Найти цитируемый пост)
Возможно, можно применить тот же подход, который используется в Project Lombok

http://notatube.blogspot.co.uk/2010/11/pro...-explained.html 

Нде, а как это использовать?
PM MAIL   Вверх
Stolzen
Дата 10.4.2013, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Ну мне кажется, что можно повесить хук, и во время компиляции каким-либо образом пройтись по AST дереву и для строк, если там регулярки, проверить их. 
Естественно, логичнее будет при этом помечать каким-то образом строки с регулярками, например, аннотацией. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 10.4.2013, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А пример есть какой-то, или проще эту идею оставить?
PM MAIL   Вверх
LSD
Дата 10.4.2013, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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





--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Karadul
Дата 10.4.2013, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



И что там? Как использовать аннотации? А как туда прикрутить проверку во время компиляции и как кидать ошибки?
PM MAIL   Вверх
LSD
Дата 10.4.2013, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Karadul @  10.4.2013,  12:56 Найти цитируемый пост)
И что там? Как использовать аннотации? А как туда прикрутить проверку во время компиляции и как кидать ошибки?

Тебе стоит задуматься над сменой профессии, например клининг-оператор.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Karadul
Дата 10.4.2013, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я просто не профессиональный жавалюб. А вот смотря на тебя, диву даешься, каким чепушилам модерку дают.
PM MAIL   Вверх
LSD
Дата 10.4.2013, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Karadul @  10.4.2013,  15:13 Найти цитируемый пост)
Я просто не профессиональный жавалюб.

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Karadul
Дата 10.4.2013, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LSD @  10.4.2013,  14:19 Найти цитируемый пост)
Ты в принципе не профессионал, ты не может ни документацию прочесть, ни код написать. Только на хамиство тебя и хватает. 

А помойму, это ты - хам, да еще и с модеркой.

Я лишь спросил, нет ли чего-нибудь, с чем попроще разобраться.

"В принципе не профессионал" - мосье знает, чем я занимаюсь? Или слово "профессионал" зарезервировали для себя жавалюбы?

Это сообщение отредактировал(а) Karadul - 10.4.2013, 14:49
PM MAIL   Вверх
LSD
Дата 10.4.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Karadul @  10.4.2013,  15:48 Найти цитируемый пост)
Я лишь спросил, нет ли чего-нибудь, с чем попроще разобраться.

Ты спросил
Цитата(Karadul @  10.4.2013,  11:27 Найти цитируемый пост)
А пример есть какой-то, или проще эту идею оставить?

А когда я тебе дал ссылку на пример, ты заявил:
Цитата(Karadul @  10.4.2013,  12:56 Найти цитируемый пост)
И что там? Как использовать аннотации?

Сразу видно, что ты внимательно все прочитал и разобрался.



Цитата(Karadul @  10.4.2013,  15:48 Найти цитируемый пост)
"В принципе не профессионал" - мосье знает, чем я занимаюсь?

Ты занимаешься явно не своим делом.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Karadul
Дата 10.4.2013, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LSD @  10.4.2013,  15:18 Найти цитируемый пост)
Ты занимаешься явно не своим делом. 

И чем я занимаюсь и какое же мое дело?

Интересно, тебя сюда зудеть поставили или ты это добровольно делаешь? 
PM MAIL   Вверх
LSD
Дата 10.4.2013, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Karadul @  10.4.2013,  16:28 Найти цитируемый пост)
И чем я занимаюсь

Пытаешь программировать, это явно не твое призвание.

Добавлено через 29 секунд
Цитата(Karadul @  10.4.2013,  16:28 Найти цитируемый пост)
Интересно, тебя сюда зудеть поставили или ты это добровольно делаешь?

Уговорил, завязываем.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
jk1
Дата 10.4.2013, 23:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Если среди этого накала страстей кому-то еще интересна техническая сторона вопроса, то вот вариант на базе anootation processor'а:

Сначала создадим marker-аннотацию

Код

package processor;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
public @interface CheckMyRegexp {
}


и процессор к ней

Код

package processor;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import java.util.Collections;
import java.util.Set;
import java.util.regex.Pattern;

@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class CheckMyRegexpProcessor extends AbstractProcessor {

    @Override
    public Set<String> getSupportedAnnotationTypes() {
        return Collections.singleton(CheckMyRegexp.class.getName());
    }

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
        for (TypeElement element : annotations) {
            for (Element el : env.getElementsAnnotatedWith(element)) {
                if (el.getKind().isField()) {
                    Object value = ((VariableElement) el).getConstantValue();
                    Pattern.compile(value.toString());
                }
            }
        }
        //as we do not need any further processing
        return true;
    }
}


Теперь упакуем это в JAR и добавим в него файл /META-INF/services/javax.annotation.processing.Processor со следующим содержимым

Код

processor.CheckMyRegexpProcessor


на самом деле это просто полное имя нашего процессора аннотаций с пакетами.

Теперь процессор готов и его можно подключать его к проектам, в которых мы хотим проверять Regexp'ы на валидность, например так:

Код

package application;

import processor.CheckMyRegexp;

public class Sample {

    @CheckMyRegexp
    private static final String regexp = "[[abc]";
}


если мы сделали все правильно и JAR с процессором есть в classpath, то компиляция файла пройдет только если regexp является валидным.
Для наглядности приаттачу проект, где все собирается мавеном.

Это сообщение отредактировал(а) jk1 - 13.4.2013, 15:39

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  annotation.zip 19,64 Kb


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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