Otherwise IC fails when a project declares a class with the same name
as in one of its dependencies.
The issue is relevant only for non-JPS IC (Gradle, Maven, etc.),
but I added the test for JPS too.
#KT-20516 fixed
Otherwise resulting plugin will be installable to PyCharm, WebStorm and
other Intellij IDE without Java.
It can be resolved with `xi:include`, but it should be done with care,
because some declarations in `jvm.xml` should be placed after some
declarations in `plugin.xml` (action groups suffer from this issue for
sure).
* add the way to specify another compatible target for target backend.
It's used to generate a test for X_IR backend even when in a test data
is explicitly written a target: "// TARGET_BACKEND: X".
* Add the ability to run tests "ignored" with the "IGNORE_BACKEND" directive
as regular tests, i.e. w/o catching exceptions.
* Print stack trace of caught exception inside tests "ignored"
with the "IGNORE_BACKEND" directive.
Before this change there was a retention chain
VirtualFile -> KotlinBinaryData -> KotlinBinaryHeaderData -> KotlinClassHeader
The latter one contains all binary metadata (a lot of String[])
while only a small part of it is used.
The used parts are moved straight to KotlinBinaryClassHeaderData
in this change.
#KT-19484 Fixed
A directory-after-rebuild should correspond to expectedDir parameter,
a directory-after-IC should correspond to actualDir parameter.
Also we should not forgive extra directories.
In some cases IC needs to perform a rebuild.
Before this change IC was not clearing output directories
besides destination dir for classes, so for example
kapt stubs were not cleared.
Stalled stubs might lead to compile errors.
For example:
1. foo/XGen.java is generated from annotated class foo/X (XGen also
references X).
2. foo/X is moved to bar/X and some other change forces IC to rebuild.
3. kapt generates bar/X stub, but foo/X stub
was not removed because stubs dir is not cleared.
4. kapt runs annotation processors, foo/XGen.java is generated from
foo/X stub, bar/XGen.java is generated from bar/X stub.
5. kotlinc rebuilds. Since destination dir is cleared properly,
only bar/X.class exists.
6. javac tries to compile foo/XGen and fails, because it
compiles against actual Kotlin classes, not stubs.
This commit fixes the issue by passing all output directories
of a task from Gradle to Kotlin IC.
#KT-21735 fixed