Мой вопрос:
Что можно сделать, чтобы не допустить взлома помощника по содержимому при записи файлов большего размера , которые содержат лямбда-выражения?
Проблема (описание):
В течение некоторого времени помощник по содержимому Eclipse для Java перестал работать должным образом для больших файлов в моей среде IDE при использовании лямбды выражения. Я никогда не сталкиваюсь с этой проблемой при написании файлов меньшего размера, но когда я пишу файлы с 1500–2000 + строками кода, это похоже на то, что помощник по контенту неожиданно сдается и становится нестабильным. Когда я активирую помощник по контенту рядом с В верхней части файла проблем нет:
На приведенном выше рисунке помощник по содержимому работает точно так, как я ожидаю. Однако, когда я активирую помощник по содержимому ближе к нижней части, он перестает отвечать на запросы (не активируется, когда я набираю .
), а активация его вручную с помощью ctrl + space
вызывает пустой список:
Для этого конкретного файла помощник по содержимому перестает работать в любой части файла после строки 1540, то есть сразу после лямбда-выражения. Удаление лямбда-выражения не решает проблему, но вместо этого распространяет его дальше по файлу к следующему лямбда-выражению.
Следующее сообщение также отображается на панели инструментов, когда это происходит:
То, что я пробовал:
- Использование чистой Eclipse IDE с существующим рабочим пространством, а также новым рабочим пространством .
- Очистка кэша индекса в
workspace/.metadata/.plugins/org.eclipse.jdt.core
. - Включение всех видов предложений в
Preferences > Java > Editor > Content Assist > Advanced
. - Восстановление значений по умолчанию на странице настроек, только что упомянутой выше.
- Увеличение объема памяти, выделенной для Eclipse IDE, на
eclipse.ini
до 2 гигабайт, а также увеличение объема памяти, первоначально выделенного до 1 гигабайта. - Добавление
-vmargs -Dorg.eclipse.jdt.ui.codeAssistTimeout=60000
к eclipse.ini
Edit # 1
Как уже упоминалось, проблема возникает только для больших файлов Java. Ниже приведен рисунок меньшего файла Java с 3 различными лямбда-выражениями и помощником по содержимому, как и ожидалось: См. Edit # 2
Edit # 2
Ниже приведен Java SCF для воспроизведения проблемы. Я старался изо всех сил, чтобы сделать его как можно меньше. В этом случае проблема возникает при использовании лямбда-выражения в сочетании с for-l oop, но я думаю, что возможно воспроизвести проблему и с другими управляющими операторами.
import java.util.ArrayList;
public class Foo {
public Foo() {
foo(() -> {
final ArrayList<Object> list = new ArrayList<>();
for (final Object o : list)
;
/* works until here */ } /* no longer working */
);
} // <--- content assist works again after end bracket of constructor/method
void foo(final Runnable r) { r.run(); }
}
Примечания:
- Заключение этой проблемы в фигурные скобки для l oop.
- Эта проблема возникает только с
for-each
вариант цикла for; использование варианта for(;;)
устраняет проблему.