SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Компилятор Java и IDE:
взаимовыгодное сотрудничество
Чашников Николай
программист, JetBrains
Nikolay.Chashnikov@jetbrains.com
Компиляция java-файла – это просто
> javac HelloWorld.java
HelloWorld.class
HelloWorld.java
Даже если их несколько
> javac *.java
> mvn compile
> ant -f compile.xml
http://xkcd.ru/303
I'm working on a big project and
am having a really difficult time
getting Intellij to build it.
Sometimes it finishes after 20 or so
minutes, sometimes never.
I know this is an issue for my
entire company, but people
have become complacent and
accept that their IDE will remain
locked for hours.
Build is extremely slow
The compilation takes ~4 seconds
to complete
Инкрементальная компиляция
Перекомпилировать изменившиеся файлы
и некоторые другие
Добавление поля в класс
public class Cat {
}
public class Cat {
protected Tail tail;
}
Что надо перекомпилировать,
кроме Cat.java?
A. ничего
B. классы, в которых
используется Cat
C. наследников класса Cat
D. что-то другое
Добавление поля в класс
…
Tail tail = new Tail();
new Cat() {
{
tail.pull();
}
};
…
Добавление private поля в класс
public class Cat
extends Animal {
}
public class Cat
extends Animal {
private Tail tail;
}
Что надо
перекомпилировать, кроме
Cat.java?
A. ничего
B. классы, в которых
используется Cat
C. наследников класса Cat
D. что-то другое
Добавление private поля в класс
…
Cat cat = new Cat();
cat.tail.pull();
…
public class Animal {
public Tail tail;
}
Изменение значения поля
public class Answers {
public static
int ANSWER = 42;
}
Что надо перекомпилировать,
кроме Answers.java?
A. ничего
B. классы, в которых
используется ANSWER
C. наследников класса
Answers
D. что-то другоеpublic class Answers {
public static
int ANSWER = 43;
}
Изменение значения static final поля
public class Answers {
public static final
int ANSWER = 42;
}
Что надо перекомпилировать,
кроме Answers.java?
A. ничего
B. классы, в которых
используется ANSWER
C. наследников класса
Answers
D. что-то другоеpublic class Answers {
public static final
int ANSWER = 43;
}
Изменение значения static final поля
public class Questions {
public int getAnswer() {
return Answers.ANSWER;
}
}
Компилятор и IDE
Компилятор
IDE
...
рефакторинг
исправление ошибок
автодополнение
синтаксический разбор
проверка корректности
генерация байт-кода
Индексирование в IDE
Подготовительная операция для быстрого
выполнения Find Usages и рефакторингов
Eclipse
● собственный компилятор (ECJ)
● запускается прямо в процессе IDE
● IDE переиспользует код компилятора
● индексирование и компиляция
запускается при сохранении файлов
● компилятор сам собирает информацию
для инкрементальной перекомпиляции
NetBeans
● использует javac
● запускается прямо в процессе IDE
● IDE переиспользует код компилятора
● индексирование (компиляция) постоянно
запускается в фоне
● для инкрементальной компиляции
используется информация из IDE
IntelliJ IDEA
● может работать как с javac, так и с ECJ
● использует компилятор как чёрный ящик
● запускает его в отдельном процессе
● собственный парсер и анализатор в IDE
● независимое индексирование
● для инкрементальной компиляции
анализируются класс-файлы и
используется информация из IDE
Скомпилируется ли этот код?
class Root {}
class Inc<Z> {}
class C0<X> extends Inc<Inc<? super X>> {}
class Test {
Inc<? super C0<Root>> cast(C0<Inc<? super Root>> c) {
return c;
}
}
А этот?
class Root {}
class Inc<Z> {}
class C0<X> extends Inc<Inc<? super X>> {}
class C1<X> extends C0<C0<X>> { }
class Test {
Inc<? super C1<Root>> cast(C1<Inc<? super Root>> c) {
return c;
}
}
Вот этот уже нет
class Root {}
class Inc<Z> {}
class C0<X> extends Inc<Inc<? super X>> {}
class C1<X> extends C0<C0<X>> { }
class C2<X> extends C1<C1<X>> { }
class C3<X> extends C2<C2<X>> { }
class C4<X> extends C3<C3<X>> { }
class C5<X> extends C4<C4<X>> { }
class C6<X> extends C5<C5<X>> { }
class C7<X> extends C6<C6<X>> { }
class C8<X> extends C7<C7<X>> { }
class C9<X> extends C8<C8<X>> { }
class Test {
Inc<? super C9<Root>> cast(C9<Inc<? super Root>> c) {
return c;
}
}
Ссылки
● Eclipse sources
git.eclipse.org/c/jdt/
● NetBeans sources
netbeans.org/downloads/zip.html
● IntelliJ IDEA sources
jetbrains.org/display/IJOS/Download

Contenu connexe

Tendances

