LINUX.ORG.RU

Как в IDE для Java реализуется completion для слова import?

 , ,


0

2

Допустим, IDE должна показать пользователю все имена пакетов, в «путь» которых входит подстрока foo. Возможно ли это эффективно реализовать? По идее, модули находятся в директориях, директорий много, они на диске, файлы в них могут меняться. Опрашивать все директории на каждое нажатие клавиши или поставить слушателя на каждую из директорий, чтобы оперативно отлавливать изменения?

Или просто нет такой команды и надо всегда начинать слева, с начала имени модуля?

Или это реализовано неэффективно, а пользователи это терпят?

Или изменения на диске остаются незамеченными, пока не дашь среде особого пинка?

★★★★★
Ответ на: комментарий от den73

Ну при наличии SSD и 16GB памяти - норм. Для Scala или Clojure(через cursive) прям маст хэв, а вот всякие ретрограды говорят что для Java лучше Eclipse пока ничего не придумали.

Deleted
()
Ответ на: комментарий от Deleted

Чтобы закешировать список пакетов, 16Гб явно избыточно.

Ты хочешь сказать, что узкое место диске реально ощущается именно при запросах к списку пакетов, или просто обще негодуешь на тему прожорливости и тормознутости Java?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

16гб нужны что бы еще и браузер работал, и плеер музыку играл.
Расскажу про характерные для Scala проекта особенности. Индексирование происходит при открытии проекта и любых изменениях в .sbt файлах (да, можно отключить в IDEA автоимпорт и указывать зависимости вручную, но тогда можно и в блокноте кодить). Соответственно на ранних стадиях проекта при формировании пула зависимостей, настройке sbt-native-packager и просто копании в сборке это нервирует. И на при наличии винта в 7200рпм каждый прогон sbt update будет занимать 3-4 минуты. Вроде немного, но отвлекает сильно.

Deleted
()

Сканируется все что есть в classpath проекта. Например в jar файлах еще есть индекс-файлы

vertexua ★★★★★
()
Ответ на: комментарий от den73

Чтобы закешировать список пакетов, 16Гб явно избыточно

16 ГБ - комфортное значение для современного десктопа с DE, браузера с 15 вкладками, нескольки JVM (IDE, приложения, тесты)

негодуешь на тему прожорливости и тормознутости Java?

Вот ради чего тред затевался ;)

vertexua ★★★★★
()
Ответ на: комментарий от Deleted

По сути maven значительно проще использовать и даже плагины писать. SBT тупой изначально, особенно с двойственностью .sbt и .scala синтаксиса, когда не всегда просто одно превратить в другое, каждый плагин дает пример сугубо для одного и ты теряешь время, превращая их пример в код стиль твоего проекта. Короче слишком много неоднозначности, разброда и шатаний. Конечно похвально что он в памят висит постоянно, maven не умеет быструю пересборку по изменениям в ФС

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

не умеет быструю пересборку по изменениям в ФС

с sbt не сталкивался, но по опыту чаще приходится использовать полную пересборку ибо все эти «быстрые» приводят к трудноуловимым глюкам, от которых волосы выпадают. Да это долго потому проекты приходится пилить на куски.

Deleted
()
Ответ на: комментарий от Deleted

В абстрактной ситуации, особенно после ужасов Eclipse, у многих Java/Scala программистов появляется религия «а попробуй mvn clean сделать», но на практике например sbt работает неплохо

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

у меня ужасы idea, оно по ощущениям с мавеном работает хуже чем с gradle, что странно.

Deleted
()
Ответ на: комментарий от vertexua

leiningen

да, бывают системы сборки даже хуже sbt

Ну ка ну ка. Я до сего момента считал что лучше lein только opam.

Debasher ★★★★★
()
Ответ на: комментарий от Norgat

С ним синтаксис, это дело вкуса, на мой вкус не подходит

vertexua ★★★★★
()
Ответ на: комментарий от Debasher

