Иконка ресурса

Вырезалка 2

1,064
47
386
JustAGod добавил(а) новый ресурс:

вырезалка 2 - тут будет описание

Каким-то образом предыдущая вырезалка заинтересовала общественность. К сожалению, она была багованная и исправить я это не мог из-за дурацкой архитектуры. Было решено пересмотреть мой подход к разработке и переписать все что б красиво и с тестами.

Что это такое
Вырезалка это плагин для градла. Она нужна для автоматического вырезания клиентского кода из серверных билдов.
Разграничение серверного кода и клиентского происходит через аннотации...

Узнать больше об этом ресурсе...
 
6,119
226
1,177
Инвокаторы - киллер фича относительно предыдущей версии вырезалки
Только если эта фича предназначена для килла самой вырезалки
Ведь это костыль, который к тому же заставляет писать бойлерплейт-код.
Почему нельзя сделать вырезание полей вместе с вырезанием usage, которые не вырезались обработкой других аннотаций?
 
1,064
47
386
Представь кейс
Java:
class SomeClass {
    String a = "";
    String b;
   
    SomeClass() {
        b = "";
    }
}
вот с точки зрения байт кода обе ти инициализации будут выглядеть одинаково
если просто вырезать PUTFIELD для всех таких случаев у вас сломается обфускации и иногда стэк мапы
+ внезапные приколы когда вызывается метод который как бы не виден

можно подумать над анализом стэка но тогда мне нужно будет уметь парсить абсолютно все опкоды жавы.
 
6,119
226
1,177
Форжевская SideOnly работает как-то, тоже байткод редачит. Проверил - не пашет. Кстати, интересное наблюдение: за 4 года написания модов ни разу не понадобилось вешать SideOnly на поле.

Может, стоит попробовать работать через парсинг исходников в синтаксическое дерево, вырезать поля и их usage на этом уровне, генерировать из этого дерева новый код и после отправлять его на обычную компиляцию?
 
1,064
47
386
ну если я начну ковырять исходники вместо байт кода, этот проект перестанет приносить мне удовольствие 👀

а если серьезно, разбирать каждый опкод проще чем парсить исходники
 
6,119
226
1,177
просто вырезать PUTFIELD
PUTFIELD ведь берет значение из стэка, может тогда заменять PUTFIELD вырезаемых полей на POP? Тогда стэк не поменяет своей структуры.
Это кст ты же мне советовал для одного кейса хуклибы
 
1,064
47
386
с точки зрения жавы это действительно будет валидным байт-кодом, но:
1) В хук либе действительно это нормальное решение потому что дальше рантайма оно не уходит, но в данном случае от этого сломаются как минимум 3 обфускатора. Так как я хочу потом вырезалку использовать в своих целях, это критично
2) в кейсе типа String a = function() функция будет вызываться. Что, я считаю, не инткутивно и не правильно.
 
6,119
226
1,177
В конфигурации сборки требуется указывать имя аннотации, влияющие на сторону поля и варианты сборки. Можно приведенный вариант настройки сделать дефолтным, а также сделать готовые дефолтные аннотации и интерфейсы инвокеров? Тогда сетап верезалки будет сводиться к минимуму: добавление репы и включение плагина.
Для большинства простых проектов этого будет хватить по идее
~~~
Или там проблема в том, что плагин не добавляет своего кода в проект? Можно аннотации и интерфейсы скомпилить в отдельную либу, а плагин будет подключать эту либу к проекту?
 
1,064
47
386
что такое дефолтные аннотации и интерфейсы инвокеров?
сказать плагину насильно подключать в компайл зависимость от репо с ними? если так, то мне не очень нравится.
Если просто сделать example project то да, это прямо щас и сделаю.
 
1,064
47
386
Или там проблема в том, что плагин не добавляет своего кода в проект? Можно аннотации и интерфейсы скомпилить в отдельную либу, а плагин будет подключать эту либу к проекту?
проблема в том что мне не нравится если плагин будет насильно чота пихать, особенно по дефолту
мне нравится идея настройки без конфига, но я скорее соглашусь на настройку одной строкой
типа cutter.initializeDefault()
кста звучит классно
 
6,119
226
1,177
Насколько я понял, аннотацию anno.SideOnly нужно создать самому. Но ведь случай разделения на клиент и сервер юзается в большинстве проектов, поэтому приведенную в примере аннотацию стоит добавить в сам плагин, чтобы для юза вырезалки нужно было только включить плагин и юзать аннотацию из плагина.
Интерфейсы инвокеров тоже по идее в большинстве случаев будут одинаковыми
 
1,064
47
386
проблема в том что мне не нравится если плагин будет насильно чота пихать, особенно по дефолту
мне нравится идея настройки без конфига, но я скорее соглашусь на настройку одной строкой
типа cutter.initializeDefault()
кста звучит классно
ну да собственно если возражений нет, я наверно вот так сделаю 👀
 
6,119
226
1,177
Ты имеешь ввиду, что строчкой cutter.initializeDefault() в билд-скрипте будет включаться добавление в проект дефолтных аннотации и интерфейсов?
 
6,119
226
1,177
да, отлично получится, опционально и не навязчиво
 

tox1cozZ

aka Agravaine
Модератор
7,536
486
2,348
Спасибочки!
А настройка classesDirs осталась? Пока не ставил еще, боюсь с ломбоком не запахает
 
1,064
47
386
Сверху