Java 9 Модули. Почему не OSGi?
Java 9 Модули. Почему не OSGi?Java 9 Модули. Почему не OSGi?
Java 9 Модули. Почему не OSGi?Nikita Lipsky
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программированиеDotNetConf
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоDotNetConf
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Nikita Lipsky
 
Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedAleksandr Tarasov
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET CoreDotNetConf
 
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.SECON
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)Alexey Kachayev
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокDotNetConf
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014Dmytro Zharii
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиAndrey Karpov
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019corehard_by
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
Java 9 модули
Java 9 модулиJava 9 модули
Java 9 модулиZheka Kozlov
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
Kubernetes
KubernetesKubernetes
KubernetesSQALab
 
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...Mail.ru Group
 

Tendances (20)

Java 9 Модули. Почему не OSGi?
Java 9 Модули. Почему не OSGi?Java 9 Модули. Почему не OSGi?
Java 9 Модули. Почему не OSGi?
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
 
Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons Learned
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
SECON'2017, Мухаметов Андрей, XCTest. UI и Unit тестирование для iOS.
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бок
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
 
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019Как не подавиться большим старым проектом. Юрий Минаев ➠  CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
 
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Java 9 модули
Java 9 модулиJava 9 модули
Java 9 модули
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
 

En vedette

Effective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAEffective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAchashnikov
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAlexey Fyodorov
 
Introduction to Functional Programming in Scala
Introduction to Functional Programming in ScalaIntroduction to Functional Programming in Scala
Introduction to Functional Programming in ScalaJacek Laskowski
 
CompletableFuture уже здесь
CompletableFuture уже здесьCompletableFuture уже здесь
CompletableFuture уже здесьDmitry Chuyko
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!Alexey Fyodorov
 
Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)RichardWarburton
 
Generics Past, Present and Future
Generics Past, Present and FutureGenerics Past, Present and Future
Generics Past, Present and FutureRichardWarburton
 
API design in java project
API design in java projectAPI design in java project
API design in java projectchashnikov
 
Plugin development for intelli j platform
Plugin development for intelli j platformPlugin development for intelli j platform
Plugin development for intelli j platformchashnikov
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in JavaStrannik_2013
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysischashnikov
 
OOP paradigm, principles of good design and architecture of Java applications
OOP paradigm, principles of good design and architecture of Java applicationsOOP paradigm, principles of good design and architecture of Java applications
OOP paradigm, principles of good design and architecture of Java applicationsMikalai Alimenkou
 
Java concurrency in practice
Java concurrency in practiceJava concurrency in practice
Java concurrency in practiceMikalai Alimenkou
 

En vedette (17)

Effective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAEffective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEA
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
Introduction to Functional Programming in Scala
Introduction to Functional Programming in ScalaIntroduction to Functional Programming in Scala
Introduction to Functional Programming in Scala
 
CompletableFuture уже здесь
CompletableFuture уже здесьCompletableFuture уже здесь
CompletableFuture уже здесь
 
Play with play!
Play with play!Play with play!
Play with play!
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!
 
Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)Pragmatic functional refactoring with java 8 (1)
Pragmatic functional refactoring with java 8 (1)
 
Generics Past, Present and Future
Generics Past, Present and FutureGenerics Past, Present and Future
Generics Past, Present and Future
 
API design in java project
API design in java projectAPI design in java project
API design in java project
 
Plugin development for intelli j platform
Plugin development for intelli j platformPlugin development for intelli j platform
Plugin development for intelli j platform
 
Why do I hate Hibernate?
Why do I hate Hibernate?Why do I hate Hibernate?
Why do I hate Hibernate?
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in Java
 
Statis code analysis
Statis code analysisStatis code analysis
Statis code analysis
 
OOP paradigm, principles of good design and architecture of Java applications
OOP paradigm, principles of good design and architecture of Java applicationsOOP paradigm, principles of good design and architecture of Java applications
OOP paradigm, principles of good design and architecture of Java applications
 
Scala Rock-Painting
Scala Rock-PaintingScala Rock-Painting
Scala Rock-Painting
 
Java concurrency in practice
Java concurrency in practiceJava concurrency in practice
Java concurrency in practice
 

Similaire à Java compilers and IDEs

IntelliJ IDEA: architecture, performance, development process
IntelliJ IDEA: architecture, performance, development processIntelliJ IDEA: architecture, performance, development process
IntelliJ IDEA: architecture, performance, development processchashnikov
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»MskDotNet Community
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Yulia Tsisyk
 
Eclipse Monkey
Eclipse MonkeyEclipse Monkey
Eclipse Monkeyilja.panin
 
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Ontico
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019corehard_by
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходPositive Hack Days
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Denis Vasilyev
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidAnton Rutkevich
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyDmytro Zharii
 