Может у вас позитивный опыт, но у меня было очень много падений, class not found и тд. Может это была его рання стадия развития, 2 года назад

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Может у вас позитивный опыт, но у меня было очень много падений, class not found и тд. Может это была его рання стадия развития, 2 года назад

Ты просто криво что-то сделал. Ведь leiningen это обёртка вокруг Maven, соотв. если в репе jar'ка есть, то всё ок будет.

Определённые сложности есть с aot-компиляцией (это когда надо Java классы на Clojure делать через gen-class, но это не частое явление) и препроцессингом исходников на cljx. Но всё это настраивается за день до рабочего состояния и не меняется очень долго.

А синтаксис - это дело вкуса, лично мне больше нравится Clojure для проектного файла чем Maven XML.

Norgat ★★★★★
()
Ответ на: комментарий от vertexua

Может у вас позитивный опыт

Да)

но у меня было очень много падений, class not found и тд. Может это была его рання стадия развития, 2 года назад

Фиг знает, третий год юзаю и всегда норм было)

Debasher ★★★★★
()
Ответ на: комментарий от Debasher

Может для человека с опытом Clojure было проще находить проблемы в том что lein там хочет, но для нас был просто сторонних проектик в котором было что-то там на Clojure, потому мы просто прочитали по книжке по Clojure и относились ко всему этому как к вынужденному кактусу

vertexua ★★★★★
()
Ответ на: комментарий от den73

Если оперативки достаточно и SSD быстрый, то да. В иных случаях всё очень неповоротливо.

mono ★★★★★
()
Ответ на: комментарий от den73

Зря, кстати. Белка очень неплохой специалист, при всём прочем.

mono ★★★★★
()

При создании проекта кэшируется все на свете, долго (учитывая, что нужно проиндексировать весь JDK и библиотеки), потом кэши понемногу обновляются. В основном файлы из Идеи и меняются, но внешние помехи тоже сразу же видно.

Вот тут https://habrahabr.ru/post/187208/ пишут кое-что обзорно про внутреннее устройство. Обновляют внешние изменения, когда Идея получает фокус мыши (логично — чем-то поменяли, вернулись, изменения увидели). Заодно, кстати, все-все сохраняют, когда фокус уходит, вот это тоже удобно.

По возможности пользуются inotify-ем, обычно его на всех хватает. Если жестко задействован sshfs или ftp какой, то получится предупреждение

External file changes sync may be slow Project files cannot be watched (are they under network mount?).

Так что на случай медленных FS тоже обработчики есть.

anonymous
()
Ответ на: комментарий от mono

IDEA кэширует всё на свете и при изменении файлов/каталогов обновляет кэш.

Интересно, а она сохраняет этот кеш при выходе?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

В яве все (и исходники библиотек, и скомпиленный байткод) пакуется в zip. Потом расширение меняется на .jar, и в таком виде идут все зависимости.

JDK со всеми доками/тулзами весит 300 МБ.

Из них кода, т.е. jar-ок — 200 МБ; в распакованном виде было бы в 2-3 раза больше.

Внешние библиотеки, тоже в виде jar-ок, лежат в отдельном репозитории, ~/.m2.

Он может весить несколько гигов, но в одном проекте используется гораздо меньше, но запросто дает еще 300 МБ запакованных данных.

anonymous
()
Ответ на: комментарий от den73

Если ты что-то сохранил, то данные сразу же пишутся на диск; некоторый лаг возможен, но все синкается и при выходе, и при потере окном фокуса.

Построенный кэш сохраняется; на папку ~/.IdeaIC14/system/caches приходится 600 МБ, но это куча проектов. Правда, не уверен, что все кэши лежат именно тут.

Всего ~/.IdeaIC14 у меня весит 1.5 ГБ, там еще плагины и все-все-все локальное хранится.

anonymous
()
Ответ на: комментарий от anonymous

Ну что, достойные масштабы и на вид грамотно сделано. А сколько времени оно загружается с таким багажом?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ноут, SSD, процессор Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz; вроде как 8 логических ядер, памяти полно.

10 секунд просто запуск уже готового проекта на 10-30 килострок.