Similaire à Java compilers and IDEs (20)

Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 
IntelliJ IDEA: architecture, performance, development process
IntelliJ IDEA: architecture, performance, development processIntelliJ IDEA: architecture, performance, development process
IntelliJ IDEA: architecture, performance, development process
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Eclipse Monkey
Eclipse MonkeyEclipse Monkey
Eclipse Monkey
 
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
 
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019Автоматизируй это. Кирилл Тихонов ➠  CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обход
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 

Java compilers and IDEs

  • 1. Компилятор Java и IDE: взаимовыгодное сотрудничество Чашников Николай программист, JetBrains Nikolay.Chashnikov@jetbrains.com
  • 2. Компиляция java-файла – это просто > javac HelloWorld.java HelloWorld.class HelloWorld.java
  • 3. Даже если их несколько > javac *.java > mvn compile > ant -f compile.xml
  • 5. I'm working on a big project and am having a really difficult time getting Intellij to build it. Sometimes it finishes after 20 or so minutes, sometimes never. I know this is an issue for my entire company, but people have become complacent and accept that their IDE will remain locked for hours.
  • 6. Build is extremely slow The compilation takes ~4 seconds to complete
  • 8. Добавление поля в класс public class Cat { } public class Cat { protected Tail tail; } Что надо перекомпилировать, кроме Cat.java? A. ничего B. классы, в которых используется Cat C. наследников класса Cat D. что-то другое
  • 9. Добавление поля в класс … Tail tail = new Tail(); new Cat() { { tail.pull(); } }; …
  • 10. Добавление private поля в класс public class Cat extends Animal { } public class Cat extends Animal { private Tail tail; } Что надо перекомпилировать, кроме Cat.java? A. ничего B. классы, в которых используется Cat C. наследников класса Cat D. что-то другое
  • 11. Добавление private поля в класс … Cat cat = new Cat(); cat.tail.pull(); … public class Animal { public Tail tail; }
  • 12. Изменение значения поля public class Answers { public static int ANSWER = 42; } Что надо перекомпилировать, кроме Answers.java? A. ничего B. классы, в которых используется ANSWER C. наследников класса Answers D. что-то другоеpublic class Answers { public static int ANSWER = 43; }
  • 13. Изменение значения static final поля public class Answers { public static final int ANSWER = 42; } Что надо перекомпилировать, кроме Answers.java? A. ничего B. классы, в которых используется ANSWER C. наследников класса Answers D. что-то другоеpublic class Answers { public static final int ANSWER = 43; }
  • 14. Изменение значения static final поля public class Questions { public int getAnswer() { return Answers.ANSWER; } }
  • 15. Компилятор и IDE Компилятор IDE ... рефакторинг исправление ошибок автодополнение синтаксический разбор проверка корректности генерация байт-кода
  • 16. Индексирование в IDE Подготовительная операция для быстрого выполнения Find Usages и рефакторингов
  • 17. Eclipse ● собственный компилятор (ECJ) ● запускается прямо в процессе IDE ● IDE переиспользует код компилятора ● индексирование и компиляция запускается при сохранении файлов ● компилятор сам собирает информацию для инкрементальной перекомпиляции
  • 18. NetBeans ● использует javac ● запускается прямо в процессе IDE ● IDE переиспользует код компилятора ● индексирование (компиляция) постоянно запускается в фоне ● для инкрементальной компиляции используется информация из IDE
  • 19. IntelliJ IDEA ● может работать как с javac, так и с ECJ ● использует компилятор как чёрный ящик ● запускает его в отдельном процессе ● собственный парсер и анализатор в IDE ● независимое индексирование ● для инкрементальной компиляции анализируются класс-файлы и используется информация из IDE
  • 20. Скомпилируется ли этот код? class Root {} class Inc<Z> {} class C0<X> extends Inc<Inc<? super X>> {} class Test { Inc<? super C0<Root>> cast(C0<Inc<? super Root>> c) { return c; } }
  • 21. А этот? class Root {} class Inc<Z> {} class C0<X> extends Inc<Inc<? super X>> {} class C1<X> extends C0<C0<X>> { } class Test { Inc<? super C1<Root>> cast(C1<Inc<? super Root>> c) { return c; } }
  • 22. Вот этот уже нет class Root {} class Inc<Z> {} class C0<X> extends Inc<Inc<? super X>> {} class C1<X> extends C0<C0<X>> { } class C2<X> extends C1<C1<X>> { } class C3<X> extends C2<C2<X>> { } class C4<X> extends C3<C3<X>> { } class C5<X> extends C4<C4<X>> { } class C6<X> extends C5<C5<X>> { } class C7<X> extends C6<C6<X>> { } class C8<X> extends C7<C7<X>> { } class C9<X> extends C8<C8<X>> { } class Test { Inc<? super C9<Root>> cast(C9<Inc<? super Root>> c) { return c; } }
  • 23. Ссылки ● Eclipse sources git.eclipse.org/c/jdt/ ● NetBeans sources netbeans.org/downloads/zip.html ● IntelliJ IDEA sources jetbrains.org/display/IJOS/Download