Удалил кэш, на запуск добавилось еще полминуты, проц загрузил ~6 ядер.

anonymous
()
Ответ на: комментарий от anonymous

Кэш, кстати, получился мегабайт на 20. Может, он и в несколько мест пишется, это та папка, про которую раньше говорил.

anonymous
()
Ответ на: комментарий от anonymous

Я имел в виду время запуска среды, а ты говоришь о запуске программы, если я правильно понял. Это тоже интересно. Но всё же, сколько времени занимает собственно запуск среды (и открытие проекта в нём)?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Это именно запуск среды. Набрали команду — ждем, пока IDE загрузится, ждем, пока прочихается. Никаких индикаторов не мигает и не вертится — значит, загрузились.

Если открываем старый проект, то работать можно через 10 секунд, если перед этим грохнуть кэш — 40 (меньше минуты).

Если проект уже был скомпилирован, то запуск программы меньше 5 секунд, если сделать минимальные изменения — секунд 5 на компиляцию, полная пересборка — 10-20.

Время, конечно, неточное, это я считал про себя. Но порядок вот такой.

anonymous
()
Ответ на: комментарий от ii8_

В IDE да, я сталкивался с этим когда писал свои плагины. Они немного по другому работают внутри IDE. Но все любят гонять чистый maven, который по дефолту не демон

vertexua ★★★★★
()
Ответ на: комментарий от den73

Дык чё мучится, скачай и зпусти:https://www.jetbrains.com/idea/download/#section=windows
в домашней директории создатся папка типа .idea15 и там будет всё - и кэш, и настройки, и всё что нужно её хранить на твоей машине, чтобы тебя помнить.

ii8_ ★★★★
()
Ответ на: комментарий от ii8_

в idea работает встроенный пересборщик который импортит проект из мавена а потом частично собирает его своими силами, иногда результаты получаются смешные

Deleted
()
Ответ на: комментарий от ii8_

Дык чё мучится, скачай и запусти

Да чую, к тому дело и идёт...

den73 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Спасибо. В общем-то, по-моему, это более-менее годно. Но лучше бы побыстрее раз в 10...

den73 ★★★★★
() автор топика
Ответ на: комментарий от vertexua

16 ГБ - комфортное значение для современного десктопа с DE, браузера с 15 вкладками

8 гигов, ~80 вкладок, правда пишу в емаксе. и на питоне)

loz ★★★★★
()
Ответ на: комментарий от loz

А у тебя в емаксе/питоне есть команда apropos module name, сколько у тебя сорсов, подлежащих команде import и сколько времени такая команда выполняется?

den73 ★★★★★
() автор топика
Ответ на: комментарий от loz

8 гигов, микросервисы на java и spring в docker в отладке пускается их по несколько штук.

так что твой емакс слишком много жрет памяти

Deleted
()
Ответ на: комментарий от den73

Насчет скорости: у меня при набивке кода в простом редакторе куча времени уходит на вопросы вида «ошибся в названии переменной-запустил компиляцию - компилятор ругнулся туда-то и туда-то - я пошел исправлять ошибки». Или там скобки не сбалансировал. Или точку с запятой забыл. Или функция не тот тип возвращает.

В IDE все такое подсвечиваются сразу же, по мере набивки кода. Не нужно ни сборки запускать, ни шариться по выхлопу компилятора, который может фиг знает что писать в разных ЯП. Так что на уровень «скомпилируется ли?» время не тратится, и фактически сборка запускается только для отладки.

Еще не очень афишируемая фишка — если программа остановлена дебагом, то можно поправить код без перезапуска. Компилируешь по Ctrl+Shift+F9, и изменения тут же улетают в работающую прогу, очень быстро. Есть куча ограничений, например, нельзя добавить новый метод, но и с ними жить можно, плюс есть какие-то пути обхода.

Так что стоит скачать и попробовать. Можно взять Community Edition. Абсолютно бесплатно, а поддержка собственно явы точно такая же, как и в Ultimate.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.