Compare commits

..

2476 Commits

Author SHA1 Message Date
Evgeny Gerashchenko
3d84f225ab Simplest inline function handler. 2015-07-08 17:55:00 +03:00
Valentin Kipyatkov
4dc7081dc4 Completion: fixed filtering shadowed declarations for generic functions 2015-07-08 16:28:54 +03:00
Valentin Kipyatkov
3f74cc6351 More consistent presentation for different completion items producing lambda's 2015-07-08 16:28:53 +03:00
Valentin Kipyatkov
1f79955275 Completion: more intuitive presentation of function items that insert lambda 2015-07-08 16:28:53 +03:00
Valentin Kipyatkov
88dd86d603 Fixes: use isExactFunctionOrExtensionFunctionType() to detect when lambda can be passed 2015-07-08 16:28:52 +03:00
Valentin Kipyatkov
6b78a53c3d More tests 2015-07-08 16:28:52 +03:00
Valentin Kipyatkov
91c4bf7530 Renamed test data 2015-07-08 16:28:35 +03:00
Valentin Kipyatkov
75d668bc19 Adapted completion in lambda signatures to modern syntax 2015-07-08 16:28:35 +03:00
Valentin Kipyatkov
60ea98f870 Moved/renamed test data 2015-07-08 16:28:34 +03:00
Evgeny Gerashchenko
60a3ab548c Moved filtering of excluded symbols to KotlinIndicesHelper 2015-07-08 15:30:29 +03:00
Evgeny Gerashchenko
0d5dbdfa0c Added completion action to exclude classes/packages.
#KT-2413 fixed
2015-07-08 14:28:39 +03:00
Evgeny Gerashchenko
b98aa76325 Added completion action to exclude classes/packages.
#KT-2413 fixed
2015-07-08 14:28:39 +03:00
Evgeny Gerashchenko
0451debda4 Supported excluded packages/classes in completion.
#KT-2413 in progress
2015-07-08 14:28:38 +03:00
Evgeny Gerashchenko
5c56bc455e Supported excluded packages/classes in auto-import quick fix.
#KT-2413 in progress
2015-07-08 14:28:37 +03:00
Evgeny Gerashchenko
2a0817a4d1 Minor. Added word to dictionary. 2015-07-08 14:27:39 +03:00
Ilya Gorbunov
30ec88129c Clarify docs for capitalize and decapitalize methods. 2015-07-07 22:36:55 +03:00
Dmitry Jemerov
79602163a3 update run configuration on package rename 2015-07-07 18:02:48 +03:00
Dmitry Jemerov
c6c2404dcf validate more run configuration attributes; use correct CommandLineState base class to allow shutdown hooks to work (KT-7489)
#KT-7489 Fixed
2015-07-07 18:02:47 +03:00
Dmitry Jemerov
9cfc6b3905 correctly update name of run configuration on class rename 2015-07-07 18:02:46 +03:00
Dmitry Jemerov
247ffdccbe updating run configuration on class rename (KT-6731) 2015-07-07 18:02:45 +03:00
Dmitry Jemerov
4fbd982059 fix RunConfiguratioTest: use location.getModule() instead of context.getModule() 2015-07-07 18:02:44 +03:00
Dmitry Jemerov
d29e63e2b8 check type of containing file in getTestClass() 2015-07-07 18:02:44 +03:00
Dmitry Jemerov
49714d0817 convert KotlinRunConfigurationProducer to new API, allowing it to coexist with KotlinJUnitRunConfigurationProducer correctly
#KT-2604 Fixed
2015-07-07 18:02:43 +03:00
Dmitry Jemerov
9d650b6154 JetRunConfigurationProducer: J2K 2015-07-07 18:02:42 +03:00
Dmitry Jemerov
3ca30af615 JetRunConfigurationProducer: rename to .kt 2015-07-07 18:02:41 +03:00
Dmitry Jemerov
bd36b5e3d8 rewrite JUnit run configuration producer with a non-deprecated API; correctly detect configuration created from context (KT-8038); allow running test if file contains multiple classes (KT-8272)
#KT-8038 Fixed
 #KT-8272 FIxed
2015-07-07 18:02:40 +03:00
Dmitry Jemerov
a206ff7406 JetJUnitConfigurationProducer: J2K 2015-07-07 18:02:39 +03:00
Dmitry Jemerov
2a48a97853 JetJUnitRunConfigurationProducer: rename to .kt 2015-07-07 18:02:38 +03:00
Yan Zhulanow
9cb88a9c21 Fix muted completion test for the @file keyword 2015-07-07 16:35:24 +03:00
Yan Zhulanow
9c8ea54946 Use KotlinJvmCheckerProvider to check @publicField 2015-07-07 16:35:24 +03:00
Yan Zhulanow
3bcdee2a20 publicField & field in companion object 2015-07-07 16:35:23 +03:00
Yan Zhulanow
74f44dddb0 Add tests for publicField 2015-07-07 16:35:23 +03:00
Yan Zhulanow
bffb24b075 Add publicField annotation 2015-07-07 16:35:22 +03:00
Yan Zhulanow
441e72abed kapt: Add class declarations test in AP wrapper 2015-07-07 16:35:22 +03:00
Yan Zhulanow
c6ac878cf0 kapt: Add inherited annotations test 2015-07-07 16:35:21 +03:00
Yan Zhulanow
cf08390e04 Minor: fix deprecations in Kotlin Android Extensions code 2015-07-07 16:35:21 +03:00
Yan Zhulanow
700d495d7f kapt: Support inherited annotations in Gradle 2015-07-07 16:35:21 +03:00
Yan Zhulanow
a90f175fc2 kapt: Support inherited annotations in AP wrapper 2015-07-07 16:35:20 +03:00
Yan Zhulanow
afa3ae4439 Add tests for inherited annotations (class declarations) 2015-07-07 16:35:20 +03:00
Yan Zhulanow
09c3bd8699 kapt: Support inherited annotations in Kotlin plugin 2015-07-07 16:35:19 +03:00
Dmitry Jemerov
d6e37ad8c5 add markup for KDOC_LINK 2015-07-07 14:58:59 +03:00
Dmitry Jemerov
c5ea13e5a6 KotlinColorSettingsPage: J2L 2015-07-07 14:58:57 +03:00
Dmitry Jemerov
cdf9025f38 JetColorSettingsPage: rename to .kt 2015-07-07 14:58:55 +03:00
Nikolay Krasko
65c6bad542 Remove bundled plugin from ideaSDK 2015-07-07 14:58:53 +03:00
Nikolay Krasko
23ae5ae57c Remove own idea runtime and reflect jars 2015-07-07 13:36:57 +03:00
Natalia Ukhorskaya
002bca2f01 Fix compilation 2015-07-07 13:36:56 +03:00
Nikolay Krasko
fed264580d Update to 142.2887.3 2015-07-07 13:36:55 +03:00
Dmitry Petrov
4e42cc6b81 Save/restore stack in try-expressions (and statements).
Parse TryCatchBlockNode's in generated bytecode, infer stack save/restore points.
Save stack to local variables before 'try'.
Restore stack after the beginning of try-block, catch-block, and default handler.
Integrate before/after inline markers rewriting (otherwise it'll break our stacks).

 #KT-3309 Fixed
2015-07-07 12:16:29 +03:00
Nikolay Krasko
534154e20d Replace trait to interface icons
#KT-8319 Fixed
2015-07-06 21:06:13 +03:00
Nikolay Krasko
2cde746047 Usage highlighting test 2015-07-06 21:06:12 +03:00
Nikolay Krasko
68384a9b4a Avoid looking for light methods if only Kotlin search needed 2015-07-06 21:06:11 +03:00
Ilya Gorbunov
f440d97e04 Remove unnecessary Char.toChar from tests. 2015-07-06 17:57:35 +03:00
Ilya Gorbunov
456bab40d1 Ensure value of correct return type is on stack after intrinsic Char +/- Int and Char - Char binary operations. 2015-07-06 17:57:33 +03:00
Ilya Gorbunov
222d4002ac Add char binary operations to JVM codegen tests. 2015-07-06 17:57:25 +03:00
Valentin Kipyatkov
26f72d0935 MInor corrections after code review 2015-07-06 16:48:51 +03:00
Valentin Kipyatkov
c75a18291c KT-7918 J2K: don't generate jvmOverloads on private declarations
#KT-7918 Fixed
2015-07-06 16:48:51 +03:00
Valentin Kipyatkov
2999aaf974 KT-8034 J2K: save file before performing the conversion
#KT-8034 Fixed
2015-07-06 16:48:51 +03:00
Valentin Kipyatkov
4c80db9249 KT-8110 J2K: Don't convert "==" to "===" for enum classes
#KT-8110 Fixed
2015-07-06 16:48:51 +03:00
Valentin Kipyatkov
767e21db76 J2K - no '@' required for primary constructor annnotations 2015-07-06 16:48:51 +03:00
Valentin Kipyatkov
8e3c793760 Used named arguments for clarity 2015-07-06 16:48:50 +03:00
Valentin Kipyatkov
67cf180aba Code clarification 2015-07-06 16:48:50 +03:00
Valentin Kipyatkov
d3402280c5 Extracted methods 2015-07-06 16:48:50 +03:00
Valentin Kipyatkov
e9b4045eac Fixed test data 2015-07-06 16:48:50 +03:00
Valentin Kipyatkov
40fe680acf J2K: preserving line breaks between arguments 2015-07-06 16:48:50 +03:00
Valentin Kipyatkov
fefb828fae J2K: preserving line breaks between parameters 2015-07-06 16:48:50 +03:00
Valentin Kipyatkov
1e988028a9 Optimization 2015-07-06 16:48:49 +03:00
Valentin Kipyatkov
403549b924 Renames 2015-07-06 16:48:49 +03:00
Valentin Kipyatkov
6679a6912e Memory optimizations + more clear code 2015-07-06 16:48:49 +03:00
Valentin Kipyatkov
fdff2c7153 J2K: preserving line breaks between enum members from original code 2015-07-06 16:48:49 +03:00
Alexander Udalov
f9afb4f95b Make CLASS default class kind in binary metadata
Don't write the kind to the class file if it's CLASS to save some bytes
2015-07-06 16:19:57 +03:00
Alexander Udalov
b0e963bf34 Binary metadata: make repeated int fields packed
To save some bytes for enums and classes with many nested classes
2015-07-06 16:19:55 +03:00
Alexander Udalov
5e011b92ef Add source roots to modules 'builtins' and 'runtime.jvm'
This is done to be able to write code in the module 'reflection.jvm' in the IDE
without lots of unresolved errors and such
2015-07-06 16:19:55 +03:00
Alexander Udalov
feb4dd7b8f Drop 'OBJECT$' field deprecated in M11 2015-07-06 16:19:54 +03:00
Alexander Udalov
0bad4e0137 Make KotlinJvmCheckerProvider non-singleton, pass module to it 2015-07-06 16:19:53 +03:00
Alexander Udalov
ac0db5ce80 Fix incorrect TypeCastException message when casting null
#KT-5121 Fixed
2015-07-06 16:14:22 +03:00
Alexander Udalov
cb03f0df5a Fix casts of Unit value to other types 2015-07-06 16:14:06 +03:00
Alexander Udalov
62c22bf0ec Minor, simplify ExpressionCodegen#binaryWithTypeRHS 2015-07-06 16:06:15 +03:00
Ilya Gorbunov
80074c71fa Minor: Correct typo in 'intrinsic' 2015-07-04 04:47:12 +03:00
Ilya Gorbunov
1605027b19 Change return type of Char plus Int and Char minus Int binary operations.
JS: Remove unnecessary intrinsic binary operation patterns, adjust intrinsics for binary operations with char.
2015-07-04 04:47:00 +03:00
Ilya Gorbunov
39b27751df Drop deprecated char operations: correct test data. 2015-07-04 04:46:23 +03:00
Ilya Gorbunov
e8aff3360a Do not use deprecated operations in ranges and progressions hashCode. 2015-07-04 04:46:11 +03:00
Ilya Gorbunov
2c4db42319 Drop deprecated char binary operations. 2015-07-04 04:45:59 +03:00
Ilya Gorbunov
005a0a1eb6 Eliminate deprecated char operation usages in stdlib 2015-07-04 04:45:47 +03:00
Nikolay Krasko
ff9c251438 Filter out overridden candidates before looking for most specific
This filtering will remove signature duplicates that prevent findMaximallySpecific() from finding best candidate.
2015-07-03 20:59:48 +03:00
Evgeny Gerashchenko
01b83b3e3e Minor. Fixed test data. 2015-07-03 19:48:01 +04:00
Alexey Sedunov
5319e9e761 Change Signature: Support configurable Change Signature for Java code
#KT-5923 Fixed
2015-07-03 18:38:06 +03:00
Alexey Sedunov
9e82411e78 Change Signature: Do not process calls with unmatched arguments/parameters 2015-07-03 18:38:05 +03:00
Alexey Sedunov
4cc2a57aed Minor: Pull up original property 2015-07-03 18:38:04 +03:00
Alexey Sedunov
e9b2732aa9 Minor: Drop unused class 2015-07-03 18:38:03 +03:00
Alexey Sedunov
161539f3da Change Signature: val/var parameter support 2015-07-03 18:38:02 +03:00
Alexey Sedunov
2ff63d37c2 Change Signature: Property support
#KT-6599 Fixed
2015-07-03 18:38:01 +03:00
Alexey Sedunov
c96349f42b Change Signature: Filter out OverriderUsageInfo(s) corresponding to Kotlin
declarations
2015-07-03 18:37:59 +03:00
Alexey Sedunov
c66a4d53fd Introduce Variable: Use name entered in template as a variable name
#KT-8358 Fixed
2015-07-03 18:37:58 +03:00
Pavel V. Talanov
e135b6ae96 Recompute KotlinResolveCache for synthetic files on project structure modification
Since computed KotlinResolveCache depends on corresponding synthetic files location (namely, moduleFilter), it should be recomputed in this case

The STR for this issue provided by Alexander Udalov:
1. Open a library source, wait for it to be analyzed. In this case library sources are files in the project under core/builtins/src/.
2. Go to project settings and remove the source from the library.
3. Exception now on each file change, out of block doesn't seem to help.
2015-07-03 16:50:51 +03:00
Ilya Gorbunov
f7436064d0 Unify componentN templates and add NOTHING_TO_INLINE suppression. 2015-07-03 16:38:10 +03:00
Ilya Gorbunov
9618a3542f Provide getOrElse and getOrNull methods for indexed collections.
Breaking: elementAtOrElse is no longer inlined for Iterables and Sequences.
#KT-6952
2015-07-03 16:38:08 +03:00
Michael Nedzelsky
8cd978bfd8 add tests for KT-8158 make Kotlin compiler invoked from IDEA cancellable 2015-07-03 16:14:08 +03:00
Michael Nedzelsky
ea0c14d7ad KotlinJpsBuildTest.kt: minor refactoring after converting 2015-07-03 16:14:04 +03:00
Michael Nedzelsky
13bda2de44 convert KotlinJpsBuildTest to Kotlin: step 1: rename 2015-07-03 16:14:01 +03:00
Michael Nedzelsky
e09411f45f convert KotlinJpsBuildTest to Kotlin: step 1: convert body 2015-07-03 16:13:58 +03:00
Evgeny Gerashchenko
aa65eb1055 More proper fix for KT-8137/EA-69470: avoiding failed assertion when searching usages of parameter of local class constructor
KT-8137 AE at JetSourceNavigationHelper.convertNamedClassOrObject() on function local class with several constructor parameters

 #KT-8137 fixed
 #EA-69470 fixed
2015-07-03 16:00:06 +03:00
Alexander Udalov
48a8f53551 Fix ClassCastException in SamAdapterOverridabilityCondition
This was happening on the upcoming hierarchy of property getters and setters in
kotlin.reflect. No test added because it's not so easy to come up with a small
example, and because the fix itself is rather trivial
2015-07-03 15:32:20 +03:00
Alexander Udalov
fa9dfd94b0 Minor, add ScriptContext#toString 2015-07-03 15:32:19 +03:00
Alexander Udalov
7dcb33fcf2 Minor, don't store type in receiver parameter 2015-07-03 15:32:19 +03:00
Alexander Udalov
cd61f6f96b Minor, dump bytecode in REPL test on demand 2015-07-03 15:32:18 +03:00
Alexander Udalov
cd847b7cb9 Minor, make JavaMethod#getReturnType non-null
PsiMethod#getReturnType only returns null for constructors, and JavaMethod is
not created for constructors (JavaConstructor is)
2015-07-03 15:32:17 +03:00
Alexander Udalov
b064b947ce Minor, add missing kdoc on Function's type parameter 2015-07-03 15:32:17 +03:00
Alexander Udalov
c8439ae6fc Minor, rename val EXTENSION_REGISTRY -> extensionRegistry 2015-07-03 15:32:16 +03:00
Alexander Udalov
110d6fa7f1 Don't load irrelevant classes by accident, if resource happens to exist
Check with the containing class or package first, don't load the class if the
container doesn't know about it. This also makes the workaround for
case-insensitive file systems unnecessary
2015-07-03 15:31:48 +03:00
Stanislav Erokhin
1e7b96aec0 replace ArrayList to SmartList 2015-07-02 16:32:46 +03:00
Stanislav Erokhin
2f68cc4c97 Created reset method. 2015-07-02 16:32:45 +03:00
Stanislav Erokhin
298a27951f Use System.nanoTime() instead threadMxBean.getCurrentThreadUserTime() 2015-07-02 16:32:45 +03:00
Stanislav Erokhin
45a3d7ec46 Create performance counter with excluded counters 2015-07-02 16:32:45 +03:00
Stanislav Erokhin
d830729ddb change creation of performance counters 2015-07-02 16:32:44 +03:00
Stanislav Erokhin
9974423e2b Disable performance time counters by default 2015-07-02 16:32:44 +03:00
Dmitry Jemerov
94e3b058b2 Merge pull request #712 from zarechenskiy/visitor
Override all methods from based visitor class
2015-07-02 11:39:19 +02:00
Nikolay Krasko
d564f44aad Getting decompiled file content through getPsi() doesn't work for local class files
Decompiler view providers are created with EmptyFileManager (see ClassFileDecompiler.decompile()). This makes impossible to create psi file for virtual class file in local file system because parent directory is null in SingleRootFileViewProvider.createFile() pre-check.
2015-07-02 00:49:08 +03:00
Ilya Gorbunov
64379947fd Do not allow using getOrPut on concurrent maps.
#KT-5800 In Progress
2015-07-01 22:33:58 +03:00
Ilya Gorbunov
a47325cc30 Provide getOrSet method for ThreadLocal<T: Any>
#KT-7927 Fixed
2015-07-01 22:30:17 +03:00
Mikhail Zarechenskiy
2fcb46bb13 Override all methods from based visitor class 2015-07-01 22:25:28 +03:00
Ilya Gorbunov
cb9d9cb77d Delegates.observable and vetoable inline their lambda parameters into ObservableProperty implementation.
ObservableProperty made abstract.
#KT-5388
2015-07-01 22:23:14 +03:00
Ilya Gorbunov
9dbc4e4eef Provide another type of callback to the ObservableProperty which is called after the property value has been changed.
#KT-6866 Fixed
2015-07-01 22:23:11 +03:00
Ilya Gorbunov
61e657567d Increase heap size for compiler up to 2000M 2015-07-01 22:16:17 +03:00
Evgeny Gerashchenko
8e3dd54477 Minor. Converted class with class object to object. 2015-07-01 21:21:35 +03:00
Pavel V. Talanov
15a4782a0c Move CompilationCanceledStatus and related utils to "util" module
It should not be in "frontend" since "jps bare plugin" artifact does not include "frontend" module
2015-07-01 21:21:35 +03:00
Pavel V. Talanov
9a9d70fd98 Decompiler: do not try to render function types with star projections prettily 2015-07-01 20:45:32 +03:00
Evgeny Gerashchenko
8fcbd44ad4 KT-8137 AE at JetSourceNavigationHelper.convertNamedClassOrObject() on function local class with several constructor parameters
#KT-8137
 #EA-69470 fixed
2015-07-01 19:43:54 +03:00
Evgeny Gerashchenko
560654744c Checking exceptions in other threads. E.g. inspections pass thread. 2015-07-01 19:43:54 +03:00
Mikhail Glukhikh
bae9a7d7f8 Types are no more rendered for annotation arguments + a swarm of tests corrected accordingly 2015-07-01 16:12:32 +03:00
Nikolay Krasko
dde295011b Refactoring: rename file 2015-07-01 14:52:43 +03:00
Nikolay Krasko
ef477f99e9 Create file must return new file, as old one can be invalidated (KT-8266)
Invalidation in SingleRootFileViewProvider.getPsiInner()

 #KT-8266 Fixed
2015-07-01 14:52:41 +03:00
Mikhail Glukhikh
7c7a0fb4ea trait to interface (StubInterfaces) 2015-06-30 19:46:33 +03:00
Mikhail Glukhikh
848c2afdb4 "is" over enum entry is now an error + new tests + test fixes 2015-06-30 19:46:30 +03:00
Mikhail Glukhikh
e1d3b296e9 Exhaustive when over enum may now use "is" instead of comparison + a pair of tests 2015-06-30 19:46:28 +03:00
Pavel V. Talanov
786cadb08b Fix failing test in container test and add it to generators module test dependencies
This should enable running this test on build server
2015-06-30 17:06:22 +03:00
Pavel V. Talanov
b173f96505 Refactor: Remove ScopeProvider, introduce FileScopeProviderImpl
Rename NoFileScopeProvider -> FileScopeProvider.ThrowException, ScopeProvider.AdditionalScopeProvider -> FileScopeProvider.AdditionalScopes
2015-06-30 16:12:23 +03:00
Dmitry Jemerov
7bcc3dd875 correct place for enabling alternative resolve in library configurator 2015-06-30 14:05:30 +02:00
Nikolay Krasko
8bea21a847 Introduce BodyResolveCache for storing resolve function body task in IDE 2015-06-30 13:54:42 +03:00
Nikolay Krasko
2dfed03b67 Refactoring: rename method addAllMyDataTo -> addOwnDataTo 2015-06-30 13:54:41 +03:00
Nikolay Krasko
09bb050c3f Add addOwnDataTo() to BindingContext 2015-06-30 13:54:40 +03:00
Nikolay Krasko
083023211e Refactoring: create trace inside each resolve task
This will allow reuse external cached results with their temp traces
2015-06-30 13:54:39 +03:00
Nikolay Krasko
980a0d19be Refactoring: don't register scopes explicitly, get them from scope provider on demand 2015-06-30 13:54:38 +03:00
Nikolay Krasko
b81d8eb484 Refactoring: Don't depend on whole context if only DataFlowInfo is needed 2015-06-30 13:54:37 +03:00
Nikolay Krasko
0b49197ca3 Minor: suppress warning 2015-06-30 13:54:36 +03:00
Nikolay Krasko
fad883e55b Minor: remove outdated commit 2015-06-30 13:54:36 +03:00
Valentin Kipyatkov
2f0bce375e Restored filtering out of empty name actions 2015-06-30 13:41:41 +03:00
Valentin Kipyatkov
004b400089 DirectiveBasedActionUtils: added intentions to suppress warning to the list of ignored in tests to fix DeprecatedSymbolUsage.testJavaDeprecated() 2015-06-30 13:41:41 +03:00
Valentin Kipyatkov
eadeb6e63f DirectiveBasedActionUtils: don't allow to specify ACTION directives that won't be checked anyway 2015-06-30 13:41:41 +03:00
Valentin Kipyatkov
c0062b1199 Code simplifications 2015-06-30 13:41:41 +03:00
Valentin Kipyatkov
09723b9991 Converted DirectiveBasedActionUtils to Kotlin 2015-06-30 13:41:41 +03:00
Valentin Kipyatkov
646653aa9a Better deparenthesizing 2015-06-29 19:36:50 +03:00
Valentin Kipyatkov
5b997c2c43 Moved method 2015-06-29 19:36:49 +03:00
Valentin Kipyatkov
db144a6121 Suggestions from expression itself to have higher priority + fixed incorect upper case naming 2015-06-29 19:36:49 +03:00
Valentin Kipyatkov
4a52247ab7 Name validation filters out invisible declarations 2015-06-29 19:36:48 +03:00
Valentin Kipyatkov
5c0195ff68 IterateExpressionIntention: checking for name conflicts 2015-06-29 19:36:48 +03:00
Valentin Kipyatkov
abb729b2ed Moved and renamed classes 2015-06-29 19:36:47 +03:00
Valentin Kipyatkov
de2378f909 Rewritten NameValidatorImpl to be both more efficient and more correct 2015-06-29 19:36:47 +03:00
Valentin Kipyatkov
df5f035760 KT-7716 Introduce Variable's name suggestions often have "1" at the end for no real reason
#KT-7716 Fixed
2015-06-29 19:36:46 +03:00
Valentin Kipyatkov
ed267d9949 Code improvements in NameValidatorImpl 2015-06-29 19:36:46 +03:00
Valentin Kipyatkov
e00294d17b IterateExpressionIntention uses collection expression for name suggestions too 2015-06-29 19:36:45 +03:00
Valentin Kipyatkov
024834737d Removed unclear doc 2015-06-29 19:36:45 +03:00
Valentin Kipyatkov
f60470b3eb JetNameSuggester: no name duplicates + no full body resolve always 2015-06-29 19:36:45 +03:00
Valentin Kipyatkov
bce79906ef Use of List's instead of Array's 2015-06-29 19:36:44 +03:00
Valentin Kipyatkov
343604bce0 Minor 2015-06-29 19:36:44 +03:00
Valentin Kipyatkov
a2407aaaa4 Minor code improvements 2015-06-29 19:36:43 +03:00
Valentin Kipyatkov
3dd811e73e Reordered methods 2015-06-29 19:36:43 +03:00
Valentin Kipyatkov
c478f1d347 Renamed methods 2015-06-29 19:36:42 +03:00
Valentin Kipyatkov
a02c86bac9 Refactored NameValidator getting rid of it and replacing with a function 2015-06-29 19:36:42 +03:00
Valentin Kipyatkov
79a453f12c Renamed classes 2015-06-29 19:36:41 +03:00
Valentin Kipyatkov
ffa7492240 Moved classes 2015-06-29 19:31:21 +03:00
Valentin Kipyatkov
39f38591d9 Converted JetNameSuggester to Kotlin (step 2) 2015-06-29 19:31:21 +03:00
Valentin Kipyatkov
6f9e5ed386 Converted JetNameSuggester to Kotlin (step 1) 2015-06-29 19:31:21 +03:00
Valentin Kipyatkov
2206459874 Initial implementation of KT-7688 Intention action to iterate over iterable value
#KT-7688 Fixed
2015-06-29 19:31:21 +03:00
Valentin Kipyatkov
4fc67c27b0 Renamed class 2015-06-29 19:29:27 +03:00
Valentin Kipyatkov
498e746689 KT-8169 Strange exception when replacing function call to its only argument
#KT-8169 Fixed
2015-06-29 19:29:26 +03:00
Valentin Kipyatkov
463b0cda79 Fixed test data 2015-06-29 19:29:26 +03:00
Valentin Kipyatkov
786793744e Added getEqualsToken for future use 2015-06-29 19:29:26 +03:00
Valentin Kipyatkov
46ad1b8573 "Remove argument name" intention 2015-06-29 19:29:26 +03:00
Valentin Kipyatkov
6988297511 More informative intention text 2015-06-29 19:29:26 +03:00
Valentin Kipyatkov
98c0c636b3 Smaller availability range for add argument name intention 2015-06-29 19:29:26 +03:00
Valentin Kipyatkov
9d83510af5 KT-7144 Intention action on an argument in a call to use named arguments form
#KT-7144 Fixed
2015-06-29 19:29:25 +03:00
Valentin Kipyatkov
c689af142a Fixed highlighting for enum and object names in code
#KT-8134 Fixed
2015-06-29 19:29:25 +03:00
Valentin Kipyatkov
2bd1362be6 Create function/property from usage: added "member" when appropriate + changed order 2015-06-29 19:29:25 +03:00
Dmitry Jemerov
b691ed2494 use JetIcons instead of direct icon reference 2015-06-29 17:21:32 +02:00
Dmitry Jemerov
e441aa0a3f show Kotlin bytecode by explicit request, rather than always 2015-06-29 17:01:12 +02:00
Ilya Gorbunov
0e896ea1bb Drop streams and iterators: correct test data. 2015-06-29 17:06:49 +03:00
Ilya Gorbunov
6b700c4ba6 Restore and undeprecate removed Iterator.forEach(). 2015-06-29 17:06:48 +03:00
Ilya Gorbunov
34f939a476 Make sequence implementations private. 2015-06-29 17:06:46 +03:00
Ilya Gorbunov
4660b07687 StdLib cleanup: drop deprecated iterators and streams. 2015-06-29 17:06:45 +03:00
Ilya Gorbunov
6d4e48ab9a Compiler&plugin deprecations cleanup: string operations. 2015-06-29 17:06:43 +03:00
Ilya Gorbunov
35166f44ae StdLib deprecations cleanup: string operations. 2015-06-29 17:06:41 +03:00
Ilya Gorbunov
86f4a1b6e4 Compiler&plugin deprecations cleanup: replace streams with sequences. 2015-06-29 17:06:40 +03:00
Ilya Gorbunov
5779b89ff0 Deprecations cleanup: sequence -> asSequence 2015-06-29 17:06:33 +03:00
Ilya Gorbunov
765733b791 Compiler&plugin deprecations cleanup: withIndices -> withIndex or mapIndexed 2015-06-29 17:06:31 +03:00
Ilya Gorbunov
f4651f22ca Compiler&plugin deprecations cleanup: adhoc indices property for IntArrayList. 2015-06-29 17:06:29 +03:00
Ilya Gorbunov
32144257ec Compiler&plugin deprecations cleanup: length, size, indices, tail and other collection operations. 2015-06-29 17:06:28 +03:00
Ilya Gorbunov
f3a19ebe11 StdLib deprecations cleanup: length, size, indices and other collection operations. 2015-06-29 17:06:20 +03:00
Ilya Gorbunov
2c31a1a345 Compiler&plugin deprecations cleanup: *array -> *arrayOf, copyToArray -> toTypedArray. 2015-06-29 17:06:12 +03:00
Ilya Gorbunov
00a44f6d4f StdLib deprecations cleanup: *array -> *arrayOf, copyToArray -> toTypedArray. 2015-06-29 17:05:57 +03:00
Michael Nedzelsky
c462d23a0e add support for cancel compilation from IDE
#KT-8158 Fixed
2015-06-29 16:41:16 +03:00
Alexey Sedunov
4eeff03525 Change Signature: Support Kotlin functions overriding Java methods
#KT-5856 Fixed
2015-06-27 13:58:13 +03:00
Alexey Sedunov
38982fe641 Change Signature: Fix receiver removal in the dialog 2015-06-27 13:58:11 +03:00
Alexey Sedunov
5fb37097dc Introduce Variable: Fix offset to start template at
#KT-8162 Fixed
2015-06-27 13:58:10 +03:00
Alexey Sedunov
1469275a5a Extract Function: Fix return type computation for extracted callee expression
#KT-8233 Fixed
2015-06-27 13:58:09 +03:00
Alexey Sedunov
febf725e85 Extract Function: Extract block contents
#KT-8235 Fixed
2015-06-27 13:58:07 +03:00
Alexey Sedunov
4e7200d8e8 Extract Function: Add backticks to non-identifiers and references originally surrounded in backticks
#KT-8192 Fixed
2015-06-27 13:58:06 +03:00
Alexey Sedunov
c6f6637b25 Extract Function: Fix extraction of explicit/implicit invoke()
#KT-8116 Fixed
2015-06-27 13:58:04 +03:00
Alexey Sedunov
f6965b5004 PSI: Add parentheses around annotated expressions in returns
#KT-8260 Fixed
2015-06-27 13:58:03 +03:00
Alexey Sedunov
8c9863e759 PSI: Add parentheses around non-trivial callee expressions
#KT-8232 Fixed
2015-06-27 13:58:02 +03:00
Alexey Sedunov
5ac1fbf59b Descriptor Renderer: Add parentheses around receiver type if it's non-nullable function type
#KT-8188 Fixed
2015-06-27 13:58:00 +03:00
Alexey Sedunov
5d89097870 Move: Fix processing of references with qualifier receivers
#KT-8098 Fixed
2015-06-27 13:57:59 +03:00
Alexey Sedunov
c4442c59d4 Move: Suggest target file name based on selected declarations
#KT-8227 Fixed
2015-06-27 13:57:57 +03:00
Alexey Sedunov
6055933258 Copy: CopyFileHandler must support all elements inside of Kotlin file (in the absence of more specific handlers)
#KT-8175 Fixed
2015-06-27 13:57:56 +03:00
Ilya Gorbunov
cbdaf2a151 Minor: regenerate generated code. 2015-06-26 19:40:56 +03:00
Pavel V. Talanov
65c6adfaa4 Drop "injector-generator" module, tests and existing generated injectors
Move GeneratorsFileUtil to "generators" module
Drop "Generate Injectors" run configuration
2015-06-26 15:21:43 +03:00
Pavel V. Talanov
df529f1a4b Convert usages of existing generated injectors to dynamic injectors
Rewrite RuntimeModuleData to use hand-written code as we do not pack container module into runtime
This change introduces some overhead (up to 10% for the tests I ran) in some scenarios in IDE, that should be addressed later
2015-06-26 15:21:41 +03:00
Ilya Ryzhenkov
5db541ee24 Add container module with implementation of di based on java reflection
Initial implementation by Ilya Ryzhenkov
Renovation, optimization, integration and removal of unused features by Pavel Talanov
2015-06-26 15:21:39 +03:00
Alexander Udalov
f52bc8a2d2 CLI: make message bold only for errors and warnings
Info, logging and output are not important enough to appear bold every time
2015-06-26 13:31:36 +03:00
Alexander Udalov
499579274d Move MessageRenderer instances to top level 2015-06-26 13:31:35 +03:00
Natalia Ukhorskaya
999aea6179 Update to IDEA 142.2670.3 2015-06-26 12:30:48 +03:00
Valentin Kipyatkov
a7e032456c Minor corrections after code review 2015-06-25 21:58:16 +02:00
Valentin Kipyatkov
f679ed7011 Renamed a class 2015-06-25 21:58:16 +02:00
Valentin Kipyatkov
8146fb673b Moved classes to separate files 2015-06-25 21:58:16 +02:00
Valentin Kipyatkov
bf3b731347 More correct 2015-06-25 21:58:16 +02:00
Valentin Kipyatkov
afa46f1c95 Filtering out type parameters that are not visible at the completion point 2015-06-25 21:58:16 +02:00
Valentin Kipyatkov
e894a04ce6 Code refactoring 2015-06-25 21:58:16 +02:00
Valentin Kipyatkov
57ff2be9b9 Simplified code by introducing one more option in LookupElementFactor 2015-06-25 21:58:15 +02:00
Valentin Kipyatkov
73fd4ad57f Fixed small inconsistency in presentation for nested classes 2015-06-25 21:58:15 +02:00
Valentin Kipyatkov
01e56dc571 Fixed test data 2015-06-25 21:58:15 +02:00
Valentin Kipyatkov
c5f0fbf327 Replaced JetScopeUtils.getResolutionScope() with more correct utility 2015-06-25 21:58:15 +02:00
Valentin Kipyatkov
776d198ea5 Disabled parameter name&type completion for annotation type constructor 2015-06-25 21:57:15 +02:00
Valentin Kipyatkov
0ab155d61d Rename 2015-06-25 21:57:15 +02:00
Valentin Kipyatkov
75a260a366 Restarting completion when new suggestions may appear 2015-06-25 21:57:15 +02:00
Valentin Kipyatkov
fa588ace57 Fixed icons for java and compiled classes broken before 2015-06-25 21:57:14 +02:00
Valentin Kipyatkov
ecbc7ba5b6 Parameter name completion allows user prefix part in the name + more strict prefix matcher used 2015-06-25 21:57:14 +02:00
Valentin Kipyatkov
d95c44f838 Minor 2015-06-25 21:57:14 +02:00
Valentin Kipyatkov
1011a59884 Don't detect isDeprecated twice 2015-06-25 21:57:14 +02:00
Valentin Kipyatkov
8520235934 Fixed deprecated ordering and quick doc for java and compiled classes in completion 2015-06-25 21:57:14 +02:00
Valentin Kipyatkov
53688d061a Fixed name suggestions for types with abbreviations like "URL" 2015-06-25 21:57:13 +02:00
Valentin Kipyatkov
84ba634c3e Parameter names from current file get higher priority + number of occurrences matters 2015-06-25 21:57:13 +02:00
Valentin Kipyatkov
c6fd04dcac No duplication for parameter name/types from current file and from classes 2015-06-25 21:57:13 +02:00
Valentin Kipyatkov
ce6668b5ba Fixed class names shortening 2015-06-25 21:57:13 +02:00
Valentin Kipyatkov
55e9a3b851 Refactored createLookupElementForType changing rendering for function types 2015-06-25 21:57:13 +02:00
Valentin Kipyatkov
17500cef98 Completion of parameter name/types from the current file 2015-06-25 21:57:13 +02:00
Valentin Kipyatkov
22ad1389f5 Parameter name completion: no insertion on just typing 2015-06-25 21:57:12 +02:00
Valentin Kipyatkov
c0126b08c3 Parameter name completion: added more tests for ordering 2015-06-25 21:57:12 +02:00
Valentin Kipyatkov
437478e694 Parameter name completion: suppressed auto-insertion 2015-06-25 21:57:12 +02:00
Valentin Kipyatkov
6478c7d460 Ordering of parameter name suggestions by type relevance 2015-06-25 21:57:12 +02:00
Valentin Kipyatkov
e2991b1412 Disabled parameter name completion where it makes no sense 2015-06-25 21:57:12 +02:00
Valentin Kipyatkov
0e045b9478 Completion of parameter name+type works for val/var parameters 2015-06-25 21:57:11 +02:00
Valentin Kipyatkov
0e4ac7108a Completion: fixed insertion of java class names that require escaping 2015-06-25 21:57:11 +02:00
Valentin Kipyatkov
8210d3091f Initial implementation of KT-6427 Completion to use Java name suggestion to complete function parameters
(+ filtered out synthetic Kotlin classes from completion)
2015-06-25 21:57:11 +02:00
Valentin Kipyatkov
e0f1bde20a Renames 2015-06-25 21:57:11 +02:00
Dmitry Jemerov
c91a359fea run Kotlin library configurator with alternative resolve enabled 2015-06-25 21:30:50 +02:00
Mikhail Glukhikh
4d895a4c31 Sealed classes: extra java against kotlin tests, together with an implementation of Java diagnostics inside these tests 2015-06-25 19:07:26 +03:00
Mikhail Glukhikh
6e2395471d Sealed code generation: sealed is considered abstract, correct serialization
A pair of tests provided.
2015-06-25 19:07:23 +03:00
Mikhail Glukhikh
4d2ba3e890 Sealed constructors are made private in front-end, tests changed accordingly 2015-06-25 19:07:20 +03:00
Mikhail Glukhikh
4517e15299 Minor refactoring of resolveDelegationSpecifierList 2015-06-25 19:07:18 +03:00
Mikhail Glukhikh
f6872dfbea Exhaustive when support for sealed classes #KT-7606 Fixed
When on sealed can use is (both for derived classes and objects) or just comparison (only for derived objects).
A pack of tests provided.
2015-06-25 19:07:16 +03:00
Mikhail Glukhikh
8d25c20169 Introduction of sealed classes
Sealed classes can be derived only by their own inner classes or objects.
Their constructors cannot be called explicitly, so compiler knows all their descendants.
Incompatible modifier checks (final, abstract). Impossible with interface, object, enum.
A pack of tests provided.
2015-06-25 19:07:13 +03:00
Mikhail Glukhikh
2dea17a3a9 Final specification for sealed class hierarchies, additional words about sealed when optimization 2015-06-25 19:07:10 +03:00
Andrey Breslav
de876a8c26 Create sealed-hierarchies-and-when.md 2015-06-25 19:07:08 +03:00
dnpetrov
f364d23ee9 KT-5347 VerifyError on local data class with closure
- generated copy() should push captured fields on stack
- refactor context lookup
- handle vars in local classes using instance fields

 #KT-5347 Fixed
2015-06-25 17:52:30 +03:00
dnpetrov
c24e6b5698 Support 'break' and 'continue' in expressions
- generate fake jump instructions so that we can always analyze stack depths
- fix stack before break and continue by dropping excessive elements (e.g., *a*.foo(*b*, c?:continue))
- Analyzer rewritten in Kotlin, with more flexible control of CFG traversal

 #Fixed KT-3340
 #Fixed KT-4258
 #Fixed KT-7941
2015-06-25 17:40:55 +03:00
Nikolay Krasko
d937f385cd Copy libraries to {project.dir}/lib folder by default (KT-8231)
#KT-8231 Fixed
2015-06-25 13:50:32 +03:00
Nikolay Krasko
a98468e829 Test for KT-5326
#KT-5326 Obsolete
2015-06-25 13:50:14 +03:00
Ilya Gorbunov
d20d8e2106 2nd stage of replaceFirst semantics change: remove deprecated String.replaceFirst(String), rename replaceFirstLiteral to replaceFirst. 2015-06-24 21:48:09 +03:00
Ilya Gorbunov
249106647c 2nd stage of split semantics change: remove deprecated String.split(String), rename splitBy back to split. Provide replacement for splitBy and splitWithRegex (JS). 2015-06-24 21:48:07 +03:00
Ilya Gorbunov
9caf5baf34 Refactor delegation unit tests. 2015-06-24 21:39:41 +03:00
Ilya Gorbunov
d04e94c826 Use NoSuchElementException instead of KeyMissingException. Deprecate KeyMissingException. 2015-06-24 21:39:40 +03:00
Ilya Gorbunov
9c7992abbb Use getOrElse in MapVal.get 2015-06-24 21:39:38 +03:00
Ilya Gorbunov
a6b7857d57 Drop complicated MapAccessors. Deprecate simple cases of Delegates.mapVar and Delegates.mapVal in favor of direct delegation without wrappers. 2015-06-24 21:39:37 +03:00
Ilya Gorbunov
d2feefbf3a Document map delegation accessors and withDefault functionality. 2015-06-24 21:39:36 +03:00
Ilya Gorbunov
2f8a431a79 Change getOrElse and getOrPut implementations so that double lookup is made when map doesn't contain value, rather when does. 2015-06-24 21:39:34 +03:00
Ilya Gorbunov
5306e88425 Provide the way to specify implicit default for a readonly or mutable map.
Refactor: rename default key and value providers.
2015-06-24 21:39:33 +03:00
Ilya Gorbunov
d137a83471 Simple extensions to delegate readonly property to Map and read-write property to MutableMap without delegate wrappers.
Delegation to map with custom key selector by map accessors.
2015-06-24 21:39:31 +03:00
Ilya Gorbunov
2989586582 Change Lazy from an interface to an abstract class with internal constructor to prevent implementations violating its contract. 2015-06-24 21:39:30 +03:00
Evgeny Gerashchenko
55dad40650 Added reflect.jar as dependency for proguard. Fixed build. 2015-06-24 20:51:17 +03:00
Evgeny Gerashchenko
041df7fd15 Made it possible to easily enable debug logging in incremental compilation tests. 2015-06-24 18:01:51 +03:00
Evgeny Gerashchenko
23eab73507 Added extra logging in incremental cache and Kotlin Builder. 2015-06-24 18:01:51 +03:00
Mikhail Glukhikh
5fabb962ae Private constructors are now accessed via synthetic constructor with DEFAULT_CONSTRUCTOR_MARKER as an additional argument #KT-6299 Fixed
A set of tests provided. Some external tests fixed accordingly.
Companion object creation changed accordingly.
Derived classes now can use base class with the private constructor.
Refactoring of AccessorForFunctionDescriptor.
2015-06-24 12:30:11 +03:00
Mikhail Glukhikh
83ce674a37 Warning message changed #KT-8143 Fixed 2015-06-24 12:30:08 +03:00
Michael Bogdanov
9ef00f0621 Code clean 2015-06-24 09:48:56 +03:00
Michael Bogdanov
b1c5002889 Remove finally marker at inlining 2015-06-24 09:48:55 +03:00
Michael Bogdanov
a018e4e12a Updated exception table generation: support new exception table in non-local returns 2015-06-24 09:48:55 +03:00
Michael Bogdanov
93c5a52d13 Updated exception table generation: try block return moved to uncatched interval
#KT-8148 Fixed
2015-06-24 09:48:55 +03:00
Michael Bogdanov
11ab2148b2 Fixed scipt execution classpath 2015-06-24 09:48:55 +03:00
Michael Nedzelsky
71729031c1 fix maven build 2015-06-24 01:35:25 +03:00
Alexander Udalov
0593b833b5 Check extension receiver properly for property references
Without this, the unrelated type specified on the LHS of a property reference
literal was considered to be an extension receiver of the candidate, and the
resolution was erroneously successul. This is only reproducible for properties,
because if we're trying to resolve an extension, we consider all properties
from the scope, even non-extensions, because there may be a property of an
extension-functional type (T.() -> R). (We don't do this for functions.)

 #KT-7430 Fixed
 #KT-7945 Fixed
2015-06-23 23:35:17 +03:00
Natalia Ukhorskaya
25210c0c18 Merge pull request #707 from JetBrains/rr/yole/run-configurations
add missing UI for specifying alternative JRE path to Kotlin run configuration
2015-06-23 19:06:28 +03:00
Dmitry Jemerov
02211f1431 reorder fields to match Java 2015-06-23 18:02:15 +02:00
Dmitry Jemerov
a3b543a05a change module chooser to look like in IDEA's Java run configuration 2015-06-23 17:48:34 +02:00
Dmitry Jemerov
e3846f0150 use PanelWithAnchor to align all labels and text fields in Kotlin run configuration 2015-06-23 17:16:32 +02:00
Dmitry Jemerov
1ddf87fa2e validate some of the settings in KotlinRunConfiguration 2015-06-23 16:32:15 +02:00
Dmitry Jemerov
5b1d393d05 report JIT time 2015-06-23 16:24:49 +02:00
Dmitry Jemerov
2216ec1b68 report GC time 2015-06-23 16:24:48 +02:00
Dmitry Jemerov
6ca4dd32cf include module names in analyze and generate perf reports 2015-06-23 16:24:48 +02:00
Dmitry Jemerov
ebcd7de26b report meaningful init times for subsequent runs when -Xrepeat flag is used 2015-06-23 16:24:47 +02:00
Dmitry Jemerov
669cd9e514 environment variable for enabling perf 2015-06-23 16:24:47 +02:00
Dmitry Jemerov
7cfb91192f K2JVMCompiler: cleanup after J2K 2015-06-23 16:24:46 +02:00
Dmitry Jemerov
0600abd6bd K2JVMCompiler: J2K 2015-06-23 16:24:46 +02:00
Dmitry Jemerov
d84c9fa59e K2JVMCompiler: rename to .kt 2015-06-23 16:24:45 +02:00
Sergey Mashkov
ab5d8d12ea IDL2K declarations order stability 2015-06-23 17:21:13 +03:00
Denis Zharkov
8412984774 Delete IdeaJdkAnnotationsReflectedTest
Kotlin JDK annotations are empty now
2015-06-23 16:44:47 +03:00
Denis Zharkov
602a1c11ac Fix testData: parameter names are dropped from annotations 2015-06-23 16:44:47 +03:00
Denis Zharkov
35fa4eadd8 Attach ideaSDK/jdkAnnotations.jar to external annotations for intention tests
As they're always attached to real SDKs in real projects
2015-06-23 16:44:47 +03:00
Denis Zharkov
ad99b079b9 Update intention tests: don't use java.util.Collections.*
Because their behaviour depends on annotations that we are going to drop
2015-06-23 16:44:46 +03:00
Denis Zharkov
d18c1ca32e Update J2K behavior with empty jdk annotations 2015-06-23 16:44:46 +03:00
Denis Zharkov
80a7f79f12 Make jars with JDK/Android SDK annotations empty
- Compiler use them only for getting parameter names and we are OK to drop it
- IDE plugin can use jdkAnnotations from ideaSDK
2015-06-23 16:44:27 +03:00
Nikolay Krasko
8013cbe4ef Fix forEach method in TrackingSlicedMap 2015-06-23 16:00:40 +03:00
Nikolay Krasko
237987fcc5 Workaround for non-thread-safe intentions text state 2015-06-23 16:00:38 +03:00
Nikolay Krasko
87f325c44b Use common Kotlin test supertype to avoid invalid root access assert 2015-06-23 16:00:21 +03:00
Nikolay Krasko
ef7cc6ae10 Force openning project 2015-06-23 15:59:40 +03:00
Nikolay Krasko
3d8f04e4fe Update test data: Idea can't parse description with "ctrl+ alt + b" promotion 2015-06-23 15:59:38 +03:00
Evgeny Gerashchenko
2820dbf181 Removed workaround for exception in IDEA. 2015-06-23 15:59:36 +03:00
Nikolay Krasko
66a4e0f299 Mute error about org.iq80.snappy.Snappy 2015-06-23 15:59:34 +03:00
Nikolay Krasko
549987b27f Ignore actions with empty message 2015-06-23 15:59:33 +03:00
Nikolay Krasko
94db320f7a Update hack for restore validity of builtins files 2015-06-23 15:59:31 +03:00
Nikolay Krasko
53ab02e877 Generate private constructors for enums in coverter 2015-06-23 15:59:29 +03:00
Nikolay Krasko
b64aff9f9a Add actions with "Supress " prefix to irrelevant group 2015-06-23 15:59:27 +03:00
Nikolay Krasko
737ad5b9e0 Search in index under read action in tests 2015-06-23 15:59:25 +03:00
nik
3136e5eefd removed registration of deprecated extensions points without implementations 2015-06-23 15:59:24 +03:00
Natalia Ukhorskaya
c2a1dc4c90 Fix compilation errors 2015-06-23 15:59:22 +03:00
Natalia Ukhorskaya
aaa4e747db Fix tests: type for string isn't now rendered by default 2015-06-23 15:59:19 +03:00
Natalia Ukhorskaya
ba6b378378 Fix tests: register JavaClassSupers service in WebDemoTest 2015-06-23 15:59:17 +03:00
Nikolay Krasko
757b963731 Register JavaClassSupers service 2015-06-23 15:59:14 +03:00
Alexey Sedunov
73b2de95ab Create from Usage: Do not delete temporary file as this operation is not supported by IDEA anymore 2015-06-23 15:59:12 +03:00
Nikolay Krasko
8e51f1aadd Idea moved to junit-4.12 2015-06-23 15:59:10 +03:00
Nikolay Krasko
2ebdd32267 Make compatible with 142 idea branch 2015-06-23 15:59:08 +03:00
Nikolay Krasko
2536648e60 Update to Idea 15 eap (142.2491.1) 2015-06-23 15:59:06 +03:00
Pavel V. Talanov
16ffdc0713 ModuleResolverProvider: ResolveSessionForBodies are created lazily 2015-06-23 15:19:40 +03:00
Pavel V. Talanov
f454b7d15e AnalyzerFacade: resolvers for modules are created lazily 2015-06-23 15:19:31 +03:00
Pavel V. Talanov
96199ecc1f Refactor AnalyzerFacade: move module.initialize() outside of createResolverForModule() 2015-06-23 15:19:22 +03:00
Pavel V. Talanov
997a6f1381 Fix import resolution for some cases of malformed imports ("import some.")
Fix parsing import directives in case of non-identifier after "import"
Add diagnostics test for malformed imports
2015-06-23 15:19:14 +03:00
Pavel V. Talanov
37bcd455b5 Make ModuleDescriptor#getPackage() return not null lazy object with lazy scope
Refactor: no need to create package view in order to obtain its subpackages
LazyPackageViewDescriptorImpl to replace PackageViewDescriptorImpl
This allows to avoid computations when package views are requested but their contents not necessarily queried
For example: DescriptorResolver.resolvePackageHeader()
2015-06-23 15:19:06 +03:00
Pavel V. Talanov
1cf38e4799 Convert PackageViewDescriptor to Kotlin 2015-06-23 15:18:57 +03:00
Pavel V. Talanov
19cca8f930 Fix corner case in KotlinCopyPasteReferenceProcessor 2015-06-23 15:18:28 +03:00
Dmitry Jemerov
308b9ffc39 add missing UI for specifying alternative JRE path to Kotlin run configuration 2015-06-23 14:11:36 +02:00
Pavel V. Talanov
1ef125fa2c Change testa data according to semantics change 2015-06-23 14:35:46 +03:00
Pavel V. Talanov
6bdb35ff23 Fix project code
This would no longer compile with the new imports resolution
2015-06-23 14:15:27 +03:00
Pavel V. Talanov
c5e6dea8b0 Minor: Inline and remove JetModuleUtil 2015-06-23 14:15:17 +03:00
Pavel V. Talanov
ade898775c Minor: remove unused parameter 2015-06-23 14:14:35 +03:00
Pavel V. Talanov
257b8f31e7 Change import resolution algorithm
The new algorithm: move from right to left, trying to find package, (new code) when found go right resolving descriptors (uses old code)
This allows to avoid unnecessary computations (matters in IDE moslty) for resolving root packages
This changes semantics of imports resolution: when package clashes with any declaration package is preffered
2015-06-23 14:14:25 +03:00
Natalia Ukhorskaya
7b0458f1a9 Debugger: Navigate to first line when source file for mapping (inline) not found 2015-06-23 10:58:45 +03:00
Valentin Kipyatkov
3c16e455f7 Removed unused field 2015-06-22 17:28:44 +03:00
Karol Depka
033f2668d5 KT-7615 workaround for crash on Android ART caused by "private constructor" in DescriptorBasedProperty #KT-7615 Fixed
Tested on Android 5.1.0 API 22 in Genymotion
2015-06-22 15:57:04 +03:00
Sergey Mashkov
0e518e46bb JS and IDL2K: make dictionary builder functions public 2015-06-22 12:57:23 +03:00
Natalia Ukhorskaya
3caeddd8dc Minor: log error if we couldn't insert an expression during debug 2015-06-22 10:40:15 +03:00
Natalia Ukhorskaya
0ea65491aa Disable all jdi request during evaluation 2015-06-22 10:40:13 +03:00
Natalia Ukhorskaya
8bb33f0df5 Support labels evaluation in debugger 2015-06-22 10:40:12 +03:00
Natalia Ukhorskaya
0f108eee2f Extract function for debugger: add block code fragment as list of statement, not as block expression 2015-06-22 10:40:11 +03:00
Natalia Ukhorskaya
9a09a25df5 Refactoring: extract class for parameter in debugger 2015-06-22 10:40:09 +03:00
Ilya Gorbunov
346ea28337 lazyOf to create already initialized lazy value. 2015-06-19 23:08:17 +03:00
Ilya Gorbunov
b71fe4cd25 Lazy: Rename valueCreated property to isInitialized() function.
Notes about behavior of Lazy when initializer throws an exception.
2015-06-19 23:08:15 +03:00
Ilya Gorbunov
ecd131a7a1 Lazy made serializable. 2015-06-19 23:08:14 +03:00
Ilya Gorbunov
bfdb200cc7 Lazy: Use UNINITIALIZED_VALUE instead of null to indicate that value was not initialized. Remove escape and unescape methods. 2015-06-19 23:08:12 +03:00
Ilya Gorbunov
59ff9dc3cf Document lazy interface and methods. 2015-06-19 23:08:11 +03:00
Ilya Gorbunov
536e669023 Provide Lazy<T> in kotlin package — an interface that represents lazily computed value. Read-only properties can be delegated to lazy with the extension getter. Delegates.lazy and blockingLazy are deprecated. 2015-06-19 23:08:09 +03:00
Ilya Gorbunov
f2788d53c0 Refactor: rename PropertyMetadata parameter from 'desc' to 'property'.
Correct test data after parameter has been renamed.
2015-06-19 23:08:08 +03:00
Ilya Gorbunov
6b747cf6f8 Move delegate property interfaces to a separate file. 2015-06-19 23:00:03 +03:00
Ilya Gorbunov
fb6c7e20de Use identity equals in lazy unescape.
#KT-7474 Fixed
2015-06-19 23:00:01 +03:00
Alexey Sedunov
3266d8c29a Parser: Disable joining complex tokens while parsing type references
#KT-8141 Fixed
2015-06-19 21:45:13 +03:00
Alexey Sedunov
0e9bcee0bc Move: Specify file name in command description 2015-06-19 21:45:12 +03:00
Alexey Sedunov
6376420970 Move: UI Fixed 2015-06-19 21:45:11 +03:00
Alexey Sedunov
96a50f46c2 Move: Fix dialog mnemonics 2015-06-19 21:45:10 +03:00
Alexey Sedunov
dd3ba8675d Move: Fix handler selection when moving Java class with Kotlin file/class 2015-06-19 21:45:09 +03:00
Alexey Sedunov
cd550ed5ba Move: Suggest empty package when moving to source root 2015-06-19 21:45:08 +03:00
Alexey Sedunov
aef2443528 Move: Add "Update package directive" option to dialog
#KT-6084 Fixed
2015-06-19 21:45:07 +03:00
Alexey Sedunov
111a4a5cbc Move: Disable "File name" field when switching to "Move to file" mode 2015-06-19 21:45:06 +03:00
Alexey Sedunov
77f2c5d5b9 Move: Fix file rename on undo/redo 2015-06-19 21:45:05 +03:00
Ilya Gorbunov
a80f65cfd9 Do not create empty list when reversing empty collection or array — use singleton empty list instead.
#KT-8099 Fixed
2015-06-19 19:41:10 +03:00
Michael Nedzelsky
8a3182d1e7 Update source roots for idea libraries 2015-06-19 15:51:53 +03:00
Nikolay Krasko
d1e7e184b6 Do psi-only checks to avoid unnessasary resolve in creating recursion markers 2015-06-19 14:15:17 +03:00
Mikhail Glukhikh
065db07e1c More accurate check on an enum entry deprecated super constructor #EA-69735 Fixed 2015-06-19 13:50:49 +03:00
Yan Zhulanow
d0897193e8 kapt: Use actual classpath in the second Kotlin task as well 2015-06-19 02:29:13 +03:00
Yan Zhulanow
5f85a028ae kapt: Fix ConcurrentModificationException in Gradle 2015-06-19 02:29:13 +03:00
Yan Zhulanow
d9ac8c9d22 kapt: Pass annotation declarations options via Java APT options 2015-06-19 02:29:12 +03:00
Yan Zhulanow
205585c63e kapt: Support lazy evaluation of additional kapt arguments in test 2015-06-19 02:26:21 +03:00
Yan Zhulanow
8a10de3a26 Add Gradle test for additional kapt arguments 2015-06-19 02:26:20 +03:00
Yan Zhulanow
7f2bd5b9d4 Add basic kapt tests 2015-06-19 02:26:19 +03:00
Yan Zhulanow
fee1726dfb Write annotations with RetensionPolicy(SOURCE) to light classes 2015-06-19 02:25:41 +03:00
Yan Zhulanow
17e6b8f014 kapt: Lazy evaluation of additional arguments 2015-06-19 02:25:40 +03:00
Yan Zhulanow
f158b5b0c4 Support additional compiler arguments 2015-06-19 02:25:40 +03:00
Yan Zhulanow
3ea4306eb9 kapt: Generate stub source file just after Kotlin compile 2015-06-19 02:25:40 +03:00
Yan Zhulanow
37d52501c8 Add simple annotation processor for tests 2015-06-19 02:25:39 +03:00
Michael Nedzelsky
eda7f49b61 fix KT-7879 KotlinJS - Cannot browse jslib sources
#KT-7879 Fixed
2015-06-18 19:47:56 +03:00
Alexey Sedunov
17ca0d2c2c Minor: Extract Preview class 2015-06-18 19:28:08 +03:00
Alexey Sedunov
7ac02d751a Minor: Use MultiMap 2015-06-18 19:28:07 +03:00
Alexey Sedunov
378c1744cb Introduce Parameter: Suggest removing extension receiver which becomes unused after new parameter is added 2015-06-18 19:28:06 +03:00
Alexey Sedunov
5409b19abc Change Signature: Do not replace implicit receivers in calls with at least one explicit receiver
#KT-7988 Fixed
2015-06-18 19:28:05 +03:00
Alexey Sedunov
d58112a32a Extract Function: Use intersection type to compute candidate types for parameters
#KT-8103 Fixed
2015-06-18 19:28:04 +03:00
Alexey Sedunov
1a9003c325 Copy: Fix Kotlin file copying. Drop useless JetCopyClassHandler
#KT-7515 Fixed
2015-06-18 19:28:03 +03:00
Alexey Sedunov
683a8895df Introduce Variable: Do not insert unused variable references
#KT-7227 Fixed
2015-06-18 19:28:02 +03:00
Alexey Sedunov
1506531e59 Rename: Fix class rename by constructor reference 2015-06-18 19:28:01 +03:00
dnpetrov
36ae8790a1 KT-8011 Compiler crashes on attempt to create local class inside lambda
- use StackValue from upper-level context if local lookup fails

 #KT-8011 Fixed
2015-06-18 17:40:24 +03:00
Michael Nedzelsky
dba29fff0d fix KT-7932 plugin generates absolute path to kotlin-jslib.jar for JS module (in .iml files)
#KT-7932 Fixed
2015-06-18 16:54:35 +03:00
Michael Nedzelsky
3b43f68c1e minor: refactoring KotlinJavaScriptLibraryManager 2015-06-18 16:54:32 +03:00
Nikolay Krasko
818bfce1f1 Minor: add method for printing thread name 2015-06-18 16:45:23 +03:00
Nikolay Krasko
6d7cc8bc02 Minor: Don't print end message if profiler was muted 2015-06-18 16:45:22 +03:00
Nikolay Krasko
0f032100fc Update source roots for idea libraries 2015-06-18 16:45:21 +03:00
Ilya Gorbunov
4093147c69 Regenerate docs for intersect and subtract. (PR#703) 2015-06-18 15:13:48 +03:00
Alex Roussos
00c2b684fd Fix documentation for Sets intersect() and subtract()
Adds correct documentation for the Sets intersect() and subtract() methods, which had been copied from union().
2015-06-18 15:10:44 +03:00
dnpetrov
046189087a KT-5963 Call to super shouldn't require type specification if there is no conflict
Implemented unqualified 'super' type resolution (in BasicExpressionTypingVisitor).

No overload resolution of any kind is involved.
Corresponding supertype is determined by the expected member name only:
- 'super.foo(...)' - function or property (of possibly callable type) 'foo'
- 'super.x' - property 'x'
Supertype should provide a non-abstract implementation of such member.
As a fall-back solution for diagnostics purposes, consider supertypes with abstract implementation of such member.

Diagnostics:
- AMBIGUOUS_SUPER on 'super', if multiple possible supertypes are available;
- ABSTRACT_SUPER_CALL on selector expression, if the only available implementation is abstract.

#KT-5963 Fixed
2015-06-18 14:16:34 +03:00
Ilya Gorbunov
46baffc233 Temporary Add jvmOverloads to String.indexOf 2015-06-17 23:15:33 +03:00
Sergey Mashkov
bff88b9fe1 Fix gradle test 2015-06-17 20:41:00 +03:00
Dmitry Jemerov
e852b2d748 fix tests, sorry 2015-06-17 18:18:24 +02:00
Alexander Udalov
1a3209e1dc Drop traits with required classes
#KT-4771 Rejected
2015-06-17 16:23:58 +03:00
Alexander Udalov
dc909ba1d4 Minor, fix ExtensionReceiver#toString 2015-06-17 16:23:57 +03:00
Alexander Udalov
8207e08c61 Convert TraitImplBodyCodegen to Kotlin 2015-06-17 16:23:57 +03:00
Alexander Udalov
98ce0d529c Fix incorrect 'original' in property accessors
#KT-3930 Fixed
2015-06-17 16:23:56 +03:00
Alexander Udalov
7c846388bd Remove some unreachable/duplicated code in StackValue 2015-06-17 16:23:56 +03:00
Alexander Udalov
4dcc373a5a Fix concrete method inheritance in interfaces
For each non-abstract non-declared (i.e. inherited from supertypes) method in
an interface we generate its static form to the TImpl, which calls the TImpl
method from the corresponding supertype.

The accidental override tests changed because we're now trying to generate the
delegate for the super method, not knowing that it will clash with the declared
method

 #KT-2888 Fixed
 #KT-5393 Fixed
2015-06-17 16:23:56 +03:00
Alexander Udalov
f81c364999 Add test cases for obsolete issues
#KT-3407 Obsolete
 #KT-4753 Obsolete
2015-06-17 16:23:55 +03:00
Dmitry Jemerov
5eb4a47a1a command line flag to repeat compilation multiple times 2015-06-17 14:55:12 +02:00
Dmitry Jemerov
ab33e4935e restore perf output in command line; always remove it from output in tests 2015-06-17 14:53:09 +02:00
Sergey Mashkov
342f35fb65 IDL2K better dictionary support: generate interfaces with builder function
suppress inline warning, replace Long with Int
2015-06-17 15:26:06 +03:00
Sergey Mashkov
8238883ac4 IDL2K better dictionary support: generate interfaces with builder function 2015-06-17 15:26:06 +03:00
Sergey Mashkov
c4d53e1e16 IDL2K introduce required parameters list to avoid possible ambiguous calls 2015-06-17 15:26:06 +03:00
Sergey Mashkov
20a67c41ee IDL2K introduce commented declarations list 2015-06-17 15:26:05 +03:00
Sergey Mashkov
2cc708c5a9 IDL2K restrict readonly attributes to vals 2015-06-17 15:26:05 +03:00
Sergey Mashkov
c0c0f6152a IDL2K avoid unnecessary super() calls in secondary constructors 2015-06-17 15:26:05 +03:00
Sergey Mashkov
28f228ccc0 IDL2K better results stability 2015-06-17 15:26:04 +03:00
Sergey Mashkov
1a5e6634e2 JS generate new stubs with latest IDL2K 2015-06-17 15:26:04 +03:00
Sergey Mashkov
68183a74fa IDL2K rework types
Fixes #KT-8015
2015-06-17 15:26:04 +03:00
Sergey Mashkov
387291cbf7 IDL2K support static members 2015-06-17 15:26:03 +03:00
Sergey Mashkov
5000fe8133 IDL2K Multiple constructors (via secondary constructors when needed) 2015-06-17 15:26:03 +03:00
dnpetrov
a2b2eba1a1 Extended version of AbstractWriteSignatureTest:
- support multiple expectations in file
- support field signature expectations
- report failures in a more usable format
2015-06-17 13:45:08 +03:00
Evgeny Gerashchenko
b068a1dd5f Added test for implicit receiver in class. 2015-06-17 13:14:07 +03:00
Evgeny Gerashchenko
154b0d8351 KT-7899 "Do not check if annotated by" setting for "Unused symbol" doesn't affect properties
#KT-7899 fixed
2015-06-17 13:14:06 +03:00
Evgeny Gerashchenko
cc70ea2586 KT-7883 Receiver parameter falsely marked as unused
#KT-7883 fixed
2015-06-17 13:14:06 +03:00
Evgeny Gerashchenko
7511b5bafe If KotlinBuilder throws exception, user can see its stacktrace and report by one-click. 2015-06-17 13:14:06 +03:00
Evgeny Gerashchenko
88f2a4be52 KT-7651 IllegalArgumentException on attempt to rename class when it has anonymous subclasses
#KT-7651 fixed
 #EA-69049 fixed
2015-06-17 13:14:06 +03:00
Evgeny Gerashchenko
985b8c0ba6 KT-8042 ISE at KotlinHighlightExitPointsHandlerFactory.createHighlightUsagesHandler() on typing a function name starting with throw
#KT-8042 fixed
 #EA-68157 fixed
2015-06-17 13:14:05 +03:00
Evgeny Gerashchenko
0dd151142d KT-3639 Can't find sources of AbstractIterator when navigating from stack strace
#KT-3639 fixed
2015-06-17 13:14:05 +03:00
Evgeny Gerashchenko
811fed547b Convert to Kotlin, cleanup. 2015-06-17 13:14:05 +03:00
Evgeny Gerashchenko
cea0ffa3b7 Convert to Kotlin, auto-convert. 2015-06-17 13:14:05 +03:00
Evgeny Gerashchenko
254c58f9e4 Convert to Kotlin, rename. 2015-06-17 13:14:05 +03:00
Mikhail Glukhikh
707307b19c Fix for a cyclic generic upper bound for a class type parameter. A pair of tests. 2015-06-17 11:56:28 +03:00
Nikolay Krasko
df2c7eb9b2 Update to Idea 141.1531.2 2015-06-17 11:52:02 +03:00
Nikolay Krasko
4f763c1a43 Fixes after review 2015-06-17 11:41:17 +03:00
Nikolay Krasko
8118297f89 Remove descriptions to highlight only new targets in and view 2015-06-17 11:41:16 +03:00
Nikolay Krasko
0178cbdfb0 Deprecate all old targets and introduce new with maven artifacts 2015-06-17 11:41:15 +03:00
Nikolay Krasko
9143113a50 Download prebuilt idea maven artifacts 2015-06-17 11:41:15 +03:00
Nikolay Krasko
265708bacf Separate downloading and configuring ideaSDK 2015-06-17 11:41:14 +03:00
Nikolay Krasko
fb4ef41b09 Introduce parameter for ideaSDK folder 2015-06-17 11:41:12 +03:00
Zalim Bashorov
289efb8984 JS backend: don't fail when invoke call got extension receiver implicitly
#EA-67456 Fixed
2015-06-17 11:17:08 +03:00
Zalim Bashorov
fe7ee3fb66 JS backend tests: replace run with myRun in closure tests 2015-06-17 11:17:08 +03:00
Zalim Bashorov
d63dbf9a3e Minor in JS backend: don't fail when name is null
#EA-66032 Obsolete
2015-06-17 11:17:08 +03:00
Zalim Bashorov
65adc3ac02 JS backend: don't use octal numbers when render non-latin symbols, because of it prohibited in strict mode
#KT-7921 Fixed
2015-06-17 11:17:08 +03:00
Nikolay Krasko
69ae976be3 Revert idea to 141.1531.1 2015-06-17 03:26:05 +03:00
Nikolay Krasko
d9bcb8b18c Update to idea 141.1531.2 2015-06-16 23:52:10 +03:00
Michael Nedzelsky
30e1123af6 remove KotlinJavaScriptLibraryPresentationProvider
#KT-8056 Fixed
#KT-8058 Fixed
2015-06-16 21:19:40 +03:00
Alexey Sedunov
62f9672461 Rename: Fix field identifier replacement #KT-8018 Fixed 2015-06-16 21:15:40 +03:00
Alexey Sedunov
98dce65337 Introduce Variable: Fix NPE for the case of statement-like expression
#KT-8054 Fixed
2015-06-16 21:15:39 +03:00
Alexey Sedunov
dda271d38d Delete/Move: Delete entire file when deleting top-level class or object and no other top-level declarations are present. Ask the user confirmation if deletion if caused by the Move refactoring
#KT-8033 Fixed
2015-06-16 21:15:38 +03:00
Alexey Sedunov
e1e818858e Change Signature: Fix primary constructor processing 2015-06-16 21:15:37 +03:00
Alexey Sedunov
64bbbac9dc Change Signature: Replace entire JetThisExpression when converting receiver to parameter #KT-7970 Fixed 2015-06-16 21:15:36 +03:00
Alexey Sedunov
e481ed756d Change Signature: Fix transfer of argument to receiver position
#KT-7987 Fixed
2015-06-16 21:15:35 +03:00
Alexey Sedunov
9bfa437c96 Introduce Parameter: Do not highlight removable parameters if default value is enabled 2015-06-16 21:15:34 +03:00
Alexey Sedunov
90032fe7d7 Introduce Lambda Parameter: Merge actions to allow for atomic undo/redo 2015-06-16 21:15:33 +03:00
Alexey Sedunov
09565c78c5 Introduce parameter: Do not substitute references which don't resolve to parameters or receivers of the target function #KT-7965 Fixed 2015-06-16 21:15:32 +03:00
Alexey Sedunov
efb36f4a49 Find Usages: Use isEquivalenTo for PsiCompiledElement only when matching reference targets #KT-7983 Fixed 2015-06-16 21:15:31 +03:00
Alexey Sedunov
d1d4736fdd Create from Usage: Do not navigate to original file if template editing is cancelled
#KT-8037 Fixed
2015-06-16 21:15:30 +03:00
Alexey Sedunov
f08c7d0fd8 Call Resolver: Fix nullability of parenthesized safe calls used as value arguments
#KT-7903 Fixed
2015-06-16 21:15:29 +03:00
Alexey Sedunov
d2c33c13a6 Change Signature/Rename: Fix renaming of extension function parameter 2015-06-16 21:15:27 +03:00
Dmitry Jemerov
a0aba04338 rebase ate my changes 2015-06-16 18:11:19 +02:00
Dmitry Jemerov
ed7cc67f19 thread-safe usage of performance counters list
#KT-8046 Fixed
2015-06-16 16:45:51 +02:00
dnpetrov
c369949d90 KT-6136 VerifyError on data class inheriting from trait
- coerce property values to proper data class component types
- add tests
 #KT-6136 Fixed
2015-06-16 09:58:03 +03:00
Zalim Bashorov
a906b0336f Add badges to ReadMe.md 2015-06-15 20:32:35 +03:00
Sergey Mashkov
4949624a2a Revert IDL2K Multiple constructors (via secondary constructors when needed) 2015-06-15 20:17:23 +03:00
Sergey Mashkov
6d9413f02e IDL2K Multiple constructors (via secondary constructors when needed) 2015-06-15 20:15:36 +03:00
Valentin Kipyatkov
7ee661d334 Minor 2015-06-15 18:32:45 +03:00
Valentin Kipyatkov
bf014fc1c5 KT-5419 J2K: convert string concatenation to string template + implemented corresponding inspection
#KT-5419 Fixed
2015-06-15 18:32:45 +03:00
Valentin Kipyatkov
ab97d76fed Minor code improvements in ConvertToStringTemplateIntention 2015-06-15 18:32:44 +03:00
Valentin Kipyatkov
c8f9b466b6 More correct comparison with CANT_INFER_FUNCTION_PARAM_TYPE 2015-06-15 18:32:44 +03:00
Valentin Kipyatkov
efdfa4b247 Minor changes after review 2015-06-15 18:27:25 +03:00
Valentin Kipyatkov
1dbd342938 Minor 2015-06-15 18:27:25 +03:00
Valentin Kipyatkov
95baf9b884 Minor 2015-06-15 18:27:25 +03:00
Valentin Kipyatkov
2248abd93a Inlined method 2015-06-15 18:27:24 +03:00
Valentin Kipyatkov
b20179af9f WritableScope: got rid of mutability of implicit receiver 2015-06-15 18:27:24 +03:00
Valentin Kipyatkov
32bfd53101 Renames 2015-06-15 18:27:24 +03:00
Valentin Kipyatkov
9139a8f060 WritableScope: removed addLabeledDeclarations 2015-06-15 18:27:24 +03:00
Valentin Kipyatkov
73a534963c Fixed detection of conflicts in local scope (but I'm not sure it's correct anyway) 2015-06-15 18:27:24 +03:00
Valentin Kipyatkov
45872b8126 Fix in change signature engine required after RESOLUTION_SCOPE became correct 2015-06-15 18:27:24 +03:00
Valentin Kipyatkov
89c2aca3a8 Memory optimization 2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
b301b22f47 KT-4822 Wrong scope is used for local variable name completion
#KT-4822 Fixed
2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
14ddc9d972 Memory optimization 2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
f38267e21d One more simplification 2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
99001f0fe2 More correct and simple 2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
2ab86192c3 One more simplification 2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
060aeb60e1 Minor optimization 2015-06-15 18:27:23 +03:00
Valentin Kipyatkov
db0f212b3e More code simplifications 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
472841de16 Inlined method 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
f88d603f5c Removed unused code in WritableScopeImpl 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
b3d74c380a Shadowed declarations filtering: more correct selection of imported declarations 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
985d69880f Better tests 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
7b553ef3a7 Shadowed globals filtered out too 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
abc9c1ab02 Non-imported extensions from different packages do not shadow each other 2015-06-15 18:27:22 +03:00
Valentin Kipyatkov
8d11ab9866 Non-imported extensions are excluded when shadowed by members or something 2015-06-15 18:27:21 +03:00
Valentin Kipyatkov
f089d1ef55 Code refactoring 2015-06-15 18:27:21 +03:00
Valentin Kipyatkov
3d0c3e225e Added test for second press completion for inaccessible 2015-06-15 18:27:21 +03:00
Valentin Kipyatkov
483da9607c KT-4893 Code completion should not show multiple functions with the same signature
#KT-4893 Fixed
2015-06-15 18:27:21 +03:00
Sergey Mashkov
4c0e7e32e7 KT-8080 RemoveExplicitTypeArgumentsIntention crashes with AssertionError 2015-06-15 17:38:24 +03:00
Valentin Kipyatkov
4deefce603 KT-7901 Auto import is not suggested
KT-7229 Completion for extension functions with complex capture

 #KT-7901 Fixed
 #KT-7229 Fixed
2015-06-15 17:10:05 +03:00
Michael Nedzelsky
0877c09b80 fix EA-69474 - IAE: KotlinAbiVersionIndex$INDEXER$.map 2015-06-15 16:20:29 +03:00
Alexander Udalov
3a6ba67602 Delete unused diagnostic about j.l.Class in annotations 2015-06-15 15:55:23 +03:00
Alexander Udalov
9637c049fe CLI: update KOTLIN_HOME lookup process in Bash script
The original code was taken from the 'scalac' script, where it has evolved
since and now is a lot easier to understand
2015-06-15 15:43:31 +03:00
Alexander Udalov
2f1316ec9c CLI: don't pass -D and -J options to Kotlin
Kotlin compiler's CLI argument parser currently fails on these options, so
there was no convenient way to use them
2015-06-15 15:42:43 +03:00
Alexander Udalov
cdd53de9a7 CLI: get rid of duplication in JVM/JS scripts 2015-06-15 15:42:42 +03:00
Alexander Udalov
5ec4576844 CLI: add color to compiler output via jansi
Disabled on Windows temporarily, because for some reason colors there work only
in REPL
2015-06-15 15:42:42 +03:00
Alexander Udalov
00566bcfb0 Move MessageRenderer to module 'cli'
It will use jline soon, which is not available in 'cli-common'
2015-06-15 15:42:42 +03:00
Alexander Udalov
54dfd626ab CLI: improve diagnostic message format
- render the whole line where the error/warning points to, if any, and another
  line with '^', like other compilers do
- lowercase diagnostic severity
- decapitalize the message if it doesn't start with a proper name
2015-06-15 15:42:41 +03:00
Alexander Udalov
46515afb22 CLI: don't render non-positive line and column in error messages 2015-06-15 15:42:41 +03:00
Alexander Udalov
6083a18ce1 Convert CompilerMessageLocation to Kotlin 2015-06-15 15:42:40 +03:00
Alexander Udalov
bca5eb083e Don't report warnings when there are errors
All sane compilers do this
2015-06-15 15:42:40 +03:00
Alexander Udalov
4cfbf5886b Get rid of unneeded MessageCollector implementations 2015-06-15 15:42:40 +03:00
Mikhail Glukhikh
e623aadf00 Exception fix: more accurate parsing of class base type #EA-65509 Fixed 2015-06-15 14:43:37 +03:00
Mikhail Glukhikh
d77c6eb30e Exception fix: diagnose an error for a generic type which is a subtype of itself, a set of tests #EA-64453 Fixed 2015-06-15 14:43:24 +03:00
Mikhail Glukhikh
46d5290f70 Exception fix (equal returns true for the same types) #EA-65206 Fixed 2015-06-15 14:43:17 +03:00
Denis Zharkov
bb49bfcea9 Colors & Fonts page: Get rid of obsolete syntax and add labels' highlighting
#KT-8059 Fixed
2015-06-15 14:07:42 +03:00
Pavel V. Talanov
846c0e2522 AnalyzerFacade: compute module dependencies lazily 2015-06-13 20:36:50 +03:00
Pavel V. Talanov
705f35450f Refactor setting dependencies for ModuleDescriptors 2015-06-13 20:36:47 +03:00
Pavel V. Talanov
1d696c2e54 Do not force evaluation of parent package in ResolveSession#createPackage 2015-06-13 20:36:44 +03:00
Pavel V. Talanov
b3b7da22d4 Module(Production/Test)SourceInfo#dependencies() is cached 2015-06-13 20:36:43 +03:00
Denis Zharkov
e3c3af6aab Change MISSING_CONSTRUCTOR_KEYWORD severity to error
And adjust testData
2015-06-12 11:23:13 +03:00
Denis Zharkov
eb7114bd53 Add 'constructor' keyword in whole project where needed 2015-06-12 09:55:15 +03:00
Denis Zharkov
414d6b92f6 Adjust testData: don't use java.lang.Class in annotations 2015-06-12 09:55:13 +03:00
Denis Zharkov
da254ab1a0 Drop support of java.lang.Class as annotation parameter
Also drop some related diagnostics and testData
2015-06-12 09:55:12 +03:00
Denis Zharkov
d71fe0d11a Drop JavaClassValue and it's usages
Also drop related testData
2015-06-12 09:55:10 +03:00
Denis Zharkov
980499e331 Drop javaClass in annotations related things from inspections/quickfixes 2015-06-12 09:55:09 +03:00
Denis Zharkov
9245cfaa7f Load Class-object from java annotated entity as KClass 2015-06-12 09:55:08 +03:00
Denis Zharkov
2e284718ce Revert "Create additional constructor for java annotation with Class-parameter"
This reverts commit 8f0e290dec.
2015-06-12 09:55:06 +03:00
Denis Zharkov
9080b57635 Revert "Load annotation parameter's type for ctr as contravariant"
This reverts commit 294eb1dceb.
2015-06-12 09:55:03 +03:00
Denis Zharkov
2df6fcb785 Drop some tests using java.lang.Class in annotation
We are going to drop such cases anyway, but they're annoying when reverting commits
2015-06-12 09:55:02 +03:00
Denis Zharkov
9d87638a11 Clarify grammar rules for annotations 2015-06-12 09:55:01 +03:00
Denis Zharkov
cf4b1ab7cd Drop obsolete annotations syntax 2015-06-12 09:55:00 +03:00
Denis Zharkov
26864a4407 Get rid of annotation syntax deprecation related things 2015-06-12 09:23:32 +03:00
Denis Zharkov
200dee2761 Replace deprecated annotations in whole project 2015-06-12 09:23:32 +03:00
Denis Zharkov
c9f79c2d05 Adjust testData: get rid of obsolete annotations 2015-06-12 09:23:31 +03:00
Denis Zharkov
053dcf3abf Effectively turn off completion tests with file keyword
Completion does not work with new syntax: see KT-8036
2015-06-12 09:23:31 +03:00
Denis Zharkov
cdba1c2dbe Parsing: allow accessors with '@' annotation on the same line 2015-06-12 09:23:31 +03:00
Michael Nedzelsky
ed262a2a2a fix KT-8032 Mixed platform library in JVM module causes JS warning about unsupported format
#KT-8032 Fixed
2015-06-12 02:09:53 +03:00
Valentin Kipyatkov
366a2be8a7 KT-7989 ReplaceWith replacement adds redundant type arguments for platform types
Highlighting of redundant type arguments made more strict about platform types

 #KT-7989 Fixed
2015-06-11 23:30:22 +03:00
Valentin Kipyatkov
2203fb3231 Renamed intention class 2015-06-11 23:30:22 +03:00
Michael Nedzelsky
744e760444 tests for KT-7618 Compiling Maven project targeting JS fails when no source file present 2015-06-11 22:21:25 +03:00
Michael Nedzelsky
dd60c7b79f K2JSCompiler: use INTERNAL_ERROR only for internal problems 2015-06-11 22:21:23 +03:00
Michael Nedzelsky
57356e29b8 kotlinc-js, kotlinc-jvm: report error on empty sources 2015-06-11 22:21:20 +03:00
Michael Nedzelsky
3ac1bdcdc8 kotlin-maven-plugin, ant:withKotlin: skip compilation for empty sources
#KT-7618 Fixed
2015-06-11 22:21:16 +03:00
Evgeny Gerashchenko
0ddfedba49 Allowed accessing private members from same package, but different package fragment instance. 2015-06-11 18:58:32 +03:00
Evgeny Gerashchenko
4461687ae3 Incremented cache format version: package part hashes changed. 2015-06-11 16:48:27 +03:00
Evgeny Gerashchenko
e6bb501c1a Enabled rebuilding when enabling/disabling incremental compilation in IDEA. 2015-06-11 16:48:27 +03:00
Yan Zhulanow
08fa9b639e Gradle: update annotation syntax 2015-06-11 15:19:51 +03:00
Yan Zhulanow
e3c6f32b50 Gradle: Subplugin loading process is unrelated to kapt 2015-06-11 15:19:51 +03:00
Yan Zhulanow
853cfdb70b kapt: Move class generation methods to core plugin 2015-06-11 15:19:50 +03:00
Yan Zhulanow
3cfdf21aa4 kapt: Create kotlinAfterJava task after project evaluation 2015-06-11 14:53:50 +03:00
Yan Zhulanow
7561b43336 kapt: Warn on using android-apt with kapt 2015-06-11 14:53:50 +03:00
Yan Zhulanow
39d7674886 kapt: Fix compatibility with android-apt 2015-06-11 14:53:49 +03:00
Yan Zhulanow
b9bfc659d5 Gradle: Remove logger argument in SubpluginEnvironment 2015-06-11 14:53:48 +03:00
Yan Zhulanow
c2073cb575 kapt: Add logging information 2015-06-11 14:53:48 +03:00
Yan Zhulanow
6ed5bbc2f8 kapt: Initial .class stub support in Gradle 2015-06-11 14:53:47 +03:00
Yan Zhulanow
78af866f5a kapt: Do not fail if annotations.txt file does not exist 2015-06-11 14:53:46 +03:00
Yan Zhulanow
a900a424d0 Gradle: Do not inline getOrNull() 2015-06-11 14:53:45 +03:00
Yan Zhulanow
f1b6bd5914 kapt: Stop compiler gracefully 2015-06-11 14:53:45 +03:00
Yan Zhulanow
fbb8d28120 kapt: Light class stub producer in compiler 2015-06-11 14:53:37 +03:00
Yan Zhulanow
571c9073fa Add AnalyzeCompletedHandlerExtension 2015-06-11 14:50:32 +03:00
Alexey Sedunov
e1e1dd9413 Diagnostics: Fix range of DECLARATION_SIGNATURE diagnostics reported on secondary constructors 2015-06-11 13:53:00 +03:00
Alexey Sedunov
95438c7b5d Light Classes: Fix ClassCastException for KotlinNoOriginLightField 2015-06-11 13:52:59 +03:00
Alexey Sedunov
bbc644f4c8 Refactoring: Unify getClassOrObject() and getContainingClassOrObject() functions in constructor PSI 2015-06-11 13:52:58 +03:00
Alexey Sedunov
1ab90c7814 J2K: Convert constructor PSI classes to Kotlin 2015-06-11 13:52:57 +03:00
Alexey Sedunov
7ed02dcd58 J2K: Rename constructor PSI classes to *.kt 2015-06-11 13:52:56 +03:00
Alexey Sedunov
bfabb40955 Find Usages: Skip KotlinNoOriginLightMethod to avoid NPE (to be be fixed later) 2015-06-11 13:52:55 +03:00
Alexey Sedunov
2a73247566 Find Usages: Rename test class and move test data 2015-06-11 13:52:54 +03:00
Alexey Sedunov
81440815e1 Light Classes: Retain original declarations for nested decompiled classes 2015-06-11 13:52:53 +03:00
Alexey Sedunov
ca8e2d4956 Navigation: Implement proper getOriginalElement() for Kotlin declarations.
Run find usages tests with library for both original and navigation elements. Drop duplicating tests. Simplify test class.
TODO: Some usages are not found yet since light methods built from library files do not retain original declarations
2015-06-11 13:52:52 +03:00
Alexey Sedunov
ba0000dde1 Navigation: Fix navigation to library sources for Kotlin constructors 2015-06-11 13:52:50 +03:00
Alexey Sedunov
e2d758463f Find Usages: Support primary constructors
#KT-7881 Fixed
2015-06-11 13:52:49 +03:00
Alexey Sedunov
1ea2c24562 Light Classes: Primary constructor fixes 2015-06-11 13:52:48 +03:00
Alexey Sedunov
608ce59f15 Resolution: Resolve primary constructor references to primary constructor
itself if it's explicitly present in PSI
2015-06-11 13:52:47 +03:00
Alexey Sedunov
b049455aa4 Presentation: Support constructors in JetFunctionPresenter 2015-06-11 13:52:46 +03:00
Alexey Sedunov
034af9e7f2 PSI: Extract JetConstructor class 2015-06-11 13:52:45 +03:00
Alexey Sedunov
64ae0c0036 Find Usages: Add file grouping to test data 2015-06-11 13:52:43 +03:00
Natalia Ukhorskaya
d4bf5faeec Fix validation of field breakpoints for package classes with several files 2015-06-11 12:15:09 +03:00
Natalia Ukhorskaya
da263ce090 Show all kotlin properties in 'Add field watchpoint' dialog 2015-06-11 12:15:07 +03:00
Natalia Ukhorskaya
cc5045a333 Fix warnings 2015-06-11 12:15:05 +03:00
Natalia Ukhorskaya
e99bd89139 Copy AddFieldBreakpointDialog from IDEA 2015-06-11 12:15:01 +03:00
Natalia Ukhorskaya
19fe6c58fa FieldWatchpoints: reload breakpoint type if property changed 2015-06-11 12:14:59 +03:00
Natalia Ukhorskaya
0a1bfcec04 Remove delegate to JavaFiledBreakpoint 2015-06-11 12:14:57 +03:00
Natalia Ukhorskaya
b1f9341ab4 Rewrite filters panel 2015-06-11 12:14:55 +03:00
Natalia Ukhorskaya
14f90f15e5 Field WatchPoints: add ability to stop at initializer 2015-06-11 12:14:53 +03:00
Natalia Ukhorskaya
d7375e0dc4 Create custom panel for field watchpoints 2015-06-11 12:10:19 +03:00
Natalia Ukhorskaya
d198a9fa7f Minor: move class to separate file 2015-06-11 12:10:19 +03:00
Natalia Ukhorskaya
9f041b9555 Field watchpoints: render message in status bar properly 2015-06-11 12:10:18 +03:00
Natalia Ukhorskaya
32d0057a7f Support filed breakpoints on properties without backing fields 2015-06-11 12:10:17 +03:00
Natalia Ukhorskaya
1c135e7ac7 Minor: rename test 2015-06-11 12:10:16 +03:00
Natalia Ukhorskaya
1ed9ea44a9 Line numbers for traits 2015-06-11 12:10:16 +03:00
Natalia Ukhorskaya
04db433ab5 Minor: Evaluate expression tests, support resume instruction 2015-06-11 12:10:15 +03:00
Zalim Bashorov
07bb0ce481 Minor: remove files temporary copied from IDEA 2015-06-10 21:39:21 +03:00
Mikhail Glukhikh
f03a35d7ce Resolve refactoring: resolvePropertyDeclarationBodies 2015-06-10 18:38:32 +03:00
Mikhail Glukhikh
40513bda56 Annotation resolve refactoring: AnnotationResolver.resolveAnnotationArguments --> ForceResolveUtil.forceResolveAllContents 2015-06-10 18:38:30 +03:00
Mikhail Glukhikh
f9fe8cd341 Fixed annotation resolve for loop parameter or catched exceptions type 2015-06-10 18:38:27 +03:00
Mikhail Glukhikh
731e5d85a4 Annotation arguments resolve refactoring via ForceResolveUtil. Deptecated...Intention fixed accordingly 2015-06-10 18:38:25 +03:00
Alexander Udalov
64b60718e3 Finish off old deprecated function/extension function classes
This reverts commit d14e5b8a72.
2015-06-10 14:41:57 +03:00
Alexander Udalov
5394abc83e Don't use reflection in JetType.getCapability 2015-06-10 14:41:56 +03:00
Alexander Udalov
d4c18b3d55 Drop PsiBasedMethodSignatureChecker 2015-06-10 14:41:56 +03:00
Michael Nedzelsky
12d7187394 Minor: extract common logic from KotlinClassFileIndex, KotlinJavaScriptMetaFileIndex 2015-06-10 12:48:11 +03:00
Valentin Kipyatkov
76e501c7ea Experimental framework for inline constants 2015-06-10 11:35:00 +03:00
Valentin Kipyatkov
657abffea2 Minor code improvement 2015-06-10 11:34:59 +03:00
Valentin Kipyatkov
ef550e1f21 Reduced number of constant renderers in DescriptorRenderer 2015-06-10 11:34:59 +03:00
Valentin Kipyatkov
4263c47f4d DescriptorRenderer: moved enums out 2015-06-10 11:34:59 +03:00
Valentin Kipyatkov
fcf613cf03 Replacing usages of DescriptorRenderer.renderName/renderFqName 2015-06-10 11:34:59 +03:00
Valentin Kipyatkov
acdf6b2821 Minor 2015-06-10 11:34:59 +03:00
Valentin Kipyatkov
c661e2fbe2 DescriptorRenderer uses FqName.render(), not the opposite 2015-06-10 11:34:59 +03:00
Valentin Kipyatkov
2d5611d916 DescriptorRenderer uses Name.render(), not the opposite 2015-06-10 11:34:58 +03:00
Valentin Kipyatkov
0766e685b1 Minor code improvements 2015-06-10 11:34:58 +03:00
Valentin Kipyatkov
55b898167b DescriptorRendererImpl made internal + minor improvements 2015-06-10 11:34:58 +03:00
Valentin Kipyatkov
2601e0ccd4 Fixed non-equivalent conversion from Java 2015-06-10 11:34:58 +03:00
Valentin Kipyatkov
a1ff2f20ed Got rid of DescriptorRendererBuilder providing new scheme for creating DescriptorRenderer's 2015-06-10 11:34:58 +03:00
Valentin Kipyatkov
ce2ce44d7b Converted DescriptorRenderer, DescriptorRendererImpl and DescriptorRedererBuilder to Kotlin 2015-06-10 11:34:58 +03:00
Michael Nedzelsky
855715cc5c extract common logic to KotlinAbiVersionIndexBase 2015-06-10 05:38:18 +03:00
Michael Nedzelsky
dac10944e0 JS: add notification for incompatible abi version for Kotlin/JavaScript libraries 2015-06-10 05:38:15 +03:00
Michael Nedzelsky
1dd101f362 add KotlinJavaScriptAbiVersionIndex 2015-06-10 05:38:12 +03:00
Michael Nedzelsky
2e8c9fe362 KotlinAbiVersionIndex: refactoring after converting 2015-06-10 05:38:08 +03:00
Michael Nedzelsky
a396222652 convert to kotlin: KotlinAbiVersionIndex.kt 2015-06-10 05:38:05 +03:00
Michael Nedzelsky
cec792c3d3 rename KotlinAbiVersionIndex.java -> KotlinAbiVersionIndex.kt 2015-06-10 05:38:02 +03:00
Michael Nedzelsky
999c83240c JS: error message (not exception) for incompatible abi version during compilation 2015-06-10 05:37:57 +03:00
Dmitry Jemerov
34577a7e12 add test for ReferencesSearch; use standard isReferenceTo() API (which is the same thing for Kotlin but more efficient for non-Kotlin references) 2015-06-09 20:45:11 +02:00
Dmitry Jemerov
7d02b522db KotlinReferencesSearcher: remove enclosing read action, use queryParameters.getOptimizer().searchWord
#KT-7917 Fixed
2015-06-09 20:45:10 +02:00
Dmitry Jemerov
527751e967 KotlinReferencesSearcher: cleanup after J2K 2015-06-09 20:45:10 +02:00
Dmitry Jemerov
b2a6531255 KotlinReferencesSearcher: J2K 2015-06-09 20:45:09 +02:00
Dmitry Jemerov
7ba13e5425 KotlinReferencesSearcher: rename to .kt 2015-06-09 20:45:09 +02:00
Evgeny Gerashchenko
4c6fcef221 Disable access to incremental caches when incremental compilation mode is disabled. 2015-06-09 20:03:21 +03:00
Evgeny Gerashchenko
c48378260e Path hash code is case-agnostic. This is to avoid changing it if e.g. path to project is reconfigured from C:\Work to c:\work 2015-06-09 20:03:21 +03:00
Evgeny Gerashchenko
959364aa77 Fixed sticking of incremental cache data when case of file path is changed. 2015-06-09 20:03:20 +03:00
Alexander Udalov
4815a9e5a8 Fix kotlin-reflect Maven artifact, attach sources jar 2015-06-09 15:39:04 +03:00
Alexander Udalov
4c7bcc8e1a Minor, specify version for maven-jar-plugin 2015-06-09 15:01:18 +03:00
Mikhail Glukhikh
a792b29a78 Exception fix: more accurate type annotation parsing #EA-69124 Fixed 2015-06-09 14:36:12 +03:00
Mikhail Glukhikh
804bf3ad22 Refactoring of AnnotationResolver.resolveAnnotation(s)Arguments 2015-06-09 14:36:08 +03:00
Pavel V. Talanov
a525c2f654 Fix folding after changes to parser 2015-06-08 20:51:10 +03:00
Pavel V. Talanov
07d35d305e Create import list psi element even if no directives are present
Fix a problem where deleting last import directive via "optimize imports" could lead to incorrect psi structure resulting in CCE, see EA-64291
New imports are inserted at the head (after package directive if present) of the file (before any comments) if no imports were present
Add test for inserting import to file where a first statement is a comment
Drop code dealing with non-existing import list in ImportInsertHelperImpl
AbstractQuickFixTest: check for unexpected actions before changes to the file are made as it relies on the first line having specific format
2015-06-08 20:51:04 +03:00
Pavel V. Talanov
4c4f730c53 Minor: Remove dead code in ScopeProvider 2015-06-08 20:25:55 +03:00
Pavel V. Talanov
d3315f5ebb Refactor: Do not pass rootScope to QualifiedExpressionResolver#processImportReference 2015-06-08 20:25:54 +03:00
Pavel V. Talanov
39e78cad2a Always pass moduleDescriptor to QualifiedExpressionResolver#processImportReference
Passing package view descriptor has the same effect
2015-06-08 20:25:54 +03:00
Pavel V. Talanov
7585cbfe22 Remove check in visibilities that allowed access to privates of outer packages
It doesn't work for a while now in imports and is planned to be dropped with upcoming changes to private
2015-06-08 20:25:52 +03:00
Pavel V. Talanov
be66ee7015 Refactor QualifiedExpressionResolver: pass descriptor to check for visibility instead of scope 2015-06-08 20:25:51 +03:00
Pavel V. Talanov
5e0cc18be2 Minor: prettify code in ImportDirectiveProcessor 2015-06-08 20:25:50 +03:00
Pavel V. Talanov
806098f8a0 Refactor: Extract ImportDirectiveProcessor from QualifiedExpressionResolver
J2K code
2015-06-08 20:25:50 +03:00
Alexey Sedunov
8b9ddea729 Introducer Parameter: Fix PsiInvalidElementAccessException 2015-06-08 20:18:16 +03:00
Alexey Sedunov
1d59c7e0e4 Change Signature: Substitute new function name into generated this-expressions
#KT-7920 Fixed
2015-06-08 20:18:15 +03:00
Dmitry Jemerov
aa8adbeddc remove unnecessary call to super.get() in CliBindingTrace 2015-06-08 18:57:36 +02:00
Pavel V. Talanov
54b1859aa7 KotlinQuickDocumentationProvider: fix quick doc for elements from type hierarchy
Fix quick doc for light classes

 #KT-7964 Fixed
2015-06-08 18:46:44 +03:00
Dmitry Jemerov
220403b6f6 avoid unnecessary creation of empty containers 2015-06-08 15:10:40 +02:00
Dmitry Jemerov
109c09cf7c get rid of WritableScopeWithImports 2015-06-08 15:10:39 +02:00
Michael Bogdanov
baa44e3d01 Fix default parameter remapping on inlining: support store instruction
#KT-7963 Fixed
2015-06-08 16:07:39 +03:00
Michael Bogdanov
7a1625fc9e Support extension lambda inlining
#KT-7962 Fixed
2015-06-08 16:07:38 +03:00
Dmitry Jemerov
18753a16d7 a bunch of fixes to the grammar 2015-06-08 14:46:28 +02:00
Valentin Kipyatkov
5f0171aa04 Added two more inspections based on existing intentions 2015-06-08 15:37:59 +03:00
Valentin Kipyatkov
5b9680fe11 Made all inspections making code more verbose low priority 2015-06-08 15:37:59 +03:00
Valentin Kipyatkov
63b30cf7f6 KT-7955 "Add replaceWith to specify replacement pattern" intention/inpesction has too large a range
#KT-7955 Fixed
2015-06-08 15:37:58 +03:00
Valentin Kipyatkov
e1efb95259 Added test 2015-06-08 15:37:40 +03:00
Valentin Kipyatkov
7dddd6c718 Code simplification 2015-06-08 15:33:58 +03:00
Valentin Kipyatkov
8243d27fb2 Smart completion: argument with "*" is not necessary the only one for vararg parameter 2015-06-08 15:33:58 +03:00
Valentin Kipyatkov
0d992ee38f Moved tests 2015-06-08 15:33:58 +03:00
Valentin Kipyatkov
54e9a46f12 Smart completion: fixed in argument with "*" 2015-06-08 15:33:58 +03:00
Valentin Kipyatkov
2197d554ca Smart completion: a bit more correct logic for last vararg parameter 2015-06-08 15:33:58 +03:00
Valentin Kipyatkov
ee15eae6b3 Smart completion: function literal argument can correspond only to the last parameter! 2015-06-08 15:33:57 +03:00
Valentin Kipyatkov
6284f557e6 Smart completion: sometimes we can insert comma after vararg argument too 2015-06-08 15:33:57 +03:00
Valentin Kipyatkov
02e876679c Completion: more correct code for lambda template insertion 2015-06-08 15:33:57 +03:00
Valentin Kipyatkov
64e9ecc7b4 Moved test data 2015-06-08 15:33:57 +03:00
Valentin Kipyatkov
7eec200887 Moved tests from deprecated to generated test fixture 2015-06-08 15:33:57 +03:00
Valentin Kipyatkov
560b7dae75 Minor correction 2015-06-08 15:33:56 +03:00
Nikolay Krasko
e4c7f9bc22 Keep NullableNotNullManager methods for J2K converter 2015-06-08 15:21:03 +03:00
Valentin Kipyatkov
0cb2348b2f KT-6807 J2K: Convert "==" to "===" if class has equals() method
#KT-6807 Fixed
2015-06-06 11:00:55 +03:00
Alexey Sedunov
dae7717a69 Introduce Variable: Reimplement in-place refactoring using AbstractInplaceIntroducer. Extract common superclass AbstractKotlinInplaceIntroducer 2015-06-05 21:10:36 +03:00
Alexey Sedunov
4a56b99cff Introduce Parameter: Reimplement in-place refactoring using AbstractInplaceIntroducer
This simplifies implementation and fixes bug with unnecessarily detailed command history available through undo/redo
2015-06-05 21:10:35 +03:00
Alexander Udalov
d475401108 Ant task: don't pass kotlin-runtime.jar to javac on "-no-stdlib" 2015-06-05 16:19:55 +03:00
Alexander Udalov
f5ec8d6850 Minor, delete useless test
'withKotlinNoJavaSources' tests exactly the same
2015-06-05 16:19:42 +03:00
Alexander Udalov
e224337ff3 Ant task: support "compilerarg" element in withKotlin as in kotlinc 2015-06-05 16:19:19 +03:00
Alexander Udalov
dda44a61a1 Rewrite integration tests to JUnit3, make Ant JVM task tests generated 2015-06-05 16:19:17 +03:00
Alexander Udalov
0f6c23e1c4 Don't always run code in Ant task tests
But when running code, do it via <java> task, not via custom testing code. Most
of the time the compiled code need not be runned, because it's irrelevant to
the Ant task itself
2015-06-05 15:55:59 +03:00
Alexander Udalov
968d362b77 Don't check exit code in Ant tests
It's already checked in the build log in each test
2015-06-05 15:55:58 +03:00
Alexander Udalov
89408f45bb Ant task: pass kotlin-runtime to javac's classpath; simplify tests
'kotlinCompiler' test is deleted because it's a very roundabout way to compile
Kotlin and Java sources, and there's no point in testing it.

'javacCompiler' test is deleted for similar reasons: using javac's "compiler"
option is not an advertised way to use Kotlin Ant task, and anyway it will work
with any CompilerAdapter instance, so it's hard to break it (apart from
deleting "withKotlin" adapter).

There are tests which check compilation/running of the same code but with the
recommended method. The pretext for deletion of these tests is to make Ant
tests generated, and that would be easier if they wouldn't depend on any outer
variables
2015-06-05 15:55:58 +03:00
Alexander Udalov
49c78602af Minor, move and rename CompilerClassLoaderHolder -> KotlinAntTaskUtil 2015-06-05 15:55:56 +03:00
Alexander Udalov
8f5826793d Ant task: warn when Ant version < 1.8.2 2015-06-05 15:55:56 +03:00
Alexander Udalov
0ad6dce7ce Ant task: support 'failOnError' attribute in kotlinc and withKotlin 2015-06-05 15:55:54 +03:00
Alexander Udalov
6d00c265e2 Always run kotlinc in <withKotlin/> Ant task
This change requires withKotlin to be run with Ant of version at least 1.8.2.

Some test data changed because now compileList contains both Java and Kotlin
sources

 #KT-7870 Fixed
2015-06-05 15:55:53 +03:00
Alexander Udalov
cbbf8dec7e Drop ant-1.7 from project, advance Ant to 1.8.2
Ant 1.8.2 has the API (namely,
CompilerAdapterExtension#getSupportedFileExtensions) which will allow to fix a
critical bug in <withKotlin/> task (see KT-7870)
2015-06-05 15:55:52 +03:00
Alexander Udalov
9008a8b161 Fix withKotlin Ant task when no classpath is given
#KT-6492 Fixed
2015-06-05 15:55:51 +03:00
Nikolay Krasko
cf62e0b999 Remove internal artifacts for rr/* branches 2015-06-05 14:29:54 +03:00
Nikolay Krasko
95e4766b3e Minor: reformat 2015-06-05 14:29:49 +03:00
Nikolay Krasko
9cfbf27602 Use same classloader for loading JS and JVM compilers 2015-06-05 14:29:47 +03:00
Denis Zharkov
9ec235c011 Introduce KotlinNamesValidator
It's needed to prohibit invalid kotlin identifiers in refactorings

 #EA-69048 Fixed
 #EA-69063 Fixed
2015-06-05 11:58:16 +03:00
Alexander Udalov
6e97f85863 Fix type argument substitution bug in KFunction construction
For example,

KMemberFunction2<T, P1, P2, R> : KMemberFunction<T, R>

So for this inheritance the heuristic that was present ("take the last K type
parameters of the subclass, and substitute for K parameters of the superclass")
was wrong. The new heuristic for this case is: take type parameters with the
same names.

Also don't store "parameters" in a lazy value, since it's easy to compute and
it's computed practically every time anyway
2015-06-04 23:08:21 +03:00
Alexander Udalov
b474fa9278 Refactor fictitious function class kinds, reuse in J<->K map 2015-06-04 23:08:21 +03:00
Alexander Udalov
9e8c51f7d3 Minor, delete pointless field annotations 2015-06-04 23:08:20 +03:00
Ilya Gorbunov
1036448fcd Improve the documentation of MatchGroupCollection.
#KT-7938 Fixed
2015-06-04 20:51:08 +03:00
Mikhail Glukhikh
98407a7c4b Recursive annotations are now possible for properties / functions / classes / primary constructors #EA-66984 Fixed #EA-63992 Fixed #EA-64272 Fixed
A set of tests provided.
2015-06-04 20:09:36 +03:00
Ilya Gorbunov
0c1a8ab8ff Change KotlinCleanupInspection display name and description to mention deprecated symbols 2015-06-04 20:00:55 +03:00
Evgeny Gerashchenko
c194ced87e Performance report is emitted only when corresponding command-line argument is provided. 2015-06-04 19:45:01 +03:00
Natalia Ukhorskaya
b4190fb1fe Rewrite KotlinOutputParser for Android plugin to make it works with Android Studio 1.3
#KT-7862 Fixed
2015-06-04 19:17:46 +03:00
Pavel V. Talanov
812273cb2b Fix a problem when invoking completion outside of source roots could lead to declarations from index being analyzed in a wrong resolution facade 2015-06-04 18:36:05 +03:00
dnpetrov
50ea67ba13 KT-5524 Support [platformName] annotation for class members
@platformName is now supported for final non-overriding class member functions
(including property accessors).
Front-end provides diagnostics for inapplicable annotation cases.
Code generation updated:
- ignore kotlin.platform.platformName annotation for Java class methods;
- bridges generation generates proper JVM declarations in case of methods renamed with @platformName.
@platformName-related tests added.

#KT-5524 Fixed
2015-06-04 17:54:08 +03:00
Evgeny Gerashchenko
0bf249d6ae Do not recompile module when anonymous object or local class is changed. 2015-06-04 17:50:14 +03:00
Evgeny Gerashchenko
6403ef39eb KT-7521 Compilation problem of dependent modules with different jdks
#KT-7521 fixed
2015-06-04 17:50:13 +03:00
Valentin Kipyatkov
200c6446be Probably fixed EA-69004 2015-06-04 17:23:20 +03:00
Valentin Kipyatkov
f05789e224 Fixed EA-69042 2015-06-04 17:21:28 +03:00
Valentin Kipyatkov
e597532c7a KT-7815 Smart completion after "as" inserts fq-name for type parameter
#KT-7815 Fixed
2015-06-04 17:21:28 +03:00
Valentin Kipyatkov
d3e4b346ce Deprecated symbols made less priority than named parameters 2015-06-04 17:21:28 +03:00
Valentin Kipyatkov
54836113a7 Better test data format 2015-06-04 17:21:28 +03:00
Valentin Kipyatkov
603f7ef3c1 KT-7756 Completion of "return null", "return true" and "return false"
#KT-7756 Fixed
2015-06-04 17:21:27 +03:00
Ilya Gorbunov
009baa11fc Specific wording in exception message for String methods. 2015-06-04 16:45:55 +03:00
Ilya Gorbunov
a1d8e9d633 Provide dropLast and takeLastWhile methods. Optimize special cases of drop/take/dropLast/takeLast (when n is equal to zero or size of collection). 2015-06-04 16:32:25 +03:00
Ilya Gorbunov
9f85fa9720 Make proposed split replacement equivalent in behavior with additional dropLastWhile call.
#KT-7887
2015-06-04 16:32:23 +03:00
Ilya Gorbunov
9b17220baa Provide dropLastWhile for Arrays, Lists and Strings. 2015-06-04 16:32:21 +03:00
Ilya Gorbunov
705c9089f0 Provide replacement for methods deprecated in favor of SAM-constructors.
Provide replacement for isNotEmpty on nullable receiver.
JS: Provide SAM-like constructor for Runnable.
2015-06-04 16:32:19 +03:00
Ilya Gorbunov
13c89b7ae9 Provide lineSequence() extension method instead of BufferedReader.lines() in order not to conflict with JDK8 instance method with the same name. 2015-06-04 16:32:17 +03:00
Michael Bogdanov
dee26957d1 Tests for obsolete KT-4798, KT-7288, KT-7046
#KT-4798 Obsolete
 #KT-7288 Obsolete
 #KT-7046 Obsolete
2015-06-04 16:28:08 +03:00
Valentin Kipyatkov
9e27e208ef Made test data correct 2015-06-04 16:20:30 +03:00
Valentin Kipyatkov
6751a1d440 DeprecatedSymbolUsageFix: keeping explicit type arguments in original form 2015-06-04 16:20:30 +03:00
Valentin Kipyatkov
9f1fbe20dc Extracted methods 2015-06-04 16:20:30 +03:00
Valentin Kipyatkov
a26c62ab0f KT-7895 Auto replace for deprecated (ReplaceWith) loses generic type
#KT-7895 Fixed
2015-06-04 16:20:29 +03:00
Valentin Kipyatkov
f14615315d KT-5482 Redundant type arguments are not detected in some cases
#KT-5482 Fixed
2015-06-04 16:20:29 +03:00
Denis Zharkov
9802931a90 Remove variables with empty ranges from local vars table
As their ranges may intersect after dead code elimination that leads to VerifyError
2015-06-04 16:11:02 +03:00
Denis Zharkov
310babefdf Minor, Rename InsnStream -> InsnSequence 2015-06-04 16:11:02 +03:00
Denis Zharkov
8da3f53404 EA-53937: Drop failing assertion about no-name val in annotation 2015-06-04 16:11:02 +03:00
Denis Zharkov
0e718fbaab Introduce UNKNOWN visibility as default in FunctionDescriptor
It's needed to prevent NPE when requesting non-nullable visibility of descriptor
before `initialize` has been called.
Currently it happens because of indirect calls of `DescriptorUtils.isLocal`
between descriptor creation and it's initialization.
2015-06-04 16:11:02 +03:00
Denis Zharkov
4f85afb3f0 Fix DescriptorUtils.isLocal semantics
Non-member descriptors, e.g. type parameters, value parameters that defined in local function should be local too
Otherwise a lot of exceptions happens when resolving references within anonymous objects
2015-06-04 16:11:02 +03:00
Nikolay Krasko
e874ad9cbb Remove getting stacktrace in internal mode 2015-06-04 15:33:16 +03:00
Nikolay Krasko
46ddb1958f Update IDEA to 141.1383.1 2015-06-04 15:33:14 +03:00
Valentin Kipyatkov
6e7fd19d8e KT-7695 Java to Kotlin converter incorrectly generates a cast to non-nullable type
#KT-7695 Fixed
2015-06-04 15:11:48 +03:00
Valentin Kipyatkov
1fa777f3c3 Fixed EA-60042 2015-06-04 15:11:48 +03:00
Valentin Kipyatkov
142ee0ce70 Fixed EA-65709 2015-06-04 15:11:47 +03:00
Michael Bogdanov
83f04501be Remove error diagnostic from return in multideclaration
#KT-5100 Fixed
2015-06-04 12:01:59 +03:00
Dmitry Jemerov
a321e8eef5 performance counters infrastructure 2015-06-04 10:20:19 +02:00
Valentin Kipyatkov
a3a33ce089 Minor code improvements + more correct code 2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
9c0d607894 Replace "||" with "&&" (and the opposite) made more clever about negating expressions 2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
ac6ef6b544 KT-7454 Replace "||" with "&&" adds unnecessary parethesis
#KT-7454 Fixed
2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
1a0f8a5070 Maybe it will fix EA-67317 2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
b73ebad167 Fixed EA-66035 2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
4957495cf3 Migrated to use of modern API 2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
fd4a634001 Fixed EA-66835 2015-06-04 01:05:50 +03:00
Valentin Kipyatkov
6d2d054b3b Refactored ShowExpressionTypeAction to work for variable type 2015-06-04 01:05:49 +03:00
Valentin Kipyatkov
5d9259e9a4 Refactored ShowExpressionTypeAction 2015-06-04 01:05:49 +03:00
Valentin Kipyatkov
5a50423ae5 Converted to Kotlin 2015-06-04 01:05:49 +03:00
Valentin Kipyatkov
4169a78e6f Removing unnecessary uses of analyzeFully 2015-06-04 01:05:49 +03:00
Valentin Kipyatkov
cd68cefba1 Added diagnostic for EA-68663 2015-06-04 01:05:49 +03:00
Valentin Kipyatkov
7be59f969c Fixed EA-68869 2015-06-04 01:05:49 +03:00
Valentin Kipyatkov
662cc325f4 Never invoke intention action when it's not available 2015-06-04 01:05:48 +03:00
Valentin Kipyatkov
9b32bb8894 Fixed EA-68922 2015-06-04 01:05:48 +03:00
Valentin Kipyatkov
6010876c95 Fixed EA-68937 2015-06-04 01:05:48 +03:00
Zalim Bashorov
9d32f5e8ed Minor in JS backend tests: use checkFooBoxIsOk instead of fooBoxIsValue 2015-06-03 23:09:17 +03:00
Zalim Bashorov
92457543bc JS backend: fix equality check for nullable types
* Generate simple check when compare with `null` literal.
* Use Kotlin.equals if type of receiver or argument is nullable.
* Don't call equals method if any of receiver or argument is null (at runtime, not only literal). For more information see KT-4356.

 #KT-7530 fixed
 #KT-7916 fixed
2015-06-03 23:09:16 +03:00
Zalim Bashorov
6aaccae6a9 JS backend: compare enum entries strictly
#KT-7840 fixed
2015-06-03 23:09:16 +03:00
Zalim Bashorov
4f0a858e93 JS backend: fix tests after move testTrue and testFalse to common place 2015-06-03 23:09:16 +03:00
Zalim Bashorov
430a3c121d Minor in JS backend: move testFalse and testTrue to common place 2015-06-03 23:09:16 +03:00
Zalim Bashorov
ca4ce48801 JS backend: fix compiler crash on for with empty body 2015-06-03 23:09:15 +03:00
Zalim Bashorov
f90df7aa35 JS backend: fix compiler crash on empty then if block
#EA-68941 fixed
2015-06-03 23:09:15 +03:00
Zalim Bashorov
779a0373c7 JS backend: generate better code for secondary constructor calls -- don't generate undefined when it possible 2015-06-03 23:09:15 +03:00
Zalim Bashorov
79b5652ce6 JS backend: added test which check that name of classes not mangled when we have a function with the same name in non-public API 2015-06-03 23:09:15 +03:00
Zalim Bashorov
33fb3fb6e4 JS backend: support secondary constructors in native classes 2015-06-03 23:09:15 +03:00
Dmitry Jemerov
08439c541e don't bother calculating possibleResolutionScopes if we aren't going to use them 2015-06-03 20:59:18 +02:00
Pavel V. Talanov
f335e9f6b2 Fix a problem where a sequence of out-of-block completions could lead to an inconsistent resolve session provided for a synthetic copy of a file 2015-06-03 21:22:10 +03:00
Natalia Ukhorskaya
7b63dd987c Workaround for bug in Android Plugin: it generates LightFields for files starting from '.' (ex. .DS_Store file)
#KT-6625 Fixed
2015-06-03 16:36:57 +03:00
Alexander Udalov
e38bc864d1 Fix heavy integer parsing in FunctionN class factory
#KT-7924 Fixed
2015-06-03 15:37:49 +03:00
Alexander Udalov
6c8f2be1d8 Revert "Fix heavy integer parsing in FunctionN class factory"
This reverts commit 9d493d995e.
2015-06-03 15:32:47 +03:00
Alexander Udalov
c18ef6e2ac Increase buffer size in preloader from 8K to 512K
Doesn't seem to improve performance, but cuts down lots of IO file read counts
2015-06-03 15:14:24 +03:00
Alexander Udalov
9d493d995e Fix heavy integer parsing in FunctionN class factory
#KT-7924 Fixed
2015-06-03 15:14:23 +03:00
Pavel V. Talanov
3c791c418d KotlinSignatureInJavaMarkerProvider: do not report errors on exceptions
Fixing it is not in our immediate plans and these exceptions litter our EA and create a bad impression for users, while not really disrupting any workflow
2015-06-03 14:56:10 +03:00
Michael Bogdanov
2377a10007 Fix labeling processing on inlining: suport labeled literals
#KT-7273 Fixed
2015-06-03 14:42:57 +03:00
Pavel V. Talanov
f02f663167 Minor: fix test data 2015-06-03 14:29:44 +03:00
Dmitry Jemerov
758b94d3a6 get rid of JetScopeSelectorUtil, inline its contents into Kotlin code 2015-06-03 12:03:15 +02:00
Natalia Ukhorskaya
c57a0440ec Test stdlib with dx
#KT-7003 Fixed
2015-06-03 12:44:02 +03:00
Natalia Ukhorskaya
094119ee63 Fix EA-63657 2015-06-03 12:44:01 +03:00
Natalia Ukhorskaya
c410f1cdfc Android tests: use ant from dependencies dirs 2015-06-03 12:44:00 +03:00
Dmitry Jemerov
425f91dfc6 some dead code in ResolutionTask 2015-06-02 20:38:02 +02:00
Pavel V. Talanov
04bef2cc08 Minor: Drop unused code and inline utility 2015-06-02 19:19:57 +03:00
Pavel V. Talanov
ccaa779e2f Minor: fix test 2015-06-02 19:06:27 +03:00
Dmitry Jemerov
4d5c785944 don't create resolve tasks with lists of candidates which are known to be empty 2015-06-02 17:40:13 +02:00
Dmitry Jemerov
365d45f49e add missing API to retrieve Kotlin source roots from a CompilerConfiguration 2015-06-02 17:22:44 +02:00
Dmitry Jemerov
9672264442 avoid unnecessary and expensive creation of FqName instances 2015-06-02 16:36:03 +02:00
Alexander Udalov
d1df234cfe Support annotations as annotation arguments in reflection, add test
A follow-up to 281acb8 where this was supported in the compiler
2015-06-02 17:31:19 +03:00
Alexander Udalov
158b3ba102 Make parameter names of fictitious function classes non-stable
To be able to change them when overriding invoke in subclasses without a
warning
2015-06-02 17:30:58 +03:00
Alexander Udalov
16b20cf910 Fix NoSuchMethodError on FunctionReference#init 2015-06-02 17:29:52 +03:00
Pavel V. Talanov
d2592e4a2c Companion objects have public visibility by default
#KT-7114 Fixed
2015-06-02 16:23:03 +03:00
Dmitry Jemerov
5ba283397b use more compact map implementation in ObservableBindingTrace 2015-06-02 15:17:25 +02:00
Dmitry Jemerov
f545c9ddac dispatch directly to the correct visitor function 2015-06-02 15:14:37 +02:00
Ilya Gorbunov
0302dd06f7 Do not call mkdirs when destination file of copyTo doesn't have any parent directory.
#KT-7888 Fixed
2015-06-02 15:50:47 +03:00
Pavel V. Talanov
7f70a4ae89 Minor: extract implementation of ResolutionFacade to a separate class 2015-06-02 15:32:02 +03:00
Pavel V. Talanov
a94c13be6d KotlinCacheService: allow to get ResolveSessionForBodies by module descriptor
Utility to resolve import in file by fq name
2015-06-02 15:32:01 +03:00
Valentin Kipyatkov
e60c3f5ee7 DeprecatedSymbolUsageFix: fixed for string template 2015-06-02 14:36:06 +03:00
Valentin Kipyatkov
a5cb1e8c2b Converted JetExpressionImpl to Kotlin, got rid of code duplication 2015-06-02 14:36:06 +03:00
Valentin Kipyatkov
b012f22edc DeprecatedCallableAddReplaceWithIntention: fixed for string templates in expression 2015-06-02 14:36:06 +03:00
Valentin Kipyatkov
07cb0a0b08 DeprecatedSymbolUsageFix: refactored code for easier handling of optional arguments 2015-06-02 14:36:06 +03:00
Valentin Kipyatkov
1fdb4429c3 Edited TODOs 2015-06-02 14:36:05 +03:00
Valentin Kipyatkov
134621ce77 DeprecatedSymbolUsageFix: fixed for incorrect annotation arguments 2015-06-02 14:36:05 +03:00
Valentin Kipyatkov
f1d8838bbd Removed code duplication for getting annotation argument 2015-06-02 14:36:05 +03:00
Valentin Kipyatkov
aefe0dd192 Changed highlighting range and attributes of useless elvis operator 2015-06-02 14:35:19 +03:00
Denis Zharkov
11290ae9e7 Fix wrong assumptions in quickfix
Diagnostic is always reported on overriden property

 #EA-64407 Fixed
2015-06-02 14:07:49 +03:00
Denis Zharkov
349d5f02ea Drop wrong assertion about duplicating properties in data class
#EA-64269 Fixed
2015-06-02 14:07:49 +03:00
Denis Zharkov
70dbbd8fda Resolve constructors declared in traits and objects
It prevents exceptions and produces less red code

 #EA-68667 Fixed
2015-06-02 14:07:49 +03:00
Denis Zharkov
7f9d2e8a36 Refine diagnostics reported on primary constructors 2015-06-02 14:07:49 +03:00
Denis Zharkov
9c574469ca Parsing: allow primary ctor in object syntactically
It's needed for better recovering for cases of changes like 'class' -> 'object'

The only sensible case when it's may be bad:
class A {
   object B
   constructor() : super()
}

But it seems to be rare, and ';' can be used to separate object from secondary ctor
2015-06-02 14:07:48 +03:00
Denis Zharkov
3f7ca5a586 Do not report diagnostic "ctr in trait" in delegation specifier
Constructor declaration in interfaces is prohibited anyway
2015-06-02 13:18:53 +03:00
Denis Zharkov
19e4127f4f Do not wrap primary ctor of object into ErrorElement
It helps to resolve them as for classes
Diagnostic with same content will be reported instead
2015-06-02 13:18:53 +03:00
Denis Zharkov
c054dc19e3 Get rid of assumption that primary ctr is a child of JetClass
As it can be contained within JetObjectDeclaration
2015-06-02 13:18:53 +03:00
Denis Zharkov
71b5cd692b Prettify JetClass and JetObjectDeclaration 2015-06-02 13:18:53 +03:00
Denis Zharkov
8c6264bf2c Pull constructor-related methods from JetClass to JetClassOrObject 2015-06-02 13:18:53 +03:00
Denis Zharkov
51534f4592 Make JetClassOrObject an abstract class implementing common methods 2015-06-02 13:18:52 +03:00
Denis Zharkov
5b1a5deae4 Convert JetClassOrObject and inheritors: J2K 2015-06-02 13:18:52 +03:00
Denis Zharkov
bfa667f569 Convert JetClassOrObject and inheritors: .java -> .kt 2015-06-02 13:18:52 +03:00
Dmitry Jemerov
cb6ddc5db3 correctly check if we need to process deferred types in body resolver 2015-06-02 11:58:33 +02:00
Dmitry Jemerov
22168aa026 optimize DescriptorUtils.getContainingModuleOrNull() by removing duplicate parent traversal and Class.isInstance() checks 2015-06-02 11:55:16 +02:00
Dmitry Jemerov
252ddf4e2e delete unused interface KeyNormalizer 2015-06-02 11:52:42 +02:00
Alexander Udalov
d2508c8710 Do not report irrelevant diagnostics on unresolved supertypes
Previously the confusing "trait with superclass" was reported when an
unresolved classifier appeared in interface supertypes
2015-06-02 12:30:14 +03:00
Alexander Udalov
23670292d6 Minor, drop unused properties in libraries/pom.xml
Also regroup for clarity
2015-06-02 11:12:09 +03:00
Alexander Udalov
9cc156c67f Copy kotlin-reflect.jar from dist to publish to Maven
Also build sources jar in build.xml to publish as kotlin-reflect's sources, and
create an empty javadoc
2015-06-02 11:12:09 +03:00
Alexander Udalov
ee811136d2 Minor, update URL and fix typo in maven project description 2015-06-02 11:12:08 +03:00
Alexander Udalov
c830eee453 Add kotlin-reflect.jar to targets in build.xml 2015-06-02 11:12:08 +03:00
Mikhail Glukhikh
9295624378 Unused imports removed 2015-06-02 11:11:19 +03:00
Mikhail Glukhikh
dea2ec9da6 When now tries to smart cast subject to not-null if contains no null case #KT-7857 Fixed
Some new tests + some fixed tests
2015-06-02 10:56:21 +03:00
Mikhail Glukhikh
de12771c0f Warning generation on non-exhaustive whens over enums + a set of tests + fixed test #KT-6227 Fixed 2015-06-02 10:56:17 +03:00
Mikhail Glukhikh
969993bd09 Fix for EA-68871 #EA-68871 Fixed 2015-06-02 10:56:13 +03:00
Alexander Udalov
bd17db6f3e Delete TeamCityPluginPublisher.xml and run configuration on TC
The run configuration is not used anymore because we have branches which run
tests against different IDEA versions, and also IDEA master runs the plugin
verifier with the Kotlin plugin
2015-06-01 19:23:12 +03:00
Alexander Udalov
06dafef4cc Add test on no 'kotlin.reflect.jvm.internal.impl' package in project code 2015-06-01 19:23:11 +03:00
Alexander Udalov
9cd835a5f8 Refactor and optimize JetCodeConformanceTest
Combine all tests that iterate over all files in the project. This should speed
up the test substantially, especially on slow file systems
2015-06-01 19:23:11 +03:00
Alexander Udalov
41d2e378f8 Convert JetCodeConformanceTest to Kotlin: prettify 2015-06-01 19:23:11 +03:00
Alexander Udalov
fca662af91 Convert JetCodeConformanceTest to Kotlin: invoke J2K 2015-06-01 19:23:10 +03:00
Alexander Udalov
8cf04ce966 Convert JetCodeConformanceTest to Kotlin: move .java -> .kt 2015-06-01 19:23:10 +03:00
Alexander Udalov
12a6461006 Report 'free function called as extension' on Function subclasses
You can't make a value of some type invokable as an extension by adding
'extension' annotation to the type
2015-06-01 19:23:10 +03:00
Alexander Udalov
596d378962 Fix abstract method error: implement arity in function references 2015-06-01 19:23:09 +03:00
Alexander Udalov
803fb82b8b Minor, move compiler.pro out of project root 2015-06-01 19:23:09 +03:00
Alexander Udalov
28addcf8e7 Do not generate annotations of method parameters on its $default synthetic method
#KT-7892 Fixed
2015-06-01 19:23:08 +03:00
Alexander Udalov
4f77b44ac3 Minor, move constant to the proper place 2015-06-01 19:23:08 +03:00
Alexander Udalov
df4d5a3ae2 Fix initialization order of enum entries and companion
#KT-5761 Fixed
2015-06-01 19:23:08 +03:00
Alexander Udalov
7ba0dda29c Check compileJavaAgainstKotlin tests with .txt files 2015-06-01 19:23:07 +03:00
Evgeny Gerashchenko
cab8f583a8 Minor. Renamed test. 2015-06-01 19:02:13 +03:00
Evgeny Gerashchenko
88e8988b18 Stabilized order of bytecode for when mappings initialization. 2015-06-01 19:02:13 +03:00
Evgeny Gerashchenko
b94665e948 Updated Kannotator JPS build test for new incremental compilation.
Now it only invokes make for each changed file (much faster). And for each source target, it also checks that out directories are the same as after full rebuild.
2015-06-01 19:02:13 +03:00
Evgeny Gerashchenko
bd8e907809 Minor. Moved file to separate package to avoid clashing between tests and sources 2015-06-01 19:02:12 +03:00
Evgeny Gerashchenko
beb099fc12 Made incremental compilation enabled by default in IDEA settings. 2015-06-01 19:02:12 +03:00
Evgeny Gerashchenko
36915bf846 Enabled incremental compilation by default. 2015-06-01 19:02:12 +03:00
Evgeny Gerashchenko
fe3437e8a1 Fixed iml files in test data. Order entry for own sources is obligatory. 2015-06-01 19:02:12 +03:00
Evgeny Gerashchenko
7de531fe09 Fixed package proto for circular dependencies. Case when package is present in different modules which depend on each other. We should generate separate package facades for this case. 2015-06-01 19:02:11 +03:00
Evgeny Gerashchenko
37d6c9bf25 Minor. Fixed typo in test data. 2015-06-01 19:02:11 +03:00
Valentin Kipyatkov
ad624d60ec ConvertFunctionToPropertyIntention and ConvertPropertyToFunctionIntention made low priority 2015-06-01 18:23:35 +03:00
Valentin Kipyatkov
8fd6a64be9 Refactored methods for val/var in PSI 2015-06-01 18:23:34 +03:00
Valentin Kipyatkov
034b74d3e5 Rewritten ChangeVariableMutabilityFix
#KT-7877 Fixed
2015-06-01 18:23:34 +03:00
Valentin Kipyatkov
d74ac4d08a Override/implement members dialog: no qualified type names in signatures but qualified owner class names (+ moved a method) 2015-06-01 18:23:34 +03:00
Yan Zhulanow
54b3fc9e37 Do not bundle annotation collector plugin into IDE plugin 2015-06-01 17:28:03 +03:00
Pavel V. Talanov
d531641459 Fix ReplaceWithOperatorAssignmentIntention in some cases
#KT-7831 Fixed
2015-06-01 15:52:52 +03:00
Natalia Ukhorskaya
1334f0352b Support com.android.tools.build.gradle 1.3.0-beta1
#KT-7884 Fixed
2015-06-01 14:00:57 +03:00
Natalia Ukhorskaya
31db945110 Fix navigation to file from "breakpoint reached at" info 2015-06-01 14:00:56 +03:00
Zalim Bashorov
746b16fce3 Don't include test data in the language statistic for a repository 2015-06-01 12:47:29 +03:00
Ilya Gorbunov
64b2e37436 Deprecate meaningless or vague-defined operations with Char operands: downTo. 2015-06-01 00:55:45 +03:00
Alexey Sedunov
8a751ad74a Call Hierachy: Fix NPE
#EA-67995 Fixed
2015-05-30 18:16:26 +03:00
Alexey Sedunov
26c4efb587 Light Elements: Filter out nulls when converting Kotlin declarations to corresponding light elements
#EA-64403 Fixed
2015-05-30 18:16:25 +03:00
Alexey Sedunov
fed8047a59 Find Usages: Fix NPE
#EA-64275 Fixed
2015-05-30 18:16:23 +03:00
Alexey Sedunov
e1f660f446 Call Hierarchy: Forbid PsiClass at the hierarchy root
#EA-64406 Fixed
2015-05-30 18:16:22 +03:00
Zalim Bashorov
f1d37572c8 JS backend: fix missed variable declarations for tmps in class primary/default constructor
#KT-7864 Fixed
2015-05-29 20:09:46 +03:00
Dmitry Jemerov
e0f819d93c document ReplaceWith annotation 2015-05-29 17:11:22 +02:00
Valentin Kipyatkov
0e69162628 DeprecatedSymbolUsageFix to not be available for functions with optional parameters and no sources 2015-05-29 15:10:14 +03:00
Valentin Kipyatkov
6fbd530eee DeprecatedSymbolUsageFix: changed from descriptors to import back to fq-names as it's more safe 2015-05-29 15:10:14 +03:00
Valentin Kipyatkov
859128744e Fixed DeprecatedSymbolUsageInWholeProjectFix 2015-05-29 15:06:14 +03:00
Valentin Kipyatkov
eef0e8e447 JetBlockExpression.getStatements() returns List<JetExpression> instead of List<JetElement> 2015-05-29 14:22:56 +03:00
Valentin Kipyatkov
4927a58101 Reordered methods 2015-05-29 14:07:34 +03:00
Valentin Kipyatkov
609ac21be0 Added TODO 2015-05-29 13:55:48 +03:00
Valentin Kipyatkov
df0fc51d68 Moved methods working with calls into appropriate place 2015-05-29 13:55:47 +03:00
Valentin Kipyatkov
ac7e6bdfe4 Moved method to psiUtils.kt 2015-05-29 13:55:47 +03:00
Valentin Kipyatkov
85d9855013 Moved methods for package-directory relation into IDEA 2015-05-29 13:55:47 +03:00
Valentin Kipyatkov
cbc0a60006 Moving more PSI modification methods to psiModificationUtils.kt 2015-05-29 13:55:47 +03:00
Valentin Kipyatkov
006c02b569 Getting rid of confusing methods on PsiElement's 2015-05-29 13:55:47 +03:00
Valentin Kipyatkov
e99b343be3 Moving methods modifying PSI to psiModificationUtils.kt 2015-05-29 13:55:47 +03:00
Valentin Kipyatkov
c1e0469188 More simple implementation 2015-05-29 13:55:46 +03:00
Valentin Kipyatkov
494d96bbc7 Refactored PsiElement.parents() into 2 properties 2015-05-29 13:55:46 +03:00
Valentin Kipyatkov
55f70d7d48 Dropped unused methods 2015-05-29 13:55:46 +03:00
Valentin Kipyatkov
0e8a43f746 Moved language independent methods from jetPsiUtil.kt to psiUtils.kt + reordered and gropped them 2015-05-29 13:55:46 +03:00
Valentin Kipyatkov
65383cf68b Fixed incorrect method 2015-05-29 13:55:46 +03:00
Valentin Kipyatkov
c8223fff9e getFirstChild().siblings -> allChildren 2015-05-29 13:55:46 +03:00
Alexander Udalov
bf09906f35 Fix ISE when caret is on parameter of function type
EA-68570
2015-05-28 22:09:33 +03:00
Alexander Udalov
dff3e17d88 Minor, swap order of parameters for clarity 2015-05-28 22:09:24 +03:00
Alexander Udalov
6dbd9b2d01 Minor, set XML indentation to 4 spaces
Was accidentally changed to 2 in 181af17
2015-05-28 22:09:01 +03:00
Valentin Kipyatkov
ca3dfdf008 Fixed AbstractQuickFixMultiFileTest badly broken sometime ago 2015-05-28 22:00:36 +03:00
Valentin Kipyatkov
09028390fd Corrected test data 2015-05-28 21:35:05 +03:00
Dmitry Jemerov
443eabf88a make Dokka happy by sorting imports of Java classes 2015-05-28 17:53:12 +02:00
ilya-g
ba6a6ce49f Merge pull request #677 from JetBrains/rr/yole/stdlib-docs
stdlib doc-related cleanup
2015-05-28 16:22:42 +03:00
Valentin Kipyatkov
08cf8065ea DeprecatedSymbolUsageFix to keep line breaks when possible 2015-05-28 16:14:15 +03:00
Dmitry Jemerov
8f0f02fc59 correct some errors and omissions in stdlib doc comments 2015-05-28 14:38:36 +02:00
Dmitry Jemerov
fa5aa664b5 update build script for new distribution of dokka 2015-05-28 14:38:20 +02:00
Dmitry Jemerov
0e5b6c41dd use new syntax for annotations 2015-05-28 14:14:05 +02:00
Valentin Kipyatkov
5e5e71882e Code cleanup to work more reliably with nested problems 2015-05-28 13:45:24 +03:00
Valentin Kipyatkov
2b61bca6dd Code cleanup includes deprecated symbol usage fixes + code cleanup does not crash on nested usages to fix 2015-05-28 13:45:24 +03:00
Valentin Kipyatkov
d415b0c74d Fixed critical bug in DeprecatedSymbolUsageFix 2015-05-28 13:45:07 +03:00
Zalim Bashorov
68eca8bc00 JS backend: add the support secondary constructors 2015-05-28 11:06:06 +03:00
Zalim Bashorov
016534b487 Minor: change package in astUtils.kt: ast -> jsAstUtils 2015-05-28 11:06:05 +03:00
Zalim Bashorov
cb37ae5d1e Minor: add "ctor" to dictionary 2015-05-28 11:06:04 +03:00
Zalim Bashorov
e11d61d68a JS backend: move all class creation logic from FileDeclaration to ClassTranslator 2015-05-28 11:06:04 +03:00
Zalim Bashorov
6e7be78b98 Minor improvments in ClassTranslator after conversion 2015-05-28 11:06:03 +03:00
Zalim Bashorov
c589026a47 Convert ClassTranslator.java to Kotlin 2015-05-28 11:06:02 +03:00
Zalim Bashorov
b61c1376a2 ClassTranslator.java -> ClassTranslator.kt 2015-05-28 11:06:02 +03:00
Zalim Bashorov
ef5ee5100a JS backend: make CallTranslator more comfortable to use from java 2015-05-28 10:38:30 +03:00
Zalim Bashorov
68f851cbdc Move JvmCodegenUtil#getDelegationConstructorCall to common place (BindingContextUtils) 2015-05-28 10:30:54 +03:00
Zalim Bashorov
f3f799aab5 Fix secondary constructor tests for JS -- use non-zero fracitional part 2015-05-28 10:25:12 +03:00
Zalim Bashorov
3fe363e72b Minor: split test to access to companion and to nested object 2015-05-28 10:25:11 +03:00
Zalim Bashorov
dc1b91eacd JS: prepare tests for secondary constructors 2015-05-28 10:24:48 +03:00
Zalim Bashorov
72c2648fc8 JS frontend: remove diagnostics about the secondary constructors are not supported 2015-05-28 10:24:47 +03:00
Alexander Udalov
d14e5b8a72 Restore and deprecate Function{n}/ExtensionFunction{n} classes for easier migration
Users' Java code will not break in common cases (when passing functions to
Kotlin), and deprecation warnings will be reported.

Provide an inspection with a quick fix which allows to replace deprecated
function class usages to the new classes. Include this fix to the "code
cleanup" action
2015-05-28 01:20:05 +03:00
Ilya Gorbunov
851007cc6c Fix output of test that relied on the documentation wording. 2015-05-28 00:36:00 +03:00
Valentin Kipyatkov
ce40ed1385 J2K: use arrayOf instead of array and similar 2015-05-28 00:17:04 +03:00
Valentin Kipyatkov
002312f98a Import of KClass inserted when needed on conversion to Kotlin on paste 2015-05-28 00:17:04 +03:00
Valentin Kipyatkov
f687a40136 Conversion to Kotlin on paste: supported for annotation 2015-05-28 00:17:04 +03:00
Valentin Kipyatkov
098b313a32 Moved method 2015-05-28 00:17:04 +03:00
Valentin Kipyatkov
ce9a986524 J2K: updated to use of Kotlin's KClass instead of Java's class in annotation declarations and usages 2015-05-28 00:17:04 +03:00
Valentin Kipyatkov
0a2983d602 J2K: converting of enum constants overriding members 2015-05-28 00:17:03 +03:00
Valentin Kipyatkov
bb0b3fcd0c J2K: updating generated enums to modern syntax 2015-05-28 00:17:03 +03:00
Valentin Kipyatkov
f89cff8b78 "trait" -> "interface" 2015-05-28 00:17:03 +03:00
Valentin Kipyatkov
87cb36e8e9 Updating java to kotlin convert to new language syntax 2015-05-28 00:17:03 +03:00
Ilya Gorbunov
802ca5476d Clarify requirements for limit parameter in split method. Provide replacement for deprecated split(regex: String). 2015-05-27 23:28:06 +03:00
Ilya Gorbunov
ea85290939 Annotate deprecated members with proposed replacement. 2015-05-27 22:29:37 +03:00
Ilya Gorbunov
953bbef08c Allow to specify replacement for deprecated items in generated code. 2015-05-27 22:29:35 +03:00
Ilya Gorbunov
fa24db435d Stdlib documentation: clarified toMap behavior when a duplicate key is encountered. 2015-05-27 22:29:33 +03:00
Ilya Gorbunov
1fb4183bbb Prettify kdocs in stdlib, part 2. 2015-05-27 22:16:19 +03:00
Ilya Gorbunov
5c8c58f702 Prettify kdocs in stdlib, part 1. 2015-05-27 22:16:17 +03:00
Ilya Gorbunov
ae60f7a32f Prettify kdocs and exception messages in the generated code. 2015-05-27 22:16:15 +03:00
Mikhail Glukhikh
fe49a2ee51 Build fix 2015-05-27 23:40:40 +02:00
Dmitry Jemerov
a41205fff7 Allow calling KotlinCacheService.getResolutionFacade() with an empty set of Kotlin files.
This is needed in Dokka, where a project to be documented can contain only Java files, but we will still attempt to resolve links in Markdown files containing package documentation through the KDoc reference resolver. The attempts will fail when there are no Kotlin files, but at least we won't crash trying to retrieve the first element of an empty list.
2015-05-27 19:22:19 +02:00
Mikhail Glukhikh
3ad06f169d Solution for EA-66870: Foo<in *> and Foo<out *> types are now treated as incorrect.
#EA-66870  Fixed.
2015-05-27 19:07:46 +03:00
Mikhail Glukhikh
9b50705a0e Warning fixed 2015-05-27 19:07:43 +03:00
Mikhail Glukhikh
4fb331ecd3 Solution for KT-7838: now data flow information at the end of when expression is determined correctly.
#KT-7838  Fixed.
2015-05-27 19:07:41 +03:00
Alexey Sedunov
9e69b74a15 Extract Function: Extract smart-cast value as parameter
#KT-7576 Fixed
2015-05-27 18:41:42 +03:00
Michael Bogdanov
e20a5121c7 Support private package properties in inline functions 2015-05-27 18:09:40 +03:00
Denis Zharkov
be9cc2e91b Change color scheme for annotations
Use same color as for modifiers, but with plain font type
2015-05-27 17:41:27 +03:00
Denis Zharkov
53e9234ea9 Add quickfix for replacing positioned arguments in Java annotation 2015-05-27 17:41:27 +03:00
Ilya Gorbunov
0c818767a6 Replace usages of renamed overloads annotation. 2015-05-27 17:26:07 +03:00
Dmitry Jemerov
966df199bb move KDocFinder to idea-analysis package 2015-05-27 15:41:47 +02:00
Valentin Kipyatkov
a71710f589 DeprecatedSymbolUsageInWholeProjectFix: removed notification dialog 2015-05-27 16:15:56 +03:00
Valentin Kipyatkov
18ddac0249 Corrected formatting in test data 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
eadfa72480 Fixed formatter for EOL comments (via hack) 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
55acce5e0d Minor 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
b6eda35345 TODOs 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
697516cfdd DeprecatedSymbolUsageFix: fixed for java declaration + one more test 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
18c19457f0 DeprecatedSymbolUsageFix: handling of array access expression duplication 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
d5d1158e44 Comment saver is more clever about comma's 2015-05-27 16:15:55 +03:00
Valentin Kipyatkov
d3403dee1a DeprecatedSymbolUsageFix preserves comments 2015-05-27 16:15:54 +03:00
Valentin Kipyatkov
fefa12b0a9 ConvertForEachToForLoopIntention preserves comments 2015-05-27 16:15:54 +03:00
Valentin Kipyatkov
5d0b42ee71 ConvertToForEachFunctionCallIntention preserves comments outside of body too 2015-05-27 16:15:54 +03:00
Valentin Kipyatkov
8b44c93667 JetPsiFactory.createByPattern supports PsiChildRange as argument, used it in ConvertToForEachFunctionCallIntention 2015-05-27 16:15:54 +03:00
Valentin Kipyatkov
b957584d91 Refactored JetPsiFactory.createByPattern to handle different argument types uniformly 2015-05-27 16:15:54 +03:00
Valentin Kipyatkov
1d16b76a42 Minor corrections after code review 2015-05-27 16:15:54 +03:00
Valentin Kipyatkov
2eaf767521 JetPsiFactory: create by pattern allows Name's as arguments + changed placeholder text specification format 2015-05-27 16:15:53 +03:00
Valentin Kipyatkov
77d097b957 TODO's 2015-05-27 16:15:53 +03:00
Valentin Kipyatkov
c167ddb2fe Minor 2015-05-27 16:15:53 +03:00
Valentin Kipyatkov
df0d27b8b2 Split if intention preserves comments 2015-05-27 16:15:53 +03:00
Valentin Kipyatkov
4a2f2b62ec Fixed KT-7755 Convert to expression body kills comment
#KT-7755
2015-05-27 16:15:53 +03:00
Valentin Kipyatkov
b39e9ebdb2 Implemented special CommentSaver helper for not loosing comments when doing code transformation 2015-05-27 16:15:53 +03:00
Valentin Kipyatkov
333445d93e Fixed Convert to foreach intention loosing comments 2015-05-27 16:15:52 +03:00
Valentin Kipyatkov
0f36458d2e Made low prio 2015-05-27 16:15:52 +03:00
Valentin Kipyatkov
63f9d0abdb Convention name calls intentions made high priority 2015-05-27 16:15:52 +03:00
Valentin Kipyatkov
526bdfd500 "Flip binary expression" intention made low priority 2015-05-27 16:15:52 +03:00
Valentin Kipyatkov
4c88b31878 KT-7525 Don't suggest to replace 'get' call with index operator for static method calls (inspection & intention)
KT-5322 super.get issues a "Replace 'get' call with index operator" inspection

 #KT-7525 Fixed
 #KT-5322 Fixed
2015-05-27 16:15:52 +03:00
Valentin Kipyatkov
0fe334fd55 KT-7702 Split into 2 if's intention: produce better result for return
#KT-7702 Fixed
2015-05-27 16:15:52 +03:00
Valentin Kipyatkov
8f797e8e69 "Split if" intention - renamed tests 2015-05-27 16:15:51 +03:00
Valentin Kipyatkov
8e16ddb00e Minor 2015-05-27 16:15:51 +03:00
Valentin Kipyatkov
0d8d030763 "Add constructor parameters" fix - fixed display of too long signatures 2015-05-27 16:15:51 +03:00
Valentin Kipyatkov
04bee4dd7d Fixing issues after code review 2015-05-27 16:15:51 +03:00
Valentin Kipyatkov
17f0ac9ba7 Don't use plain text generation 2015-05-27 16:15:51 +03:00
Valentin Kipyatkov
5df840d9e3 Getting default value from overriding method 2015-05-27 16:15:50 +03:00
Valentin Kipyatkov
a7580d95e5 Accessing of default parameter value in compiled code via source (if found) 2015-05-27 16:15:50 +03:00
Valentin Kipyatkov
281acb860e Loading of annotation class arguments from compiled classes 2015-05-27 16:15:50 +03:00
Valentin Kipyatkov
b256329287 Added "ReplaceWith" to deprecated library functions 2015-05-27 16:15:50 +03:00
Valentin Kipyatkov
ec5256a0f0 DeprecatedCallableAddReplaceWithIntention 2015-05-27 16:15:50 +03:00
Valentin Kipyatkov
ba3d5f944e DeprecatedSymbolUsageFix: optimization to not search descriptors to import twice 2015-05-27 16:15:50 +03:00
Valentin Kipyatkov
ee681cbeed DeprecatedSymbolUsageFix: renamed local 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
e767cdef83 DeprecatedSymbolUsageFix: fixed nested calls with implicit receivers in the pattern 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
4407523b65 DeprecatedSymbolUsageFix: more correct code + refactoring 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
a9e00a3264 DeprecatedSymbolUsageFix: can drop more arguments when function literal argument exist 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
2e2701aa61 DeprecatedSymbolUsageFix: keeping named arguments 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
0c397548e8 createByPattern fix (after we changed way how JetPsiFactory.createArgument works 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
6b66e3b0e6 JetPsiFactory: refactored method for creating argument + introduced ability to create arbitrary constructs by pattern 2015-05-27 16:15:49 +03:00
Valentin Kipyatkov
161630a449 DeprecatedSymbolUsageFix: keeping functional literal arguments out of parenthesis 2015-05-27 16:15:48 +03:00
Valentin Kipyatkov
36f41c6d13 Minor code simplification 2015-05-27 16:15:48 +03:00
Valentin Kipyatkov
be9a3d10f6 DeprecatedSymbolUsageFix: fixed bug with symbols from root package not imported 2015-05-27 16:15:48 +03:00
Valentin Kipyatkov
97d3620262 DeprecatedSymbolUsageFix: dealing with vararg's 2015-05-27 16:15:48 +03:00
Valentin Kipyatkov
f8a4d9bf0b Moved test data into subfolders 2015-05-27 16:15:48 +03:00
Valentin Kipyatkov
6ddb208bb7 Removed default values from inline functions to workaround compiler's bug 2015-05-27 16:15:47 +03:00
Valentin Kipyatkov
f58ce760ca DeprecatedSymbolUsageFix: support for optional parameters (not complete) 2015-05-27 16:15:47 +03:00
Valentin Kipyatkov
766ca2b905 Deprecated symbol usages fix for the whole project 2015-05-27 16:15:47 +03:00
Valentin Kipyatkov
78302be571 Minor code clarification 2015-05-27 16:15:47 +03:00
Valentin Kipyatkov
5c445ca003 DeprecatedSymbolUsageFix: dealing with dropping arguments with potential side effects + stdlib's "let" has no receiver type bound 2015-05-27 16:15:47 +03:00
Valentin Kipyatkov
08cfca56f8 DeprecatedSymbolUsageFix - dealing with infix and operator calls 2015-05-27 16:15:47 +03:00
Valentin Kipyatkov
33caa7ad36 Moved utility method 2015-05-27 16:15:46 +03:00
Valentin Kipyatkov
a6f76bbf76 Fixed keywords after 'this@' completion + fixed implementation of JetExpressionWithLabel.getLabelName() 2015-05-27 16:15:46 +03:00
Valentin Kipyatkov
2a5ca095ee DeprecatedSymbolUsageFix - correct dealing with implicit receivers + fixed KT-7776 in completion
#KT-7776 Fixed
2015-05-27 16:15:46 +03:00
Valentin Kipyatkov
5da192ddd4 DeprecatedSymbolUsageFix - fixed bug with usage in derived class 2015-05-27 16:15:46 +03:00
Valentin Kipyatkov
450168d6c7 DeprecatedSymbolUsageFix - code refactoring 2015-05-27 16:15:46 +03:00
Valentin Kipyatkov
a773542d47 DeprecatedSymbolUsageFix - handling of complex expressions used twice 2015-05-27 16:15:46 +03:00
Valentin Kipyatkov
4999958ca4 DeprecatedSymbolUsageFix - other way of safe call treatment - prepare to handle arguments with side effects 2015-05-27 16:15:45 +03:00
Valentin Kipyatkov
348d09866a DeprecatedSymbolUsageFix: more correct generation of "let" for safe call 2015-05-27 16:15:45 +03:00
Valentin Kipyatkov
df850d7035 DeprecatedSymbolUsageFix: initial implementation 2015-05-27 16:15:45 +03:00
Valentin Kipyatkov
0a886320ca JetWholeProjectForEachElementOfTypeFix - not too much duplicating string arguments 2015-05-27 16:15:45 +03:00
Valentin Kipyatkov
7d8a92aeb7 More correct code in class completion insert handler 2015-05-27 16:15:45 +03:00
Valentin Kipyatkov
d7c64d44b6 Better implementation of "Move lambda outside parenthesis" 2015-05-27 16:15:44 +03:00
Valentin Kipyatkov
3bca1d1f83 "Move lambda outside parenthesis" should not be available when not valid 2015-05-27 16:15:44 +03:00
Valentin Kipyatkov
25e323e960 Methods for editing in JetValueArgumentList 2015-05-27 16:15:44 +03:00
Valentin Kipyatkov
1e60c24134 Added ResolutionFacada.resolveImportReference and used it (but not all places replaced yet!!) 2015-05-27 16:15:44 +03:00
Valentin Kipyatkov
5a737b8973 Correctness check in JetPsiFactory.createExpression 2015-05-27 16:15:44 +03:00
Valentin Kipyatkov
0dc92c3ee8 QuickFixMultiFileTestGenerated - shorter test data files names 2015-05-27 16:15:44 +03:00
Yan Zhulanow
2a7b5501f4 Do not generate annotations.txt file if kapt is not used in project 2015-05-27 16:11:08 +03:00
Yan Zhulanow
33ba9e85c0 Close kapt writer only once 2015-05-27 16:11:07 +03:00
Yan Zhulanow
42ba2860a6 Gradle: Do not save javaTask extract property 2015-05-27 16:11:07 +03:00
Yan Zhulanow
b254825427 kapt: fix several annotation processors in AP wrapper 2015-05-27 16:11:06 +03:00
Yan Zhulanow
28a3865997 Cache writer instance in kapt 2015-05-27 16:11:05 +03:00
Yan Zhulanow
c2dd7d197e APT: Use task qualifiers in annotation file names 2015-05-27 16:11:05 +03:00
Yan Zhulanow
cbe435ccef APT: Remove stub Java file after Java compile step 2015-05-27 16:11:04 +03:00
Yan Zhulanow
0a450c1739 Fix compatibility issues with Android Gradle plugin 1.2 2015-05-27 16:11:03 +03:00
Evgeny Gerashchenko
88021ffc73 KT-7381 Receiver parameter is never used for native extension function
#KT-7381 fixed
2015-05-27 16:07:09 +03:00
Evgeny Gerashchenko
2a23bc79f3 KT-7256 False "Receiver parameter not used" for property with delegation
#KT-7256 fixed
2015-05-27 16:07:09 +03:00
Sergey Mashkov
6e444baedb Indexer advance() should check previousTokens size before look inside
fixes IndexOutOfBounds during indexing
2015-05-27 15:32:00 +03:00
Dmitry Jemerov
1188e57597 rename @overloads annotation to @jvmOverloads 2015-05-27 12:23:08 +02:00
Natalia Ukhorskaya
5c7d13e23c JetPositionManager: do not analyze breakpoints in files outside source roots 2015-05-27 11:17:48 +03:00
Natalia Ukhorskaya
2d509b3211 Write correct lineNumbers for properties with comments 2015-05-27 11:17:46 +03:00
Natalia Ukhorskaya
ffb7027680 JetPositionManager: fix finding psi file by source name 2015-05-27 11:17:44 +03:00
Natalia Ukhorskaya
c77d448832 Fix EA-68813: readAccess in JetPositionManager 2015-05-27 10:20:10 +03:00
Natalia Ukhorskaya
0fbcfddf4a Gradle: debug message prefix added 2015-05-27 10:20:09 +03:00
Denis Zharkov
cab2328b64 Do not insert type parameters when replacing javaClass with T::class
Type parameters are invalid for class literal unless class is `Array`
2015-05-27 08:24:57 +03:00
Denis Zharkov
eb80764d21 Introduce forceResolveLazyTypes into TypeResolutionContext
The main reason is to force type resolution when resolving
type arguments in class literal as annotation value argument:

@Ann(Array<String>::class) class Ann

`String` left unresolved unless this commit is applied.

Note, that currently forced calculations used only when bare types are allowed
as it's true for class literals resolution and currenlty it's enough.
2015-05-27 08:24:42 +03:00
Alexander Udalov
f9556e584d Minor, suppress code conformance test for generated sources 2015-05-27 01:44:19 +03:00
Alexander Udalov
6ae7ed1cc4 Add some new tests on functions and extension functions 2015-05-27 01:44:19 +03:00
Alexander Udalov
fae2d0231c Fix test data, restore incorrectly deleted import
It was mistakenly deleted in 738a84e and 48b18f1
2015-05-27 01:44:18 +03:00
Ilya Gorbunov
9c5844cf45 Restore mapping between PsiFiles and VirtualFiles, otherwise built-ins psi elements will become invalid in next test. 2015-05-27 00:58:46 +03:00
Ilya Gorbunov
84ca26719d Deprecate meaningless or vague-defined operations with Char operands.
Change expected test output.
2015-05-27 00:58:35 +03:00
Ilya Gorbunov
c6abf75856 Do not generate primitive type definition for Char, place it in a file beside. 2015-05-27 00:58:24 +03:00
Ilya Gorbunov
5f319e69d8 Restore String.split(String, Int) overload and make it deprecated. 2015-05-27 00:36:30 +03:00
Ilya Gorbunov
1566ea83c7 Rename conflicting repeat function with the same behavior from js tests. 2015-05-26 23:23:39 +03:00
Ilya Gorbunov
310666a617 Deprecate times method taking integer and function. Provide top-level repeat method instead.
#KT-7074 Fixed.
2015-05-26 23:23:37 +03:00
Ilya Gorbunov
45c82f2844 map(): Take into account size of collection being transformed when allocating ArrayList.
#KT-7832 Fixed.
2015-05-26 23:23:36 +03:00
Ilya Gorbunov
c9afb407f1 Provide isNotEmpty() extension function for Maps. 2015-05-26 23:23:34 +03:00
Ilya Gorbunov
01a0348685 Remove deprecated size property usage from generated code. 2015-05-26 23:23:32 +03:00
Alexey Sedunov
58ef7f2691 Extraction Engine: Suggest both bounds for nullability-flexible types without nullability annotations. Do not omit return type if inferred one is flexible
#KT-6837 Fixed
2015-05-26 22:42:46 +03:00
Alexey Sedunov
72205540d6 Extract Function: Show possible types for receiver in Extract Function/Introduce Lambda Parameter dialogs
#KT-7578 Fixed
2015-05-26 22:42:43 +03:00
Alexey Sedunov
cb9b1019b2 Function <-> Property Intention: Fix conversion of recursive functions/property accessors
#KT-7823 Fixed
2015-05-26 19:29:09 +03:00
Alexey Sedunov
5afc6235cc Move: Do not update package directives in files that don't belong to source root
#KT-7824 Fixed
2015-05-26 19:29:08 +03:00
Alexey Sedunov
6a1ae8b911 Minor: Code cleanup 2015-05-26 19:29:07 +03:00
Alexey Sedunov
cc351e55b0 Create from usage: Use type predicates provided by control-flow analysis to suggest more precise types
#KT-7742 Fixed
2015-05-26 19:29:06 +03:00
Alexey Sedunov
c757701a87 Refactoring: Extract function getContainingPseudocode() 2015-05-26 19:29:05 +03:00
Alexey Sedunov
b6ea2d4fd4 Control-Flow: Compute type predicates for arguments of unresolved calls 2015-05-26 19:29:04 +03:00
Alexey Sedunov
036e2c585b Refactoring: Introduce getReferenceTargets() function 2015-05-26 19:28:11 +03:00
Alexey Sedunov
640f07969a Refactoring: Extract createUnresolvedCall() functions 2015-05-26 19:28:10 +03:00
Alexey Sedunov
3d3b5591e1 Control-Flow: Improve debug text of ReadValueInstruction 2015-05-26 19:28:09 +03:00
Alexey Sedunov
868329e3cb Control-Flow: Fix pseudocode generation for combined get/set and invoke conventions
#KT-4462 Fixed
 #KT-4681 Fixed
2015-05-26 19:28:07 +03:00
Alexander Udalov
fa29e75add Minor, move top level function to companion object
Package 'org.jetbrains.kotlin.idea.quickfix' already contains top level
functions in module 'idea-analysis' and top level functions in another module
cause compilation errors because of package facade class clash
2015-05-26 18:52:48 +03:00
Alexander Udalov
48b18f18d3 Restore explicit imports of Kotlin function types in Java
This is a follow-up to 738a84e259 and
d4965a4f3e. Optimize imports in all files
affected in those commits, drop temporary _.kt
2015-05-26 18:46:27 +03:00
Dmitry Jemerov
58e4ff0502 Add quickfixes for unnecessary casts and nullability operations to cleanup inspection. Rewrite two quickfixes from Java to Kotlin. Add inspection description. Use marker interface for identifying quickfixes applicable for code cleanup. 2015-05-26 14:41:23 +02:00
Dmitry Jemerov
e2dbfebf32 add more quickfixes to cleanup action 2015-05-26 14:41:21 +02:00
Dmitry Jemerov
6e7ea662c8 "Code Cleanup" action to migrate all instances of deprecated syntax to new one 2015-05-26 14:41:21 +02:00
Mikhail Glukhikh
4570872bfd Postfix expression code generation fixed as per KT-7561.
A set of tests for KT-7561 on codegen side, including exotic inc() functions().
 #KT-7561 Fixed.
2015-05-26 15:20:37 +03:00
Mikhail Glukhikh
5723c2a077 Front-end fix: result type corrected for increment / decrement expressions. Smart cast allowed on a postfix increment result. See KT-7561.
Now result type is receiver type for postfix increment, or increment result type for prefix increment.
A set of relevant tests.
2015-05-26 15:20:25 +03:00
Alexander Udalov
ea6d0b464d Report error when free function is called as extension 2015-05-26 15:05:04 +03:00
Svetlana Isakova
14c2690447 Distinguish between no declared arguments and an empty argument list
in a function literal
If there are no arguments, any number of them might be expected
2015-05-26 15:05:03 +03:00
Svetlana Isakova
d9568ef88c Added special type constructor for function/ extension function
that stores an information about declared argument types
2015-05-26 15:05:02 +03:00
Alexander Udalov
79ee91c048 Download and build intellij-markdown when ABI version changes 2015-05-26 15:05:02 +03:00
Alexander Udalov
9ba6d91e2e Prepare JVM runtime for support of reflection on functions
Introduce abstract class FunctionReference, which is supposed to be a
superclass for all anonymous classes generated for function references. Each
anonymous subclass will have statically-generated symbol info, which will be
used by reflection to locate the symbol
2015-05-26 15:05:01 +03:00
Alexander Udalov
9aeae7ddc6 Extract FunctionReferenceGenerationStrategy to top level 2015-05-26 15:05:00 +03:00
Alexander Udalov
d0bb06dbb0 Rename helper method in KotlinDebuggerTestBase
Now that functions and extension functions conform to each other, this method
began to conflict with the synthesized SAM-adapter from the super class (which
also can't be overridden by design)
2015-05-26 15:05:00 +03:00
Alexander Udalov
4d00077ffb Delete assertion on receiver presence in 'invoke'
#KT-6541 Fixed
 #KT-7383 Fixed
2015-05-26 15:04:59 +03:00
Alexander Udalov
34c6af0039 Advance stub and JVM ABI versions due to function type reform 2015-05-26 15:04:58 +03:00
Alexander Udalov
7f0b5029eb Refactor KotlinBuiltIns#isFunctionType/isExtensionFunctionType 2015-05-26 15:04:58 +03:00
Alexander Udalov
6a0a703539 Delete numbered ExtensionFunction classes and generation logic 2015-05-26 15:04:57 +03:00
Alexander Udalov
2186ce5e8d Degrade CFG test on values of extension function type
Apparently type annotations ('kotlin.extension' in particular) are lost
somewhere in control-flow values processor at the moment, so types may not be
as precise as they were when functions and extension functions had different
classifiers.

This test presumably only affects IDE functionality like 'Extract Method' in a
way that it will suggest a slightly incorrect function type for the parameter
of an extracted method. An issue is to be reported and fixed later upon demand
2015-05-26 15:04:56 +03:00
Alexander Udalov
49004a8b8e Conform functions to extension functions and vice versa
#KT-5989 Fixed
2015-05-26 15:04:56 +03:00
Alexander Udalov
b08bd3bc67 Update FunctionImpl hack in Evaluate Expression and test data
Lambdas now have an additional superclass besides FunctionImpl: Lambda, which
should also be changed to inherit from MagicAccessorImpl
2015-05-26 15:04:55 +03:00
Alexander Udalov
4141e0a8df Introduce fictitious numbered Function class descriptors 2015-05-26 15:04:54 +03:00
Alexander Udalov
27ed098467 Introduce kotlin.jvm.internal.Lambda, superclass for all lambdas
It has its arity precomputed, as opposed to the future KFunctionImpl inheriting
from FunctionImpl, for which the computation of arity can take some time and so
it shouldn't be passed in the constructor and saved as a field
2015-05-26 15:04:54 +03:00
Alexander Udalov
86ecb423f6 Drop generic parameters from FunctionImpl classes in JVM runtime
They are not used in any way but cause some complex code in JVM back-end
2015-05-26 15:04:53 +03:00
Alexander Udalov
135ee92966 Minor, don't pass constants as parameters 2015-05-26 15:04:52 +03:00
Alexander Udalov
d4965a4f3e Add temporary imports for disambiguation 2015-05-26 15:04:52 +03:00
Alexander Udalov
738a84e259 Temporary hack to migrate functions to package kotlin.jvm.functions
Add a file in package 'kotlin.jvm.functions' to the project and replace
explicit imports of functions 'kotlin.Function{n}' to two imports 'kotlin.*'
and 'kotlin.jvm.functions.*', so that the codebase can be compiled both by the
old and by the new compiler
2015-05-26 15:04:34 +03:00
Alexander Udalov
7baa7a72e2 Avoid extension functions in Java-facing code in project
This is to workaround the coming functions / extension functions global
refactoring and move
2015-05-26 14:27:42 +03:00
Alexander Udalov
b574c1d205 Move 23 function classes to package kotlin.jvm.functions, drop KFunction* 2015-05-26 14:27:41 +03:00
Alexander Udalov
f6178ad7dd Introduce Function, KFunction interfaces and 'extension' annotation 2015-05-26 14:27:40 +03:00
Alexander Udalov
90097d7e8b Move callable reference diagnostic tests to non-stdlib 2015-05-26 14:27:40 +03:00
Alexander Udalov
51684b3fe1 Drop "Reflection types not loaded" diagnostic
Reflection types are now considered to be built-in, so their absence means the
runtime is broken and the compiler can't work at all; this condition probably
should be handled on another level for all built-in types
2015-05-26 14:27:39 +03:00
Alexander Udalov
45c28abfee Keep built-in metadata for reflection interfaces
Reflection interfaces (interfaces in kotlin.reflect.* in core/builtins/) are
now fully considered as built-ins and can be accessed via KotlinBuiltIns. This
increases runtime size by ~20kb, but only because KotlinBuiltIns is static and
is therefore constructed only via resource loading from the compiler classpath
at the moment. As soon as it's possible to inject KotlinBuiltIns to the
particular resolution process, the metadata on JVM will be loaded via standard
annotation mechanism (kotlin.jvm.internal.KotlinClass/KotlinPackage) and wasted
runtime space will be reclaimed
2015-05-26 14:27:38 +03:00
Michael Nedzelsky
0879860074 AbstractQuickFixTest: fix possible test failure for tests with js-runtime 2015-05-26 12:56:25 +03:00
Michael Nedzelsky
f56bb4e9f4 add dependency on idea-js for idea and fix AbstractQuickFixTest 2015-05-26 05:05:08 +03:00
Michael Nedzelsky
533e4ac812 add dependency on idea-js to idea-test-framework and fix testUtils 2015-05-26 05:05:05 +03:00
Michael Nedzelsky
9f3154e6c0 add dependency on idea-js for idea-completion and fix AbstractJSBasicCompletionTest 2015-05-26 05:05:03 +03:00
Michael Nedzelsky
b558fd4181 add KotlinJavaScriptDecompiledTextConsistencyTest 2015-05-26 05:05:00 +03:00
Michael Nedzelsky
7978e0895e add KotlinJavaScriptStubConsistencyTest 2015-05-26 05:04:57 +03:00
Michael Nedzelsky
4a83de7ef3 tests: extract closeAndDeleteProject, move to testUtils 2015-05-26 05:04:54 +03:00
Michael Nedzelsky
1f744272f2 JS: add decompiled text generated tests 2015-05-26 05:04:52 +03:00
Michael Nedzelsky
c362db7330 tests for decompiled texts: AssertionError -> RuntimeException 2015-05-26 05:04:49 +03:00
Michael Nedzelsky
a0dc22b464 add TARGET_BACKEND: JVM to some decompiled tests 2015-05-26 05:04:44 +03:00
Michael Nedzelsky
79b81d846e fix and improve check for TARGET_BACKEND for generated tests 2015-05-26 05:04:41 +03:00
Michael Nedzelsky
f48a8d206a JdkAndMockLibraryProjectDescriptor: support for Kotlin/Javascript library 2015-05-26 05:04:39 +03:00
Michael Nedzelsky
fc916b22f8 MockLibraryUtil: add support for compile to js 2015-05-26 05:04:36 +03:00
Michael Nedzelsky
69c3f7b69a AllClassesCompletion: remove unnecessary code 2015-05-26 05:04:33 +03:00
Michael Nedzelsky
ac01dd6996 JsAnalyzerFacade: use only metadata from library modules 2015-05-26 05:04:30 +03:00
Michael Nedzelsky
484a73c17e JsHeaderLibraryDetectionUtil -> KotlinJavaScriptLibraryDetectionUtil
JsHeaderLibraryPresentationProvider -> KotlinJavaScriptLibraryPresentationProvider
2015-05-26 05:04:28 +03:00
Michael Nedzelsky
ebcc29b907 PluginDeclarationProviderFactoryService: remove special treatment for Kotlin/Javascript projects 2015-05-26 05:04:25 +03:00
Michael Nedzelsky
23da4f0897 JS: KotlinJavascriptMetaFileDecompiler -> KotlinJavaScriptMetaFileDecompiler 2015-05-26 05:04:23 +03:00
Michael Nedzelsky
a0579ebedd add KotlinJavaScriptStubBuilder 2015-05-26 05:04:20 +03:00
Michael Nedzelsky
ea9d7ed49a DecompiledTextFactory: new implementation of buildDecompiledTextFromJsMetadata 2015-05-26 05:04:17 +03:00
Michael Nedzelsky
18afa8f2d5 add KotlinJavaScriptDeserializeForDecompiler 2015-05-26 05:04:15 +03:00
Michael Nedzelsky
f1a0d86f87 JsMetaFileUtils: add some useful code, remove unnecessary parts 2015-05-26 05:04:12 +03:00
Michael Nedzelsky
4f26c7fe42 DecompiledNavigationUtils, JetSourceNavigationHelper: fix support for Kotlin/Javascript projects
DecompiledUtils: add isKotlinJavaScriptInternalCompiledFile
DecompiledUtils: add isKotlinJsMetaFile
DecompiledNavigationUtils: use isKotlinJvmCompiledFile, isKotlinJsMetaFile
DecompiledNavigationUtils: isFromKotlinJavascript -> isFromKotlinJavasriptMetadata
2015-05-26 05:04:09 +03:00
Michael Nedzelsky
f92d112564 DirectoryBasedClassFinder: add DirectoryBasedKotlinJavaScriptMetaFileFinder and DirectoryBasedKotlinJavaScriptDataFinder 2015-05-26 05:04:06 +03:00
Michael Nedzelsky
7a01ba7d7a JS: add jsProtoBufUtil 2015-05-26 05:04:04 +03:00
Michael Nedzelsky
c4c8f3c3ea convert IDEVirtualFileFinder to kotlin 2015-05-26 05:04:01 +03:00
Michael Nedzelsky
6e371e61a9 change extension: IDEVirtualFileFinder.java -> IDEVirtualFileFinder.kt 2015-05-26 05:03:57 +03:00
Michael Nedzelsky
d4f348edd5 VirtualFileFinder: regenerate injectors 2015-05-26 05:03:54 +03:00
Michael Nedzelsky
618a8622a1 VirtualFileFinderFactory: introduce JvmVirtualFileFinderFactory, JsVirtualFileFinderFactory 2015-05-26 05:03:51 +03:00
Michael Nedzelsky
de35434800 KotlinUpdatePluginComponent: update indices for Kotlin Javascript metafiles. 2015-05-26 05:03:48 +03:00
Michael Nedzelsky
3d641b17b4 add KotlinJavaScriptMetaFileIndex: support indexing for Kotlin Javascript meta files 2015-05-26 05:03:45 +03:00
Michael Nedzelsky
48e7c8cd60 convert KotlinClassFileIndex to kotlin 2015-05-26 05:03:42 +03:00
Michael Nedzelsky
38674dd3a1 convert KotlinClassFileIndex to kotlin: change extension: KotlinClassFileIndex.java -> KotlinClassFileIndex.kt 2015-05-26 05:03:40 +03:00
Michael Nedzelsky
85e84b8aef IDELightClassGenerationSupport: do not try to create stub for non java-class files 2015-05-26 05:03:37 +03:00
Michael Nedzelsky
0815eab3a5 add KotlinJavaScriptMetaFileType 2015-05-26 05:03:34 +03:00
Michael Nedzelsky
0a6c6e35b5 JS: JpsJsModuleUtils: do not include urls with kotlin-js-meta protocol 2015-05-26 05:03:31 +03:00
Michael Nedzelsky
4a05005fa7 JS: do not include sources in kotlin-jslib.jar 2015-05-26 05:03:28 +03:00
Michael Nedzelsky
044497fab6 JS: add idea-js module: KotlinJavaScriptLibraryManager and KotlinJavaScriptLibraryContentsTreeStructureProvider 2015-05-26 05:03:25 +03:00
Michael Nedzelsky
06af6bbd82 JS: KotlinJavascriptSerializationUtil, KotlinJavascriptSerializedResourcePaths: add some useful functions 2015-05-26 05:03:14 +03:00
Ilya Gorbunov
1cf4a407d1 JS: Provide MIN_VALUE and MAX_VALUE member constants for Double and Float companion objects.
JVM: Make MIN_VALUE and MAX_VALUE not an extension but member constant properties of Double and Float companion objects.
2015-05-26 00:26:19 +03:00
Alexey Tsvetkov
bd934bc3c4 Minor in JS: fixed typo in file name (abstarct->abstract) 2015-05-25 20:20:26 +03:00
Alexey Tsvetkov
fc1a1f742b JS test: added multi-module inline tests 2015-05-25 20:20:25 +03:00
Alexey Tsvetkov
115798f584 JS test: check directives in MultipleModulesTranslationTest 2015-05-25 20:20:25 +03:00
Alexey Tsvetkov
f214c4eac7 JS test: use common dependencies.txt for MultipleModulesTranslationTest 2015-05-25 20:20:25 +03:00
Alexey Tsvetkov
08df655dcc JS: simplify load metadata 2015-05-25 20:20:25 +03:00
Alexey Tsvetkov
b2238c0ebf JS: search inline function in .js file corresponding to module's
.meta.js
2015-05-25 20:20:25 +03:00
Evgeny Gerashchenko
0488229a61 KT-7693 Unused constructor parameter is not detected if class is constructed with named argument
#KT-7693 fixed
2015-05-25 18:33:08 +03:00
Mikhail Glukhikh
3c7225e83a An implementation of KT-7753: now enum constructors cannot be called explicitly.
Several tests are provided.
 #KT-7753 Fixed.
2015-05-25 17:27:31 +03:00
Michael Bogdanov
8cf21f24cd Fix for KT-7792: Invalid class file generation: java.lang.ClassFormatError: Invalid length 65522 in LocalVariableTable in class file
#KT-7792 Fixed
2015-05-25 17:06:18 +03:00
Natalia Ukhorskaya
37c47ac980 Show notification for "Non configured Kotlin Project" only after indexing 2015-05-25 16:19:05 +03:00
Natalia Ukhorskaya
a47a27565b JetPositionManager: do not calculate class name during indexing 2015-05-25 16:19:04 +03:00
Natalia Ukhorskaya
1cfed000c4 Fix exception during step into inline function in library 2015-05-25 16:19:03 +03:00
Natalia Ukhorskaya
2538ebe407 Tests: add ability to write custom stepping tests 2015-05-25 16:19:02 +03:00
Natalia Ukhorskaya
403ca00a63 Fix exception: for inline functions in stdlib we calculate classname by declaration 2015-05-25 16:19:01 +03:00
Natalia Ukhorskaya
5d9daf3890 Refactor stepping tests 2015-05-25 16:19:00 +03:00
Natalia Ukhorskaya
cf163181f1 Minor: report exception with stackTrace 2015-05-25 16:18:58 +03:00
Sergey Mashkov
fe26bd22f0 JS stubs: add URL specification 2015-05-25 14:55:47 +03:00
Mikhail Glukhikh
f4977a1108 Reorganization of when checking: exhaustion predicates clarified, analysis on platform enum warnings was moved to frontend.java 2015-05-25 14:23:57 +03:00
Pavel V. Talanov
e4c242e66b Remove direct usages of ModuleDescriptor#getPackageFragmentProvider() 2015-05-25 13:00:16 +03:00
Pavel V. Talanov
23dabf595a J2k for PackageViewDescriptorImpl: prettify 2015-05-25 13:00:15 +03:00
Pavel V. Talanov
3bca284e1b J2k for PackageViewDescriptorImpl: autoconvert 2015-05-25 13:00:15 +03:00
Pavel V. Talanov
5ff4765e3d J2k for PackageViewDescriptorImpl: rename file 2015-05-25 13:00:14 +03:00
Sergey Mashkov
07a3233569 JS stubs: add CSSOM view specification and GEOMETRY spec 2015-05-25 12:36:42 +03:00
Ilya Gorbunov
4fd1b46e91 Refactor JS tests: unified package name, test JS specific map implementations only in JS.
Add required files to build StdLibTestToJSTest.
Remove tests StdLibMapJsTest and StdLibSetJsTest because they are tested elsewhere.
2015-05-24 05:07:01 +03:00
Ilya Gorbunov
c95ba4da8e Tests for specialized primitive implementations of sets and maps in JS. 2015-05-24 05:06:51 +03:00
Ilya Gorbunov
4d3855a8fb Implement missing members for sets, maps and entry of map.
hashCode and toString for PrimitiveHashMap, hashCode for PrimitiveHashSet.
2015-05-24 05:06:24 +03:00
Ilya Gorbunov
df6d4dc73f Implement some of missing AbstractList methods.
Make ListIterator to implement kotlin.ListIterator interface.
Add TODOs and UnsupportedOperationExceptions for members left to implement.
2015-05-24 05:04:06 +03:00
Ilya Gorbunov
e31cb19a2c Expected output of test changed after introducing new overload of listOf. 2015-05-24 05:03:56 +03:00
Ilya Gorbunov
ebe578dbc5 Tests to ensure the behavior of the specialized empty List, Set, Map implementations is same as of non-specialized ones. 2015-05-24 05:03:46 +03:00
Ilya Gorbunov
edc471c8ec Optimize the implementation of emptyList, emptySet and emptyMap and make them serializable.
Specialized implementations of singleton List, Set and Map are used in JVM.

#KT-6682 Fixed
#KT-7104 Fixed
#KT-4840 Fixed
2015-05-24 05:03:36 +03:00
Alexey Sedunov
b7277cd80c Find Usages: Use isEquivalentTo() instead of identity equality when matching references with PsiCompiledElement 2015-05-22 20:51:28 +03:00
Alexey Sedunov
b2201026d1 Java Resolver: Substitute original element when resolving PsiMethod to FunctionDescriptor
#KT-7353 Fixed
2015-05-22 20:51:25 +03:00
Mikhail Glukhikh
babb7e58bc Implementation of KT-6399: platform types under when are now counted as not nullable but warning is generated. #KT-6399 Fixed.
A set of tests. Warning about Java enum nullable argument under when in particular situations.
2015-05-22 18:38:30 +03:00
Ilya Gorbunov
0efaedd32c Rename files to avoid having identically named files in the same package, which sometimes may confuse debugger. 2015-05-22 18:08:28 +03:00
Evgeny Gerashchenko
a5da64bd4f Don't ask user to choose method for renaming parameter when it is changed in overridden function. 2015-05-22 17:18:09 +03:00
Evgeny Gerashchenko
24c533df32 KT-6285 Rename refactoring doesn't rename named arguments when rename function parameters or private val/var constructor parameters
Just added test. Works automatically since rename parameter now delegates to change signature.

 #KT-6285 fixed
2015-05-22 17:18:08 +03:00
Evgeny Gerashchenko
2568fc92cb Supported Kotlin in Java's automatic parameter renamer. 2015-05-22 17:18:07 +03:00
Evgeny Gerashchenko
1e46469bb1 Automatic renaming parameter in hierarchy. 2015-05-22 17:18:06 +03:00
Ilya Gorbunov
33f5158170 Fix deprecated replaceAll and replaceFirst usages in stdlib tests and tools. 2015-05-22 16:13:55 +03:00
Ilya Gorbunov
79a5e0607d Fix deprecated replaceAll and replaceFirst usages. 2015-05-22 16:13:53 +03:00
Ilya Gorbunov
36fb5b3c49 Use platform independent way to split output to lines. 2015-05-22 16:12:07 +03:00
Evgeny Gerashchenko
9b28609d57 Optimized matchesTarget for "(" references 2015-05-22 14:33:11 +03:00
Evgeny Gerashchenko
e50de5d94d KT-7730 Find Usages causes 100% CPU usage, UI blocked, never returned
KT-7623 Renaming val constructor parameter of a data class is very slow

 #KT-7730 fixed
 #KT-7730 fixed
2015-05-22 14:33:11 +03:00
Mikhail Glukhikh
d8745b3ecb Solution for EA-65195. #EA-65195 Fixed. 2015-05-22 13:38:36 +03:00
Natalia Ukhorskaya
52fe6310a0 Fix breakpoints in inline functions in libraries 2015-05-22 11:05:06 +03:00
Ilya Gorbunov
6516c74a1a Revert back 2nd stage of split semantics change and restore deprecated String.split(String). 2015-05-21 23:13:16 +03:00
Alexey Sedunov
b1f1360081 PSI: Make JetPostfixExpression.getBaseExpression() nullable
#KT-7761 Fixed
2015-05-21 19:29:49 +03:00
Alexey Sedunov
14d1d8e1dc Inspections: Create single diagnostic for inspections based on multiple intentions
#KT-7784 Fixed
2015-05-21 19:29:47 +03:00
Alexey Sedunov
5166cdbc96 Introduce...: Allow semicolon extraction
#KT-7583 Fixed
2015-05-21 19:29:46 +03:00
Alexey Sedunov
64892e7d28 Minor: Fix inconsistent naming of menu items under "Refactor > Extract"
#KT-7609 Fixed
2015-05-21 19:29:44 +03:00
Natalia Ukhorskaya
1b6475c676 LibraryClassFileSearcher: minor, do not search top level functions in package inner classes 2015-05-21 19:17:37 +03:00
Natalia Ukhorskaya
0b91ab141e FieldWatchpoints: UI for adding kotlin field watchpoint 2015-05-21 19:17:36 +03:00
Natalia Ukhorskaya
2b015ae09a Debugger: support field watchpoints for kotlin 2015-05-21 19:17:35 +03:00
Natalia Ukhorskaya
7406627e26 Minor: optimise search in LibraryClassFileSearcher 2015-05-21 19:17:33 +03:00
Natalia Ukhorskaya
95b9c05138 Tests for step out command 2015-05-21 19:17:32 +03:00
Natalia Ukhorskaya
5edc25d2ba Debugger: step into default property getter/setter
#KT-7287 Fixed
2015-05-21 19:17:31 +03:00
Natalia Ukhorskaya
f742188df9 Minor: do not use property in twoLambdasOnOneLineSecond test 2015-05-21 19:17:30 +03:00
Ilya Gorbunov
fb342de451 Ensure stable order is used when rendering list of resolved calls by sorting them with MemberComparator. 2015-05-21 19:07:19 +03:00
Zalim Bashorov
4de3e3c712 Fix SlicedMapImpl#clear 2015-05-21 18:53:57 +03:00
Zalim Bashorov
d8b1856e1c Create SlicedMapImpl#collectiveSliceKeys on demand 2015-05-21 18:53:56 +03:00
Zalim Bashorov
492404bf04 Introduce KeyWithSlice and use it as Key for UserDataHolder in SlicedMap instead of cashing mapping from key to slice(see SlicedMapImpl#keyIdToSlice) 2015-05-21 18:53:56 +03:00
Zalim Bashorov
ecb824386e Optimize memory usage in SlicedMapImpl (used in BindingContext)
In short:
before these changes: Map<SlicedMapKey<slice, key>, value>
after: Map<key, Map<slice, value>> // where for nested Map used lightweight storage UserDataHolder

Before these changes it stored map from SlicedMapKey to value.
Where SlicedMapKey created for each record and store slice and key.
And now it sored map from key to UserDataHolder.
UserDataHolder store map from slice to value.
2015-05-21 18:53:56 +03:00
Zalim Bashorov
c7175e1858 Temporary copy UserDataHolderBase and KeyFMap implementations from intellij/master 2015-05-21 18:53:56 +03:00
Yan Zhulanow
89d3a4b623 Move AnnotationProcessingManager to main kotlin-gradle-plugin 2015-05-21 15:48:30 +03:00
Yan Zhulanow
6de79f46e4 More kotlin-annotation-processing parsing tests 2015-05-21 15:48:29 +03:00
Yan Zhulanow
07214c4f35 Platform-agnostic text compare in kotlin-annotation-processing 2015-05-21 15:48:27 +03:00
Yan Zhulanow
692e396ffd Support constructors in kapt wrapper 2015-05-21 15:48:26 +03:00
Yan Zhulanow
569582fd34 kapt: Add constructor collectToFile test 2015-05-21 15:48:26 +03:00
Yan Zhulanow
62a1f8edf3 Rename kotlinApt/ directories to kapt/ 2015-05-21 15:48:25 +03:00
Yan Zhulanow
c414c598ca Minor: fixes in KotlinAnnotationProvider (APT wrapper) 2015-05-21 15:48:24 +03:00
Yan Zhulanow
d2e256f470 Output annotation processor fqName if the processor can't be initialized 2015-05-21 15:48:24 +03:00
Yan Zhulanow
0363b6b911 Warn if the generated source destination (for APT) was modified 2015-05-21 15:48:23 +03:00
Yan Zhulanow
7a2f3bf1ea Replace all dollar signs in class name with . (temporary workaround) 2015-05-21 15:48:22 +03:00
Yan Zhulanow
b9a9f783e9 Fix annotation collector tests (now using mock JDK) 2015-05-21 15:48:22 +03:00
Yan Zhulanow
921017367a APT: Add more compiler plugin tests 2015-05-21 15:48:21 +03:00
Yan Zhulanow
594988db51 Move kapt compiler plugin classes to BundledCompilerPlugins 2015-05-21 15:48:20 +03:00
Yan Zhulanow
01a097dae7 Annotations file name change: annotations.txt -> annotations.kotlin.txt 2015-05-21 15:48:20 +03:00
Yan Zhulanow
fdc183e3af Apt working dir is now outside the Kotlin classes directory 2015-05-21 15:48:19 +03:00
Yan Zhulanow
d93508f4d3 APT: Support non-Android Java projects in Gradle 2015-05-21 15:48:18 +03:00
Yan Zhulanow
80762f99bb Catch UnknownPropertyException properly 2015-05-21 15:48:17 +03:00
Yan Zhulanow
297f2d0669 Add annotation file parse tests in AP wrapper 2015-05-21 15:48:16 +03:00
Yan Zhulanow
803bfd6097 Add kotlin-annotation-processing dependency automatically in kotlinApt configurations 2015-05-21 15:48:15 +03:00
Yan Zhulanow
964e57a8f8 Add annotation processor wrapper as a Maven artifact 2015-05-21 15:48:14 +03:00
Yan Zhulanow
c6e11949b8 Support Android source sets in annotation processing 2015-05-21 15:48:11 +03:00
Yan Zhulanow
905eb01044 Annotation processor wrapper fqName changed 2015-05-21 15:48:10 +03:00
Yan Zhulanow
3e5b24f2a2 Add output dir for generated sources 2015-05-21 15:48:09 +03:00
Yan Zhulanow
ee8f2bbd75 Generate custom annotation class file 2015-05-21 15:48:09 +03:00
Yan Zhulanow
1dd96a3f23 Move APT-related functions to AnnotationProcessingManager 2015-05-21 15:48:08 +03:00
Yan Zhulanow
d9289df29e Basic annotation collector tests 2015-05-21 15:48:07 +03:00
Yan Zhulanow
f12531dd6d Initial annotation processing support in Gradle 2015-05-21 15:48:07 +03:00
Yan Zhulanow
b2220ca98a Annotation collector compiler plugin 2015-05-21 15:48:06 +03:00
Mikhail Glukhikh
c8aa6defb6 Data flow information is no longer dropped while analyzing object literal expression. #KT-6293 Fixed. #KT-7110 Fixed.
A set of tests for KT-6293 / KT-7110 provided.
2015-05-21 13:03:39 +03:00
Michael Bogdanov
5bca1d3c8f Added dianostic error for non-local return on disabled inlines,
Render bytecode diagnostics in BytecodeToolWindow

  #KT-5584 Fixed
2015-05-21 10:06:03 +03:00
Michael Bogdanov
ef4981b0ef Report error on indirect inline cycles 2015-05-21 10:06:02 +03:00
Michael Bogdanov
a671d684c9 Test for obsolete KT-5199: IllegalArgumentException with non local return in lambda
#KT-5199 Obsolete
2015-05-21 10:06:02 +03:00
Michael Bogdanov
4abaa54d0e Test for obsolete KT-4869: Report error when inline parameter is passed to a function variable
#KT-4869 Obsolete
2015-05-21 10:06:01 +03:00
Michael Bogdanov
319c5aec60 Fix for KT-7557: NoSuchMethodError when capturing receiver in object expression
#KT-7557 Fixed
   #KT-7769 Fixed
2015-05-21 10:06:01 +03:00
Michael Nedzelsky
34100fff99 fix maven tests: NoInternalVisibilityInStdLibTest.kt 2015-05-21 02:46:44 +03:00
Michael Nedzelsky
bfc641caba JS: fix tests for -meta-info 2015-05-21 02:30:57 +03:00
Michael Nedzelsky
d629271510 JS: make -meta-info cli option boolean 2015-05-21 02:30:54 +03:00
Michael Nedzelsky
572ce47c25 add tests for serializaion of nested classes and objects (builtins and js) 2015-05-21 02:30:38 +03:00
Michael Nedzelsky
6b64dcc4ee JvmProtoBuf: reuse one instance of ExtensionRegistryLite 2015-05-21 02:30:35 +03:00
Michael Nedzelsky
ea8234adb9 convert JvmProtoBufUtil.java to kotlin, step 2: convert content 2015-05-21 02:30:32 +03:00
Michael Nedzelsky
2a6cd3dd96 convert JvmProtoBufUtil.java to kotlin, step 1: rename extentsion 2015-05-21 02:30:27 +03:00
Pavel V. Talanov
cfdb1f4ec3 Refactor creation of ModuleDescriptor
Add storageManager to ModuleDescriptorImpl (to be used later)
Extract ModuleParameters to hold default imports and platform class map
Introduce MutableModuleContext to simplify module creation code
2015-05-20 19:45:50 +03:00
Ilya Gorbunov
6a3cb0eff8 Provide distinctBy(keySelector) method for collections and sequences.
Implement distinct() and toMutableSet() for sequences.
Breaking change: distinct() now returns List instead of Set.

#KT-5834 Fixed
#KT-6063 Fixed
2015-05-20 19:28:47 +03:00
Ilya Gorbunov
46d91b2606 Add test for toMap with key selector and value transform. 2015-05-20 19:28:45 +03:00
Ilya Gorbunov
85e637b1e7 Revert toArrayList for primitive arrays back to trivial implementation.
Use newly introduced Int.MAX_VALUE in JS.
Inline mapCapacityForValues function.
Precalculate capacity of linked hash set being created with toMutableSet function.
2015-05-20 19:28:44 +03:00
Danny Thomas
7ce0487b7e Collection performance improvements
Lists

- For arrays, use Arrays.asList, then toArrayList making the list creation an array copy
- For the same reason, use the ArrayList(Collection) constructor
- Replace duplicate code in toList, instead calling toArrayList

Maps/Sets

- Where the size of the source is known, precalculate the capacity, using the formula used by Guava's Maps class
- For toMap where we're unable to get at the private function, use HashSet's formula where the size is known
- Add a toMap that takes a selector and a transform, avoiding a separate step for transforming values
2015-05-20 19:27:44 +03:00
Svetlana Isakova
0e6babc96b Converted IdeRenderers to kotlin 2015-05-20 15:19:31 +02:00
Svetlana Isakova
61df8c55e4 Rename IdeRenderers to kt file 2015-05-20 15:19:31 +02:00
Evgeny Gerashchenko
7dbc08f048 Moved util function to util package. Also to avoid top-level functions in same package of different targets. 2015-05-20 15:48:07 +03:00
Valentin Kipyatkov
ce4fa6b0f1 KT-4774 Hotkey conflict for "select all occurrences" and "convert java file to kotlin file"
Changed shortcut to Ctrl-Alt-Shift-K

 #KT-4774 Fixed
2015-05-20 14:01:58 +03:00
Valentin Kipyatkov
d91ee03e9e KT-7178 Converter from Java drops the result when there is already a file with the same name
#KT-7178 Fixed
2015-05-20 14:01:58 +03:00
Valentin Kipyatkov
0b809453b5 Fixed KT-7682 Conversion from Java to Kotlin - converted file is not added automatically to VCS
#KT-7682 Fixed
2015-05-20 14:01:58 +03:00
Sergey Mashkov
4695aed993 Replace trait with interfaces in JavaScript stubs 2015-05-20 14:01:03 +03:00
Sergey Mashkov
9b24a9b73b Maven: fix test data for project configurator 2015-05-20 13:45:14 +03:00
Sergey Mashkov
f9ab08ed47 Maven: maven configurator shouldn't add resources directory to sources list
#KT-7781 Fixed
2015-05-20 13:45:13 +03:00
Sergey Mashkov
6c59a311fb Maven: Maven IDEA configurator also configures tests for JavaScript 2015-05-20 13:45:13 +03:00
Denis Zharkov
6df805d6f2 Refine diagnostics reported on implicit constructor delegation call
- Do not report anything else if primary's call expected

- Do not repeat EXPLICIT_DELEGATION_CALL_REQUIRED

 #KT-7230 Fixed
2015-05-20 09:24:57 +03:00
Denis Zharkov
87be626848 Add quickfix for deprecated labels syntax 2015-05-20 09:24:57 +03:00
Denis Zharkov
e98b9ea84e Save annotations of lambda on SAM's method
Also add tests checking that annotations on 'invoke' methods of common lambdas are saved properly

 #KT-6932 Fixed
2015-05-20 09:24:57 +03:00
Denis Zharkov
e078eaf15b Resolve annotations on lambda's descriptor
Also add test checking functional expression
2015-05-20 09:24:57 +03:00
Denis Zharkov
fd4946e552 Annotate $default-method with same annotations as original
#KT-6930 Fixed
2015-05-20 09:24:57 +03:00
Denis Zharkov
5b1f3080d3 Add quickfix removing names of function expressions 2015-05-20 09:24:57 +03:00
Denis Zharkov
b650753643 Change formatting of function expressions without names
No spaces between 'fun' and value parameter list
2015-05-20 09:24:56 +03:00
Denis Zharkov
2deb7faf05 Deprecate function expressions with names 2015-05-20 09:24:56 +03:00
Denis Zharkov
aa1548a83b Report obsolete labels syntax deprecation on objects
#KT-7771 Fixed
2015-05-20 09:24:56 +03:00
Denis Zharkov
5297b4974f Adjust descriptor renderer to latest parsing changes
- `constructor` keyword expected in primary constructor with non-empty modifier list
- annotation list should be preceeded by '@'
2015-05-20 09:24:56 +03:00
Denis Zharkov
dd14b36921 Prohibit unescaped annotations on primary constructor of local class 2015-05-20 09:24:56 +03:00
Denis Zharkov
89337ff51e Change deprecation rules for annotations in brackets
Also adjust quickfix for deprecated syntax
2015-05-20 09:24:56 +03:00
Denis Zharkov
e4f54b5d2e Parsing: support '@[ann1 ann2]', '@file:ann' and '@file:[ann]' cases 2015-05-20 09:24:56 +03:00
Denis Zharkov
f6aadec7e2 Minor, rename tests onFile -> onFileObsolete 2015-05-20 09:24:56 +03:00
Denis Zharkov
083966389a Minor, get rid of repeating parsing semantics 2015-05-20 09:24:55 +03:00
Denis Zharkov
1df08cfa6c Minor, drop redundant allowAtAnnotations option
As '@' annotations are allowed everywhere
2015-05-20 09:24:55 +03:00
Denis Zharkov
488464dd3b Minor, extract methods 2015-05-20 09:24:55 +03:00
Denis Zharkov
aa4a20dddc Add missing 'constructor' to testData when it was necessary 2015-05-20 09:24:55 +03:00
Denis Zharkov
a9c1c3edb6 Add quickfix for missing 'constructor' inside primary ctor 2015-05-20 09:24:55 +03:00
Denis Zharkov
a2578d0f46 Minor, move quickfixUtil.kt 2015-05-20 09:24:55 +03:00
Denis Zharkov
46a6cab671 Formatter: no spaces after 'constructor' inside primary ctor 2015-05-20 09:24:55 +03:00
Denis Zharkov
09cae59f0a Report warning on modifier list of primary ctor unless 'constructor' keyword specified 2015-05-20 09:24:54 +03:00
Denis Zharkov
805a811d91 Change parsing rules for primary constructor
- Parse 'constructor' keyword before value arguments
- Allow unescaped annotations
2015-05-20 09:24:54 +03:00
Denis Zharkov
d058a07ce2 Parsing: allow semicolon between declarations 2015-05-20 09:24:54 +03:00
Valentin Kipyatkov
7edff172a2 KT-1273 Unused assignment - should highlight assignment instead of expression
#KT-1273 Fixed
2015-05-19 23:45:59 +03:00
Alexander Udalov
189286efee Support platformStatic members in companion object of enums
#KT-7777 Fixed
2015-05-19 18:47:00 +03:00
Alexander Udalov
e1b367bd65 Delete test case for navigation to 'invoke' of functional type
Classes for functional types will not have any physical source representation
anymore, so navigation to them in the IDE will not be possible
2015-05-19 18:47:00 +03:00
Alexander Udalov
bc2398cf40 JS: disable test on inheritance from function types
This is not yet fully supported but this test is an obstacle for the function
type refactoring

 #KT-7692 Open
2015-05-19 18:46:59 +03:00
Alexander Udalov
7a1b3bfbed JS: serialize/deserialize type annotations similarly to JVM
No new tests added because there are some on extension functions, which soon
will depend on type annotations to be preserved to work correctly
2015-05-19 18:46:58 +03:00
Andrey Breslav
a2b1a86ef5 Rename packages in kotlin-reflect.jar so that they do not duplicate compiler classes 2015-05-19 17:15:02 +03:00
Andrey Breslav
100c1b2787 Proguard instruction extracted to a separate file 2015-05-19 17:15:02 +03:00
Andrey Breslav
f7a9cc6b28 Fix for EA-64905 - assert: TypeUtils.intersect 2015-05-19 17:15:02 +03:00
Mikhail Glukhikh
1389b62fa4 Enum entry delimiters / super constructors: a few remaining warnings removed 2015-05-19 17:07:47 +03:00
Pavel V. Talanov
5b14d5be28 ClsStubBuilder: fix stub builder in case of java types annotated with special annotations 2015-05-19 16:01:40 +03:00
Sergey Mashkov
09e7e0da4d JS: example library to use new library format 2015-05-19 15:51:38 +03:00
Sergey Mashkov
4ef745974e Maven: Fix build for Maven 3.0.5 2015-05-19 15:00:10 +03:00
Mikhail Glukhikh
1edce76d01 Fix for EA-68569 with a test. #EA-68569 Fixed 2015-05-19 13:55:28 +03:00
Nikolay Krasko
0108205367 Minor: log class of element in assert message 2015-05-19 13:04:57 +03:00
Nikolay Krasko
9c507ec9cb Use equality check when looking for java elements in IDE 2015-05-19 13:04:56 +03:00
Nikolay Krasko
edeea5e399 Refactoring: move JavaDescriptorResolver extensions to idea-analysis module 2015-05-19 13:04:55 +03:00
Nikolay Krasko
ea789845aa J2K: LazyTopDownAnalyzer - converter fixes 2015-05-19 13:04:54 +03:00
Nikolay Krasko
6caa1e644d J2K: LazyTopDownAnalyzer - converter 2015-05-19 13:04:54 +03:00
Nikolay Krasko
94386f35e3 J2K: LazyTopDownAnalyzer - rename file 2015-05-19 13:04:53 +03:00
Mikhail Glukhikh
3585c45f70 Fixed a quick fix for enum entry delimiters: situation with following comments. Three new tests. isAvailable(). 2015-05-19 11:22:57 +03:00
Mikhail Glukhikh
6342b98592 Fixed a quick fix for enum entry short super constructor syntax (situation with a preceding comment / annotation). Four extra tests. isAvailable(). 2015-05-19 11:22:34 +03:00
Natalia Ukhorskaya
62e9c31987 Do not step into package facade class if SKIP_SYNTHETIC_METHODS flag is true 2015-05-19 10:39:09 +03:00
Michael Bogdanov
0cb4b8f8d4 Fix outer info generation for scripts 2015-05-19 10:34:34 +03:00
Andrey Breslav
0426291bd7 Test data fixed 2015-05-19 06:26:11 +03:00
Alexey Sedunov
fa03e4e76c Move: Implement "Update package directive" option 2015-05-18 21:18:56 +03:00
Alexey Sedunov
d88e01e770 Convert to Kotlin: KotlinMoveFilesOrDirectoriesHandler.kt 2015-05-18 21:18:55 +03:00
Alexey Sedunov
e854da386d Convert to Kotlin: Rename KotlinMoveFilesOrDirectoriesHandler.java -> .kt 2015-05-18 21:18:54 +03:00
Alexey Sedunov
c34ba01513 Move: Place "Destination directory" panel under "To Package" option. Fix panel title. Add missing mnemonics 2015-05-18 21:18:54 +03:00
Alexey Sedunov
7bc5ec04c7 Move: Suggest deleting file when all declarations are moved 2015-05-18 21:18:53 +03:00
Alexey Sedunov
6c4b895f72 Move: Do not search/process usages if package is not changed 2015-05-18 21:18:52 +03:00
Alexey Sedunov
da6b8b75ea Move File/Change Package: Change package directive prior to processing of internal usages (otherwise some necessary imports are not added) 2015-05-18 21:18:51 +03:00
Alexey Sedunov
1a60995ea9 Move: Forbid refactoring if target file is the same as the original one 2015-05-18 21:18:50 +03:00
Alexey Sedunov
35bdf9c261 Minor: Code cleanup 2015-05-18 21:18:49 +03:00
Alexey Sedunov
38ae9349fc Move: Move entire file if all declarations are selected ("Move to Package" mode) 2015-05-18 21:18:48 +03:00
Alexey Sedunov
7cf7a14d9b Move: Warn about moving to the existing file in "Move to Package" mode 2015-05-18 21:18:47 +03:00
Alexey Sedunov
870c9c4668 Move: Allow the user to choose target file name when moving declarations to package 2015-05-18 21:18:47 +03:00
Alexey Sedunov
2bd21b0f37 Move: Allow moving several files represented by their top-level declarations in the Project View (provided there is only one declaration per file) 2015-05-18 21:18:46 +03:00
Alexey Sedunov
f08438c53c Move: Fix dialog layout (member selection panel should take as much space as possible)
#KT-7696 In Progress
2015-05-18 21:18:45 +03:00
Alexey Sedunov
d88d7a0ac5 Move: Do not use existing file name when moving its top-level declaration(s)
#KT-7697 Fixed
2015-05-18 21:18:44 +03:00
Sergey Mashkov
72238c4d39 Maven: maven annotations is required in compile time in some cases 2015-05-18 19:59:55 +03:00
Mikhail Glukhikh
0d7f649cc2 Implementation of exhaustive whens in control flow analysis.
Now control flow analyzer knows when is exhaustive.
If despite of this all conditions are accidentally false, jump to error is generated.
A set of tests (diagnostic, control flow). #KT-5113 Fixed. #KT-6046 Fixed. #KT-1882 Fixed.
2015-05-18 19:44:29 +03:00
Mikhail Glukhikh
c4aa6d01a9 Exhaustive when on boolean argument. A set of tests.
Compile-time constants are taken into account. #KT-3743 Fixed.
2015-05-18 19:44:22 +03:00
Mikhail Glukhikh
633b252ff5 Unnecessary comment removed 2015-05-18 19:43:02 +03:00
Sergey Mashkov
42662d7349 JS: example project to produce full artifacts set: production+test sources jar, production+test binary jar 2015-05-18 19:36:19 +03:00
Sergey Mashkov
d04ec74217 Maven: use maven-annotations in kotlin-maven-plugin 2015-05-18 19:36:19 +03:00
Sergey Mashkov
35ed682714 Maven: Introduce test-js goal
#KT-7757 Fixed Maven K2JS should be able to build tests too
2015-05-18 19:36:18 +03:00
Sergey Mashkov
b25ae3d7dd JS stdlib-gen shouldn't call outdated codegen 2015-05-18 19:35:48 +03:00
Sergey Mashkov
606ea7bb70 Do not pass non-existing source roots to the compiler
#KT-3679 Fixed Maven build fails when some source directories don't exist
2015-05-18 19:27:35 +03:00
Sergey Mashkov
0578f44fd0 Maven: don't scan target directories for annotations in multimodule project
#KT-7187 Fixed Maven K2JVM compiler scanning for annotations
2015-05-18 19:27:35 +03:00
Andrey Breslav
df6c20efa4 KT-7689 Wrong error message format for type of ... doesn't match to the type of overridden var-property
#KT-7689 Fixed
2015-05-18 19:26:29 +03:00
Mikhail Glukhikh
fdf0ea5546 Enum warnings fixed: deprecated delimiters, short super constructors, both in project and in libraries 2015-05-18 16:08:16 +03:00
Pavel V. Talanov
5c3d8c1616 Update api usages in NoInternalVisibilityInStdLibTest
Broken by 01efbb1502
2015-05-18 16:01:31 +03:00
Michael Bogdanov
58183731f5 Test for obsolete KT-5448: VerifyError with mismatched stack types
#KT-5448 Obsolete
2015-05-18 15:28:58 +03:00
Michael Bogdanov
5cb9671803 Support inlining in scripts and outer expression capturing
#KT-7744 Fixed
2015-05-18 14:47:57 +03:00
Michael Bogdanov
226350b4ba Test data fixed: replace trait with interface 2015-05-18 11:57:39 +03:00
Pavel V. Talanov
119ffd2347 Minor: replace obsolete trait keyword in newly added test 2015-05-17 18:24:50 +03:00
Pavel V. Talanov
268d43d14a Change ModuleContext#module type to ModuleDescriptor instead of ModuleDescriptorImpl 2015-05-17 18:24:50 +03:00
Pavel V. Talanov
01efbb1502 Introduce ModuleContext, ProjectContext and use it some of the APIs 2015-05-17 18:24:49 +03:00
Pavel V. Talanov
9d22a39924 Refactor: TopDownAnalysisParameters -> TopDownAnalysisMode
No longer implements TypeLazinessToken (was unused)
2015-05-17 18:24:49 +03:00
Pavel V. Talanov
d9c70b5927 Drop TopDownAnalysisParameters#isAnalyzingBootstrapLibrary() 2015-05-17 18:24:48 +03:00
Pavel V. Talanov
f9b6c25498 Refactor: TopDownAnalysisParameters doesn't implement GlobalContext 2015-05-17 18:24:47 +03:00
Ilya Gorbunov
f18b9caa8d JS: Provide MIN_VALUE and MAX_VALUE member constants for Int, Long, Short and Byte companion objects.
JVM: Make MIN_VALUE and MAX_VALUE not an extension but member constant properties of Int, Long, Short and Byte companion objects.
2015-05-17 17:26:25 +03:00
Valentin Kipyatkov
c4b881c458 Fixed test data 2015-05-17 12:32:11 +03:00
Valentin Kipyatkov
617fe9b49d No duplicate "Expecting ')'" when parsing accessor 2015-05-16 17:15:16 +03:00
Valentin Kipyatkov
00fbf41bd8 More correct recovery after '.' in user type 2015-05-16 17:15:15 +03:00
Valentin Kipyatkov
e4cf12f93e Corrected test data to not use obsolete syntax 2015-05-16 17:15:15 +03:00
Valentin Kipyatkov
a05ffafc84 Added a test 2015-05-16 17:15:14 +03:00
Valentin Kipyatkov
c94dc6d5f7 Better parsing of block after missing "->" after "else" in when 2015-05-16 17:15:14 +03:00
Valentin Kipyatkov
56c3f7b7db Minor code corrections on code review 2015-05-16 17:15:13 +03:00
Valentin Kipyatkov
cdf6229fff KT-7486 Auto import inserts qualified name in companion object
#KT-7486 Fixed
2015-05-16 17:15:13 +03:00
Valentin Kipyatkov
60b0236101 Corrected parser: incomplete code should never cause brace disbalance
Fixed KT-7539 fq name inserted when completing nested traits name

 #KT-7539
2015-05-16 17:15:12 +03:00
Valentin Kipyatkov
c8b1dd6425 Minor code refactoring 2015-05-16 17:15:12 +03:00
Valentin Kipyatkov
7641c3cb84 Moved classes into separate files 2015-05-16 17:15:11 +03:00
Valentin Kipyatkov
858adfb2db KT-7731 Completion: replacement of call with no parameters with property by Tab
#KT-7731 Fixed
2015-05-16 17:15:11 +03:00
Valentin Kipyatkov
8ea0441348 KT-7349 Replace keyword "companion" in completion with "companion object" 2015-05-16 17:15:10 +03:00
Valentin Kipyatkov
db40f1ee5a More reliable testing of keyword completion (introduced directive "NOTHING_ELSE" instead of "NUMBER") 2015-05-16 17:15:10 +03:00
Valentin Kipyatkov
5807d03a52 Keyword completion: "reified" keyword is now supported 2015-05-16 17:15:09 +03:00
Valentin Kipyatkov
5ecf33c88e KT-6330 When completion for boolean method/property is finished by typing '!' symbol it should insert selected item with negation
#KT-6330 Fixed
2015-05-16 17:15:09 +03:00
Valentin Kipyatkov
892b2b0f83 KT-7195 Smart completion after "return ": the function itself should get smaller priority + declarations in the same file to have higher priority than default-imported
#KT-7195 Fixed
2015-05-16 17:15:08 +03:00
Valentin Kipyatkov
09f478fc0f Fixed duplication of some generic functions in code completion 2015-05-16 17:15:08 +03:00
Valentin Kipyatkov
ce3492f270 KT-6393 Smart completion of anonymous object inserts type with "!" for type parameter
#KT-6393 Fixed
2015-05-16 17:09:51 +03:00
Valentin Kipyatkov
833d474876 Smart completion when only named argument possible 2015-05-16 17:09:51 +03:00
Valentin Kipyatkov
67cfd9d516 KT-4909 Smart completion does not work for named arguments
KT-7668 Named argument completion does not work after vararg

 #KT-4909 Fixed
 #KT-7668 Fixed
2015-05-16 17:09:51 +03:00
Valentin Kipyatkov
58ac497bd7 KT-5041 Smart completion for last argument lambda outside parenthesis
#KT-5041 Fixed
2015-05-16 17:09:51 +03:00
Valentin Kipyatkov
023c5eabf4 KT-6780 Completion inserts incorrect comma in end of parameter list when lambda parameter exists
#KT-6780 Fixed
2015-05-16 17:09:51 +03:00
Valentin Kipyatkov
a036a6435b Fixed not working item in completion list for infix call 2015-05-16 17:09:51 +03:00
Valentin Kipyatkov
2adf0a3e9a KT-4908 Smart completion does not work for arguments of function with vararg
#KT-4908 Fixed
2015-05-16 17:09:50 +03:00
Valentin Kipyatkov
4c315b6219 KT-7452 Code completion does not honor smart casts for 'this'
#KT-7452 Fixed
2015-05-16 17:09:50 +03:00
Dmitry Jemerov
dc9523016a report 'trait' keyword as deprecated, provide quickfix for replacing with 'interface' 2015-05-15 18:20:39 +02:00
Michael Nedzelsky
3dce96e01c JS: add tests for two libraries and js-file with two modules 2015-05-15 18:50:01 +03:00
Michael Bogdanov
5daf79d2de Tests for obsolete KT-5232: vfy error with default parameter in method of trait
#KT-5232 Obsolete
2015-05-15 18:06:52 +03:00
Michael Bogdanov
f1eb68c55a Test for obsolete KT-3579: UsupportedOperationException while trying to compile recursive trait
#KT-3579 Obsolete
2015-05-15 18:06:52 +03:00
Michael Bogdanov
eb8d2d695c Test for non-general case of KT-4174 2015-05-15 18:06:51 +03:00
Michael Bogdanov
576ead2afe Test for obsolete KT-3698: Static fields of primitive types and String must be compile-time constants
#KT-3698 Obsolete
2015-05-15 18:06:51 +03:00
Mikhail Glukhikh
4e1a90ee61 Diagnostics for incorrect enum members order, when enum entry follows enum member. A few diagnostic tests.
Now incorrect enum members order is treated as a warning.
2015-05-15 16:13:46 +03:00
Mikhail Glukhikh
983339e1c9 Detection of semicolon between enum entries together with the correct delimiter quick fix for this case.
Error message reported directly on semicolon.
2015-05-15 16:13:41 +03:00
Mikhail Glukhikh
edd269f5ff Quick fix for enum entry delimiter syntax fix, together with a set of tests.
Possible NPE in getNextSiblingIgnoringWhitespace fixed. Some warnings also removed.
Last comma is replaced by semicolon. Comments are taken into account.
2015-05-15 16:13:39 +03:00
Mikhail Glukhikh
da3d083dc0 Quick fix for enum entry super constructor syntax fix, together with a set of tests 2015-05-15 16:13:36 +03:00
Mikhail Glukhikh
147bca3d22 Enum deprecated syntax detection implemented and integrated into DeclarationsChecker.
A lot of tests was changed to refactor deprecated syntax. Six new tests were added to check deprecated syntax detection.
Diagnostic for "enum entry uses deprecated super constructor": constructor is highlighted
Diagnostic for "enum entry uses deprecated or no delimiter".
One warning removed.
2015-05-15 16:13:34 +03:00
Mikhail Glukhikh
1a312140e9 New enum syntax: Short constructor syntax introduced for entries, optional commas between entries, semicolon after entries. #KT-7605 Fixed.
Grammar changed accordingly.
Semicolons prohibited after an entry except the last one.
Only one initializer is allowed per entry.
EnumReferenceExpression AST node introduced.
Some tests fixed, a pair of new tests written. Kotlin code inside project fixed.
Formatter and intendation tests fixed accordingly.
Stub version is incremented.
2015-05-15 16:13:32 +03:00
Mikhail Glukhikh
67cce57aeb Decompiler & stub builder fixed accordingly with new enum syntax.
Companion object now directly follows enum entries to avoid having them at the middle.
Some decompiler & stub builder tests fixed accordingly.
2015-05-15 16:13:29 +03:00
Mikhail Glukhikh
cf741cb868 Enum parsing changed: first entries, then members. Grammar fixed accordingly.
A set of compiler tests and some plugin tests changed accordingly.
Compiler Kotlin code changed accordingly.
2015-05-15 16:13:27 +03:00
Mikhail Glukhikh
7a4dee44b8 Final decision about enum new syntax (specification) 2015-05-15 16:13:25 +03:00
Andrey Breslav
629513e532 Options for new syntax 2015-05-15 16:13:23 +03:00
Andrey Breslav
457aa24f27 Create enums.md 2015-05-15 16:13:21 +03:00
Nikolay Krasko
6b64ae77f3 Test light classes from sources have priority over decompiled light classes 2015-05-15 15:29:31 +03:00
Nikolay Krasko
04cb2bc66f Update to 141.1010.3 2015-05-15 15:29:30 +03:00
Natalia Ukhorskaya
b6e885ba84 Minor: rename 2015-05-15 13:22:50 +03:00
Natalia Ukhorskaya
b9a45172c8 refactoring: do not create dialog in ChangeSignatureTests 2015-05-15 13:09:17 +03:00
Ilya Gorbunov
1fc5c39c22 Remove overload of joinToString with 5 parameters and it's usage from java code. 2015-05-15 03:02:48 +03:00
Ilya Gorbunov
7ffc1e13d9 Char.isLetter and Char.isLetterOrDigit (JVM). 2015-05-15 03:02:33 +03:00
Ilya Gorbunov
7721efad8a Restore isNotEmpty and isNotBlank methods for non-nullable String receiver.
#KT-7234 Fixed
2015-05-15 02:59:22 +03:00
Sergey Mashkov
771af78b06 JS fix gradle example 2015-05-14 23:51:46 +03:00
Evgeny Gerashchenko
a93cc083d6 Don't try to find local descriptors in decompiled classes. 2015-05-14 21:51:08 +03:00
Evgeny Gerashchenko
0498bd7739 KT-7587 Overloads are not generated during partial compilation of package
#KT-7587 fixed
2015-05-14 21:51:08 +03:00
Evgeny Gerashchenko
ca883d8117 Green code. 2015-05-14 21:51:08 +03:00
Evgeny Gerashchenko
533935f2c0 KT-7472 function of anonymous class is never used
#KT-7472 fixed
2015-05-14 21:51:07 +03:00
Evgeny Gerashchenko
f00d96d67a Merge pull request #669 from JetBrains/rr/nik
use API class instead of impl to create Java SDK
2015-05-14 21:50:10 +04:00
Alexander Udalov
2fe05c6f11 Parse and resolve annotations on supertypes 2015-05-14 18:58:08 +03:00
Alexander Udalov
5539444aa2 Minor, fix runtime for compiler in CompilerSmokeTest 2015-05-14 18:40:50 +03:00
Alexander Udalov
a267beb5aa Fix order of dependencies for module 'descriptors'
'util.runtime' exports Kotlin Runtime which has reflection classes which
override their newer copies from 'deserialization'
2015-05-14 18:40:49 +03:00
Alexander Udalov
62d0d5c77f Minor, fix error message when renaming package facade 2015-05-14 18:40:49 +03:00
Alexander Udalov
b881827b74 Use descriptors instead of PSI in ImplementationBodyCodegen 2015-05-14 18:40:48 +03:00
Sergey Mashkov
13a55ae72e JS use wholeText instead of replaceWholeText() in example 2015-05-14 17:30:34 +03:00
nik
cefc704af0 use API class instead of impl to create Java SDK 2015-05-14 15:51:12 +03:00
Alexey Sedunov
e7748e2700 Convert Parameter to Receiver: Replace parameter references with labeled this-expressions (before shortening them). Report conflict when this-label is ambiguous
#KT-7681 Fixed
2015-05-14 15:47:56 +03:00
Alexey Sedunov
2dac70a4f7 Inline Val: Do not highlight usages if some are not located in the same file as the declaration itself
#KT-7655 Fixed
2015-05-14 15:47:55 +03:00
Alexey Sedunov
7f05b35332 Minor: Fix checkox mnemonic 2015-05-14 15:47:54 +03:00
Alexey Sedunov
3e620dbbbb Find Usages: Show class-specific dialog for all Kotlin classes (including bultins)
#KT-7048 Fixed
2015-05-14 15:47:53 +03:00
Alexey Sedunov
02006126f5 Introduce Property: Forbid extension properties with initializers and lazy
ones
2015-05-14 15:47:51 +03:00
Alexey Sedunov
b69b66feab Extraction Engine: Do not extract type parameter if it's resolved in the target scope
#KT-7246 Fixed
2015-05-14 15:47:50 +03:00
Sergey Mashkov
7045140d11 JS make NodeListAsList field private 2015-05-14 14:33:37 +03:00
Sergey Mashkov
425efa3ae1 JS IDL2K move Event, EventListener and EventTarget to org.w3c.events 2015-05-14 14:19:08 +03:00
Natalia Ukhorskaya
f20e76c185 Improve assert message.
#KT-6625 In Progress
2015-05-14 14:08:16 +03:00
Natalia Ukhorskaya
37cca22538 JetPositionManager: return kotlin package class for JetClsFile with linenumber -1 2015-05-14 14:08:14 +03:00
Sergey Mashkov
f0c55c98f2 JS fix failed test caused by strings API change 2015-05-14 13:39:33 +03:00
Sergey Mashkov
e9c2b33d2d JS IDL2K use Any? type for "any" but callback functions return types that returns dynamic instead of Any? 2015-05-14 09:17:01 +03:00
Sergey Mashkov
42f1f9df03 JS Union type members should have inherit corresponding marker interface 2015-05-14 09:17:00 +03:00
Sergey Mashkov
002b26e4ed JS IDL2K spaces in functional types 2015-05-14 09:16:59 +03:00
Sergey Mashkov
b34da5713d JS update IDL definitions, append source URL to downloaded file 2015-05-14 09:16:59 +03:00
Sergey Mashkov
7033b27ea8 JS Changes according to review 2015-05-14 09:16:58 +03:00
Sergey Mashkov
e3ae12ed62 JS Fix build failure due to missing splitWithRegex 2015-05-14 09:16:57 +03:00
Sergey Mashkov
0ce1edd417 JS IDL2K better callbacks support + bugfixes according to review 2015-05-14 09:16:57 +03:00
Sergey Mashkov
a11e0a84b5 JS tests for addClass, removeClass, removeFromParent 2015-05-14 09:16:56 +03:00
Sergey Mashkov
bcbfa3c240 JS CSS style declarations 2015-05-14 09:16:56 +03:00
Sergey Mashkov
d24bdf5ad0 JS Introduce SVG DOM support 2015-05-14 09:16:55 +03:00
Sergey Mashkov
6366f966b7 JS Introduce typed arrays 2015-05-14 09:16:54 +03:00
Sergey Mashkov
a6bed4f623 JS Fix marker interface filtering 2015-05-14 09:16:54 +03:00
Sergey Mashkov
2e687fde6b JS Generate DOM stubs from IDLs 2015-05-14 09:16:53 +03:00
Sergey Mashkov
236ec54c2a JS download DOM IDLs 2015-05-14 09:16:52 +03:00
Sergey Mashkov
47cf73d089 JS IDL2K fix bugs regarding union types and unknown types, any and so on
JS IDL2K better support for functional types and callback handlers
2015-05-14 09:16:52 +03:00
Sergey Mashkov
6e09100877 JS IDL2K refactoring according to review discussion 2015-05-14 09:16:51 +03:00
Sergey Mashkov
4ee780ef07 JS move document/window/storage to kotlin.browser 2015-05-14 09:16:51 +03:00
Sergey Mashkov
33c1d5d2cf JS fix tests failed due to api change 2015-05-14 09:16:50 +03:00
Sergey Mashkov
4bc91ba652 JS fix stdlib API to conform to new DOM3 2015-05-14 09:16:49 +03:00
Sergey Mashkov
374dcd56f2 JS better typedefs and union-types support 2015-05-14 09:16:49 +03:00
Sergey Mashkov
e487825237 JS deprecate old declarations 2015-05-14 09:16:48 +03:00
Sergey Mashkov
e84aa78ac6 JS introduce marker annotation 2015-05-14 09:16:48 +03:00
Sergey Mashkov
e2d663b288 JS Introduce utility functions for DOM3 2015-05-14 09:16:47 +03:00
Sergey Mashkov
53495fa989 JS Implement IDL2K tool and import DOM3 IDLs
JS Introduce required utility functions for DOM3
2015-05-14 09:16:46 +03:00
Valentin Kipyatkov
dc7f81a904 Code corrections after code review 2015-05-14 01:10:14 +03:00
Valentin Kipyatkov
1ad5ea4f7e Corrected test data 2015-05-14 01:10:13 +03:00
Valentin Kipyatkov
841d07f1aa More correct fix of getEnclosingElementForLocalDeclaration( 2015-05-14 01:10:13 +03:00
Valentin Kipyatkov
d67b678a65 Minor changes after review 2015-05-14 01:10:12 +03:00
Valentin Kipyatkov
d09c1e7c5b "Invert if" - handling some more cases 2015-05-14 01:10:12 +03:00
Valentin Kipyatkov
279b406bca "Invert if condition" intention works better for non-symmetric if's
#KT-5009 Fixed
2015-05-14 01:10:11 +03:00
Valentin Kipyatkov
181af17315 KT-7704 Intention actions on visibility modifier for quick changing it
#KT-7704 Fixed
2015-05-14 01:10:11 +03:00
Valentin Kipyatkov
ad91d2cd9e Removed unused deprecated constructors 2015-05-14 01:10:10 +03:00
Valentin Kipyatkov
d95b198da7 Refactored (and more correct) getOutermostLastBlockElement and its usages 2015-05-14 01:10:10 +03:00
Valentin Kipyatkov
38ac420057 Fixed bug in MergeWhenIntention 2015-05-14 01:10:10 +03:00
Valentin Kipyatkov
6456729973 Better intention text 2015-05-14 01:10:09 +03:00
Valentin Kipyatkov
462074df8c MergeWhenIntention code refactoring + smaller range 2015-05-14 01:10:09 +03:00
Valentin Kipyatkov
102aa661ee Moved intention based inspection classes to their intention classes + some renames 2015-05-14 01:10:08 +03:00
Valentin Kipyatkov
9a97818b82 Smaller range for SimplifyNegatedBinaryExpressionIntention 2015-05-14 01:10:08 +03:00
Valentin Kipyatkov
fc3609d403 SimplifyNegatedBinaryExpressionIntention - no i18n + code simplification 2015-05-14 01:10:08 +03:00
Valentin Kipyatkov
0422cf402d RemoveExplicitTypeArguments - no i18n + minor 2015-05-14 01:10:07 +03:00
Valentin Kipyatkov
54051c40dc Moved 2 intentions from idea-analysis to idea 2015-05-14 01:10:07 +03:00
Valentin Kipyatkov
addcadeddf Replace "contains" with "in" intention handles negation 2015-05-14 01:10:06 +03:00
Valentin Kipyatkov
e601057e93 Smaller ranges for intentions 2015-05-14 01:10:06 +03:00
Valentin Kipyatkov
11812a9ece Renamed some intentions + test data dirs 2015-05-14 01:10:05 +03:00
Valentin Kipyatkov
096df91972 Renamed intentions package 2015-05-14 01:10:05 +03:00
Valentin Kipyatkov
8095aabd42 Refactored intentions to replace special name calls with operators 2015-05-14 01:10:04 +03:00
Valentin Kipyatkov
fbc3fa2b09 KT-7212 Convert member function to extension intenton positions caret improperly
#KT-7212 Fixed
2015-05-14 01:10:04 +03:00
Valentin Kipyatkov
3222486dba Changed intention text to less confusing 2015-05-14 01:10:03 +03:00
Valentin Kipyatkov
5491523f05 Renamed intention class 2015-05-14 01:10:03 +03:00
Valentin Kipyatkov
48ac89dca4 Refactored ConvertMemberToExtension to re-use original declaration instead of regenerating it by text
#KT-4920 Fixed
2015-05-14 01:10:02 +03:00
Valentin Kipyatkov
ac9d75b45e KT-6632 "Convert to extension" intention should not be available on methods that override or implement a superclass method
#KT-6632 Fixed
2015-05-14 01:10:02 +03:00
Valentin Kipyatkov
a23c6a2cdc Smaller range + refactoring of ConvertMemberToExtension 2015-05-14 01:10:02 +03:00
Valentin Kipyatkov
04ec19cb4a Converted ConvertMemberToExtension to Kotlin 2015-05-14 01:10:01 +03:00
Valentin Kipyatkov
518ea85c87 Renames 2015-05-14 01:10:01 +03:00
Valentin Kipyatkov
a3bd6ca017 Introduced shortcut properties + getArrowNode -> getArrow 2015-05-14 01:10:00 +03:00
Valentin Kipyatkov
d86e142366 Smaller range for SplitPropertyDeclarationIntention 2015-05-14 01:10:00 +03:00
Valentin Kipyatkov
cb320bc0ac Moved function 2015-05-14 01:09:59 +03:00
Valentin Kipyatkov
4488a6719d Refactored DeclarationUtils 2015-05-14 01:09:59 +03:00
Valentin Kipyatkov
345076c11e Converted DeclarationUtils to Kotlin 2015-05-14 01:09:59 +03:00
Valentin Kipyatkov
269074b399 Smaller range fro SafeAccessToIfThenIntention 2015-05-14 01:09:58 +03:00
Valentin Kipyatkov
776e653421 Refactored SafeAccessToIfThenIntention 2015-05-14 01:09:58 +03:00
Valentin Kipyatkov
8a30d2d664 Avoid creation expressions by texts 2015-05-14 01:09:57 +03:00
Valentin Kipyatkov
749416434f Smaller range for IfThenToDoubleBangIntention 2015-05-14 01:09:57 +03:00
Valentin Kipyatkov
2b77fe2ff1 Refactored IfThenToDoubleBangIntention 2015-05-14 01:09:56 +03:00
Valentin Kipyatkov
b94d6306a7 Minor 2015-05-14 01:09:56 +03:00
Valentin Kipyatkov
ea168b0f6b Smaller ranges for intentions 2015-05-14 01:09:56 +03:00
Valentin Kipyatkov
4c275cb4ea Code refactoring 2015-05-14 01:09:55 +03:00
Valentin Kipyatkov
a3360df424 Moved intentions from UnfoldBranchedExpressionIntention.kt into own files 2015-05-14 01:09:55 +03:00
Valentin Kipyatkov
3743e9f508 Refactored UnfoldBranchedExpressionIntention's getting rid of UnfoldableKind 2015-05-14 01:09:54 +03:00
Valentin Kipyatkov
2ea2be01cd Minor code refactorings 2015-05-14 01:09:54 +03:00
Valentin Kipyatkov
a81f445190 Converted file to Kotlin 2015-05-14 01:09:53 +03:00
Valentin Kipyatkov
224e73e4f0 Inlined JetPsiFactory.createReturn 2015-05-14 01:09:53 +03:00
Valentin Kipyatkov
ceb9b3d663 Fixed test data 2015-05-14 01:09:53 +03:00
Valentin Kipyatkov
71d9c4726b No more usages of createReturn(text) 2015-05-14 01:09:52 +03:00
Valentin Kipyatkov
67a5e8a69d Fixed bug in DeprecatedLambdaSyntaxFix 2015-05-14 01:09:52 +03:00
Valentin Kipyatkov
ed595aab27 Fixed formatting problem + other way of creating returns 2015-05-14 01:09:51 +03:00
Valentin Kipyatkov
386be4bd10 Fixed formatting problem 2015-05-14 01:09:51 +03:00
Valentin Kipyatkov
8e2d381b85 Code simplifications 2015-05-14 01:09:51 +03:00
Valentin Kipyatkov
089267deee Refactored branched folding intentions into separate files and inlining methods from util 2015-05-14 01:09:50 +03:00
Valentin Kipyatkov
832b4fb8d8 Refactored FoldBranchedExpressionIntention removing common subclass and FoldableKind 2015-05-14 01:09:50 +03:00
Valentin Kipyatkov
d77b77809c Code corrections after conversion 2015-05-14 01:09:49 +03:00
Valentin Kipyatkov
b1ef08c9a1 Conversion to Kotlin (not compilable yet) 2015-05-14 01:09:49 +03:00
Valentin Kipyatkov
b9486846e1 ElvisToIfThenIntention - smaller range + minor code improvements 2015-05-14 01:09:48 +03:00
Valentin Kipyatkov
3b7bb81141 Renamed methods so that tests for parsing do not fail 2015-05-14 01:09:48 +03:00
Valentin Kipyatkov
37ab41ac52 Added parameter info + isAvailable 2015-05-14 01:09:47 +03:00
Valentin Kipyatkov
43ccdf1036 Changed order of quickfixes 2015-05-14 01:09:47 +03:00
Valentin Kipyatkov
21eb2acd31 Shorter quickfix names 2015-05-14 01:09:47 +03:00
Valentin Kipyatkov
e31f0ed829 Add constructor parameters quickfix reuses existing parameters 2015-05-14 01:09:46 +03:00
Valentin Kipyatkov
0952e9a63a Add constructor parameters quickfix works for multiple constructors 2015-05-14 01:09:46 +03:00
Valentin Kipyatkov
4ac2e29d28 Fixed error type case 2015-05-14 01:09:45 +03:00
Valentin Kipyatkov
c6ebc50e6c Renaming test data files 2015-05-14 01:09:45 +03:00
Valentin Kipyatkov
381049d13e Fix for non-accessible constructor case 2015-05-14 01:09:44 +03:00
Valentin Kipyatkov
a5dabac296 Refactored "Change to constructor invocation" and new "Add constructor parameters and use them" quickfixes into one factory, making the first one always available 2015-05-14 01:09:44 +03:00
Valentin Kipyatkov
cd419c2ddf Moved test data 2015-05-14 01:09:44 +03:00
Valentin Kipyatkov
00dcbd4d93 Initial implementation of KT-4046 Support 'Create constructor matching superclass'
#KT-4046 Fixed
2015-05-14 01:09:21 +03:00
Valentin Kipyatkov
734b502ad6 Fixed test data 2015-05-14 01:00:30 +03:00
Valentin Kipyatkov
df25adcb15 Smaller range for IfNullToElvisIntention and inspection 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
40f52f0216 Minor changes on code review 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
69c787dded Fixed resolveToDescriptor for parameter of catch block 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
830e3ba073 Better code in j2k 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
709573db69 Fix in SpecifyTypeExplicitlyIntention 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
07a89b38e1 Intention based intentions: added ability to highlight partial range, used it in new inspection based on IntroduceWhenSubjectIntention + added missing description 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
45c5454e39 Refactored IntroduceWhenSubjectIntention 2015-05-14 01:00:29 +03:00
Valentin Kipyatkov
ada11ca5e9 Use of expressions instead of plain text when converting when's 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
66a90916fe JetPsiFactory.createExpressionByPattern supports JetTypeReference's as arguments 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
6317ecc870 No use of CallChainBuilder anymore 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
ea6b632cea WhenToIfIntention - smaller range and refactoring 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
76fc0c1418 FlattenWhenIntention - smaller range and refactoring 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
428bcbbc8a No use of WhenBuilder at all 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
4f96965310 No use of WhenBuilder in introduceSubject 2015-05-14 01:00:28 +03:00
Valentin Kipyatkov
b200324a86 EliminateWhenSubjectIntention - no use of WhenBuilder 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
b1d0365c2f IfToWhenIntention - no use of WhenBuilder 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
47c613c477 IfToWhenIntention - smaller range and code refactoring 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
50f2c13cac EliminateWhenSubjectIntention - smaller range and code refactoring 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
3702add034 Refactored IfThenToSafeAccessIntention 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
f2cced4384 Code improvements in IfThenToElvisIntention 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
345f9217ae DoubleBangToIfThenIntention - smaller range + minor code improvements 2015-05-14 01:00:27 +03:00
Valentin Kipyatkov
f892e17d6b Refactored ConvertIfWithThrowToAssertIntention 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
392a1f52eb Fixed JetTypeLookupExpression 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
74cdd39ac9 Renamed test data dirs 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
f73c4b296e Converted to Kotlin 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
0ca492464b Refactored SimplifyBooleanWithConstantsIntention 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
1fa14af02f Converted to Kotlin 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
0c7a366ddf No i18n 2015-05-14 01:00:26 +03:00
Valentin Kipyatkov
b0ce16eada Remove explicit type intention should not be available on public 2015-05-14 01:00:25 +03:00
Valentin Kipyatkov
2d90ee5cad Split SpecifyTypeExplicitly intention into two + refactored them completely 2015-05-14 01:00:25 +03:00
Valentin Kipyatkov
d956d31012 Minor code editings after conversion 2015-05-14 01:00:25 +03:00
Valentin Kipyatkov
899a28f5ec Converted to Kotlin (step 2) 2015-05-14 01:00:25 +03:00
Valentin Kipyatkov
1251663099 Converted to Kotlin (step 1) 2015-05-14 01:00:25 +03:00
Valentin Kipyatkov
7499c4bc19 Refactored SplitIfIntention + JetPsiFactory.createIf uses createExpressionByPattern and does not reformat its arguments 2015-05-14 01:00:25 +03:00
Valentin Kipyatkov
de8601bb5d Got rid of JetPsiFactory.createBinaryExpression 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
b0aca040d8 "JetPsiFactory.createExpressionByPattern" and some usages of it 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
0a5951fcb9 Minor 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
05b6181d20 Renamed intention 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
c617d5256e ReplaceWithTraditionalAssignmentIntention - smaller range 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
8fc799322b Refactored ReplaceWithTraditionalAssignmentIntention 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
475a361b32 Renamed intention 2015-05-14 01:00:24 +03:00
Valentin Kipyatkov
435e9fed3f Added inspection based on ReplaceWithOperatorAssignIntention 2015-05-14 01:00:23 +03:00
Valentin Kipyatkov
bab4ae3879 Refactored ReplaceWithOperatorAssignIntention 2015-05-14 01:00:23 +03:00
Dmitry Jemerov
95f42ac050 fix test: redundant parentheses are no longer generated 2015-05-13 21:19:36 +02:00
Nikolay Krasko
3c7e7ffda6 Place light classes finder before standard PsiElementFinderImpl
Source elements should have priority over libraries.
2015-05-13 21:32:09 +03:00
Dmitry Jemerov
6f4cae03fe Quickfix to add a loop label when 'break' or 'continue' is used in a loop inside 'when'
#KT-7202 Fixed
2015-05-13 17:26:18 +02:00
Dmitry Jemerov
625096466e IDE testdata: s/trait/interface 2015-05-13 16:13:13 +02:00
Michael Bogdanov
99cad4b43f Support default method invocation via super
#KT-5970 Fixed
2015-05-13 14:52:18 +03:00
Michael Bogdanov
3fbdf05921 Added some new test for java8 2015-05-13 14:52:18 +03:00
Alexey Tsvetkov
37dfa58cd3 JS: expand calls, generated to curry reified is checks 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
818b197169 JS: support reified usage in extension functions 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
79ab47d374 JS: support reified type references in closures 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
85dc7a1ac4 JS: always translate reified type parameters 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
2f786efebf JS: support is-check on reified parameter 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
2c99484066 Minor in JS: use toTypedArray in JS tests 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
8cdff2439b JS: added reified is-check test cases 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
0a3ed7f12e JS: small fixes after conversion 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
f0c2aa9eb2 JS: converted CallArgumentTranslator to Kotlin 2015-05-13 12:15:29 +03:00
Alexey Tsvetkov
cdfd88cc2f JS: changed file extension of CallArgumentTranslator.java -> .kt 2015-05-13 12:15:29 +03:00
Ilya Gorbunov
f7aa997003 Provide fast path for negative index values in elementAt.
Minor: kdoc wording.
2015-05-12 21:07:24 +03:00
Dmitry Jemerov
4bdf598bfe compiler testdata: s/trait/interface 2015-05-12 19:43:17 +02:00
Ilya Gorbunov
a5ed5d4269 Generate elementAtOrNull and elementAtOrElse extension methods for iterables, collections, sequences, etc.
#KT-6952 Fixed
2015-05-12 20:08:20 +03:00
Michael Nedzelsky
c420e0f010 JS: eliminate direct usage of builtins serialization for js 2015-05-12 19:30:29 +03:00
Michael Nedzelsky
6dc7c4bc29 add SerializedResourcePaths, extract base code from builtins package fragment, data finder 2015-05-12 19:30:26 +03:00
Michael Nedzelsky
d8ca5be29d JS: KotlinJavascriptMetadataUtils: ABI 1 -> 2 2015-05-12 19:30:23 +03:00
Michael Nedzelsky
de3a31b07c JS: add import from descriptors to js.proto 2015-05-12 19:30:20 +03:00
Dmitry Jemerov
2a99f757c4 replace 'trait' keyword with 'interface' in library code 2015-05-12 17:07:46 +02:00
Dmitry Jemerov
b1c4a5670a provide element type name for multi-declaration entries; enable in-place rename for those; show local properties as "variable"
#KT-7627 Fixed
2015-05-12 16:18:03 +02:00
Dmitry Jemerov
0582d1947d JetRefactoringSupportProvider: J2K 2015-05-12 16:18:01 +02:00
Dmitry Jemerov
d990bbffdc JetRefactoringSupportProvider: rename to .kt 2015-05-12 16:18:01 +02:00
Dmitry Jemerov
9975bb8935 replace 'trait' keyword with 'interface' in user-visible messages and code generation tools 2015-05-12 11:49:37 +02:00
Dmitry Jemerov
25959fefdc J2K: generate 'interface' keyword instead of 'trait' 2015-05-12 11:49:37 +02:00
Ilya Gorbunov
69a58d1f0e Minor: correct kdoc comment. 2015-05-12 12:25:27 +03:00
Michael Bogdanov
d6964525b2 Fix for KT-7490: Bad bytecode generated by delegates and lambdas
#KT-7490 Fixed
2015-05-12 12:06:11 +03:00
Alexey Sedunov
aed6ed0f9b Introduce Parameter: Fix occurrence replacement when parameter name/type is changed by the user 2015-05-12 01:01:43 +03:00
Alexey Sedunov
ca54fe0883 Introduce Property: Fix primary occurrence replacement
#KT-7610 Fixed
2015-05-11 20:58:02 +03:00
Alexey Sedunov
339383b5b1 Extract Function: Add test for ===
#KT-7663 Fixed
2015-05-11 20:57:59 +03:00
Alexey Sedunov
c4e20b5cc1 Control-Flow: Generate mark instruction before the call/unresolved call instruction
#KT-7663 In Progress
2015-05-11 20:57:56 +03:00
Ilya Gorbunov
34526005d0 Provide a way to construct an empty typed array without init lambda. 2015-05-09 11:45:43 +03:00
Ilya Gorbunov
31b9ee65e0 Change the expected output after joinToString signature was changed. 2015-05-09 01:11:51 +03:00
Ilya Gorbunov
16d20ff009 Temporary add jvm.overloads annotation for generated joinToString() method.
Stdlib generator: allow to specify arbitrary annotations for all or some of generic function expansions.
2015-05-09 01:11:49 +03:00
Ilya Gorbunov
d531d7130f Add an optional parameter to joinToString() and joinTo() functions: lambda function which maps the element to string.
#KT-5468 Fixed
2015-05-09 01:11:47 +03:00
Ilya Gorbunov
c8a76f6344 Merge overloads String.compareToIgnoreCase and String.compareTo with an optional parameter. Provide CASE_INSENSITIVE_ORDER comparer in String.Companion. 2015-05-09 01:11:45 +03:00
Ilya Gorbunov
64b23054a6 Specify abbreviated code for each general Unicode category. 2015-05-09 01:11:43 +03:00
Ilya Gorbunov
1eed3675fe Add Char.isTitleCase, Char.toTitleCase methods (JVM). 2015-05-09 01:11:40 +03:00
Ilya Gorbunov
efe6bee106 Add Char.isSurrogate function and Char.MIN_SURROGATE, Char.MAX_SURROGATE constants. 2015-05-09 01:11:38 +03:00
Ilya Gorbunov
062d080e80 CharCategory and CharDirectionality enums for JVM. 2015-05-09 01:11:36 +03:00
Ilya Gorbunov
fb5a3a771c String.split(Pattern, limit) now treats limit differently: 0 means no limit is specified, but trailing empty elements are not stripped; -1 and other negative values are not allowed. 2015-05-09 01:11:34 +03:00
Ilya Gorbunov
b1255cf95b 2nd stage of split semantics change: remove deprecated String.split(String), rename splitBy back to split. 2015-05-09 01:11:32 +03:00
Ilya Gorbunov
aa6bdb039b Take caution when advancing to the next match after an empty string was matched not to stuck at the same position. 2015-05-09 01:11:30 +03:00
Ilya Gorbunov
260553d516 Temporary workaround due to KT-7502.
Correct usage of joinToString.
Test for passing multiple options.
2015-05-09 01:11:28 +03:00
Ilya Gorbunov
81325208be Remove Regex() and toRegex() overloads with vararg options. Now only zero, one or set of options are allowed. 2015-05-09 01:11:26 +03:00
Ilya Gorbunov
44d7f768c7 Visibility of Regex primary constructor. Provide adapting methods Pattern.toRegex and Regex.toPattern. 2015-05-09 01:11:24 +03:00
Ilya Gorbunov
6c9ca39286 Implement CharSequence.isEmpty method in stdlib.js. Remove corresponding intrinsic. 2015-05-09 01:11:22 +03:00
Ilya Gorbunov
7a51123d26 Make native* methods internal in stdlib.js as it was intended.
They are not checked with stdlib-validator, so it is possible.
2015-05-09 01:11:20 +03:00
Ilya Gorbunov
ae13359adc Change package of extensions and other top-level declarations from kotlin.js to kotlin to match corresponding ones in stdlib for JVM. 2015-05-09 01:11:18 +03:00
Ilya Gorbunov
908864b0c0 Move native RegExp to kotlin.text.js package 2015-05-09 01:11:16 +03:00
Ilya Gorbunov
a5177b785d Add String.replaceFirst methods.
String.replaceFirst(String, String) temporary named as replaceFirstLiteral.
2015-05-09 01:11:14 +03:00
Ilya Gorbunov
157c86b9c6 Empty string is supported as a delimiter in split and as an oldValue in replace. 2015-05-09 01:11:12 +03:00
Ilya Gorbunov
43dd23bd4b Remove some conflicting declarations from test, convert code to new Regex API 2015-05-09 01:11:10 +03:00
Ilya Gorbunov
2ae767a049 Add deprecated matcher() method to Regex to fix build. 2015-05-09 01:11:08 +03:00
Ilya Gorbunov
5f4e3ae6af Documentation and visibility of members.
Add hasMatch method to check whether there is at least one match exists.
IGNORE_CASE always includes UNICODE_CASE on JVM.
2015-05-09 01:11:07 +03:00
Ilya Gorbunov
db13705506 Tests for match and replace. 2015-05-09 01:11:04 +03:00
Ilya Gorbunov
0b03caf3e7 Uniform implementation of String.replace and String.matches(Regex) across JVM and JS.
Deprecated String.matches(String) and String.replaceAll methods.
2015-05-09 01:11:03 +03:00
Ilya Gorbunov
01ace84070 Regex implementation: split, replace and replaceFirst. 2015-05-09 01:11:00 +03:00
Ilya Gorbunov
559c1604d7 Rename Pattern to Regex.
toRegex now converts string to our regex, and toPattern converts to JVM Pattern.
2015-05-09 01:10:59 +03:00
Ilya Gorbunov
a4784dfa78 Pattern implementation for JS. 2015-05-09 01:10:57 +03:00
Ilya Gorbunov
da1641e0f8 Pattern implementation: JVM and partially JS.
Common tests.
2015-05-09 01:10:55 +03:00
Ilya Gorbunov
459e95d1d9 Pattern (Regex) API. 2015-05-09 01:10:53 +03:00
Ilya Gorbunov
370a67e753 js.stdlib: native replace made private. 2015-05-09 01:10:51 +03:00
Ilya Gorbunov
69a5d27c74 js.stdlib: Native RegExp. 2015-05-09 01:10:49 +03:00
Ilya Gorbunov
18f3018ce7 js.stdlib: js-only tests now included in kotlin-js-tests module. 2015-05-09 01:10:47 +03:00
Valentin Kipyatkov
837e46a9b8 Big change in quickfix tests: no stupid test data format with "before" and "after" file prefixes 2015-05-08 22:29:42 +03:00
Yan Zhulanow
a1acc60ed3 Update Gradle API and Android Gradle plugin dependency versions in kotlin-android-extensions 2015-05-08 18:19:26 +03:00
Yan Zhulanow
7639ab4f41 Separate support and normal properties 2015-05-08 18:19:26 +03:00
Yan Zhulanow
1ae2719d34 Visit children nodes even if layout XML tag is ignored 2015-05-08 18:19:25 +03:00
Yan Zhulanow
c774eac0e3 IDEA dependency version check for main IDEA and Android Extensions IDEA plugins 2015-05-08 18:19:25 +03:00
Yan Zhulanow
dbc0099e6e Fix usage printing for compiler plugins 2015-05-08 18:19:25 +03:00
Yan Zhulanow
fdc253b67f Bugfix: support several resource directories in AndroidPsiTreeChangePreprocessor 2015-05-08 18:19:24 +03:00
Yan Zhulanow
77be78b627 Support Android flavors 2015-05-08 18:19:24 +03:00
Yan Zhulanow
bf707ec3f7 Minor: code clean, remove obsolete functions 2015-05-08 18:19:24 +03:00
Yan Zhulanow
3645dfc5af Support several res/ directories 2015-05-08 18:19:23 +03:00
Yan Zhulanow
7a685b8c56 Support Fragment synthetic properties 2015-05-08 18:19:23 +03:00
Yan Zhulanow
d7488023d2 Add compiler tests for support.v4.app.Fragment 2015-05-08 18:19:22 +03:00
Yan Zhulanow
514bc74e9c Support android.support.v4.Fragment classes 2015-05-08 18:19:22 +03:00
Yan Zhulanow
cc697d2c1a Minor: remove isResourceDeclarationOrUsage 2015-05-08 18:19:22 +03:00
Yan Zhulanow
bc4a342a38 Refactoring: handle base AndroidResource class (in order to support <fragment>) 2015-05-08 18:19:21 +03:00
Zalim Bashorov
2cf478c864 Update to IDEA 14.1 EAP (141.1009.5) 2015-05-08 17:21:13 +03:00
Ilya Gorbunov
02b8394cb2 Change JetCodeFragment.IMPORT_SEPARATOR back to String 2015-05-08 16:48:11 +03:00
Alexey Sedunov
f13eb038e1 Introduce Parameter: Java -> Kotlin Interoperability 2015-05-08 11:43:00 +03:00
Denis Zharkov
93861e16c8 Prohibit non-constant default values for annotation parameter
#KT-7449 Fixed
2015-05-07 22:36:17 +03:00
Denis Zharkov
585a437b2e Parse '@' annotations on enum entries
Just drop truncating builder's creation as we parse only escaped annotations
and will not `eat` entry identifier
2015-05-07 22:36:17 +03:00
Denis Zharkov
e2cd983d49 Add quickfix for replacing deprecated annotations 2015-05-07 22:36:17 +03:00
Denis Zharkov
e59a0dd0c6 Adjust KotlinSuppressIntentionAction to syntax with '@' 2015-05-07 22:36:16 +03:00
Denis Zharkov
849b8acbf8 Replace annotations with brackets in testData
Just in tests that changed after deprecation
2015-05-07 22:36:16 +03:00
Denis Zharkov
5bc7c9600f Deprecate annotations in brackets 2015-05-07 22:36:16 +03:00
Denis Zharkov
1d77f50903 Refine highlighting of '@'
- Do not highlight '@' as separate token.

- Highlight '@' the same way as element where it's located: annotation, label or modifier.

- Extend text range when positioning unresolved reference in annotation with '@'.

Note that currently '@' is collapsed with modifiers tokens
2015-05-07 22:36:16 +03:00
Denis Zharkov
aa7bae213d Introduce ++ operator into grammar 2015-05-07 22:36:16 +03:00
Denis Zharkov
b924f35ed3 Resolve annotations on multi-declaration for parameter 2015-05-07 22:36:16 +03:00
Denis Zharkov
3d810ffe61 Parse modifier list of multi-declaration and for parameters 2015-05-07 22:36:16 +03:00
Denis Zharkov
e236d04957 Minor, drop unused method createConstructorModifierList 2015-05-07 22:36:16 +03:00
Denis Zharkov
9e23698fe3 Unwrap annotated expression in deparenthesize
It's needed to complete resolved call with annotated function literal
2015-05-07 22:36:15 +03:00
Denis Zharkov
9101505eca Rework deparenthesize-like methods
- Extract private `deparenthesizeOnce` and repeat it until get the same expression

- Drop redundant parameter `deparenthesizeRecursively`

- Drop some usages of `safeDeparenthesize` in `deparenthesize`
  because even if `deparenthesize` returns null (i.e. something was not parsed)
  there is no sense in working with such expressions

Note, that `deparenthesize` now unwraps nested labels' declaration (see changes in testData),
but it seems to be reasonable
2015-05-07 22:36:15 +03:00
Denis Zharkov
b72a3de86e Parse annotations on lambda-argument 2015-05-07 22:36:15 +03:00
Denis Zharkov
c5af4b42b4 Extract common logic for annotation entries collection
Before this change annotation entries starting with '@' within expressions hadn't been resolved

Note that order of annotation entries in result may change according to order of children in PSI (see changed testData)
2015-05-07 22:36:15 +03:00
Denis Zharkov
7d8351abc6 Implement parsing annotations and modifiers starting with '@' 2015-05-07 22:36:15 +03:00
Denis Zharkov
b13e932c3c Parse label reference with spaces before '@'
But still report error
2015-05-07 22:36:15 +03:00
Denis Zharkov
3528762e2d Minor, drop constant parameters and rename method 2015-05-07 22:36:15 +03:00
Denis Zharkov
5ce1fc6fbb Minor, rename AnnotationParsingMode's entries 2015-05-07 22:36:15 +03:00
Nikolay Krasko
0fa93d59c5 Get context for partial resolve if we have result for full analyze already 2015-05-07 20:14:12 +03:00
Natalia Ukhorskaya
9108d87a57 Add warning for division by zero:
#KT-5529 fixed
2015-05-07 15:41:37 +03:00
Nikolay Krasko
cb9c28e73f Update to Idea 141.914.3 EAP 2015-05-07 15:12:02 +03:00
Natalia Ukhorskaya
16b17b9e94 Minor: rename 2015-05-07 13:23:59 +03:00
Natalia Ukhorskaya
d7a301d698 Evaluate Expression: support local functions 2015-05-07 13:23:15 +03:00
Natalia Ukhorskaya
8c99183970 Write local functions to localVariables table 2015-05-07 13:23:03 +03:00
Natalia Ukhorskaya
35f9cb5405 Extract function: capture only local functions, not from local declarations 2015-05-07 13:22:10 +03:00
Natalia Ukhorskaya
35bacb4ac7 Refactoring: extract FrameVisitor class 2015-05-07 13:22:08 +03:00
Natalia Ukhorskaya
4848af5ef6 Minor: fix warnings 2015-05-07 13:22:06 +03:00
Alexey Tsvetkov
68603d188b JS: ExpressionDecomposer should always visit JsInvocation qualifier 2015-05-06 18:19:21 +03:00
Alexey Tsvetkov
8db104ef36 JS: decomposition should preserve 'this' context with invocations
#KT-7502 fixed
2015-05-06 18:19:21 +03:00
Nikolay Krasko
2d8dcaddd0 Compile modules with circular dependency as one module 2015-05-06 14:19:20 +03:00
Nikolay Krasko
3b18a44340 Allow to use Kotlin reflection in all modules with Kotlin 2015-05-06 14:18:27 +03:00
Nikolay Krasko
9d986d077c Move kotlin runtime library to end of classpath and remove duplicates with 'util' package 2015-05-06 14:18:24 +03:00
Nikolay Krasko
62a8174072 Fix compatibility issue 2015-05-05 16:43:24 +03:00
Michael Bogdanov
49f063522c Inline util functions renaming 2015-05-05 12:47:57 +03:00
Michael Bogdanov
fe23f23664 Support inlined functional expressions in debugger 2015-05-05 12:47:56 +03:00
Michael Bogdanov
e0aa64b8d2 Support functional expression in non-local returns 2015-05-05 12:47:56 +03:00
Valentin Kipyatkov
3a6e5ac78c Corrected test data 2015-05-02 14:03:26 +03:00
Valentin Kipyatkov
73f764abd0 Minor changes on code review 2015-05-02 14:03:26 +03:00
Valentin Kipyatkov
d1afff1612 Renamed intention 2015-05-02 14:03:25 +03:00
Valentin Kipyatkov
2de466970d ReplaceWithInfixFunctionCallIntention - refactored 2015-05-02 14:03:25 +03:00
Valentin Kipyatkov
9dd67cfc4d InfixCallToOrdinaryIntention - smaller range + minor code improvements 2015-05-02 14:03:25 +03:00
Valentin Kipyatkov
1b7ac6bb02 Renamed intention to more clear name 2015-05-02 14:03:25 +03:00
Valentin Kipyatkov
7d6145e105 J2K converter applies IfNullToElvisIntention automatically 2015-05-02 14:03:25 +03:00
Valentin Kipyatkov
38f735dcac IfNullToElvisIntention - better behavior for var's + slightly refactored utility functions 2015-05-02 14:03:25 +03:00
Valentin Kipyatkov
186dd5454d Added inspection based on IfNullToElvisIntention + moved intention based inspections into one file 2015-05-02 14:03:24 +03:00
Valentin Kipyatkov
8d887f8780 In progress: KT-7442 Inspection + intention to replace "if (xxx == null) return ..' with elvis 2015-05-02 14:03:24 +03:00
Valentin Kipyatkov
c52f69538d Fixed test data 2015-05-02 14:03:24 +03:00
Valentin Kipyatkov
1daf12cf70 ReplaceItWithExplicitFunctionLiteralParamIntention - better caret position 2015-05-02 14:03:24 +03:00
Valentin Kipyatkov
01a8ff0860 Refactored ReplaceItWithExplicitFunctionLiteralParamIntention 2015-05-02 14:03:24 +03:00
Valentin Kipyatkov
c7937f181b Refactored ReplaceExplicitFunctionLiteralParamWithItIntention 2015-05-02 14:03:24 +03:00
Valentin Kipyatkov
65d59467a8 Renamed intention 2015-05-02 14:03:23 +03:00
Valentin Kipyatkov
175806a902 "Make types implicit in lambda" intention - adapted to new lambda syntax + do not work on closing brace 2015-05-02 14:03:23 +03:00
Valentin Kipyatkov
c6b18efb15 "Remove unnecessary parentheses" intention - smaller range & refactoring 2015-05-02 14:03:23 +03:00
Valentin Kipyatkov
444da656e6 RemoveCurlyBracesFromTemplateIntention - shorter text 2015-05-02 14:03:23 +03:00
Valentin Kipyatkov
6467b07245 RemoveCurlyBracesFromTemplateIntention - minor refactoring 2015-05-02 14:03:23 +03:00
Valentin Kipyatkov
9996afbde3 Minor 2015-05-02 14:03:23 +03:00
Valentin Kipyatkov
3b87869bf7 ReconstructTypeInCastOrIsIntention - refactored 2015-05-02 14:03:22 +03:00
Valentin Kipyatkov
1780d469d5 Converted to Kotlin (step 2) 2015-05-02 14:03:22 +03:00
Valentin Kipyatkov
ea62fafa69 Converted to Kotlin (step 1) 2015-05-02 14:03:22 +03:00
Valentin Kipyatkov
995b82ae62 Renamed test data directory 2015-05-02 14:03:22 +03:00
Valentin Kipyatkov
b959c7f2c0 "Move lambda argument out of parentheses" intention - smaller range 2015-05-02 14:03:22 +03:00
Valentin Kipyatkov
077307b518 "Move lambda argument into parentheses" intention - slightly wider range 2015-05-02 14:03:22 +03:00
Valentin Kipyatkov
f631f97a22 "Move lambda function into parentheses" -> "Move lambda argument into parentheses" 2015-05-02 14:03:21 +03:00
Valentin Kipyatkov
5ace57bc5f "Move lambda function into parentheses" intention - smaller availability range 2015-05-02 14:03:21 +03:00
Valentin Kipyatkov
f1fa33548a "Make types explicit in lambda" intention renamed to "Specify explicit lambda signature" 2015-05-02 14:03:21 +03:00
Valentin Kipyatkov
f9d690db21 "Make types explicit in lambda" intention: not available on right brace + adapted to new lambda syntax + refactored 2015-05-02 14:03:21 +03:00
Valentin Kipyatkov
252399b9a9 "Invert if condition" intention - smaller availability range + refactored 2015-05-02 14:03:21 +03:00
Valentin Kipyatkov
cda3344250 ForEach to for-loop intention: smaller range + refactoring 2015-05-02 14:03:21 +03:00
Alexey Sedunov
ad9317d047 Specify Type Explicitly: Reuse injected instance of TemplateManager 2015-05-01 18:58:15 +03:00
Alexey Sedunov
ee83435830 Move: Implement member selection UI 2015-05-01 18:58:12 +03:00
Alexey Sedunov
d096e74c10 Move: Implement inspection which reports mismatch between package directive and containing directory 2015-05-01 18:58:09 +03:00
Alexey Sedunov
fe96a8563a Inspections: Implement multi-file test class 2015-05-01 17:17:00 +03:00
Alexey Sedunov
6c28380be0 Intentions: Implement multi-file test class 2015-05-01 17:16:59 +03:00
Alexey Sedunov
8879166f53 Move: Add intention to change file package without moving it physically 2015-05-01 17:16:57 +03:00
Svetlana Isakova
6ee59a06dd Removed obsolete cache for object literals 2015-04-30 21:24:51 +03:00
Svetlana Isakova
02301a0d70 KT-7597 ErrorType leaked into backend
#KT-7597 Fixed
2015-04-30 21:24:51 +03:00
Mikhail Glukhikh
f4dd685bbe Fix for a problem with smart cast impossible in a situation when it's not needed. A test for KT-3572. #KT-3572 Fixed. 2015-04-30 16:48:15 +03:00
Dmitry Jemerov
093878bd06 correctly implement JetSimpleNameReference.getTextRange() so that it doesn't include the @ character for references in labels
#KT-7560 Fixed
2015-04-30 16:12:03 +03:00
Denis Zharkov
ca8fb53ccd Fix old labels syntax in testData 2015-04-30 10:22:17 +03:00
Denis Zharkov
bcee052302 Revert "Temporary parse label definitions with both syntax versions"
This reverts commit 3e3535f8cf.
2015-04-30 10:16:42 +03:00
Denis Zharkov
02659ca22d Adjust project code to new labels syntax 2015-04-30 10:16:42 +03:00
Dmitry Jemerov
1d8786dabf allow renaming functions which are members of anonymous objects
#KT-5857 Fixed
2015-04-29 20:09:17 +02:00
Dmitry Jemerov
46841ef447 fix expected testdata for StubBuilderTestGenerated 2015-04-29 19:19:40 +02:00
Dmitry Jemerov
8cc9ea1c8a fix compilation 2015-04-29 18:06:29 +02:00
Dmitry Jemerov
f0b7830521 use new API for indexing identifiers and TODO items in Kotlin files that allows reusing the lexer for building both indices; index TODO items in KDoc comments
#KT-5677 Fixed
2015-04-29 18:38:10 +03:00
Dmitry Jemerov
09a7e87102 fix text navigation offset for secondary constructors; add some missing element types to FindUsagesProvider
#KT-7607 Fixed
2015-04-29 18:34:53 +03:00
Dmitry Jemerov
8574c38998 fix usages of ClassKind.TRAIT in kdoc 2015-04-29 16:50:30 +02:00
Dmitry Jemerov
3b8167a8c3 rename "Kotlin Trait" file template to "Kotlin Interface" 2015-04-29 16:50:29 +02:00
Dmitry Jemerov
702188bbe2 regenerate JS reserved words test 2015-04-29 16:50:22 +02:00
Dmitry Jemerov
b7b5333cb9 keyword completion test: trait -> interface 2015-04-29 16:50:21 +02:00
Zalim Bashorov
9b49221c74 Fix test case generator: escape modifiers when they used for declaration enum entry 2015-04-29 16:50:21 +02:00
Dmitry Jemerov
9701a8fc7e regenerate keyword strings; add testcase for 'interface' keyword 2015-04-29 16:50:20 +02:00
Dmitry Jemerov
f61a4a15cc rename "isTrait" to "isInterface": update test data 2015-04-29 16:50:20 +02:00
Dmitry Jemerov
cce1be3892 rename JetClass.isTrait() to isInterface(); rename ClassKind.TRAIT to INTERACE 2015-04-29 16:50:19 +02:00
Dmitry Jemerov
ee60ce8369 understand "interface" keyword as synonym for "trait" 2015-04-29 16:50:14 +02:00
Dmitry Jemerov
55cfd3b0c7 fix QuickFixTestGenerated$Expressions.testRemoveUselessCast 2015-04-29 16:33:39 +02:00
Dmitry Jemerov
94071550e3 fix JetPsiCheckerTest 2015-04-29 16:33:38 +02:00
Dmitry Jemerov
8258d72e23 don't report USELESS_CAST in case of casting to superype using 'as' 2015-04-29 16:33:32 +02:00
Dmitry Jemerov
f374eec8f1 deprecating types after colon 2015-04-29 16:33:24 +02:00
Nikolay Krasko
b7a4b3c17d Fix build 2015-04-29 16:44:41 +03:00
Alexander Udalov
c860f54461 Rewrite codegen tests which check time in deterministic way
Delete one useless test

 #KT-7621 Fixed
2015-04-29 15:28:10 +03:00
Nikolay Krasko
90cdb19324 Add origin for generated jvm overloads and tweak equals methods to distinguish them
- KT-7586 Strange navigation issue

 #KT-7586 Fixed
2015-04-29 15:20:31 +03:00
Nikolay Krasko
536b30af20 Refactoring: extract test method 2015-04-29 15:20:30 +03:00
Nikolay Krasko
b82f7d5c33 Refactoring: extract method for configuring runtime without sdk change 2015-04-29 15:20:29 +03:00
Nikolay Krasko
dbe6d2743d Drop deprecated API 2015-04-29 15:20:28 +03:00
Dmitry Jemerov
ed83385099 delete function which is now unused 2015-04-29 14:07:06 +02:00
Dmitry Jemerov
b98e2513f2 fix Common.testInSecondaryConstructorDelegationCall completion test: don't insert $ which breaks parsing of argument list and causes the block to be detached from the constructor itself 2015-04-29 14:07:06 +02:00
Dmitry Jemerov
d00b4ca27a update for modern constructor syntax 2015-04-29 14:07:06 +02:00
Dmitry Jemerov
f93eeeb563 fix tests by adding missing 'init' keywords to testdata 2015-04-29 14:07:05 +02:00
Dmitry Jemerov
98b8784ab0 drop deprecated syntax for anonymous initializer blocks 2015-04-29 14:07:04 +02:00
Ilya Ryzhenkov
35e82d4574 Propagate annotations when performing substitution on constructors #KT-7608 Fixed
Tests for deprecated warning on generic constructor.
2015-04-29 14:53:40 +03:00
Denis Zharkov
1fc742ffeb Add quickfix for java.lang.Class as annotation parameter 2015-04-29 14:03:11 +03:00
Denis Zharkov
fc5236244b Deprecate java.lang.Class as annotation parameter 2015-04-29 14:03:11 +03:00
Denis Zharkov
fa2af69942 Drop obsolete token in KDOC 2015-04-29 14:03:11 +03:00
Denis Zharkov
74bf4a3a7f Refine findElementOfClassAtRange to make it find labels 2015-04-29 14:03:11 +03:00
Denis Zharkov
ffa9b0aa7c Remove whitespaces before labels in project code
Whitespaces are not allowed after lates syntax changes
2015-04-29 14:03:11 +03:00
Denis Zharkov
3e3535f8cf Temporary parse label definitions with both syntax versions
Should be reverted after bootstrap
2015-04-29 14:03:11 +03:00
Denis Zharkov
44a55e5bf6 Adjust testData to new labels syntax 2015-04-29 14:03:11 +03:00
Denis Zharkov
5977302465 Adjust J2K to new labels syntax 2015-04-29 14:03:11 +03:00
Denis Zharkov
89c72d9400 Adjust PSI usages to new labels syntax 2015-04-29 14:03:11 +03:00
Denis Zharkov
241860d510 JetExpressionWithLabel: Convert to kotlin 2015-04-29 14:03:11 +03:00
Denis Zharkov
18bd8fa6ab JetExpressionWithLabel: .java -> .kt 2015-04-29 14:03:10 +03:00
Denis Zharkov
7d5a035aaf Regenerate lexers for new labels parsing rules 2015-04-29 14:03:10 +03:00
Denis Zharkov
507eefcaa5 Implement new parsing rules for labels
See changes in expressions.grm
2015-04-29 14:03:10 +03:00
Alexander Udalov
0d76634f6b Support SKIP_TXT directive in diagnostic tests
Don't render the whole 'kotlin' package in some tests, because test data will
change every time something is updated in built-ins
2015-04-29 01:36:20 +03:00
Alexander Udalov
43ac20e88a Move builtins dependency to the top in compiler-tests
When running tests locally, serialized built-ins located in dist/builtins
should have a higher priority than the ones in the bootstrap runtime, on which
almost every module depends by default. Also make it a 'runtime' dependency
because the binary files there can't really change anything at compile time
2015-04-29 01:36:20 +03:00
Alexander Udalov
890d18e7be Support external annotations in IDE when approximating flexible types 2015-04-29 01:09:36 +03:00
Alexander Udalov
2271ca1e81 Further simplify Java annotation resolution
Filter annotations by FQ name, get rid of unneeded properties, lazy values,
static import some stuff
2015-04-29 01:09:36 +03:00
Alexander Udalov
d7c810a4d0 Copy only nullability/mutability annotations to types
Also don't render copied annotations
2015-04-29 01:09:35 +03:00
Alexander Udalov
3369da94e4 Rename annotationUtils.kt -> LazyJavaAnnotations.kt 2015-04-29 01:03:57 +03:00
Alexander Udalov
24bad39e76 Don't use external annotations in compiler
External annotations will be re-enabled in the IDE later.

This fixes LazyJavaAnnotations which was breaking the contract of Annotations:
findAnnotation(FqName) was looking for external annotations, while iterator()
did not. This resulted in some inconsistencies in the compiler and IDE tests.

The other way, i.e. making iterator() look up external annotations, would have
been too costly for the compiler and with no clear benefit at the moment.
2015-04-29 01:03:57 +03:00
Alexander Udalov
fe602d34ce Support type annotations in cls stub builder
Also add test on decompiler
2015-04-29 01:03:56 +03:00
Alexander Udalov
0732b78853 Serialize/deserialize annotations on types 2015-04-29 01:03:55 +03:00
Alexander Udalov
88abcdbde5 Minor, remove workarounds for the fixed KT-5786 2015-04-29 01:03:55 +03:00
Alexander Udalov
b860f2c9d5 Minor, remove temporary bootstrapping workaround 2015-04-29 01:03:54 +03:00
Mikhail Glukhikh
054e85338d Fix for EA-68153 (incorrect nullability) 2015-04-28 17:37:56 +03:00
Mikhail Glukhikh
fd789cb68e Correct behaviour for break / continue inside function call arguments, including multiple ones. Additional tests. 2015-04-28 17:37:53 +03:00
Pavel V. Talanov
3702089396 Minor: Do not throw on getContainingDeclaration() in test
Fix build
2015-04-28 16:45:44 +03:00
Pavel V. Talanov
032846aba0 Remove a couple of usages of KotlinBuiltIns.getInstance() 2015-04-28 16:45:43 +03:00
asedunov
7d28f8d2cf Merge pull request #656 from JetBrains/rr/yole/kt7483
fix JetPsiUtil.deleteClass() so that it no longer tries to delete the en...
2015-04-28 15:49:42 +03:00
asedunov
e701f8878d Merge pull request #657 from JetBrains/rr/yole/kt5207
support custom folding regions for Kotlin
2015-04-28 15:46:24 +03:00
Mikhail Glukhikh
8f2a3e9d5f Fixed DFA for the last assignment / initialization in block. A relevant test. #KT-7599 Fixed. 2015-04-28 15:16:39 +03:00
Mikhail Glukhikh
60fdfb8441 Bug fix: DataFlowInfo.getCompleteTypeInfo (with a test) 2015-04-28 15:16:36 +03:00
Pavel V. Talanov
17c3bf6502 Minor: improve DescriptorUtils#getContainingModule()
Correctly handle the case when descriptor is a child of PackageViewDescriptor
2015-04-28 12:49:39 +03:00
Pavel V. Talanov
ac2cb9af74 Remove some usages of KotlinBuiltIns.getInstance()
Introduce DeclarationDescriptor.builtIns extension to get builtins where descriptors are available
Introduce various utilities in KotlinBuiltIns to check for primitive types and get fq names of builtins
2015-04-28 12:49:34 +03:00
Alexander Udalov
21d9c272c9 Minor, improve error messages when serializing error types 2015-04-28 00:54:31 +03:00
Alexander Udalov
95c4fb16f4 Minor, add toString() to PackageFragmentDescriptorImpl 2015-04-28 00:54:23 +03:00
Alexander Udalov
244f37aa74 Use preloader for JS compilation in build.xml
Similar to "new-kotlinc" macro. Before this change bootstrap-runtime appeared
earlier on the classpath than the newly built compiler, and so everything was
breaking when e.g. built-ins metadata had been updated (old version in the old
runtime was found earlier than the newer version in the compiler)
2015-04-28 00:52:03 +03:00
Alexander Udalov
167942f4bb Add constant "invoke" to OperatorConventions 2015-04-28 00:51:50 +03:00
Alexander Udalov
94eac98500 Reformat some code, optimize imports, remove unused
Mostly in JVM codegen intrinsics
2015-04-28 00:35:53 +03:00
Alexey Sedunov
7831e75955 Change Signature: Introduce variable for expression which can't be safely copied in the course of argument substitution 2015-04-27 23:02:39 +03:00
Alexey Sedunov
14f63cdce5 Change Signature: Substitute parameter references in default values of call expression arguments 2015-04-27 23:02:38 +03:00
Alexey Sedunov
cbbeec3790 Change Signature: Keep base function descriptor in JetParameterInfo 2015-04-27 23:02:36 +03:00
Alexey Sedunov
bd6031fea1 Change Signature: Initialize JetFunctionCallUsage delegate early to ensure consistent analysis results 2015-04-27 23:02:35 +03:00
Alexey Sedunov
720e696f6b Refactoring: Represent call-site default value of JetParameterInfo as JetExpression 2015-04-27 23:02:34 +03:00
Alexey Sedunov
8918ddbb0a Refactoring: Move jetRefactoringUtil.kt to idea module. Move compareDescriptors() and comparePossiblyOverridingDescriptors() to descriptorUtils.kt 2015-04-27 23:02:32 +03:00
Alexey Sedunov
d07fc878e7 Minor: Add default values to parameters of JetChangeInfo constructor 2015-04-27 23:02:31 +03:00
Dmitry Jemerov
3af20b5d45 support custom folding regions for Kotlin
#KT-5207 Fixed
2015-04-27 19:22:37 +02:00
Dmitry Jemerov
c2944181be fix JetPsiUtil.deleteClass() so that it no longer tries to delete the entire file when deleting a nested class or object
#KT-7483 Fixed
2015-04-27 18:37:43 +02:00
Natalia Ukhorskaya
47bc89775d Minor: add message for assert EA-64788 2015-04-27 18:43:48 +03:00
Natalia Ukhorskaya
328013a351 Evaluate Expression: box and unbox arguments before running JDIEval 2015-04-27 18:43:47 +03:00
Natalia Ukhorskaya
7e245e97ad JDIEval: add box and unbox methods 2015-04-27 18:43:47 +03:00
Natalia Ukhorskaya
7723a9f434 Fix evaluate expression on properties with getter 2015-04-27 18:43:46 +03:00
Dmitry Jemerov
cb553bc952 split string literal if Enter is pressed in the middle
#KT-6308 Fixed
2015-04-27 17:39:12 +02:00
Dmitry Jemerov
22aa8599c9 KotlinQuoteHandler: J2K 2015-04-27 17:39:11 +02:00
Dmitry Jemerov
e60ea6449a KotlinQuoteHandler: rename .java to .kt 2015-04-27 17:39:10 +02:00
Natalia Ukhorskaya
1ae3e9bbfe Subplugin-example: change scope for gradle-api library 2015-04-27 16:24:52 +03:00
Natalia Ukhorskaya
4d896b47e7 kotlin-android plugin: check minimal version of android plugin 2015-04-27 16:24:51 +03:00
Natalia Ukhorskaya
88e9439d25 kotlin-android plugin: use VariantDataList instead of list of Variant.
Support junit tests
Fix sourceRoot dependencies for productFlavors
#KT-7065 Fixed
#KT-7506 Fixed
2015-04-27 16:24:51 +03:00
Natalia Ukhorskaya
cb85da3162 Gradle: update kotlin-gradle-plugin dependencies 2015-04-27 16:24:50 +03:00
Natalia Ukhorskaya
2bccfa99e1 Gradle: update android test to use gradle 2.3 and android-plugin 1.1.0 2015-04-27 16:24:49 +03:00
Natalia Ukhorskaya
4265994118 Update gradle-api to 2.3 2015-04-27 16:24:49 +03:00
Natalia Ukhorskaya
8ed628cef5 Update README: how to update gradle-api.jar 2015-04-27 16:24:48 +03:00
Natalia Ukhorskaya
f0e93d2df5 Gradle: Include java sources to sources, not to classpath
#KT-7503 Fixed
2015-04-27 16:24:47 +03:00
asedunov
3da49df471 Merge pull request #650 from JetBrains/rr/yole/kt7531
override hierarchy: convert some more code to Kotlin, sort out nullabili...
2015-04-27 16:21:37 +03:00
Dmitry Jemerov
478b18e376 remove two final occurrences of 'class object' from testdata 2015-04-27 15:14:34 +02:00
Dmitry Jemerov
fd5c3e3b9d remove obsolete test for completing 'object' after 'class' 2015-04-27 15:14:33 +02:00
Dmitry Jemerov
cbbb2fcd48 fix JetParsingTestGenerated 2015-04-27 15:14:33 +02:00
Dmitry Jemerov
683d727c72 drop deprecated syntax for class objects 2015-04-27 15:14:33 +02:00
Dmitry Jemerov
61a02a9d5a convert isOverrideHierarchyElement() to extension function 2015-04-27 14:59:15 +02:00
Pavel V. Talanov
2bc4dde959 Minor: do not set default value in QualifiedExpressionResolver 2015-04-27 15:57:35 +03:00
Pavel V. Talanov
430b20cb74 Minor: missed copyright 2015-04-27 15:57:10 +03:00
Pavel V. Talanov
1a5efacbf3 Refactor frontend components
Make dependencies more explicit
Move components out of ExpressionTypingServices
Make ExpressionTypingUtils a true utility class, refactor stuff out
Extract new components: FakeCallResolver, MultiDeclarationResolver, ValueParameterResolver
2015-04-27 15:56:59 +03:00
Pavel V. Talanov
50ae8182b8 Refactor ExpressionTypingVisitorDispatcher to make it more "componentlike" 2015-04-27 15:56:43 +03:00
Pavel V. Talanov
1e5108a2ab Drop unused InjectorForLazyTopDownAnalyzerBasic 2015-04-27 15:56:36 +03:00
asedunov
c39dd59703 Merge pull request #649 from JetBrains/rr/yole/override-varargas
Override/Implement: J2K; correctly generate call to super method with varargs
2015-04-27 15:48:53 +03:00
Svetlana Isakova
4f0d541493 Resolve function references independently of target type
KT-7564 AbstractDiagnosticsTest.checkAllResolvedCallsAreCompleted() fails on tests with function references
 #KT-7564 Fixed
2015-04-27 13:32:47 +03:00
Ilya Gorbunov
5ee17c0c26 Remove deprecated split usages in build-protobuf-lite script. 2015-04-24 20:50:29 +03:00
Ilya Gorbunov
d734dad4b8 Replace deprecated methods in FormatHtmlUtil. 2015-04-24 20:50:28 +03:00
Michael Bogdanov
39fabda611 New diagnostic for Java default method call via super in trait 2015-04-24 18:54:09 +03:00
Michael Bogdanov
0854c601b4 Fix non local returns to functional expressions 2015-04-24 18:54:09 +03:00
Alexey Tsvetkov
012bc8f1db Revert "Simple workaround for problem described in KT-6437"
This reverts commit 34d408eb7b.
2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
764c506aaa JS: do not generate break for top level return during inline 2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
cbdfaeb998 Minor in JS: store js test directives in a list 2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
bced28ee41 Minor in JS: simplify count vars directive 2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
900147385d JS: do not alias 'this' literal in a receiver position 2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
6b09b4c2b6 JS: do not create variable for result, if inline call is only return subexpression 2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
ea41bc4231 JS: do not create variable for result, if inline function has one top level return 2015-04-24 18:19:34 +03:00
Alexey Tsvetkov
c9b24510bb JS: do not create var for result if statement is 'someVar = inlineCall()' 2015-04-24 18:19:33 +03:00
Alexey Tsvetkov
fd09d4d837 Minor in JS: moved test for additional vars during inline to separate directory 2015-04-24 18:19:33 +03:00
Alexey Tsvetkov
7a0787bc25 JS: converted FunctionInlineMutator to Kotlin 2015-04-24 18:19:33 +03:00
Alexey Tsvetkov
3bad62840e JS: changed file extension FunctionInlineMutator.kt->.java 2015-04-24 18:19:33 +03:00
Dmitry Jemerov
d013221942 override hierarchy: convert some more code to Kotlin, sort out nullability
#KT-7531 Fixed
2015-04-24 15:27:00 +02:00
Dmitry Jemerov
0cf77dfb10 override/implement: correctly generate call to super method with vararg arguments
#KT-7580 FIxed
2015-04-24 14:59:46 +02:00
Ilya Ryzhenkov
bcb0b499f4 Workaround to allow QualifiedExpressionResolver to be created without an Injector. Should be fixed by code owner. 2015-04-24 15:44:44 +03:00
Ilya Ryzhenkov
79388d0dbf Update test data for highlighter tests on deprecations. 2015-04-24 15:44:43 +03:00
Ilya Ryzhenkov
879b6a0a3f Implement deprecated validator. 2015-04-24 15:44:42 +03:00
Ilya Ryzhenkov
288e1baa87 Tests, messages and infra for deprecated symbol reporting 2015-04-24 15:44:32 +03:00
Ilya Ryzhenkov
c8920b8158 Include arrayOf() into list of constant values for annotations 2015-04-24 15:44:30 +03:00
Ilya Ryzhenkov
aec37a35dc Add renderAccessors flag to DescriptorRenderer to render property accessors as "setter for …" 2015-04-24 15:44:29 +03:00
Ilya Ryzhenkov
c2b3bcc95f SymbolUsageValidator infrastructure 2015-04-24 15:44:28 +03:00
Dmitry Jemerov
f5019371bd OverrideImplementMethodsHandler: cleanup after conversion 2015-04-24 14:16:00 +02:00
Dmitry Jemerov
e9c669c841 OverrideImplementMethodsHandler: J2K 2015-04-24 14:05:58 +02:00
Dmitry Jemerov
5ba89206b7 OverrideImplementMethodsHandler: rename to .kt 2015-04-24 14:00:37 +02:00
Stanislav Erokhin
b3aadfd5e0 Performance workaround for assert call. 2015-04-24 09:02:47 +03:00
Stanislav Erokhin
8582f4ab47 Fixed memory leak 2015-04-24 09:02:47 +03:00
Alexander Udalov
d1f94e8468 Get rid of confusing javaToKotlinCovariant map 2015-04-24 02:09:34 +03:00
Alexander Udalov
d2cd7b00bb Map intrinsic companion objects in JavaToKotlinClassMap
Get rid of multiple usages of IntrinsicObjects where JavaToKotlinClassMap was
already used, simplify code, and support loading of *CompanionObject as Kotlin
built-in companions from Java code.

Also fix a small bug where Boolean was considered a class with an intrinsic
companion in IntrinsicObjects, although it was not
2015-04-24 02:09:26 +03:00
Alexander Udalov
987206bf95 Merge JavaToKotlinClassMap and JavaToKotlinClassMapBuilder 2015-04-24 02:09:05 +03:00
Alexander Udalov
43c11b2925 Merge CollectionClassMapping into JavaToKotlinClassMap 2015-04-24 02:09:05 +03:00
Alexander Udalov
a59fa5015e Merge KotlinToJavaTypesMap into JavaToKotlinClassMap
Also use this new Kotlin->Java mapping in RuntimeTypeMapper instead of
inheriting directly from JavaToKotlinClassMapBuilder
2015-04-24 02:09:05 +03:00
Alexander Udalov
b956fb5eb0 Pull Java<->Kotlin primitive type mapping up to JavaToKotlinClassMapBuilder 2015-04-24 02:09:04 +03:00
Alexander Udalov
4b07ec11ea Change Class<?> parameter to ClassId in JavaToKotlinClassMap implementations 2015-04-24 02:09:04 +03:00
Alexander Udalov
0dec1eaaad Refactor RuntimeTypeMapper, extract IntrinsicObjects-related behavior
Make it similar to other JavaToKotlinClassMapBuilder implementations to be able
to get rid of that inheritance
2015-04-24 02:09:04 +03:00
Alexander Udalov
ad02706294 Get rid of unnecessary map in RuntimeTypeMapper 2015-04-24 02:09:04 +03:00
Alexander Udalov
73de54f557 Get rid of unneeded additional map in JavaToKotlinClassMap 2015-04-24 02:09:03 +03:00
Alexander Udalov
deff3968db Simplify KotlinToJavaTypesMap, use only one map 2015-04-24 02:09:03 +03:00
Alexander Udalov
23a792aa44 Somewhat simplify mapping of JVM primitive types 2015-04-24 02:09:03 +03:00
Alexander Udalov
0a66c78449 Disperse primitive type mapping in JavaToKotlinClassMap 2015-04-24 02:09:02 +03:00
Alexander Udalov
d86b9c8f54 Drop unused primitive wrapper mapping in JavaToKotlinClassMap 2015-04-24 02:08:37 +03:00
Alexander Udalov
6a158c2b16 Remove unused method from PlatformToKotlinClassMap 2015-04-24 02:08:37 +03:00
Alexander Udalov
3014238189 Drop unused MutablePackageFragmentProvider 2015-04-24 02:08:36 +03:00
Alexander Udalov
34fa61675d Replace more eager asserts in project with lazy 2015-04-24 02:08:22 +03:00
Alexander Udalov
1a48b5750e Minor, remove unnecessary unwrapping of VariableAsFunctionResolvedCall
Almost all of its methods delegate to functionCall already
2015-04-23 22:09:02 +03:00
Alexander Udalov
07c2442405 Make $default methods non-private, avoid generating accessors for them
#KT-5786 Fixed
2015-04-23 22:09:02 +03:00
Pavel V. Talanov
dc05596ce0 Create FqName safely in KotlinCliJavaFileManagerImpl#findPackage
#KT-7501 Fixed
2015-04-23 21:10:58 +03:00
Mikhail Glukhikh
525b9e63ae Refactoring: checkType && checkImplicitCast returned to DataFlowUtils, PROCESSED unboxing returned, StringTemplateVisitor made local 2015-04-23 18:25:52 +03:00
Mikhail Glukhikh
8b241b8c05 Dead block removed (function literal inside do...while) 2015-04-23 18:25:50 +03:00
Mikhail Glukhikh
b40fe9d5ba Refactoring: TypeInfoFactory.createTypeInfo() without type -> noTypeInfo(), getNotNullType -> getTypeNotNull, nullability refined, style fixes 2015-04-23 18:25:47 +03:00
Nikolay Krasko
3e1c3e9dfe Don't search for NonClasspathClassFinder classes and package during Kotlin resolve 2015-04-23 17:38:07 +03:00
Nikolay Krasko
f972e12331 Use constant for empty resolve result 2015-04-23 17:38:05 +03:00
Michael Bogdanov
df2900c4e4 Introduced ParameterDescriptor type 2015-04-23 15:41:59 +03:00
Michael Bogdanov
53b8a1d56e Fix for KT-7544: Backend fails when inlining nested calls with reified type parameter and default value parameter
#KT-7544 Fixed
2015-04-23 15:41:59 +03:00
Dmitry Jemerov
72648d305e better folding for function literals
#KT-4090 Fixed
2015-04-23 13:37:35 +02:00
Dmitry Jemerov
048bb79946 JetFoldingBuilder: J2K and some cleanup 2015-04-23 13:37:34 +02:00
Dmitry Jemerov
185e3b8135 JetFoldingBuilder: rename .java to .kt 2015-04-23 13:37:34 +02:00
Ilya Gorbunov
526348b207 Implement toTypedArray as non-intrinsic.
Remove unused intrinsic method.
2015-04-23 14:10:42 +03:00
Stanislav Erokhin
c3f825a711 Update to idea 141.713.2 2015-04-23 13:50:47 +03:00
Denis Zharkov
470ad93328 Do not report inspection "no reflection" in annotation entries
Annotation codegen shouldn't use something from reflection.jar
2015-04-23 11:22:39 +03:00
Denis Zharkov
14df5b72b7 Minor, uncomment throws with class literal in code 2015-04-23 11:22:39 +03:00
Denis Zharkov
99fffc1b4b Optimize migrational intentions
- Run read/write action just once for all files
- Ignore file if no task is found
2015-04-23 11:22:39 +03:00
Denis Zharkov
3cb6b61a47 Add quickfix for migrating Java annotation method calls 2015-04-23 11:22:39 +03:00
Denis Zharkov
634b1a9568 Add workaround for KT-7544
Inlining lambdas into objects or non-inlineable lambdas does not work well.

Should be reverted after issue will be fixed
2015-04-23 11:22:39 +03:00
Denis Zharkov
fef568dbf0 Refactor migrational intentions
- Make them independent on element
- Extract common parts into JetWholeProjectModalByTaskCollectionAction class
2015-04-23 11:22:38 +03:00
Denis Zharkov
ef79b260f4 Extract common pattern in simple intention factories 2015-04-23 08:27:44 +03:00
Denis Zharkov
1b42e2fdcc Deprecate calls of annotations' methods 2015-04-23 08:27:43 +03:00
Denis Zharkov
29bf24b7d3 Use properties of Java annotations in codegen tests
Retain obsolete versions until support for methods in Java annotations is dropped
2015-04-23 08:27:42 +03:00
Denis Zharkov
6ca7d2aad7 Regenerate test data
Add properties for Java annotations
2015-04-23 08:27:41 +03:00
Denis Zharkov
93bbd2cbbc Java: load annotations methods as properties 2015-04-23 08:10:31 +03:00
Alexander Udalov
a0502d99f4 Minor, use substringBeforeLast instead of hand-written code 2015-04-23 03:20:11 +03:00
Michael Nedzelsky
7e69c414d4 JS: support new names for built-in metadata files starting with dot 2015-04-23 03:17:31 +03:00
Alexander Udalov
20cd360b07 Rename built-in metadata files starting with dot
Files starting with dot are considered as hidden on Unix systems, and sometimes
are ignored by the tools. For example, Android build tools do not package such
files to the resulting application, which causes Kotlin reflection to fail
there

 #KT-7088 Fixed
2015-04-23 03:17:29 +03:00
Alexey Sedunov
40864a554b Introduce Parameter: Add "Introduce default value" checkbox to the dialog 2015-04-22 23:56:48 +03:00
Alexey Sedunov
298dfa545f Introduce Parameter: Implement "Introduce lambda parameter" 2015-04-22 23:56:47 +03:00
Alexey Sedunov
2cc39995bb Extraction Engine: Simplify helper API 2015-04-22 23:56:46 +03:00
Zalim Bashorov
9dd527b76c Fix printing file size for TeamCity statistics 2015-04-22 19:52:00 +03:00
Ilya Gorbunov
7fba979372 Generate to[Primitive]Array() methods for generic arrays and collections.
#KT-4180 Fixed
2015-04-22 18:21:37 +03:00
Ilya Gorbunov
d18b086113 Refactor stdlib generator engine.
Introduce special class to hold generic function properties.
2015-04-22 18:21:35 +03:00
Ilya Gorbunov
343edcf8d0 Specify explicitly when to generate platformName annotation. 2015-04-22 18:21:33 +03:00
Ilya Gorbunov
592e6582b3 Provide isInfinite() and isFinite() functions for Double and Float.
#KT-7126 Fixed
2015-04-22 18:21:31 +03:00
Ilya Gorbunov
5dacb5a745 Provide average() method for iterables, sequences and arrays.
#KT-3843 Fixed
2015-04-22 18:21:29 +03:00
Ilya Gorbunov
f402ae8540 Ensure families and primitives have stable order, so that the code is generated in the same order each time. 2015-04-22 18:21:26 +03:00
Ilya Gorbunov
9759be5493 Generate sum() methods for arrays, iterables and sequences of Byte and Short. These overloads got explicit platformName.
Heuristics to decide when to set platformName.
#KT-3714
2015-04-22 18:21:24 +03:00
Ilya Gorbunov
ccc3646bb8 Generate coerceAtLeast, coerceAtMost and coerceIn extension functions for numbers and other Comparables. 2015-04-22 18:20:47 +03:00
Ilya Gorbunov
ade69ec0e9 Provide the emptySequence() method.
sequenceOf() with no arguments is equivalent to emptySequence().
#KT-7233 Fixed
2015-04-22 17:57:26 +03:00
Ilya Gorbunov
ae28379493 Provide Enumeration<T>.asSequence() method to make Enumeration usable in chained operations
#KT-6828 Fixed
2015-04-22 17:57:24 +03:00
Ilya Gorbunov
899a01e8c2 Rename sequence() extension to asSequence() 2015-04-22 17:57:20 +03:00
Zalim Bashorov
60347e87aa Print size of some kotlin2js artifacts for TeamCity statistics 2015-04-22 16:37:55 +03:00
Zalim Bashorov
5ec8d72949 Minor: download Rhino as dependency instead of store it in the repository 2015-04-22 15:46:02 +03:00
Nikolay Krasko
06fd6c4ba2 Allow to override teamcity bootstrap compiler for "bootstrap.build.no.tests" 2015-04-22 14:13:21 +03:00
Nikolay Krasko
0be99c8efc Add parameters to control what kotlin dependencies to download 2015-04-22 14:13:20 +03:00
Evgeny Gerashchenko
f5677d8424 Converted JetPsiUtil.getElementTextWithContext() to Kotlin extension function. 2015-04-22 14:10:00 +03:00
Zalim Bashorov
f59506c5e0 Minor: update rhino to 1.7.6 2015-04-22 12:48:22 +03:00
Zalim Bashorov
1ef9b9db1f JS backend: add the support function expression
#KT-7242 Fixed
2015-04-22 12:48:22 +03:00
Zalim Bashorov
02071c5bdd Minor: move function expression tests to separate directory 2015-04-22 12:48:21 +03:00
Zalim Bashorov
6e60a31b73 JS backend: don't translate labels on expression
#KT-7487 Fixed
2015-04-22 12:48:20 +03:00
Zalim Bashorov
1fe93c302a Minor in JS tests: move dummy abstract classes into one file 2015-04-22 12:48:20 +03:00
Evgeny Gerashchenko
9a4fbd35bd Supported Kotlin usages of Java class in automatic variable renamer. 2015-04-22 11:33:28 +03:00
Evgeny Gerashchenko
a9f9ca4ccb Supported Java usages in automatic variable renamer. 2015-04-22 11:33:27 +03:00
Evgeny Gerashchenko
3897548204 Minor. More post-conversion code cleanup. 2015-04-22 11:33:27 +03:00
Evgeny Gerashchenko
f7f90c8592 Minor. Renamed misleading function. 2015-04-22 11:33:27 +03:00
Evgeny Gerashchenko
5eadf4db17 Minor. Moved stuff from companion object to top-level. 2015-04-22 11:33:26 +03:00
Evgeny Gerashchenko
11020cacfd Renamed JetLineMarkerProvider to KotlinLineMarkerProvider. 2015-04-22 11:33:26 +03:00
Evgeny Gerashchenko
04e438f4f8 Post-conversion code cleanup. 2015-04-22 11:33:26 +03:00
Evgeny Gerashchenko
94311f262b Moved JetLineMarkerProvider. 2015-04-22 11:33:26 +03:00
Evgeny Gerashchenko
de9b26ac77 Convert JetLineMakerProvider to Kotlin. Auto-convert. 2015-04-22 11:33:25 +03:00
Evgeny Gerashchenko
09cff44207 Automatic renaming overloads in class or object.
#KT-4642 fixed
2015-04-22 11:33:25 +03:00
Evgeny Gerashchenko
d383e03a81 Automatic renaming top-level overloads.
#KT-4642 in progress
2015-04-22 11:33:25 +03:00
Evgeny Gerashchenko
8fe3a1d366 Added test for inheritor renamer (Kotlin subclasses of Java class). 2015-04-22 11:33:25 +03:00
Evgeny Gerashchenko
e1f6dfa52d EA-67458 - assert: UnusedSymbolInspection.hasNonTrivialUsages 2015-04-22 11:32:17 +03:00
Natalia Ukhorskaya
74e68950f9 Evaluate expression: support inline functions from source code 2015-04-22 10:56:39 +03:00
Natalia Ukhorskaya
9f2955c434 Minor: move methods 2015-04-22 10:35:22 +03:00
Natalia Ukhorskaya
50ad0af399 KotlinBytecodeToolWindow: analyze inline functions from multi declarations and from iterator call in for 2015-04-22 10:35:21 +03:00
Natalia Ukhorskaya
6a7bf4808d Minor: extract function 2015-04-22 10:35:20 +03:00
Natalia Ukhorskaya
715b9ad859 Collect inline functions using visitor 2015-04-22 10:35:20 +03:00
Natalia Ukhorskaya
f936689db3 Add test for KotlinBytecodeToolWindow 2015-04-22 10:35:19 +03:00
Natalia Ukhorskaya
907f0db7be Do not include files that contains only top level classes or objects to LightClassForPackage 2015-04-22 10:35:18 +03:00
Natalia Ukhorskaya
f575890732 Change J2K API for Web Demo 2015-04-22 10:35:17 +03:00
Ilya Gorbunov
9ed2cb3858 Provide zip() and merge() overloads for primitive arrays with themselves.
Better predicting size of resulting list of plus() operation.
#KT-4968 Fixed
2015-04-22 03:19:30 +03:00
Ilya Gorbunov
be11394adf Rename copyToArray() to toTypedArray(). 2015-04-21 21:27:28 +03:00
Ilya Gorbunov
5eb3c0bb5e Rename *array() factory methods to *arrayOf(). 2015-04-21 21:27:26 +03:00
Ilya Gorbunov
58310d172f Deprecate sequence implementations in favor of sequence operations. 2015-04-21 21:27:24 +03:00
Ilya Gorbunov
b2b98502e9 Deprecate Int.latch and Int.indices extensions. 2015-04-21 21:27:22 +03:00
asedunov
e9fe91ad2e Merge pull request #646 from JetBrains/rr/yole/kt2016
Find Usages: Provide element description for HighlightUsagesDescriptionLocation
2015-04-21 20:10:45 +03:00
Dmitry Jemerov
05c17a11c6 provide element description for HighlightUsagesDescriptionLocation
#KT-2016 Fixed
2015-04-21 18:45:33 +02:00
Alexey Sedunov
d815634233 Control-Flow: Assign pseudo-values to local functions (except those
declared directly in the block)
2015-04-21 17:10:46 +03:00
Alexey Sedunov
5b1906fb13 Control-Flow: Add tests for pseudo-values of labeled expressions 2015-04-21 17:10:45 +03:00
asedunov
417611e2be Merge pull request #644 from JetBrains/rr/yole/kt6669
Override/Implement Members: Escape identifiers in generated super method call
2015-04-21 16:42:23 +03:00
Dmitry Jemerov
3e8f163f1e don't complete KDoc tag names if we have a non-empty prefix which is not a tag name
#KT-7476 Fixed
2015-04-21 15:37:32 +02:00
Dmitry Jemerov
efa41bfb2a support quick doc for completion items
#KT-4346 Fixed
2015-04-21 15:36:38 +02:00
Dmitry Jemerov
eeb2728b7e show "defined in" for declarations in quick doc popup
#KT-7320 Fixed
2015-04-21 15:36:37 +02:00
Dmitry Jemerov
0c6cd3b422 KotlinQuickDocumentationProvider: cleanup after J2K done 2015-04-21 15:36:36 +02:00
Dmitry Jemerov
a13e38578a KotlinQuickDocumentationProvider: cleanup after conversion 2015-04-21 15:36:36 +02:00
Dmitry Jemerov
b1b138b424 KotlinQuickDocumentationProvider: J2K 2015-04-21 15:36:35 +02:00
Dmitry Jemerov
3d21824929 JetQuickDocumentationProvider: rename to .kt 2015-04-21 15:36:35 +02:00
Mikhail Glukhikh
e64dab0ae9 Review fixes after automatic code analysis 2015-04-21 15:29:34 +03:00
Mikhail Glukhikh
27625b04e1 Refactoring of JetTypeInfo / BindingContext. Loop data flow analysis corrected.
Now BindingContext includes expression type info instead of jump out possible, data flow info and expression type.
getType() was added into BindingContext, getType() and recordType() were added into BindingTrace.
JetTypeInfo now includes also jump possible flag and jump point data flow info.
Old TypeInfoWithJumpInfo deleted.
TypeInfoFactory introduced to create JetTypeInfo instances.
A pack of extra tests for break / continue in loops added.
2015-04-21 15:29:07 +03:00
Dmitry Jemerov
14b92404cd add test for private-to-this visibility in traits 2015-04-21 14:13:30 +02:00
Dmitry Jemerov
8d922dda4d private members of traits are not open by default
#KT-4171 Fixed
2015-04-21 14:13:29 +02:00
Denis Zharkov
036f31f36b j2k: Generate class literals in throws 2015-04-21 08:08:32 +03:00
Denis Zharkov
5ce4f4cad1 Temporary comment out throws usage in code
Until new `throws` will be in bootstrap
2015-04-21 08:08:31 +03:00
Denis Zharkov
6ef2340eb5 Migrate type of throws parameter to KClass
Change declaration, testData and codegen parts for `throws`
2015-04-21 08:08:31 +03:00
Denis Zharkov
e1dfdc582d Minor. Drop trivial override 2015-04-21 08:08:31 +03:00
Denis Zharkov
8d7aa3fdcd Drop throws usages with changes in Java code 2015-04-21 08:08:31 +03:00
Denis Zharkov
5b9aff12d0 Drop throws usages that looks redundant
Probably appeared after j2k-conversion
2015-04-21 08:08:31 +03:00
Alexander Udalov
6f8694976d Fix test data 2015-04-20 23:30:05 +03:00
Michael Nedzelsky
d0616ed8bd fix KT-7512 JS: project with external library lead to deadlock and IDEA freeze due to wrong storage manager configured
#KT-7512 Fixed
2015-04-20 21:02:01 +03:00
Alexander Udalov
ba927318d9 Minor, add PackageFragmentProvider.Empty 2015-04-20 19:09:36 +03:00
Alexander Udalov
3d928a0842 Refactor deserialization initialization in built-ins and JS
BuiltinsPackageFragment was only designed to work with a single instance alive.
Because of this, it was creating deserialization subsystem upon initialization.
This was not working perfectly in JS where it was used, because multiple
storage managers, class caches and other components were created for each
package, leading to different concurrency errors and performance hits. Also in
the near future another package fragment will be needed to represent the
built-in package "kotlin.reflect"
2015-04-20 19:09:35 +03:00
Alexander Udalov
19ddb4b510 Minor, remove unused stuff from MutableClassDescriptor 2015-04-20 19:09:35 +03:00
Alexander Udalov
2a3f658ea7 Minor, add missing space to error message 2015-04-20 18:57:31 +03:00
Alexander Udalov
02f05a1d9a Don't use private Sun API in JsContext 2015-04-20 18:57:30 +03:00
Michael Bogdanov
d34f103652 Rollback 'java8-test' module sdk to project one 2015-04-20 16:31:14 +03:00
Michael Bogdanov
f821f5a491 Fix source level 2015-04-20 15:51:41 +03:00
Andrey Breslav
c95eca10ef Avoid wrapping AssertionError over and over again, see KT-7501 2015-04-20 15:48:43 +03:00
Michael Bogdanov
ef17ac6c0f Use jdk8 for java8-test module 2015-04-20 13:36:42 +03:00
Mikhail Glukhikh
853483cf38 DataFlowInfo.getPossibleTypes() with two arguments rolled back 2015-04-20 12:01:46 +03:00
Michael Bogdanov
2f88f830b8 Test for KT-5969: Codegen overrides all java 8 default methods with delegation to unexisting Timpl
#KT-5969 Fixed
2015-04-18 14:45:16 +03:00
Michael Bogdanov
115c4b78c0 Added sam test on java8 interface with default method 2015-04-18 14:45:16 +03:00
Michael Bogdanov
5c18cfebd1 Support several java file compiling 2015-04-18 14:45:15 +03:00
Michael Bogdanov
7e3403f602 Add java8 test module and run configuration with initial test 2015-04-18 14:45:15 +03:00
Denis Zharkov
cc9322fbdd Add quickfix for usages of javaClass<T>() in annotations loaded from Java 2015-04-17 18:52:17 +03:00
Denis Zharkov
7325a459e5 Ignore diagnostic on tests supposed to be dropped soon 2015-04-17 18:52:16 +03:00
Denis Zharkov
f53baebf89 Show warning on usages of javaClass<T>() in annotations loaded from Java 2015-04-17 18:50:37 +03:00
Denis Zharkov
482b4e3688 Minor, split and clean tests
Tests that are using javaClass supposed to be deleted soon
while other ones just check that annotation loaded correctly
and shold use class literals
2015-04-17 17:40:41 +03:00
Alexey Sedunov
7a02bdae23 Extraction Engine: Fix implicit "this" analysis under smart-casts 2015-04-17 16:30:29 +03:00
Alexey Sedunov
bf13f7e637 Introduce Parameter: Do not remove unused parameters if new parameter is extracted with default value 2015-04-17 16:30:28 +03:00
Alexey Sedunov
6e2076d602 Change Signature: Process Kotlin-side calls of Java methods overriding Kotlin declarations 2015-04-17 16:30:27 +03:00
Alexey Sedunov
58bee8c57f Change Signature: Fix element bound to UsageInfo 2015-04-17 16:30:26 +03:00
Alexey Sedunov
8a04a604ce Usages Search: Introduce extension for usages of methods overriding Kotlin functions/properties 2015-04-17 16:30:25 +03:00
Michael Bogdanov
4775858e1c Analyze inline function with reified type parameters in ByteCodeToolWindow when inlinie disabled 2015-04-17 14:24:36 +03:00
Michael Bogdanov
48aef1eb28 Fix for KT-6895: Compile error on Android (EXCEPTION FROM SIMULATION) when declaring locals in an inline function
#KT-6895 Fixed
2015-04-17 14:24:35 +03:00
Michael Bogdanov
0080ebd386 Fix for KT-7273: Bad local variable type when using non-local return
#KT-7273 Fixed
2015-04-17 14:24:34 +03:00
Michael Bogdanov
51d5b52f69 refactorings 2015-04-17 14:24:34 +03:00
Michael Bogdanov
6465c6b680 Refactoring: extracted split method into intervals 2015-04-17 14:24:33 +03:00
Michael Bogdanov
2f88baf641 Refactoring: added Interval abstraction to represent TryCatchBlock and LocalVar nodes 2015-04-17 14:24:33 +03:00
Alexey Sedunov
45428895ad Change Signature: Always put last lambda argument outside of value argument list 2015-04-17 13:04:57 +03:00
Alexey Sedunov
daebf569ab Extract Function: Allow capturing local function references as lambda parameters 2015-04-17 13:04:56 +03:00
Mikhail Glukhikh
86bb0d5bc5 Build fix. The second version of DataFlowInfo.getPossibleTypes returning also the original type added and used. 2015-04-17 11:49:44 +03:00
Valentin Kipyatkov
6421f48c07 Further code improvements during review 2015-04-16 22:00:54 +03:00
Valentin Kipyatkov
1aa123dadb InsertExplicitTypeArguments - minor code improvements 2015-04-16 22:00:54 +03:00
Valentin Kipyatkov
2466aa64fe InsertCurlyBracesToTemplateIntention - no i18n 2015-04-16 22:00:54 +03:00
Valentin Kipyatkov
7ccb20977d ConvertToStringTemplateIntention - minor code improvements 2015-04-16 22:00:54 +03:00
Valentin Kipyatkov
a8d629f609 ConvertToForEachLoopIntention - renamed 2015-04-16 22:00:54 +03:00
Valentin Kipyatkov
a155b0c860 ConvertToForEachLoopIntention - smaller range + refactored 2015-04-16 22:00:54 +03:00
Valentin Kipyatkov
fc8b046694 ConvertToForEachFunctionCallIntention - smaller availability range + code refactoring 2015-04-16 22:00:53 +03:00
Valentin Kipyatkov
c2335790b5 ConvertToExpressionBodyIntention - refactoring 2015-04-16 22:00:53 +03:00
Valentin Kipyatkov
94480e3d5c Renamed in test data 2015-04-16 22:00:53 +03:00
Valentin Kipyatkov
0334ad1152 ConvertToConcatenatedStringIntention - minor code improvements + fixed bug 2015-04-16 22:00:53 +03:00
Valentin Kipyatkov
b980d98af6 ConvertToBlockBodyAction - refactoring 2015-04-16 22:00:53 +03:00
Valentin Kipyatkov
b201e60081 ConvertReceiverToParameterIntention - no i18n 2015-04-16 22:00:53 +03:00
Valentin Kipyatkov
24203a8a31 ConvertPropertyToFunctionIntention - no i18n + a bit better range 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
0698bb3866 ConvertParameterToReceiverIntention - made available on parameter name only + minor 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
960a45e4cc Code simplifications 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
ff44f1fa32 ConvertFunctionToPropertyIntention minor code improvements + to work in the end of name 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
636f80ee48 ConvertAssertToIfWithThrowIntention: smaller availability range + minor code refactorings 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
1268684ced Smaller availability range for RemoveBracesIntention + refactored it and AddBracesIntention 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
dc6c6f13d5 OperatorToFunctionIntention and SwapBinaryExpressionIntention: more narrow availability range + no i18n 2015-04-16 22:00:52 +03:00
Valentin Kipyatkov
00a4beae1d Refactoring of JetSelfTargetingInspection 2015-04-16 22:00:51 +03:00
Valentin Kipyatkov
894bf000e1 JetSelfTargetingInspection - deprecated i18n usage 2015-04-16 22:00:51 +03:00
Alexey Tsvetkov
8c01298930 JS: generated tests 2015-04-16 21:17:12 +03:00
Alexey Tsvetkov
ff5090136c JS: do not extract expressions, when inline call can be expression 2015-04-16 21:17:12 +03:00
Alexey Tsvetkov
bf5300a849 JS: fixed tryCatchFinally test because of KT-7328 bug 2015-04-16 21:17:12 +03:00
Alexey Tsvetkov
78a6b95f5a JS: added test case, where inline call in "for" is used 2015-04-16 21:17:12 +03:00
Alexey Tsvetkov
27a1861263 JS: lambda constructor cannot have sideEffect 2015-04-16 21:17:12 +03:00
Alexey Tsvetkov
97a1a13235 JS: inline componentN functions
#KT-7294 fixed
2015-04-16 21:17:12 +03:00
Alexey Tsvetkov
a9d38e8d22 JS: decomposition of vars 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
e80059e4a2 JS: decomposition of "while" and "do while" 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
71ea487828 JS: decomposition of "if" 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
c0111d6e33 JS: decomposition of binary operator
#KT-6437 fixed
 #KT-7359 fixed
2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
fd844ad6e3 JS: decomposition of ternary operator 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
3782b9d382 JS: decomposition of array access 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
8b68f6d9ab JS: decomposition of array literal 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
92942fd1c5 JS: decomposition of invocation/"new" 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
b7e26c3bf7 JS: extract expressions preceding inline call 2015-04-16 21:17:11 +03:00
Alexey Tsvetkov
f900cb36c5 JS: added inline evaluation order tests generation 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
616872558c Minor in JS: made JsNew qualifier mutable 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
5eadac9750 Minor in JS: use acceptStatement where appropriate 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
fafd4ef805 Minor in JS: deleted unused function 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
a356847006 JS: added @NotNull annotation to JsVisitorWithContext 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
be5e73a5bc JS: make qualifier mutable 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
6ff4785cb0 JS: turn off inline call extraction at translation 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
24aa19bd49 JS: fixed nullability issues after conversion 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
1f705eb77a JS: converted JsVisitor to Kotlin 2015-04-16 21:17:10 +03:00
Alexey Tsvetkov
cd92e2de73 JS: changed file extension JsVisitor(.java->.kt) 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
05c44db80f JS: inline all calls in a statement in one pass 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
c8453ec0d9 JS: removed unused JsContext methods 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
add0aca746 JS: removed StatementContext, InsertionPoint 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
e94c79f838 JS: added type parameter to JsContext 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
efba2a2372 JS: make JsEmpty singleton 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
dd13e91883 JS: converted JsEmpty to kotlin 2015-04-16 21:17:09 +03:00
Alexey Tsvetkov
ba1eb5f848 JS: changed extension JsEmpty.java->.kt 2015-04-16 21:17:09 +03:00
Svetlana Isakova
d40fd440b0 KT-7433 Type inference pushes Unit inside generic function with lower bound constraint
#KT-7433 Fixed
 #KT-7351 Fixed
2015-04-16 21:02:42 +03:00
Mikhail Glukhikh
a37ae6ba6d Test fixed accordingly with KT-3175 2015-04-16 20:48:48 +03:00
Mikhail Glukhikh
109e0abb6d Review fixes for mutable variable smart casting (mostly refactoring).
DataFlowValue.isPredictable() introduced instead of isStableIdentifier().
Parenthesized assignments are treated correctly.
2015-04-16 20:11:03 +03:00
Mikhail Glukhikh
e97e792674 Review fixes for smart casts in / out loops.
LoopTypeInfo became TypeInfoWithJumpInfo rewritten in Kotlin.
Fixed a bug with break inside Elvis inside a loop, a pack of related tests added.
isTrueConstant moved to JetPsiUtil.
2015-04-16 20:11:01 +03:00
Mikhail Glukhikh
d5aed62410 Smart casts for local variables not captured in a closure and not changed in a loop, see #KT-3175.
isLocalVariable added. Assignment / initialization analysis.
Control whether a variable is changed in a loop at the beginning and at the end of the loop.
Control whether a variable is captured in a closure. #KT-3175  Fixed. #KT-2266  Fixed.
Tests for variable null safety and for variables is/as operations.
Loop / closure / variable property tests are included.
Old tests changed in accordance with KT-3175. In particular, all three of testSmartcastImpossible were fixed.
2015-04-16 20:10:58 +03:00
Mikhail Glukhikh
e4b1046a54 Minor bug fix: necessary !! added 2015-04-16 20:10:56 +03:00
Pavel V. Talanov
a21abeba33 Fix kotlin-gradle-plugin to correctly process java source files
Do not remove outdirectory from cp in maven: this is needed for gradle-plugin build to see files compiled by gmaven
    this may cause problems with running mvn install without clean for kotlin
Remove special magic with groovy-output in gradle-plugin pom.xml
2015-04-16 16:40:55 +03:00
Pavel V. Talanov
3329136c9c Fix test data for quickfix tests
Depending on Module and ModuleBuilder from runtime
2015-04-16 16:40:44 +03:00
Pavel V. Talanov
818a6b5c2e Fix various tests and test data
Since we now distinguish between binaries and java source roots
2015-04-16 16:40:37 +03:00
Pavel V. Talanov
d76f293dc9 Speed up finding kotlin binaries and java files in CLI
Change VirtualFileFinder api to accept ClassId and adjust usages
Introduce KotlinCoreProjectEnvironment to create special KotlinCliJavaFileManager which shares cache with CliVirtualFileFinder
Truly distinguish between java source roots and binary roots: don't search for source files in classpath and vica versa
Implement JvmDependenciesIndex
2015-04-16 16:40:28 +03:00
Pavel V. Talanov
94cc847c48 Drop module "ktm" scripts and support java source roots in "xml" modules
Drop kotlin.modules package from runtime
Move adapted classes into compiler
Unsupport files with "ktm" extension
Delete code for loading module scripts
Drop tests for module scripts
Separate section for java source roots in xml script generator/parser
2015-04-16 16:40:19 +03:00
Pavel V. Talanov
09947d8f58 Move dangerous ClassId.fromString() to test 2015-04-16 16:40:12 +03:00
Natalia Ukhorskaya
336886f115 Fix KotlinBytecodeToolWindow: show bytecode correctly when there is inline function from another module
#KT-7409 Fixed
2015-04-16 14:55:29 +03:00
Natalia Ukhorskaya
06eb749f5a Android tests: copy kotlin-reflect.jar to test android application 2015-04-16 14:48:54 +03:00
Alexander Udalov
ccae0311c3 Merge InlineDescriptorUtils to InlineUtil 2015-04-16 14:35:07 +03:00
Alexander Udalov
16e6bc347f Move inline-related stuff from 'descriptors' to 'frontend'
Move to package org.jetbrains.kotlin.resolve.inline
2015-04-16 14:35:06 +03:00
Alexander Udalov
d93a7a9547 Minor, simplify some checks in InlineUtil 2015-04-16 14:35:05 +03:00
Alexander Udalov
7cbbc5f98d Minor, rename InlineUtil.getInlineType -> getInlineStrategy 2015-04-16 13:55:07 +03:00
Alexander Udalov
4a2fac6f40 Add utility InlineUtil.isInline instead of interface method in SimpleFunctionDescriptor
Also fix some warnings and reformat along the way
2015-04-16 13:55:07 +03:00
Alexander Udalov
9ed8ad8dd4 Replace eager assert with lazy in PseudocodeVariableDataCollector
For some reason some IDE tests would fail after the simple change. Add explicit
toString() call on the descriptor, to be investigated later
2015-04-16 13:55:06 +03:00
Alexander Udalov
1b0a78077f Use assert with lazy message in project instead of eager one 2015-04-16 13:55:06 +03:00
Alexander Udalov
44e35cad29 Make 'sure' an inline function with a lazy parameter
Also replace some other non-lazy stdlib function usages with the new lazy
'sure'
2015-04-16 13:55:06 +03:00
Denis Zharkov
b2a2e4ae92 Add bytecodeText test for annotation with default value
It checks that no value is emitted if argument is not specified
2015-04-16 10:40:20 +03:00
Denis Zharkov
97e4a899cf Add specific warning when KClass literal expected 2015-04-16 10:40:20 +03:00
Denis Zharkov
98ffa3b475 Render Class-constant as javaClass<T>() 2015-04-16 10:40:20 +03:00
Denis Zharkov
2a03994ecb JVM: Write signature for annotation parameter 2015-04-16 10:40:20 +03:00
Denis Zharkov
294eb1dceb Load annotation parameter's type for ctr as contravariant
See comment in code
2015-04-16 10:40:20 +03:00
Denis Zharkov
8f0e290dec Create additional constructor for java annotation with Class-parameter
One of them with KClass<*> parameters and other with java.lang.Class<*>.

It's needed just for backward compatibility, and second one is deprecared.
2015-04-16 10:40:20 +03:00
Denis Zharkov
f5111180c3 Load Class<?> as KClass<*> for Java annotations parameters 2015-04-16 10:40:20 +03:00
Denis Zharkov
0abc63261d Inject reflectionTypes into LazyJavaResolverContext 2015-04-16 10:40:20 +03:00
Denis Zharkov
07a4e8a405 Minor, move module property to LazyJavaResolverContext
All usages of LazyJavaPackageFragmentProvider.module
got it through LazyJavaResolverContext
2015-04-16 10:40:19 +03:00
Denis Zharkov
f942f6ac8e Move ReflectionTypes to builtins 2015-04-16 10:40:19 +03:00
Denis Zharkov
cc17f7d82d JVM: Support using KClass as annotation parameter type 2015-04-16 10:40:19 +03:00
Denis Zharkov
82674e56b9 Frontend: Allow using KClass as annotation parameter type 2015-04-16 10:40:19 +03:00
Nikolay Krasko
c155b1a455 Set permissions for kotlin compiler on linux and mac even on teamcity 2015-04-16 02:27:50 +03:00
Nikolay Krasko
e9fcdec3b0 Always download bootstrap compiler to "dependencies\bootstrap-compiler" 2015-04-16 00:25:04 +03:00
Nikolay Krasko
1c4335ec25 Test background threads are stopped 2015-04-16 00:25:03 +03:00
Nikolay Krasko
e304ee0a29 Print project name and command line for debug 2015-04-16 00:25:03 +03:00
Nikolay Krasko
8ed54a6dba Additional stop for JobScheduler
Background threads prevents class loader collect

 #KT-7172 In Progress
2015-04-16 00:25:02 +03:00
Nikolay Krasko
ea47e29757 Update ZipFileCache and LowMemoryWatcher from new Idea 2015-04-16 00:25:01 +03:00
Alexey Sedunov
d036edb5c6 Extraction Engine: Respect smart casts applied to "this" references
#KT-7447
2015-04-15 23:20:54 +03:00
Alexey Sedunov
aa0930ea60 Change Signature: Skip secondary constructor calls when looking for primary constructor usages
#KT-7445 Fixed
2015-04-15 23:20:52 +03:00
Alexey Sedunov
02b0c4c7eb Name Suggester: Do not strip "get"/"is"/"set" prefixes if remaining sequence is not upper-cased
#KT-7399 Fixed
2015-04-15 23:20:51 +03:00
Valentin Kipyatkov
3842d71ee3 simplify code, fix test, use CompletionUtil.findIdentifierPrefix() 2015-04-15 19:59:59 +02:00
Valentin Kipyatkov
be92ad2f2d # This is a combination of 2 commits.
# The first commit's message is:

use more simple API

# This is the 2nd commit message:

More simple code
2015-04-15 19:53:16 +02:00
Dmitry Jemerov
7f5b1d489e KDoc typed handler: autoinsert pair brackets and parentheses
#KT-7347 fixed
2015-04-15 19:53:14 +02:00
Dmitry Jemerov
5bbbadeb37 add a token for inline Markdown links; add test for identifier links with labels 2015-04-15 19:48:46 +02:00
Dmitry Jemerov
2aba59cbec KDocCompletionContributor code review: use resolution facade instead of KotlinCodeAnalyzer; inherit CompletionSessionBase 2015-04-15 19:48:45 +02:00
Evgeny Gerashchenko
4f412f77d1 Updated some test data so it won't be affected by automatic renamers. 2015-04-15 20:13:51 +03:00
Evgeny Gerashchenko
260b8ae431 Automatic renaming subclasses.
#KT-4642 in progress
2015-04-15 19:15:18 +03:00
Evgeny Gerashchenko
e6e5e28e1d Automatic renaming properties, variables, parameters when renaming class.
#KT-4642 in progress
2015-04-15 19:14:20 +03:00
Ilya Gorbunov
a20f1bdb6e Change the expected diagnostic output after reduce signature has been changed. 2015-04-15 17:34:09 +03:00
Ilya Gorbunov
043b27bfe5 Make more generic signature for reduce and reduceRight methods.
Fixes #KT-2287
2015-04-15 17:34:08 +03:00
Michael Nedzelsky
08e92ac746 KT-7357 JS: extension functions from external KJS library couldn't be called in some cases
#KT-7357 Fixed
#KT-7382 Fixed
2015-04-15 17:00:08 +03:00
Michael Nedzelsky
6842c98285 JS: tests for KT-7357: extension functions from external KJS library couldn't be called in some cases 2015-04-15 17:00:06 +03:00
Dmitry Jemerov
d32ff50579 escape identifiers in generated super method call in Override/Implement
#KT-6669 Fixed
2015-04-15 15:44:11 +02:00
Dmitry Jemerov
66aa15f470 pull up "New Kotlin File" action next to "New Java class" 2015-04-15 15:29:26 +02:00
Alexander Udalov
4ad603ba12 Fix AssertionError in JsLibraryStdDetectionUtil
#KT-7462 Fixed
2015-04-15 15:23:08 +03:00
Alexander Udalov
aab5d1c3e3 Minor, update built-ins serializer message
.kotlin_class_names was deleted and .kotlin_name_table was renamed
2015-04-15 01:16:07 +03:00
Alexander Udalov
1b7ba320c7 Fix handling of paths with spaces in kotlinc script 2015-04-15 01:16:07 +03:00
Onorio Catenacci
84acaa9bf6 Changed the path for calling kotlinc-jvm.bat to use short (8.3) names so that this will work correctly with paths with spaces in them 2015-04-15 01:16:06 +03:00
Mikhail Glukhikh
1544755838 Test refactoring 2015-04-14 19:11:26 +03:00
Mikhail Glukhikh
8184bccda1 Extended loop data flow analysis was implemented. #KT-6283 Fixed. #KT-6284 Fixed.
A local descendant of JetTypeInfo added to save separately current data flow info and jump point data flow info together with jump opportunity.
Now data flow analysis know about loop bodies that must be executed at least once (do...while, while(true) until the first break/continue).
A set of tests for smart casts in and after loops.
Existing DoWhile and WhileTrue resolve tests corrected in accordance.
2015-04-14 19:11:22 +03:00
Valentin Kipyatkov
bb808b5620 Created module idea-test-framework and moved classes needed for idea tests there
Moved tests for completion and their test data into module idea-completion
2015-04-14 18:53:01 +03:00
Valentin Kipyatkov
63825c45dd First step: moved classes of test framework to another package 2015-04-14 18:53:00 +03:00
Ilya Gorbunov
409209ba3c Don't count on split removing trailing empty entries. 2015-04-14 15:45:04 +03:00
Evgeny Gerashchenko
7b77ce58a5 Added assertion. There should be either space symbol after prefix (e.g., //ABSENT: A) or no symbols at all (e.g. //RUNTIME). 2015-04-14 15:01:29 +03:00
Alexander Udalov
91bb789758 Fix builtins-serializer source root in compiler sources jar 2015-04-14 12:56:50 +03:00
Alexander Udalov
5d5d1b759d Minor, simplify jar inclusion in build.xml 2015-04-14 12:56:01 +03:00
Alexander Udalov
3a4659c074 Include resources/kotlinManifest.properties to kotlin-for-upsource.jar 2015-04-14 12:52:33 +03:00
Natalia Ukhorskaya
8bd7fe1464 Gradle: add kotlin outputDir to java classPath if kotlin files are up-to-date 2015-04-14 10:41:42 +03:00
Natalia Ukhorskaya
5e6250511b Gradle: support for 1.2.0-beta2 com.android.application plugin 2015-04-14 10:41:41 +03:00
Natalia Ukhorskaya
34205c3ff0 NPE in Surround with Action on empty line 2015-04-14 10:41:40 +03:00
Valentin Kipyatkov
38c154ace4 Fixed exception in conversion from Java 2015-04-13 18:14:57 +03:00
Dmitry Jemerov
9434e4bee9 mark wrapper methods that pass default values of parameters as synthetic
#KT-7314 Fixed
2015-04-13 15:26:20 +02:00
Dmitry Jemerov
900a16a315 deprecate required classes for traits 2015-04-13 16:22:22 +03:00
Michael Bogdanov
7b0f6018dc Fix nameless function inlining 2015-04-13 16:11:21 +03:00
Michael Bogdanov
7025a4f933 Test framewrk update: check lambda inlining 2015-04-13 16:11:21 +03:00
Michael Bogdanov
27c40edeb4 InlineTestUtil convertion 2015-04-13 16:11:21 +03:00
Michael Bogdanov
9c74b22262 Rename InlineTestUtil.java to *.kt 2015-04-13 16:11:21 +03:00
Michael Bogdanov
e200b97ca4 Inline callable references
#KT-6900 Fixed
2015-04-13 16:11:21 +03:00
Dmitry Jemerov
991db29731 drop covariant specialisation for supertypes 2015-04-13 15:28:50 +03:00
Evgeny Gerashchenko
9de5acf9a6 Removed indeterministic test. We have analogous test for diagnostics, so it is not a big problem. 2015-04-13 15:21:40 +03:00
Evgeny Gerashchenko
993ba6161f Fixed compilation. 2015-04-13 15:21:23 +03:00
Evgeny Gerashchenko
508c7a58b6 KT-7377 Throwable: Empty PSI elements should not be passed to createDescriptor from UnusedReceiverParameterInspection
#KT-7377 fixed
2015-04-13 15:04:00 +03:00
Valentin Kipyatkov
e3bdc18aea KT-7344 Completion of second type argument in class instantiation does not work
#KT-7344 Fixed
2015-04-13 14:30:03 +03:00
Valentin Kipyatkov
3fad68ad4c Completion: no "else" in first when entry 2015-04-13 14:30:03 +03:00
Valentin Kipyatkov
3faf6cc3e8 Correct value passed as containingDeclarationOrModule to SmartCastUtils 2015-04-13 14:30:02 +03:00
Valentin Kipyatkov
33f119a65a Renamed "containingDeclaration" parameters to "containingDeclarationOrModule" to make it more clear that we can pass ModuleDescriptor instead of precise containing declaration 2015-04-13 14:30:02 +03:00
Valentin Kipyatkov
f73a41aa15 Completion should not generate deprecated lambda syntax 2015-04-13 14:30:02 +03:00
Valentin Kipyatkov
723bf0ecf9 Minor 2015-04-13 14:30:02 +03:00
Valentin Kipyatkov
5954307147 Fixed KT-7308 Exception on completion inside anonymous object
#KT-7308 Fixed
2015-04-13 14:30:02 +03:00
Valentin Kipyatkov
8b5be4febc Minor 2015-04-13 13:41:44 +03:00
Valentin Kipyatkov
f02e2b3ed6 Corrected generated tests after rebase 2015-04-13 13:41:44 +03:00
Valentin Kipyatkov
03270af430 Added scrollbar 2015-04-13 13:41:43 +03:00
Valentin Kipyatkov
066a7c3002 Code style setting for packages to always use star imports and UI for it 2015-04-13 13:41:43 +03:00
Valentin Kipyatkov
1a54886720 Basic UI for import code style settings 2015-04-13 13:41:43 +03:00
Valentin Kipyatkov
a8d737bf87 One more test for import nested classes setting 2015-04-13 13:41:43 +03:00
Valentin Kipyatkov
04b2bdcc79 Added test for "import packages" code style setting 2015-04-13 13:41:43 +03:00
Valentin Kipyatkov
0f9858bb75 Code style setting to import nested classes 2015-04-13 13:41:43 +03:00
Nikolay Krasko
be896b7d8e Fix test data: non-inherited elements are shown in file structure popup 2015-04-13 13:03:02 +03:00
Nikolay Krasko
b359cd2af0 Update to idea 141.588.1 2015-04-13 13:03:00 +03:00
Valentin Kipyatkov
965f3da2b1 Fixed bug with bad conversion on paste when top-level java class copied 2015-04-13 11:05:31 +03:00
Alexey Sedunov
aff17a9fa1 Introduce Parameter: Implement dialog advertisement and switch 2015-04-10 21:57:10 +03:00
Alexey Sedunov
f038a2d1d8 In-place Introduce: Track active instance of KotlinInplaceVariableIntroducer 2015-04-10 21:57:09 +03:00
Alexey Sedunov
68a5b05af9 Introduce Parameter: Implement dialog UI 2015-04-10 21:57:08 +03:00
Alexey Sedunov
da14222c4a Introduce Parameter: Do not apply to expressions of type Unit or Nothing 2015-04-10 21:57:07 +03:00
Alexey Sedunov
54392e7064 Minor: Fix refactoring name 2015-04-10 21:57:06 +03:00
Alexander Udalov
92fa107471 Delete three diagnostic tests which rendered parts of JRE
- PackageLocalClassNotImportedWithDefaultImport.kt goes to codegen multi-file
  tests. File in java.lang moved to kotlin.jvm, which seems irrelevant to the
  test, because java.lang is prohibited by the VM
- MergePackagesWithJava.kt (KT-689, Java and Kotlin in the same package) and
  kt955.kt (Unable to import from default package) are considered too obsolete
  to even test and are thus deleted

Also check that there's no more than 1000 lines in the .txt file in diagnostic
tests.
2015-04-10 20:35:18 +03:00
Alexander Udalov
94df191f86 Regenerate tests 2015-04-10 20:26:34 +03:00
Alexander Udalov
69e7a25b08 Drop InnerTestClasses annotation, use Java reflection 2015-04-10 20:26:33 +03:00
Alexander Udalov
5c06204658 Move ExpectLoadError from tests to testData
To avoid loading all sources under "compiler/tests" in each test. Saves about
20-25% when running LoadJavaTestGenerated
2015-04-10 20:26:33 +03:00
Ilya Gorbunov
845d755fdd Make Char-related constants to be properties in Char companion object. 2015-04-10 15:22:02 +03:00
Alexander Udalov
646e81bc61 Regenerate tests 2015-04-10 12:34:31 +03:00
Alexander Udalov
b2e0eda953 Include protobuf to kotlin-for-upsource.jar 2015-04-10 12:32:46 +03:00
Michael Bogdanov
67c2f7105b Fix for KT-6863: Internal compiler error folding functions
#KT-6863 Fixed
2015-04-10 08:59:27 +03:00
Michael Bogdanov
a24d845bd0 Test for KT-7009: VerifyError: Bad type on operand stack in daload
#KT-7009 Obsolete
2015-04-10 08:59:27 +03:00
Michael Bogdanov
824d1ac556 Fix for KT-7306: Implicit array conversions cause ClassCastException at runtime
#KT-7306 Fixed
2015-04-10 08:59:26 +03:00
Alexander Udalov
405038b2d8 Change sources of kotlin-runtime project library
Use sources from the project instead of ones in kotlin-runtime-sources.jar.

This is not very accurate, but fixes the problem with debugging anything from
'core' in the project (sources from the project were clashing with the sources
from the library)
2015-04-09 19:46:49 +03:00
Alexander Udalov
6182b3ff5c Prohibit Array::class, require type arguments for reified parameters 2015-04-09 19:46:47 +03:00
Valentin Kipyatkov
a0d2b00287 Code corrections on code review 2015-04-09 19:09:09 +03:00
Valentin Kipyatkov
498f24b98b KT-7291 Copy/paste of java declaration with preceding comment omitted does not convert it to Kotlin propertly
#KT-7291 Fixed
2015-04-09 19:09:09 +03:00
Valentin Kipyatkov
bfadd489a3 Imports on paste tests: generate result if does not exist and use default target file text 2015-04-09 19:09:09 +03:00
Valentin Kipyatkov
c5a785577b Imports on paste: code refactoring 2015-04-09 19:09:09 +03:00
Valentin Kipyatkov
4a3592be50 Imports on paste: don't try to import symbols not visible from current module 2015-04-09 19:09:09 +03:00
Valentin Kipyatkov
ea7732883e Tests: use errors dump instead of ALLOW_UNRESOLVED_REFERENCE 2015-04-09 19:09:08 +03:00
Valentin Kipyatkov
84a6f72ab3 Imports on paste: fixed overloaded extensions import 2015-04-09 19:09:08 +03:00
Valentin Kipyatkov
8d31a5c3a6 Imports on paste: do not suggest to import already imported extensions 2015-04-09 19:09:08 +03:00
Valentin Kipyatkov
0abc912208 Test to generate expected output if absent 2015-04-09 19:09:08 +03:00
Valentin Kipyatkov
93f1210f25 Imports on paste: added checking of symbols to import into test + fixed bug on copy/paste import/package directive 2015-04-09 19:09:08 +03:00
Valentin Kipyatkov
11380358ee Converted to Kotlin 2015-04-09 19:09:08 +03:00
Valentin Kipyatkov
fe14107848 More simple code doing the same 2015-04-09 19:09:07 +03:00
Valentin Kipyatkov
f6e363abb8 J2K: replace overloads with optional parameters not only for constructors but for methods too 2015-04-09 19:09:07 +03:00
Valentin Kipyatkov
ff4ff78307 Use of Kotlin wrapper methods instead of Application.runReadAction/runWriteAction and CommandProcessor.executeCommand 2015-04-09 19:09:07 +03:00
Valentin Kipyatkov
00660bc59e No explicit runReadAction needed 2015-04-09 19:09:07 +03:00
Valentin Kipyatkov
2440371cd9 Refactored code 2015-04-09 19:09:07 +03:00
Valentin Kipyatkov
3efc6cd383 J2K: default parameter values generated for secondary constructors too 2015-04-09 19:09:07 +03:00
Valentin Kipyatkov
9b80d49bab Generated constructors with default parameter values are marked with kotlin.jvm.overloads annotation 2015-04-09 19:09:06 +03:00
Valentin Kipyatkov
1afbb961ee KT-7135 Java to Kotlin converter should update usages in Java and Koltin code in the rest of the project
#KT-7135 Fixed
2015-04-09 19:09:06 +03:00
Andrey Breslav
b810ebbb0e Report exceptions from analyzer in the editor
They are rendered as errors and positioned on those expressions that cause them
2015-04-09 18:15:08 +03:00
Alexey Sedunov
5b3ff187da Create from Usage: Do not search usages of non-local properties 2015-04-09 13:49:25 +03:00
Alexey Sedunov
918eda0c9b Introduce Parameter: Do not suggest containers of object and non-inner classes 2015-04-09 13:49:24 +03:00
Alexey Sedunov
80134b9b2b Introduce Parameter: Support parameters without default values 2015-04-09 13:49:23 +03:00
Alexey Sedunov
13776f5bbd Introduce Parameter: Duplicate search & replace 2015-04-09 13:49:22 +03:00
Alexey Sedunov
3bb86a63cc Introduce Parameter: Remove parameters which become unused after occurrence replacement 2015-04-09 13:49:21 +03:00
Alexey Sedunov
53a6827ad8 Introduce Parameter: Initial support 2015-04-09 13:49:20 +03:00
Alexey Sedunov
06960be3ad Minor: Extract findElementByComment() function 2015-04-09 13:49:18 +03:00
Alexey Sedunov
4af608ef84 Parser: Recovery for parameter with missing name 2015-04-09 13:49:17 +03:00
Alexey Sedunov
7d4d3e537c Minor: Change signature of JetParameterInfo constructor 2015-04-09 13:49:16 +03:00
Alexey Sedunov
95a8db458b Minor: Generify KotlinInplaceVariableIntroducer 2015-04-09 13:49:15 +03:00
Alexey Sedunov
ee8df94f19 Minor: Extract container selection logic 2015-04-09 13:49:14 +03:00
Alexey Sedunov
d3605a5352 Minor: Move getValueParameters() function to jetPsiUtil.kt 2015-04-09 13:49:13 +03:00
Alexey Sedunov
b47c700a27 Introduce Variable: Fix replacement of multiple occurrences when variable name is changed in the template editor
#KT-7244 Fixed
2015-04-09 13:49:12 +03:00
Michael Bogdanov
20653090d3 Test for KT-7338: Incorrect code is emitted for is-checks with array types, resulting in java.lang.VerifyError
#KT-7338 Obsolete
2015-04-09 11:10:33 +03:00
Michael Bogdanov
efd4a3ce84 Print bytecode on test fail 2015-04-09 09:25:26 +03:00
Michael Bogdanov
ce13b3a44a Optimization fix 2015-04-09 09:25:26 +03:00
Michael Bogdanov
99496f8f52 Update some test due smap generation 2015-04-09 09:25:26 +03:00
Michael Bogdanov
c582b1d9ce Generate linenumber if needed after inlining 2015-04-09 09:25:26 +03:00
Michael Bogdanov
8cd496556c Generate local var table 2015-04-09 09:25:26 +03:00
Evgeny Gerashchenko
5c0a81fae1 Minor. Renamed test data. default object -> companion object. 2015-04-08 21:15:28 +03:00
Evgeny Gerashchenko
8ef2718e30 Added assert clarification for EA-66572 2015-04-08 21:15:28 +03:00
Evgeny Gerashchenko
4ba0d2aba5 Updated quasi-indeterministic test data. After introducing new line marker provider, which invokes lazy resolution, diagnostic is reported on different element. 2015-04-08 21:15:28 +03:00
Michael Nedzelsky
c62b1fac69 JS: fix support auto import for class names 2015-04-08 16:50:48 +03:00
Michael Nedzelsky
15ebab4f7e JS: add tests for quickfix: autoimport for Kotlin/Javascript projects 2015-04-08 16:50:45 +03:00
Evgeny Gerashchenko
53ef521a8f Deparenthesizing this expression. 2015-04-08 16:44:45 +03:00
Evgeny Gerashchenko
d7928b7251 Added test cases with labeled diff. 2015-04-08 16:43:34 +03:00
Evgeny Gerashchenko
4c5bfaeb8b Checking for different receiver in implicit calls. They are considered not recursive. 2015-04-08 16:37:41 +03:00
Evgeny Gerashchenko
01b8718ac7 Minor. More proper short-circuit check. 2015-04-08 15:33:49 +03:00
Evgeny Gerashchenko
eeeb741d42 Added test for obsolete bug and removed workaround in code. 2015-04-08 15:14:16 +03:00
Evgeny Gerashchenko
015da2f8ca More proper code to check if lambda is inlined. Parameter of inline function can be annotated with "noInline". 2015-04-08 15:14:15 +03:00
Evgeny Gerashchenko
d24d750d34 Added workaround for bug in IDEA test framework. Without it, tests didn't make much sense. 2015-04-08 15:14:14 +03:00
Evgeny Gerashchenko
33e34c759d KT-2190 Highlight usages invoked on "throw" or "return" should highlight all exit-points of function
#KT-2190 fixed
2015-04-08 15:14:13 +03:00
Evgeny Gerashchenko
86f91ade1a Minor. Fixed syntax error in test data. 2015-04-08 15:14:11 +03:00
Evgeny Gerashchenko
6041d566d9 Line markers for recursive calls. 2015-04-08 15:14:10 +03:00
Evgeny Gerashchenko
06c05193a6 Extracted method. 2015-04-08 14:38:04 +03:00
Evgeny Gerashchenko
85e9f2207e Minor. Moved test data to subdirectory. 2015-04-08 14:38:04 +03:00
Evgeny Gerashchenko
a2bc9cd7de Added optimization for isReferenceTo. It quickly says false for
references from non-source code to anywhere except same file.
2015-04-08 14:38:04 +03:00
Michael Nedzelsky
28f320498c remove AbstractNavigateToLibraryTest 2015-04-08 01:15:24 +03:00
Michael Nedzelsky
c09acf89e5 NavigateToLibrarySourceTestGenerated: add tests for projects with kotlin/jvm and kotlin/js modules 2015-04-08 01:15:21 +03:00
Michael Nedzelsky
054d905374 add NavigateToStdlibSourceTest 2015-04-08 01:15:18 +03:00
Michael Nedzelsky
7b17ae3b8b add testUtils 2015-04-08 01:15:15 +03:00
Michael Nedzelsky
c0e6fa62a0 NavigateToLibrarySourceTest -> NavigateToLibrarySourceTestGenerated 2015-04-08 01:15:13 +03:00
Michael Nedzelsky
039b9a8e16 JetCotoImplementationTest -> KotlinGotoImplementationTestGenerated 2015-04-08 01:15:09 +03:00
Alexander Udalov
4956b24810 Merge two DescriptorRenderer parameters about parameter name rendering
Also disable parameter name rendering completely in
AbstractJvmRuntimeDescriptorLoaderTest because they can't be obtained anyway in
reflection
2015-04-07 20:25:08 +03:00
Alexander Udalov
47e7235e64 Add different tests on class loaders in reflection 2015-04-07 20:25:07 +03:00
Alexander Udalov
87ef4ff7c5 Fix KClassImpl#toString to render Kotlin FQ name, not JVM one 2015-04-07 20:25:06 +03:00
Alexander Udalov
137ee53e85 Reflection test: only skip Java annotation constructors
The order of Kotlin annotation parameters is retained
2015-04-07 20:25:05 +03:00
Alexander Udalov
9c1e7f93d2 Reflection: refactor property construction and fix memory leak
Properties obtained by KClass.properties were having strong references to
descriptors (captured by closures, which are strongly retained by
DescriptorBasedProperty). Support initial value in lazy soft properties
2015-04-07 20:22:52 +03:00
Alexander Udalov
715641fb0d Call getMethod/getDeclaredMethod depending on visibility 2015-04-07 20:20:40 +03:00
Alexander Udalov
0202217135 Fix JVM signatures involving multi-dimensional array types
Apparently ASM's Type#getElementType returns the type of the array even if it's
multi-dimensional, so the loop was incorrect
2015-04-07 20:06:23 +03:00
Alexander Udalov
7e86d87133 Move built-in companion intrinsics to core to reuse in reflection 2015-04-07 20:06:23 +03:00
Denis Zharkov
ce51327509 Refine descriptor renderer test
Now it checks:
- Whether resolveToDescriptor on secondary constructors works well
- If there is explicit primary constructor declaration
  resolveToDescriptor should return it
- Renderer itself works well with constructors
2015-04-07 19:31:31 +03:00
Denis Zharkov
468233b624 Change default visiting behaviour of constructors to proper one
visitJetElement -> visitDeclaration
2015-04-07 19:31:31 +03:00
Denis Zharkov
f85e92a247 j2k: Adjust annotation converter to last changes
Only parameter named `value` can be marked vararg
2015-04-07 19:31:30 +03:00
Denis Zharkov
37d7327482 Implement visitPrimaryConstructor in LazyDeclarationResolver
It's need to prevent exception when trying to analyze each declaration
node within class

 #KT-7279 Fixed
 #KT-7315 Fixed
2015-04-07 19:31:30 +03:00
Denis Zharkov
1324667bc9 Prohibit use of positioned value arguments for java annotation 2015-04-07 19:31:30 +03:00
Denis Zharkov
a29c0ff9a3 Use default value if annotation vararg argument is empty 2015-04-07 19:31:30 +03:00
Denis Zharkov
9b1443954f Refine loading annotation parameters from java
- Parameter named `value` is always first
- Array parameter represented as vararg iff its name is `value` and all
  other parameters have default values

 #KT-2576 Fixed
 #KT-6641 Fixed
 #KT-6220 Fixed
 #KT-6652 Fixed
2015-04-07 19:31:29 +03:00
Andrey Breslav
84ed0e7255 Create annotation-arguments.md
(cherry picked from commit 202ea7c)
2015-04-07 19:31:29 +03:00
Mikhail Glukhikh
27b1f1ddad Test and implementation for KT-6819. Now when entry condition data flow information is used for subsequent conditions. #KT-6819 Fixed 2015-04-07 19:03:34 +03:00
Mikhail Glukhikh
cd206fc97b Test for KT-3711. Passes already in M11 or even earlier 2015-04-07 19:03:31 +03:00
Mikhail Glukhikh
221501c0d9 Tests for KT-2865. Passes already in M11 or even earlier 2015-04-07 19:03:29 +03:00
Mikhail Glukhikh
39e01f4df2 Tests for KT-3899. Passes already in M11 or even earlier 2015-04-07 19:03:27 +03:00
Mikhail Glukhikh
f49c79f4f0 Tests for KT-3224 and KT-3244. Both pass already in M11 or even earlier 2015-04-07 19:03:24 +03:00
Natalia Ukhorskaya
8f07960fd4 Debugger: do not use DelegatedPropertyRenderer for fields with name = delegate 2015-04-07 18:53:10 +03:00
Natalia Ukhorskaya
649654999f Debugger: add an option for computing delegated properties values in Variables View 2015-04-07 18:53:08 +03:00
Natalia Ukhorskaya
111f375fa6 Eval4j: disable object collection during evaluation 2015-04-07 18:10:23 +03:00
Michael Bogdanov
7abbf1ec12 Rename invokeWithout assertion to genInvokeInstruction 2015-04-07 17:28:02 +03:00
Michael Bogdanov
8b4886e3e0 Remove invokeWithAssertion function 2015-04-07 17:28:02 +03:00
Michael Bogdanov
3e953dbe24 Remove commented code 2015-04-07 17:28:01 +03:00
Michael Bogdanov
841b199d49 Optimize comparison with zero and null 2015-04-07 17:28:01 +03:00
Michael Bogdanov
ccfc613c31 Get rid of some genLazy 2015-04-07 17:28:01 +03:00
Michael Bogdanov
f551e90d7c Use callableMethod return type as function call result type 2015-04-07 17:27:25 +03:00
Michael Bogdanov
86e12f1f42 IntrinsicCallable clean 2015-04-07 16:05:43 +03:00
Michael Bogdanov
31c4aaac4d Rename thisType and receiverType to dispatch and extension ones 2015-04-07 16:05:43 +03:00
Michael Bogdanov
a201cb3258 IntrinsicCallable clean 2015-04-07 16:05:43 +03:00
Michael Bogdanov
c72bae5081 Clean intr 2015-04-07 16:05:43 +03:00
Michael Bogdanov
de11ecb9b4 Fix for KT-7288: VerifyError on accessing array element in 'is' block
#KT-7288 Fixed
2015-04-07 16:05:42 +03:00
Michael Bogdanov
a44def05cc Rollback hack for rangeTo safe call support 2015-04-07 16:05:42 +03:00
Michael Bogdanov
c7fe8e0b66 Branched value refactoring, And/Or support 2015-04-07 16:05:42 +03:00
Michael Bogdanov
c63ac3e30a Test for KT-7222 Redundant boxing on toString call
#KT-7222 Fixed
2015-04-07 16:05:42 +03:00
Michael Bogdanov
0efe8890b8 Added new string tests 2015-04-07 16:05:42 +03:00
Michael Bogdanov
a19c1ed476 ArrayIterator refactoring 2015-04-07 16:05:42 +03:00
Michael Bogdanov
69ddb6bfca Intrinsic.toCallable clean 2015-04-07 16:05:41 +03:00
Michael Bogdanov
d55c5fe0e4 Array get convertion 2015-04-07 16:05:41 +03:00
Michael Bogdanov
c8a4fa586c ArrayGet.java to kt 2015-04-07 16:05:41 +03:00
Michael Bogdanov
a1f365d17c Clean 2015-04-07 16:05:41 +03:00
Michael Bogdanov
47c838e62b Move some callable method impl to trait 2015-04-07 16:05:41 +03:00
Michael Bogdanov
05aa80e7f1 Callable methods to properties 2015-04-07 16:05:41 +03:00
Michael Bogdanov
45d5a86468 Clean Intrinsics 2015-04-07 16:05:40 +03:00
Michael Bogdanov
32d4845606 ExCallable to Callable renaming 2015-04-07 16:05:40 +03:00
Michael Bogdanov
6213d68553 Ex -> kt 2015-04-07 16:05:40 +03:00
Michael Bogdanov
8e0003c1a5 Callable Convertion 2015-04-07 16:05:40 +03:00
Michael Bogdanov
1d31b93c33 Callable*.java->Callable.kt 2015-04-07 16:05:40 +03:00
Michael Bogdanov
390c03d03f Concat conversion 2015-04-07 16:05:40 +03:00
Michael Bogdanov
81be7cd071 Concat.java->Concat.kt 2015-04-07 16:05:39 +03:00
Michael Bogdanov
6e13cef3c5 IdentEquals 2015-04-07 16:05:39 +03:00
Michael Bogdanov
8e4204408b Not conversion and hack for substitute param generation 2015-04-07 16:05:39 +03:00
Michael Bogdanov
b2fe44997a Remove intrinsics from CollectionElement 2015-04-07 16:05:39 +03:00
Michael Bogdanov
44582f76e3 Not restriction 2015-04-07 16:05:39 +03:00
Michael Bogdanov
0c8ee872f9 Increment convertion 2015-04-07 16:05:38 +03:00
Michael Bogdanov
8ec0cd18b7 CompareTo fix 2015-04-07 16:05:38 +03:00
Michael Bogdanov
8552dd60ae patch moveto stack 2015-04-07 16:05:38 +03:00
Michael Bogdanov
6e9d5ebe78 RenageTo convertion & before call 2015-04-07 16:05:38 +03:00
Michael Bogdanov
83f8dae9ac RangeTo.java->RangeTo.kt 2015-04-07 16:05:38 +03:00
Michael Bogdanov
b99ff5c7ae Intrinsic conversion 2015-04-07 16:05:37 +03:00
Michael Bogdanov
a5612ec4c0 intrinsics java->kt file renaming 2015-04-07 16:05:37 +03:00
Michael Bogdanov
c1ab7f06f7 Get rid of getAsmMethod 2015-04-07 16:05:37 +03:00
Michael Bogdanov
61a49f13e1 ExtendedCallable and some optimazation in CallableMethod 2015-04-07 16:05:37 +03:00
Michael Bogdanov
ce004a9181 Number/Object compare to branched one 2015-04-07 16:05:37 +03:00
Nikolay Krasko
2946c1d6a8 KT-7271 Accessing an extension property of Char.Companion leads to ClassNotFoundException in runtime
#KT-7271 Fixed
2015-04-07 15:59:05 +03:00
Nikolay Krasko
a77aae8789 KT-7245 HTML Markup in toolwindow caption
#KT-7245 Fixed
2015-04-07 15:59:04 +03:00
Ilya Gorbunov
fbb567c11a Iterator<T> can be converted to a sequence constrained to be one-time iterable. 2015-04-07 15:35:01 +03:00
Ilya Gorbunov
f2d865e836 Provide constrainOnce extension method for the Sequence.
Sequence created from the generator function without an initial value can be iterated only once.
The same is for BufferedReader.lines sequence.
2015-04-07 15:34:59 +03:00
Ilya Gorbunov
698ffa2807 A sequence constructed with initialValue can be iterated multiple times. 2015-04-07 15:31:00 +03:00
Stanislav Erokhin
3de0dff575 Migrate testdata to new lambda syntax 2015-04-07 13:08:53 +03:00
Stanislav Erokhin
b703f59e04 Migrate kotlin sources, maven projects and stdlib to new lambda syntax 2015-04-07 13:08:53 +03:00
Stanislav Erokhin
e0988de707 Minor: increase timeout 2015-04-07 13:08:52 +03:00
Stanislav Erokhin
4ef086ea57 Minor. Removed obsolete comment 2015-04-07 13:08:51 +03:00
Stanislav Erokhin
b152211096 Added init keyword to testdata 2015-04-07 13:08:51 +03:00
Stanislav Erokhin
6ab83c9b8c Added init keyword to builtins, maven projects and stdlib 2015-04-07 13:08:50 +03:00
Ilya Gorbunov
7cac6e3c5e Provide String.commonPrefixWith and String.commonSuffixWith methods.
Char.isHighSurrogate and Char.isLowSurrogate now available in js-stdlib too.
2015-04-07 03:15:03 +03:00
Ilya Gorbunov
70cc7fbf1f Remove never intentionally used String.hashCode extension. 2015-04-07 03:14:49 +03:00
Ilya Gorbunov
91decc9f33 Add String.contains with Char argument. Fixes #KT-7239. 2015-04-07 03:14:36 +03:00
Ilya Gorbunov
cb85d335ba Correct deprecated message for trim()
Correct documentation description.
2015-04-07 03:14:22 +03:00
Valentin Kipyatkov
8f01130e8e Minor code corrections after review 2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
2efa851115 Used correct function for fetching elements in range instead of strange one from daemon.impl 2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
0918d5ce79 Minor 2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
bf0798ca86 Added test 2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
bcbe10ad2a Removed unused method 2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
506f84fb8a KT-5959 Imports should be inserted on paste from java with conversion to Kotlin
#KT-5959 Fixed
2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
754567af07 Important fix: PsiFile.getParent() is PsiDirectory! 2015-04-07 00:00:29 +03:00
Valentin Kipyatkov
d0637ccaf4 Conversion from Java on paste: post processing of code really works 2015-04-07 00:00:28 +03:00
Valentin Kipyatkov
2227452e7a KT-5203 Do not offer to convert from java on paste if conversion is trivial
#KT-5203 Fixed
2015-04-07 00:00:28 +03:00
Valentin Kipyatkov
0ed7d228f6 Got rid of conversionScope parameter for JavaToKotlinConverter 2015-04-07 00:00:28 +03:00
Valentin Kipyatkov
751f952536 Code improvements 2015-04-07 00:00:28 +03:00
Valentin Kipyatkov
4b32db5c5e KT-5289 J2K: Should show progress when conversion takes time
#KT-5289 Fixed
2015-04-07 00:00:28 +03:00
Zalim Bashorov
b3ef334a0e Update to IDEA 14.1 EAP (141.498.1) 2015-04-06 22:20:44 +03:00
Mikhail Glukhikh
88441814b9 Test for KT-5502 (works after KT-4450 / KT-5907 fix) 2015-04-06 18:32:19 +03:00
Mikhail Glukhikh
d92ccad35d Implementation and tests for KT-5840 and newly created KT-7204. Now a safe call provides not-null receiver state *inside* argument list. It works also for ?. chains. #KT-5840 Fixed.
On the other hand, argument states do not propagate to successor statements for a safe call. #KT-7204 Fixed. A few additional comments.
2015-04-06 18:29:52 +03:00
Zalim Bashorov
79739b7090 Fix build. 2015-04-06 18:20:00 +03:00
Mikhail Glukhikh
1055c34474 Fix of when / break / continue problem 2015-04-06 17:57:48 +03:00
Natalia Ukhorskaya
20470e5c42 Merge pull request #635 from rusmonster/bugfix/fix-build-after-cleaning
Build fails after project cleaning
#KT-7277 Fixed
2015-04-06 16:35:18 +03:00
Mikhail Glukhikh
cdc2d0f542 Tests for when / break / continue fixed 2015-04-06 16:08:17 +03:00
Valentin Kipyatkov
412ab8f8b8 Split module idea into idea, idea-core and idea-completion 2015-04-06 14:28:40 +03:00
Dmitry Jemerov
203c8ea125 compilation fix 2015-04-06 13:03:56 +02:00
Dmitry Kalita
7c911e1f0a When you build the project for the first time after cleaning, you lose paths to internal_impl jars of support libraries such as
build/intermediates/exploded-aar/com.android.support/support-v4/21.0.2/libs/internal_impl-21.0.2.jar

They are absent in javaCompile.getClasspath() when javaCompile task starts.

This patch fixes it.
#KT-7277 Fixed
2015-04-05 13:11:41 +03:00
Dmitry Jemerov
5a0c98ca81 fix compilation now that 'break' inside 'when' is not allowed 2015-04-05 00:33:14 +03:00
Dmitry Jemerov
252c4118eb report 'break' and 'continue' inside 'when' as errors (even if 'when' is nested in a loop) 2015-04-05 00:33:14 +03:00
Valentin Kipyatkov
8ab12e217d KT-7267 Arguments are replaced by tab when old call was qualified
#KT-7267 Fixed
2015-04-04 22:15:45 +03:00
Valentin Kipyatkov
2c1a0a0c4b Smart completion: expected type instantiation made higher priority than static members 2015-04-04 22:15:45 +03:00
Valentin Kipyatkov
e2979614ad KT-7259 Space inserted before parenthesis in completion of call
#KT-7259 Fixed
2015-04-04 22:15:45 +03:00
Valentin Kipyatkov
93d9e78047 Minor 2015-04-04 22:15:45 +03:00
Valentin Kipyatkov
29149add09 KT-7247 PsiErrorElementImpl cannot be cast to org.jetbrains.kotlin.psi.JetElement
#KT-7247 Fixed
2015-04-04 22:15:45 +03:00
Yan Zhulanow
df12331173 Ignore fragment tag (it requires a different implementation) 2015-04-03 17:38:20 +03:00
Yan Zhulanow
b4cfacbac7 Name synthetic files after layout names 2015-04-03 17:37:24 +03:00
Yan Zhulanow
e6fa6e9a5d Escape layout names which are Kotlin keywords 2015-04-03 17:37:23 +03:00
Yan Zhulanow
3aa6edca7b Escape soft keywords as well 2015-04-03 17:37:23 +03:00
Yan Zhulanow
fae114f606 Cast findViewById() result to Views safely 2015-04-03 17:37:23 +03:00
Yan Zhulanow
1f16328070 Add imports for XML widget tags, support.v4 fake package files 2015-04-03 17:37:22 +03:00
Yan Zhulanow
d0e4f86790 Escape widget ids which are Kotlin keywords 2015-04-03 17:37:22 +03:00
Yan Zhulanow
2af538e854 Ignore some XML tags 2015-04-03 17:37:21 +03:00
Yan Zhulanow
938248bd29 Search for all properties in layout files corresponding to the given JetProperty 2015-04-03 17:37:21 +03:00
Yan Zhulanow
96074bc948 Fix Android byte code generation inside complex expressions 2015-04-03 17:37:21 +03:00
Yan Zhulanow
de06a0cbc2 Clear layout cache on layout XML file add/remove 2015-04-03 17:37:20 +03:00
Yan Zhulanow
b930f04ff4 Fix null-related warnings in AndroidRenameProcessor 2015-04-03 17:37:20 +03:00
Yan Zhulanow
638ec2ae92 Fix deprecated Kotlin constructs and remove unused code in Android plugins 2015-04-03 17:37:20 +03:00
Yan Zhulanow
dd083c64cc Simplify Module resolving in AndroidRenameProcessor 2015-04-03 17:37:19 +03:00
Yan Zhulanow
cbf68e8c6f Generate synthetic packages even for layouts without @+id/ attributes declared 2015-04-03 17:37:19 +03:00
Yan Zhulanow
0a96c2c148 Lookup XML attribute using the property (for a particular layout) 2015-04-03 17:37:19 +03:00
Yan Zhulanow
a4dc6870dc Fix Android layout widget redeclarations 2015-04-03 17:37:18 +03:00
Yan Zhulanow
c40598b3e9 Do not cast findViewById to View 2015-04-03 17:37:18 +03:00
Yan Zhulanow
2061e390b4 Support special Android layout XML tags: fragment, include, merge 2015-04-03 17:37:18 +03:00
Valentin Kipyatkov
37af12c4bf Code improvements after review 2015-04-03 17:16:22 +03:00
Valentin Kipyatkov
5dbd23088f Removed WritableScope.addClassifierAlias too 2015-04-03 17:16:22 +03:00
Valentin Kipyatkov
54ea6113d7 Replaced addTypeParameterDescriptor with addClassifierDescriptor - it does the same 2015-04-03 17:16:22 +03:00
Valentin Kipyatkov
ffc22e8b16 Removed unused methods 2015-04-03 17:16:21 +03:00
Valentin Kipyatkov
02b2fb000e Removed unused WriteThroughScope 2015-04-03 17:16:21 +03:00
Valentin Kipyatkov
0162980ff7 Refactored code in QualifiedExpressionResolver so that WritableScope.import* methods are not used anymore 2015-04-03 17:16:21 +03:00
Valentin Kipyatkov
21083b48ce Minor refactoring in imports resolve 2015-04-03 17:16:21 +03:00
Ilya Gorbunov
12bf8ca94f Replace deprecated split usage in kdoc. 2015-04-03 12:13:23 +03:00
Ilya Gorbunov
51321c8b36 Remove deprecated isNullOrEmpty declaration, fixed usage. 2015-04-03 12:13:11 +03:00
Michael Nedzelsky
61726fdcb7 JS: merge KotlinJavascriptSerializer into KotlinJavascriptSerializationUtil 2015-04-03 05:36:21 +03:00
Michael Nedzelsky
1c7e1ddf26 JS: remove LibrarySourcesConfigWithCaching, introduce LibrarySourceConfig.Builder 2015-04-03 05:36:18 +03:00
Michael Nedzelsky
6d8fc1e035 JS: load metadata optimization in KotlinJavascriptMetadataUtils 2015-04-03 05:36:15 +03:00
Michael Nedzelsky
563ab47502 JS: add jps build test for Kotlin/Javascript two-module project 2015-04-03 05:36:13 +03:00
Michael Nedzelsky
06aef3164c JS: use metadata in jps build process 2015-04-03 05:36:10 +03:00
Michael Nedzelsky
9a02db3e8b JpsJsModuleUtils.java -> JpsJsModuleUtils.kt 2015-04-03 05:36:07 +03:00
Michael Nedzelsky
e779c8a2ae JpsJsModuleUtils: convert to kotlin 2015-04-03 05:36:05 +03:00
Michael Nedzelsky
5a73bd19c5 JS: move processing metaInfo to TranslationResult 2015-04-03 05:36:02 +03:00
Michael Nedzelsky
dbe59190ed JS: add writeMetadataToString, serializeToString 2015-04-03 05:35:59 +03:00
Michael Nedzelsky
0951d69bdc JS: add metaInfo attribute to Config 2015-04-03 05:35:56 +03:00
Michael Nedzelsky
54df359134 JS: add default package name to DescriptorUtils.getPackageNames 2015-04-03 05:35:53 +03:00
Alexander Udalov
4474005183 Fix codegen tests and overloads diagnostic test 2015-04-03 01:38:31 +03:00
Alexander Udalov
6279421094 Minor, add test on Java enum with specialized entry 2015-04-02 21:57:53 +03:00
Alexander Udalov
3c1ead726b Minor, rename jdkFromIdeaHome -> mockJdk 2015-04-02 21:57:52 +03:00
Alexander Udalov
5b2ffd50d3 Use mock JDK instead of full in IDEA plugin tests 2015-04-02 21:57:51 +03:00
Alexander Udalov
72aa3d1465 Use mock JDK in compiler tests where full JDK is not needed
- move some of boxWithStdlib tests under fullJdk/ directory, where they will be
  compiled against the full JDK
- introduce FULL_JDK in-text directive for the reflection test as only 4 tests
  out of 654 needed the full JDK
2015-04-02 21:57:48 +03:00
Alexander Udalov
150e0a4ef2 Print runtime and reflection jar sizes for TeamCity statistics 2015-04-02 21:57:02 +03:00
Dmitry Jemerov
7b507276ed frontend diagnostics for kotlin.jvm.overloads
#KT-7203 Fixed
2015-04-02 20:30:36 +02:00
Dmitry Jemerov
39828bfd32 Implement kotlin.jvm.overloads annotation for generating all overloads of a method that has default parameter values.
#KT-2095 Fixed

fix backend-side issues with kotlin.jvm.overloads: support the annotation on constructors, generate nullablity annotations on parameters, generate generic signatures, add various tests
2015-04-02 20:30:26 +02:00
Dmitry Jemerov
e15b984232 Implement kotlin.jvm.overloads annotation for generating all overloads of a method that has default parameter values.
#KT-2095 Fixed
2015-04-02 20:30:01 +02:00
Dmitry Jemerov
c1c9d3b090 extract code for generating parameterless constructor into a separate class and rewrite it in Kotlin 2015-04-02 20:30:00 +02:00
Valentin Kipyatkov
d78573059e Fixed import insertion on paste broken sometime ago 2015-04-02 21:10:54 +03:00
Ilya Ryzhenkov
1fc1c025e9 Fix EA-67177: exception when analysing unfinished assignment expression without RHS. 2015-04-02 18:59:57 +03:00
Pavel V. Talanov
cb7617b3ca Refactor CompilerConfiguration: keys -> Content roots
Represent classpath roots and java source roots as separate entities
2015-04-02 16:13:06 +03:00
Valentin Kipyatkov
4e283fd62f Added a test 2015-04-02 10:17:01 +03:00
Valentin Kipyatkov
1df39ab82b Fixed code after rebase to SmartCastUtils requiring containingDeclaration 2015-04-02 10:17:01 +03:00
Valentin Kipyatkov
784b4a8aeb Minor code changes after code review 2015-04-02 10:17:00 +03:00
Valentin Kipyatkov
b45b462bdf Not imported extension functions are always listed in code completion 2015-04-02 10:17:00 +03:00
Valentin Kipyatkov
c54541b269 Functions returning Nothing are indexed even when alias import is used 2015-04-02 10:16:59 +03:00
Valentin Kipyatkov
1789907740 No hardcoded nothing callables needed anymore 2015-04-02 10:16:59 +03:00
Valentin Kipyatkov
6a2cc66eb1 Got rid of isProbablyNothing in stubs + fixed exception on some files on indexing stubs 2015-04-02 10:10:31 +03:00
Valentin Kipyatkov
0243280668 Extension callables index is built correctly when using alias imports 2015-04-02 10:09:26 +03:00
Valentin Kipyatkov
bff2b2f378 Fixed tests for stubs 2015-04-02 10:09:25 +03:00
Valentin Kipyatkov
5ba5618718 Extension callables index and its use in completion 2015-04-02 10:09:25 +03:00
Valentin Kipyatkov
546af84435 Renames 2015-04-02 10:09:25 +03:00
Valentin Kipyatkov
f92bc39323 Minor code improvements 2015-04-02 10:09:25 +03:00
Valentin Kipyatkov
4b383f35b4 Use of Sequence instead of Stream 2015-04-02 10:09:25 +03:00
Alexander Udalov
0b252505d9 Minor, add clarifying comment & inline useless property 2015-04-02 03:22:58 +03:00
Alexander Udalov
57be11a7e6 Minor, move common logic to ReflectJavaModifierListOwner 2015-04-02 03:22:22 +03:00
Alexander Udalov
4cea9ecca4 Minor, add reflection test on inherited Java property 2015-04-02 03:22:12 +03:00
Alexander Udalov
7fda4ef438 Don't show local/anonymous classes in libraries in Project view 2015-04-02 03:22:04 +03:00
Evgeny Gerashchenko
0d4d719156 Minor. Reverted optimized imports in generated test. 2015-04-02 02:28:49 +03:00
Valentin Kipyatkov
fea57ecd2c Fixed incorrect PARTIAL resolve inside code fragments 2015-04-01 23:21:24 +03:00
Valentin Kipyatkov
c99f3fd106 Refactoring code to be more Kotlin 2015-04-01 23:21:24 +03:00
Valentin Kipyatkov
3ff13ccf5d Converting ElementResolver to Kotlin (step 2) 2015-04-01 23:21:23 +03:00
Valentin Kipyatkov
2637bf608a Converting ElementResolver to Kotlin (step 1) 2015-04-01 23:21:23 +03:00
Valentin Kipyatkov
f7a147f236 PsiReference.resolve() uses partial body resolve 2015-04-01 23:21:23 +03:00
Valentin Kipyatkov
6dc943a739 JetReference.resolveToDescriptors() requires BindingContext 2015-04-01 23:21:23 +03:00
Valentin Kipyatkov
04a6ebf0d6 Dropped JetReference.resolveMap() 2015-04-01 23:21:23 +03:00
Valentin Kipyatkov
67de85aed1 More usages of partial body resolve 2015-04-01 23:21:23 +03:00
Valentin Kipyatkov
4d2a34cc4e "Surround with" uses partial body resolve 2015-04-01 23:21:22 +03:00
Valentin Kipyatkov
ff6853f300 Added BodyResolveMode parameter to JetElement.analyze() 2015-04-01 23:21:22 +03:00
Valentin Kipyatkov
a8bb0162f8 Minor code improvements 2015-04-01 23:21:22 +03:00
Valentin Kipyatkov
cd18b16407 Partial body resolve: fixed for ! and parenthesis in conditions 2015-04-01 23:21:22 +03:00
Valentin Kipyatkov
698d839eee Added a test 2015-04-01 23:21:22 +03:00
Valentin Kipyatkov
f3799a0ce7 Partial body resolve correctly handles elvis operator 2015-04-01 23:21:22 +03:00
Valentin Kipyatkov
176ba937ba Partial body resolve filter works more precisely for if-statements 2015-04-01 23:21:21 +03:00
Valentin Kipyatkov
7a414336c1 Do not run partial body resolve if full body resolve already cached 2015-04-01 23:21:21 +03:00
Ilya Gorbunov
6aad2b2d65 Add dependency of kotlin-js-tests to kotlin-js-tests-junit. 2015-04-01 23:10:15 +03:00
Ilya Gorbunov
cac058d5a3 Fix endsWith in JS always ignored character case, regardless of the ignoreCase parameter value.
startsWith, endsWith again use native implementation when possible.
2015-04-01 23:10:14 +03:00
Ilya Gorbunov
315badd5d1 Restore native js functions: startsWith, endsWith, contains.
startsWith and endsWith implementation taken from MDN.
2015-04-01 23:05:52 +03:00
Ilya Gorbunov
0717705f15 Add requireNotNull with lazy message. 2015-04-01 22:28:47 +03:00
Ilya Ryzhenkov
2f02024c24 checkLValue for array indexing expression should resolve set method #KT-7218 Fixed 2015-04-01 21:02:05 +03:00
Pavel V. Talanov
a986d913c3 Remove traces of class object constraints feature from parser, frontend, tests and psi 2015-04-01 20:09:34 +03:00
Pavel V. Talanov
5fe8bb4a92 Drop ClassifierDescriptor#getClassObjectType()
Introduce utility for ClassDescriptor to use where necessary
2015-04-01 20:09:32 +03:00
Ilya Gorbunov
b930f71b79 Fix split method usage in JS: split replaced with splitWithRegex or splitBy. 2015-04-01 18:17:08 +03:00
Ilya Gorbunov
95c2a4fb29 Fix split method usage: split temporary replaced with splitBy. 2015-04-01 18:17:06 +03:00
Natalia Ukhorskaya
907f402d30 Code fragments: getResolveScope should return scope for context element 2015-04-01 18:01:24 +03:00
Valentin Kipyatkov
36fb14a3fc KT-6923 Completion shouldn't show private symbols from compiled code
#KT-6923 Fixed
2015-04-01 17:46:10 +03:00
Valentin Kipyatkov
3b110f8ef8 KT-7194 No completion for member extension function inside itself
#KT-7194 Fixed
2015-04-01 17:46:10 +03:00
Valentin Kipyatkov
7e9314bd40 More accurate import conflict detection 2015-04-01 17:10:50 +03:00
Valentin Kipyatkov
e22f28c061 Fixed a fail in import insertion 2015-04-01 17:10:50 +03:00
Alexander Udalov
d6ceadf769 Revert erroneous change to .idea/compiler.xml 2015-04-01 16:44:44 +03:00
Dmitry Jemerov
6d56618d17 complete KDoc tag names after @, not only at line start
#KT-7139 Fixed

code review
2015-04-01 15:14:20 +02:00
Ilya Gorbunov
f87dcff723 Fixed #KT-6476. last(predicate) and lastOrNull(predicate) use reverse iteration when possible. 2015-04-01 15:51:08 +03:00
Ilya Gorbunov
d81895df77 Rename and deprecate ad-hoc IsNullOrEmpty. 2015-04-01 15:40:20 +03:00
Ilya Gorbunov
850d79e61a Remove negative variants of isEmpty and isBlank (may be included later). 2015-04-01 15:40:18 +03:00
Ilya Gorbunov
ac4b207413 Add isEmpty, isBlank methods and their nullable and negating couterparts. 2015-04-01 15:40:17 +03:00
Stanislav Erokhin
4efb0dbf9a Fixed CAPTURED_IN_CLOSURE marker for primary constructor argument
#KT-7131 Fixed
2015-04-01 15:28:09 +03:00
Alexey Sedunov
9247f4f096 Quick-Fixes: Fix type checking scope for type mismatch in call argument 2015-04-01 13:41:27 +03:00
Alexey Sedunov
eb594a2897 Extract Function: Approximate non-resolvable types with nearest resolvable supertype when possible
#KT-7120 Fixed
2015-04-01 13:41:26 +03:00
Alexey Sedunov
a90d020859 Extraction Engine: Fix extraction of labeled and non-local returns 2015-04-01 13:41:24 +03:00
Alexey Sedunov
3bea49eedd Change Signature: Fix processing of enum constructors
#KT-7170 Fixed
2015-04-01 13:41:23 +03:00
Alexey Sedunov
d65b55e147 Change Signature: Fix processing of lambda arguments 2015-04-01 13:41:22 +03:00
Svetlana Isakova
61d0bcdf76 KT-7068 None of the following functions can be called with two functions with extention function parameter
#KT-7068 Fixed
2015-04-01 11:57:15 +03:00
Nikolay Krasko
ca98b19aba Wrong package light file with package class 2015-04-01 02:02:07 +03:00
Nikolay Krasko
055be2850f Fix accept() in light methods elements to avoid treating them as ClsElements 2015-04-01 02:02:01 +03:00
Nikolay Krasko
9d151d2ce8 Add ability to configure set of tools with in file 2015-04-01 02:01:59 +03:00
Nikolay Krasko
4e04d9b887 Add more toString() methods and additional wrapping for Kotlin elements 2015-04-01 02:01:55 +03:00
Nikolay Krasko
ad23e9159c Refactoring: remove unnecessary subclassing PsiClass in marker interface 2015-04-01 02:01:53 +03:00
Nikolay Krasko
a109223a07 Minor: fix compile errors in java test data 2015-04-01 02:01:51 +03:00
Denis Zharkov
a4018d9eae Run "Add 'init' keyword in whole project" quickfix 2015-03-31 20:20:23 +03:00
Denis Zharkov
99f1ab333e Report illegal modifiers and annotations on primary constructor
#KT-7057 Fixed
 #KT-6772 Fixed
2015-03-31 20:20:22 +03:00
Denis Zharkov
717f850470 Setup spacing rules for primary ctor's parts 2015-03-31 20:20:22 +03:00
Denis Zharkov
8e69c06e5a Adjust stub-builder, decompiler and renderer to new PSI structure
of primary ctor
2015-03-31 20:20:22 +03:00
Denis Zharkov
741c9febe2 Modify various usages of old PSI structure of primary ctor 2015-03-31 20:20:22 +03:00
Denis Zharkov
cafa018066 Parsing: Drop redundant parameter as it always has the same value 2015-03-31 20:20:22 +03:00
Denis Zharkov
af2bcfb524 Parse primary constructor into separate PSI element 2015-03-31 20:20:22 +03:00
Evgeny Gerashchenko
59f939d9ef Do check isCheapEnoughToSearch for companion objects, but just ignore ZERO_OCCURENCES outcome. 2015-03-31 20:08:05 +03:00
Evgeny Gerashchenko
83f2a08708 Added test with moving file used in Java to other package. 2015-03-31 18:14:00 +03:00
Evgeny Gerashchenko
a4d2d6506c Removing import of removed package facade. 2015-03-31 18:13:21 +03:00
Evgeny Gerashchenko
f789933683 Fixed updating Java references on moved Kotlin top-level callables. 2015-03-31 18:13:20 +03:00
Evgeny Gerashchenko
5b05c60858 Minor. Code cleanup. 2015-03-31 18:13:20 +03:00
Mikhail Glukhikh
620b7954ac Tests for already working KT-3993 and KT-5427. These test cases pass at least since M11 2015-03-31 17:15:46 +03:00
Mikhail Glukhikh
9c1551bca9 Implementation of smart casts for public / protected immutable properties that are not open and used in the same module.
DataFlowValueFactory and its environment refactoring: containing declaration is added into factory functions
as an argument and used to determine identifier stability. A few minor fixes. #KT-5907 Fixed. #KT-4450 Fixed. #KT-4409 Fixed.

New tests for KT-4409, KT-4450, KT-5907 (public and protected value properties used from the same module or not,
open properties, variable properties, delegated properties, properties with non-default getter).
Public val test and KT-362 test changed accordingly.
2015-03-31 16:19:03 +03:00
15409 changed files with 216293 additions and 151122 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
**/testData/** linguist-vendored

2
.gitignore vendored
View File

@@ -8,8 +8,6 @@
/ideaSDK
/android-studio/sdk
out
/pluginPublisher/idea*
/pluginPublisher/plugin-verifier.jar
tmp
workspace.xml
*.versionsBackup

3
.idea/ant.xml generated
View File

@@ -10,13 +10,12 @@
<buildFile url="file://$PROJECT_DIR$/TeamCityBuild.xml">
<maximumHeapSize value="512" />
</buildFile>
<buildFile url="file://$PROJECT_DIR$/pluginPublisher/TeamCityPluginPublisher.xml" />
<buildFile url="file://$PROJECT_DIR$/idea-runner/runner.xml" />
<buildFile url="file://$PROJECT_DIR$/replicate_versions.xml" />
<buildFile url="file://$PROJECT_DIR$/libraries/build-docs.xml">
<maximumHeapSize value="1024" />
<properties>
<property name="dokka.path" value="../../dokka/out/artifacts" />
<property name="dokka.path" value="../../dokka" />
</properties>
</buildFile>
</component>

View File

@@ -1,9 +0,0 @@
<component name="ArtifactManager">
<artifact type="jar" name="InjectorGenerator">
<output-path>$PROJECT_DIR$/out/artifacts/internal/</output-path>
<root id="archive" name="injector-generator.jar">
<element id="module-output" name="injector-generator" />
<element id="dir-copy" path="$PROJECT_DIR$/generators/injector-generator" />
</root>
</artifact>
</component>

View File

@@ -40,6 +40,10 @@
<element id="module-output" name="kotlin-android-plugin" />
<element id="module-output" name="js.serializer" />
<element id="module-output" name="serialization" />
<element id="module-output" name="idea-completion" />
<element id="module-output" name="idea-core" />
<element id="module-output" name="idea-js" />
<element id="module-output" name="container" />
</element>
<element id="library" level="project" name="javax.inject" />
<element id="directory" name="jps">

View File

@@ -287,5 +287,4 @@
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>
</project>

3
.idea/compiler.xml generated
View File

@@ -2,10 +2,9 @@
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<option name="BUILD_PROCESS_HEAP_SIZE" value="2000" />
<excludeFromCompile>
<directory url="file://$PROJECT_DIR$/core/reflection" includeSubdirectories="true" />
<directory url="file://$PROJECT_DIR$/core/reflection.jvm" includeSubdirectories="true" />
<directory url="file://$PROJECT_DIR$/core/reflection.stub.jvm" includeSubdirectories="true" />
</excludeFromCompile>
<resourceExtensions />
<wildcardResourcePatterns>

7
.idea/dictionaries/bashor.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="ProjectDictionaryState">
<dictionary name="bashor">
<words>
<w>ctor</w>
</words>
</dictionary>
</component>

View File

@@ -2,6 +2,7 @@
<dictionary name="geevee">
<words>
<w>builtins</w>
<w>callables</w>
<w>klass</w>
<w>proto</w>
<w>protoc</w>

View File

@@ -1,13 +1,19 @@
<component name="ProjectDictionaryState">
<dictionary name="valentin">
<words>
<w>decapitalize</w>
<w>delegator</w>
<w>funs</w>
<w>initializers</w>
<w>inserter</w>
<w>negatable</w>
<w>pparent</w>
<w>processings</w>
<w>rbracket</w>
<w>renderers</w>
<w>rparenth</w>
<w>selectioner</w>
<w>unpluralize</w>
</words>
</dictionary>
</component>

14
.idea/libraries/Rhino.xml generated Normal file
View File

@@ -0,0 +1,14 @@
<component name="libraryTable">
<library name="Rhino">
<ANNOTATIONS>
<root url="file://$PROJECT_DIR$/annotations" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$PROJECT_DIR$/dependencies/rhino-1.7.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/rhino-1.7.6-sources.jar!/rhino1.7.6/src" />
</SOURCES>
</library>
</component>

View File

@@ -9,11 +9,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/android/android/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/android/android/common/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/android/android/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/android/android/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/android/android/ultimate/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/plugins/android/lib" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/plugins/android/lib/jps" recursive="false" />

14
.idea/libraries/ant.xml generated Normal file
View File

@@ -0,0 +1,14 @@
<component name="libraryTable">
<library name="ant">
<ANNOTATIONS>
<root url="file://$PROJECT_DIR$/annotations" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$PROJECT_DIR$/dependencies/ant-1.8/lib/ant.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.8.2-src.zip!/apache-ant-1.8.2/src/main" />
</SOURCES>
</library>
</component>

View File

@@ -1,21 +0,0 @@
<component name="libraryTable">
<library name="ant-1.7">
<ANNOTATIONS>
<root url="file://$PROJECT_DIR$/annotations" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$PROJECT_DIR$/dependencies/ant-1.7/lib/ant.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/core/loaderref/src" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/core/containersrc" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/types/assertions" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/taskdefs/apt" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/taskdefs/rmic/src" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/taskdefs/fixcrlf/input" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/etc/testcases/taskdefs/fixcrlf/expected" />
<root url="jar://$PROJECT_DIR$/dependencies/apache-ant-1.7.0-src.zip!/apache-ant-1.7.0/src/main" />
</SOURCES>
</library>
</component>

View File

@@ -8,7 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/copyright/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -7,7 +7,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -10,21 +10,7 @@
<JAVADOC />
<SOURCES>
<root url="file://$PROJECT_DIR$/ideaSDK/plugins/gradle/lib" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/hotswap/agentSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt-constants/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/plugins/gradle/lib" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/plugins/Groovy/lib" recursive="false" />

View File

@@ -12,328 +12,7 @@
<root url="jar://$PROJECT_DIR$/dependencies/guava-17.0-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/dependencies/asm5-src.zip!/" />
<root url="jar://$PROJECT_DIR$/dependencies/cli-parser-1.1.1-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/gradle-tooling-extension-impl/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/groovy-psi/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/jetgroovy/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/jps-standalone-builder/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/lang-impl/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/spellchecker/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/testFramework-java/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/testFramework/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/util/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/build/cucumber-test-runner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/build/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/images/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/forms-compiler/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/forms-compiler/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/instrumentation-util/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/javac2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/debugger/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/debugger/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/execution/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/execution/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/idea-ui/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-indexing-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-indexing-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-runtime/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-structure-view/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-tests/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-base-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-spi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/manifest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/manifest/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/remote-servers/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/remote-servers/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/structuralsearch-java/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/testFramework/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/typeMigration/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/typeMigration/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/antLayout/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-launcher/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/plugin-system/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/standalone-builder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/annotations/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/boot/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/bootstrap/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/core-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/core-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/duplicates-analysis/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/dvcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/dvcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/editor-ui-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/editor-ui-ex/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/extensions/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/extensions/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/forms_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/funcTests/project1/module1/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/indexing-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/indexing-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-api/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lvcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lvcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-main/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-tests/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/projectModel-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/projectModel-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/agent-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/backend/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/debugger-ui/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/debugger-ui/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-model-generator/generated" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-model-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-reader-runtime/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-reader/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/schema-reader-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/smRunner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/smRunner/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structuralsearch/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structuralsearch/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structure-view-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structure-view-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/bootstrap/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testRunner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/usageView/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-api/vcs-api-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ByteCodeViewer/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/testsrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/IntelliLang-tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/intellilang-jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/java-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/xml-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ShortcutPromoter/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/tests/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/commander/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/copyright/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage-common/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cucumber-jvm-formatter/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/cvs-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/cvs-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/javacvs-src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/smartcvs-src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/trilead-ssh2-build213/examples" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/trilead-ssh2-build213/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/editorconfig/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/generate-tostring/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/generate-tostring/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/remote-servers-git/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/test-stepdefs" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/github/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/github/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/jps-plugin/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/runtime/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/hotswap/agentSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt-constants/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/hg4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/hg4idea/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/engine/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/engine/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/plugin/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/FxBuilderEmbedder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/common-javaFX-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/javaFX-CE/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/javaFX-jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m3/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m31/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven-server-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/main/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/test/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/jira/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/jira/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-java/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/terminal/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-lang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-lang/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-view/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xslt-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/engine/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/engine/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/rt/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/IntelliLang-python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/course-creator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/course-creator/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ide/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ipnb/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ipnb/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pluginSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pluginTestSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pydevSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/python-rest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/python-rest/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/rest/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/rest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/actions/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/applicationConfigurable/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/comparingReferences/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/comparingReferences/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/conditionalOperatorConvertor/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/conditionalOperatorConvertor/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/textEditor/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/toolWindow/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/vfs/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/spellchecker/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/spellchecker/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/launcher-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/binary" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/cup" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/interpreter" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/simple" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/updater/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/updater/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-tests/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/relaxng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/relaxng/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/tests/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-structure-view-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-structure-view-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/lib" recursive="false" />
</library>

View File

@@ -11,328 +11,7 @@
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/guava-17.0-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/dependencies/asm5-src.zip!/" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/gradle-tooling-extension-impl/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/groovy-psi/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/jetgroovy/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/jps-standalone-builder/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/lang-impl/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/spellchecker/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/testFramework-java/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/testFramework/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/util/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/build/cucumber-test-runner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/build/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/images/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/forms-compiler/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/forms-compiler/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/instrumentation-util/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/javac2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/debugger/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/debugger/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/execution/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/execution/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/idea-ui/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-indexing-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-indexing-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-runtime/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-structure-view/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-tests/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-base-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-spi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/manifest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/manifest/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/remote-servers/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/remote-servers/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/structuralsearch-java/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/testFramework/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/typeMigration/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/typeMigration/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/antLayout/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-launcher/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/plugin-system/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/standalone-builder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/annotations/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/boot/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/bootstrap/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/core-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/core-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/duplicates-analysis/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/dvcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/dvcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/editor-ui-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/editor-ui-ex/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/extensions/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/extensions/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/forms_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/funcTests/project1/module1/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/indexing-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/indexing-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-api/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lvcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lvcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-main/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-tests/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/projectModel-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/projectModel-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/agent-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/backend/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/debugger-ui/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/debugger-ui/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-model-generator/generated" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-model-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-reader-runtime/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-reader/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/schema-reader-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/smRunner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/smRunner/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structuralsearch/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structuralsearch/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structure-view-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structure-view-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/bootstrap/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testRunner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/usageView/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-api/vcs-api-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ByteCodeViewer/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/testsrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/IntelliLang-tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/intellilang-jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/java-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/xml-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ShortcutPromoter/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/tests/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/commander/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/copyright/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage-common/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cucumber-jvm-formatter/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/cvs-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/cvs-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/javacvs-src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/smartcvs-src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/trilead-ssh2-build213/examples" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/trilead-ssh2-build213/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/editorconfig/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/generate-tostring/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/generate-tostring/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/remote-servers-git/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/test-stepdefs" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/github/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/github/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/jps-plugin/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/runtime/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/hotswap/agentSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt-constants/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/hg4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/hg4idea/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/engine/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/engine/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/plugin/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/FxBuilderEmbedder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/common-javaFX-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/javaFX-CE/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/javaFX-jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m3/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m31/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven-server-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/main/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/test/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/jira/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/jira/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-java/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/terminal/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-lang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-lang/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-view/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xslt-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/engine/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/engine/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/rt/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/IntelliLang-python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/course-creator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/course-creator/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ide/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ipnb/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ipnb/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pluginSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pluginTestSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pydevSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/python-rest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/python-rest/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/rest/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/rest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/actions/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/applicationConfigurable/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/comparingReferences/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/comparingReferences/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/conditionalOperatorConvertor/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/conditionalOperatorConvertor/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/textEditor/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/toolWindow/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/vfs/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/spellchecker/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/spellchecker/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/launcher-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/binary" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/cup" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/interpreter" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/simple" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/updater/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/updater/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-tests/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/relaxng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/relaxng/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/tests/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-structure-view-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-structure-view-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/core" recursive="false" />
</library>

View File

@@ -11,328 +11,7 @@
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/asm5-src.zip!/" />
<root url="jar://$PROJECT_DIR$/dependencies/guava-17.0-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/gradle-tooling-extension-impl/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/groovy-psi/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/jetgroovy/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/jps-standalone-builder/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/lang-impl/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/spellchecker/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/testFramework-java/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/testFramework/java-production" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/.jps-build-data/groovyStubs/util/java-test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/RegExpSupport/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/build/cucumber-test-runner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/build/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/images/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/forms-compiler/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/forms-compiler/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/instrumentation-util/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/javac2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/compiler/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/debugger/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/debugger/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/execution/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/execution/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/idea-ui/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-indexing-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-indexing-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-runtime/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-structure-view/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/java-tests/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-base-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/jsp-spi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/manifest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/manifest/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/remote-servers/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/remote-servers/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/structuralsearch-java/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/testFramework/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/typeMigration/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/java/typeMigration/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/antLayout/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-launcher/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/plugin-system/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/standalone-builder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/json/tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/annotations/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/boot/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/bootstrap/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/core-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/core-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/duplicates-analysis/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/dvcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/dvcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/editor-ui-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/editor-ui-ex/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/extensions/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/extensions/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/external-system-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/forms_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/funcTests/project1/module1/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/indexing-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/indexing-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-api/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lang-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lvcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/lvcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-main/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/platform-tests/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/projectModel-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/projectModel-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/agent-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/remote-servers/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/backend/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/debugger-ui/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/debugger-ui/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-model-generator/generated" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-model-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-reader-runtime/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/protocol-reader/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/script-debugger/protocol/schema-reader-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/smRunner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/smRunner/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structuralsearch/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structuralsearch/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structure-view-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/structure-view-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/bootstrap/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testFramework/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/testRunner/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/usageView/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-api/vcs-api-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/graph/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/vcs-log/impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/xdebugger-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ByteCodeViewer/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/InspectionGadgets/testsrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/IntelliLang-tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/intellilang-jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/java-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/xml-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntentionPowerPak/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ShortcutPromoter/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ant/tests/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/commander/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/copyright/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage-common/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/coverage/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cucumber-jvm-formatter/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/cvs-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/cvs-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/javacvs-src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/smartcvs-src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/trilead-ssh2-build213/examples" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/cvs/trilead-ssh2-build213/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/devkit/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/eclipse/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/editorconfig/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/generate-tostring/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/generate-tostring/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/remote-servers-git/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/test-stepdefs" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/git4idea/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/github/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/github/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/jps-plugin/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/runtime/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/google-app-engine/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/gradle/tooling-extension-impl/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/groovy-psi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/hotswap/agentSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt-constants/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/structuralsearch-groovy/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/groovy/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/hg4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/hg4idea/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/engine/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/engine/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-decompiler/plugin/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/FxBuilderEmbedder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/common-javaFX-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/javaFX-CE/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/javaFX-jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/javaFX/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m3/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m31/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven-server-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/main/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/test/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/resources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/svn4idea/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/jira/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/jira/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-java/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/tasks/tasks-tests/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/terminal/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/testSources" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng_rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer-core/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/ui-designer/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-lang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-lang/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xpath-view/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xpath/xslt-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/engine/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/engine/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/rt/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/xslt-debugger/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/IntelliLang-python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/course-creator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/course-creator/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/learn-python/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/edu/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ide/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ipnb/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/ipnb/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pluginSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pluginTestSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/pydevSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/python-rest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/python-rest/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/rest/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/rest/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/python/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/actions/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/applicationConfigurable/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/comparingReferences/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/comparingReferences/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/conditionalOperatorConvertor/source" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/conditionalOperatorConvertor/testSource" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/textEditor/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/toolWindow/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/samples/vfs/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/spellchecker/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/spellchecker/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/launcher-generator/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/binary" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/cup" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/interpreter" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/examples/simple" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/tools/lexer/jflex-1.4/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/updater/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/updater/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/dom-tests/tests" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/openapi/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/relaxng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/relaxng/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/tests/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-analysis-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-analysis-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-impl/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-structure-view-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/xml/xml-structure-view-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -5,8 +5,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/java-support" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/IntelliLang/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

11
.idea/libraries/jansi.xml generated Normal file
View File

@@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="jansi">
<CLASSES>
<root url="jar://$PROJECT_DIR$/dependencies/jansi.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/jansi-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -8,8 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/java-i18n/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -8,18 +8,8 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/antLayout/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/standalone-builder/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util/src" />
<root url="jar://$PROJECT_DIR$/dependencies/protobuf-java-2.5.0-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/platform/util-rt/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/jps" recursive="false" />
</library>

View File

@@ -8,9 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -8,9 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/jps-builders/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-impl/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/jps/model-serialization/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/jps/test" recursive="false" />
</library>

View File

@@ -1,14 +0,0 @@
<component name="libraryTable">
<library name="js-test-libs">
<ANNOTATIONS>
<root url="file://$PROJECT_DIR$/annotations" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$PROJECT_DIR$/js/js.tests/testLib/rhino-1.7R4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/js/js.tests/testLib/src/rhino-1.7R4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -1,16 +0,0 @@
<component name="libraryTable">
<library name="junit-4.11">
<ANNOTATIONS>
<root url="file://$PROJECT_DIR$/annotations" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$PROJECT_DIR$/ideaSDK/lib/hamcrest-core-1.3.jar!/" />
<root url="jar://$PROJECT_DIR$/ideaSDK/lib/junit-4.11.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/hamcrest-core-1.3-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/dependencies/junit-4.11-sources.jar!/" />
</SOURCES>
</library>
</component>

16
.idea/libraries/junit_4_12.xml generated Normal file
View File

@@ -0,0 +1,16 @@
<component name="libraryTable">
<library name="junit-4.12">
<ANNOTATIONS>
<root url="file://$PROJECT_DIR$/annotations" />
</ANNOTATIONS>
<CLASSES>
<root url="jar://$PROJECT_DIR$/ideaSDK/lib/hamcrest-core-1.3.jar!/" />
<root url="jar://$PROJECT_DIR$/ideaSDK/lib/junit-4.12.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/dependencies/hamcrest-core-1.3-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/dependencies/junit-4.12-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@@ -8,7 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/junit/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -2,10 +2,11 @@
<library name="kotlin-runtime">
<CLASSES>
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-runtime.jar!/" />
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-reflect.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$KOTLIN_BUNDLED$/lib/kotlin-runtime-sources.jar!/" />
<root url="file://$PROJECT_DIR$/libraries/stdlib/src" />
</SOURCES>
</library>
</component>

View File

@@ -8,17 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/main/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/src/test/java" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/jps-plugin/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven-server-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven2-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/maven3-server-impl/test" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m2/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/maven/artifact-resolver-m3/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/ideaSDK/plugins/maven/lib" recursive="false" />
</library>

View File

@@ -8,11 +8,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/gen" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-api/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/properties-psi-impl/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/properties/testSrc" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

View File

@@ -9,7 +9,7 @@
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/plugins/testng/src" />
<root url="jar://$PROJECT_DIR$/ideaSDK/sources/sources.zip!/" />
</SOURCES>
</library>
</component>

8
.idea/modules.xml generated
View File

@@ -8,6 +8,7 @@
<module fileurl="file://$PROJECT_DIR$/plugins/android-jps-plugin/android-jps-plugin.iml" filepath="$PROJECT_DIR$/plugins/android-jps-plugin/android-jps-plugin.iml" group="plugins" />
<module fileurl="file://$PROJECT_DIR$/android-studio/android-studio.iml" filepath="$PROJECT_DIR$/android-studio/android-studio.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/compiler/android-tests/android-tests.iml" filepath="$PROJECT_DIR$/compiler/android-tests/android-tests.iml" group="compiler" />
<module fileurl="file://$PROJECT_DIR$/plugins/annotation-collector/annotation-collector.iml" filepath="$PROJECT_DIR$/plugins/annotation-collector/annotation-collector.iml" group="plugins" />
<module fileurl="file://$PROJECT_DIR$/ant/ant.iml" filepath="$PROJECT_DIR$/ant/ant.iml" />
<module fileurl="file://$PROJECT_DIR$/compiler/backend/backend.iml" filepath="$PROJECT_DIR$/compiler/backend/backend.iml" group="compiler/java" />
<module fileurl="file://$PROJECT_DIR$/compiler/backend-common/backend-common.iml" filepath="$PROJECT_DIR$/compiler/backend-common/backend-common.iml" group="compiler" />
@@ -17,6 +18,7 @@
<module fileurl="file://$PROJECT_DIR$/compiler/cli/cli.iml" filepath="$PROJECT_DIR$/compiler/cli/cli.iml" group="compiler/cli" />
<module fileurl="file://$PROJECT_DIR$/compiler/cli/cli-common/cli-common.iml" filepath="$PROJECT_DIR$/compiler/cli/cli-common/cli-common.iml" group="compiler/cli" />
<module fileurl="file://$PROJECT_DIR$/compiler/tests/compiler-tests.iml" filepath="$PROJECT_DIR$/compiler/tests/compiler-tests.iml" group="compiler" />
<module fileurl="file://$PROJECT_DIR$/compiler/container/container.iml" filepath="$PROJECT_DIR$/compiler/container/container.iml" group="compiler" />
<module fileurl="file://$PROJECT_DIR$/core/descriptor.loader.java/descriptor.loader.java.iml" filepath="$PROJECT_DIR$/core/descriptor.loader.java/descriptor.loader.java.iml" group="core" />
<module fileurl="file://$PROJECT_DIR$/core/descriptors/descriptors.iml" filepath="$PROJECT_DIR$/core/descriptors/descriptors.iml" group="core" />
<module fileurl="file://$PROJECT_DIR$/core/descriptors.runtime/descriptors.runtime.iml" filepath="$PROJECT_DIR$/core/descriptors.runtime/descriptors.runtime.iml" group="core" />
@@ -29,11 +31,15 @@
<module fileurl="file://$PROJECT_DIR$/idea/ide-common/ide-common.iml" filepath="$PROJECT_DIR$/idea/ide-common/ide-common.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea/idea.iml" filepath="$PROJECT_DIR$/idea/idea.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea/idea-analysis/idea-analysis.iml" filepath="$PROJECT_DIR$/idea/idea-analysis/idea-analysis.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea/idea-completion/idea-completion.iml" filepath="$PROJECT_DIR$/idea/idea-completion/idea-completion.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea/idea-core/idea-core.iml" filepath="$PROJECT_DIR$/idea/idea-core/idea-core.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea/idea-jps-common/idea-jps-common.iml" filepath="$PROJECT_DIR$/idea/idea-jps-common/idea-jps-common.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea/idea-js/idea-js.iml" filepath="$PROJECT_DIR$/idea/idea-js/idea-js.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/idea-runner/idea-runner.iml" filepath="$PROJECT_DIR$/idea-runner/idea-runner.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/generators/injector-generator/injector-generator.iml" filepath="$PROJECT_DIR$/generators/injector-generator/injector-generator.iml" group="infrastructure" />
<module fileurl="file://$PROJECT_DIR$/idea/idea-test-framework/idea-test-framework.iml" filepath="$PROJECT_DIR$/idea/idea-test-framework/idea-test-framework.iml" group="ide" />
<module fileurl="file://$PROJECT_DIR$/compiler/preloader/instrumentation/instrumentation.iml" filepath="$PROJECT_DIR$/compiler/preloader/instrumentation/instrumentation.iml" group="compiler/cli" />
<module fileurl="file://$PROJECT_DIR$/j2k/j2k.iml" filepath="$PROJECT_DIR$/j2k/j2k.iml" group="j2k" />
<module fileurl="file://$PROJECT_DIR$/compiler/java8-tests/java8-tests.iml" filepath="$PROJECT_DIR$/compiler/java8-tests/java8-tests.iml" group="compiler" />
<module fileurl="file://$PROJECT_DIR$/jps-plugin/jps-plugin.iml" filepath="$PROJECT_DIR$/jps-plugin/jps-plugin.iml" group="ide/jps" />
<module fileurl="file://$PROJECT_DIR$/js/js.dart-ast/js.dart-ast.iml" filepath="$PROJECT_DIR$/js/js.dart-ast/js.dart-ast.iml" group="compiler/js" />
<module fileurl="file://$PROJECT_DIR$/js/js.frontend/js.frontend.iml" filepath="$PROJECT_DIR$/js/js.frontend/js.frontend.iml" group="compiler/js" />

View File

@@ -1,23 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Generate Injectors" type="JetRunConfigurationType" factoryName="Kotlin">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.kotlin.generators.injectors.InjectorsPackage" />
<option name="VM_PARAMETERS" value="" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="generators" />
<envs />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
</component>

View File

@@ -1,37 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Incremental Compilation Tests" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="jps-plugin" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="org.jetbrains.kotlin.jps.build" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="pattern" />
<option name="VM_PARAMETERS" value="-ea -Xmx512m -XX:MaxPermSize=320m -Dkotlin.incremental.compilation=true" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns>
<pattern testClass="org.jetbrains.kotlin.jps.build.IncrementalJpsTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.jps.build.IncrementalCacheVersionChangedTest" />
<pattern testClass="org.jetbrains.kotlin.jps.build.IncrementalConstantSearchTest" />
</patterns>
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method>
<option name="AntTarget" enabled="true" antfile="file://$PROJECT_DIR$/build.xml" target="dist-quick-compiler-only" />
</method>
</configuration>
</component>

28
.idea/runConfigurations/Java_8_Tests.xml generated Normal file
View File

@@ -0,0 +1,28 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Java 8 Tests" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.kotlin.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="java8-tests" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="ALTERNATIVE_JRE_PATH" value="1.8" />
<option name="PACKAGE_NAME" value="org.jetbrains.kotlin" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<option name="VM_PARAMETERS" value="-ea -XX:+HeapDumpOnOutOfMemoryError -XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=64m" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<envs />
<patterns />
<method />
</configuration>
</component>

View File

@@ -23,11 +23,11 @@
</option>
<envs />
<patterns>
<pattern testClass="org.jetbrains.kotlin.completion.JvmSmartCompletionTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.completion.handlers.SmartCompletionHandlerTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.completion.handlers.SmartCompletionMultifileHandlerTest" />
<pattern testClass="org.jetbrains.kotlin.completion.weighers.SmartCompletionWeigherTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.completion.MultiFileSmartCompletionTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.idea.completion.test.JvmSmartCompletionTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.idea.completion.test.handlers.SmartCompletionHandlerTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.idea.completion.test.handlers.SmartCompletionMultifileHandlerTest" />
<pattern testClass="org.jetbrains.kotlin.idea.completion.test.weighers.SmartCompletionWeigherTestGenerated" />
<pattern testClass="org.jetbrains.kotlin.idea.completion.test.MultiFileSmartCompletionTestGenerated" />
</patterns>
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />

View File

@@ -1,3 +1,7 @@
[![TeamCity (simple build status)](https://img.shields.io/teamcity/http/teamcity.jetbrains.com/s/bt345.svg)](https://teamcity.jetbrains.com/viewType.html?buildTypeId=bt345&branch_Kotlin=%3Cdefault%3E&tab=buildTypeStatusDiv)
[![Maven Central](https://img.shields.io/maven-central/v/org.jetbrains.kotlin/kotlin-maven-plugin.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.jetbrains.kotlin%22)
[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0)
# Kotlin Programming Language
Welcome to [Kotlin](http://kotlinlang.org/)! Some handy links:

View File

@@ -6,24 +6,24 @@
<property name="jdk16.home" value="${java.home}"/>
<property name="fail.on.plugin.verifier.error" value="true"/>
<property name="version_substitute_dir" value="${basedir}/versions_temp/" />
<property name="version_substitute_dir" value="${basedir}/versions_temp/"/>
<property name="artifact.output.path" value="${basedir}/out/artifacts"/>
<property name="plugin.xml" value="idea/src/META-INF/plugin.xml"/>
<property name="plugin.xml.bk" value="${version_substitute_dir}/plugin.xml.bk"/>
<property name="plugin.xml.versioned" value="${plugin.xml}.versioned" />
<property name="plugin.xml.versioned" value="${plugin.xml}.versioned"/>
<property name="android-extensions.plugin.xml" value="plugins/android-idea-plugin/src/META-INF/plugin.xml"/>
<property name="android-extensions.plugin.xml.bk" value="${version_substitute_dir}/kotlin-android-extensions.plugin.xml.bk"/>
<property name="android-extensions.plugin.xml.versioned" value="${android-extensions.plugin.xml}.versioned" />
<property name="android-extensions.plugin.xml.versioned" value="${android-extensions.plugin.xml}.versioned"/>
<property name="compiler.version.java" value="compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/KotlinVersion.java"/>
<property name="compiler.version.java.bk" value="${version_substitute_dir}/KotlinVersion.java.bk"/>
<property name="compiler.version.java.versioned" value="${compiler.version.java}.versioned" />
<property name="compiler.version.java.versioned" value="${compiler.version.java}.versioned"/>
<property name="plugin.zip" value="${artifact.output.path}/kotlin-plugin-${build.number}.zip" />
<property name="bare.plugin.zip" value="${artifact.output.path}/kotlin-bare-plugin-${build.number}.zip" />
<property name="android-extensions.zip" value="${artifact.output.path}/kotlin-android-extensions-plugin-${build.number}.zip" />
<property name="plugin.zip" value="${artifact.output.path}/kotlin-plugin-${build.number}.zip"/>
<property name="bare.plugin.zip" value="${artifact.output.path}/kotlin-bare-plugin-${build.number}.zip"/>
<property name="android-extensions.zip" value="${artifact.output.path}/kotlin-android-extensions-plugin-${build.number}.zip"/>
<macrodef name="echoprop">
<attribute name="prop"/>
@@ -47,68 +47,68 @@
</target>
<macrodef name="substituteVersionInFile">
<attribute name="target.file"/>
<attribute name="test.string"/>
<attribute name="target.file.bk" default="@{target.file}.bk"/>
<attribute name="target.file.versioned" default="@{target.file}.versioned"/>
<attribute name="token.key" default="snapshot"/>
<attribute name="version" default="${build.number}"/>
<sequential>
<!-- Create backup. Backup will be restored after build end. This will allow to rebuild project without renew
plugin.xml from repository. -->
<copy file="@{target.file}" tofile="@{target.file.bk}"/>
<attribute name="target.file"/>
<attribute name="test.string"/>
<attribute name="target.file.bk" default="@{target.file}.bk"/>
<attribute name="target.file.versioned" default="@{target.file}.versioned"/>
<attribute name="token.key" default="snapshot"/>
<attribute name="version" default="${build.number}"/>
<sequential>
<!-- Create backup. Backup will be restored after build end. This will allow to rebuild project without renew
plugin.xml from repository. -->
<copy file="@{target.file}" tofile="@{target.file.bk}"/>
<!-- Check that version has correct pattern for substitution -->
<copy todir="">
<fileset file="@{target.file.bk}">
<contains text="@{test.string}"/>
</fileset>
<filterchain>
<replacetokens>
<token key="@{token.key}" value="@{version}"/>
</replacetokens>
</filterchain>
<mergemapper to="@{target.file.versioned}"/>
</copy>
<!-- Check that version has correct pattern for substitution -->
<copy todir="">
<fileset file="@{target.file.bk}">
<contains text="@{test.string}"/>
</fileset>
<filterchain>
<replacetokens>
<token key="@{token.key}" value="@{version}"/>
</replacetokens>
</filterchain>
<mergemapper to="@{target.file.versioned}"/>
</copy>
<!-- If file doesn't exist - there's a problem with original plugin.xml. Probably there's a bad pattern used for version -->
<copy file="@{target.file.versioned}" tofile="@{target.file}" overwrite="true"/>
<!-- If file doesn't exist - there's a problem with original plugin.xml. Probably there's a bad pattern used for version -->
<copy file="@{target.file.versioned}" tofile="@{target.file}" overwrite="true"/>
<delete file="@{target.file.versioned}" quiet="true"/>
</sequential>
<delete file="@{target.file.versioned}" quiet="true"/>
</sequential>
</macrodef>
<target name="writeVersionToTemplateFiles">
<mkdir dir="${version_substitute_dir}"/>
<mkdir dir="${version_substitute_dir}"/>
<substituteVersionInFile
target.file="${plugin.xml}"
target.file.bk="${plugin.xml.bk}"
target.file.versioned="${plugin.xml.versioned}"
test.string="&lt;version&gt;@snapshot@&lt;/version&gt;"/>
<substituteVersionInFile
target.file="${plugin.xml}"
target.file.bk="${plugin.xml.bk}"
target.file.versioned="${plugin.xml.versioned}"
test.string="&lt;version&gt;@snapshot@&lt;/version&gt;"/>
<substituteVersionInFile
target.file="${android-extensions.plugin.xml}"
target.file.bk="${android-extensions.plugin.xml.bk}"
target.file.versioned="${android-extensions.plugin.xml.versioned}"
test.string="&lt;version&gt;@snapshot@&lt;/version&gt;"/>
<substituteVersionInFile
target.file="${android-extensions.plugin.xml}"
target.file.bk="${android-extensions.plugin.xml.bk}"
target.file.versioned="${android-extensions.plugin.xml.versioned}"
test.string="&lt;version&gt;@snapshot@&lt;/version&gt;"/>
<substituteVersionInFile
target.file="${compiler.version.java}"
target.file.bk="${compiler.version.java.bk}"
target.file.versioned="${compiler.version.java.versioned}"
test.string="public static final String VERSION = &quot;@snapshot@&quot;;"/>
<substituteVersionInFile
target.file="${compiler.version.java}"
target.file.bk="${compiler.version.java.bk}"
target.file.versioned="${compiler.version.java.versioned}"
test.string="public static final String VERSION = &quot;@snapshot@&quot;;"/>
<replicateIdeaVersion target.file="${android-extensions.plugin.xml}" />
<replicateIdeaVersion target.file="${android-extensions.plugin.xml}"/>
</target>
<target name="revertTemplateFiles">
<copy file="${plugin.xml.bk}" tofile="${plugin.xml}" overwrite="true"/>
<copy file="${android-extensions.plugin.xml.bk}" tofile="${android-extensions.plugin.xml}" overwrite="true"/>
<copy file="${compiler.version.java.bk}" tofile="${compiler.version.java}" overwrite="true"/>
<target name="revertTemplateFiles">
<copy file="${plugin.xml.bk}" tofile="${plugin.xml}" overwrite="true"/>
<copy file="${android-extensions.plugin.xml.bk}" tofile="${android-extensions.plugin.xml}" overwrite="true"/>
<copy file="${compiler.version.java.bk}" tofile="${compiler.version.java}" overwrite="true"/>
<delete dir="${version_substitute_dir}" quiet="true"/>
</target>
<delete dir="${version_substitute_dir}" quiet="true"/>
</target>
<target name="pre_build" depends="writeVersionToTemplateFiles, cleanupArtifacts"/>
@@ -120,8 +120,10 @@
<sequential>
<zip destfile="@{filename}">
<zipfileset prefix="@{dir}" dir="${artifact.output.path}/@{dir}" excludes="kotlinc/bin/*"/>
<zipfileset prefix="@{dir}/kotlinc/bin" dir="${artifact.output.path}/@{dir}/kotlinc/bin" includes="*.bat" filemode="644"/>
<zipfileset prefix="@{dir}/kotlinc/bin" dir="${artifact.output.path}/@{dir}/kotlinc/bin" excludes="*.bat" filemode="755"/>
<zipfileset prefix="@{dir}/kotlinc/bin" dir="${artifact.output.path}/@{dir}/kotlinc/bin" includes="*.bat"
filemode="644"/>
<zipfileset prefix="@{dir}/kotlinc/bin" dir="${artifact.output.path}/@{dir}/kotlinc/bin" excludes="*.bat"
filemode="755"/>
</zip>
<delete dir="${artifact.output.path}/@{dir}" quiet="true"/>
</sequential>
@@ -131,14 +133,81 @@
<zipPlugin filename="${bare.plugin.zip}" dir="BareKotlin"/>
<zip destfile="${android-extensions.zip}">
<zipfileset prefix="KotlinAndroidExtensions" dir="${artifact.output.path}/KotlinAndroidExtensions" />
<zipfileset prefix="KotlinAndroidExtensions" dir="${artifact.output.path}/KotlinAndroidExtensions"/>
</zip>
<delete dir="${artifact.output.path}/KotlinAndroidExtensions" quiet="true"/>
</target>
<target name="post_build" depends="zipArtifacts, revertTemplateFiles"/>
<macrodef name="print-statistic">
<attribute name="key"/>
<attribute name="value"/>
<sequential>
<echo message="##teamcity[buildStatisticValue key='@{key}' value='@{value}']"/>
</sequential>
</macrodef>
<macrodef name="print-file-size-statistic">
<attribute name="path"/>
<attribute name="file-name"/>
<sequential>
<local name="file.size"/>
<length file="@{path}/@{file-name}" property="file.size"/>
<print-statistic key="@{file-name} size" value="${file.size}"/>
</sequential>
</macrodef>
<target name="printStatistics">
<print-file-size-statistic path="${kotlin-home}/lib" file-name="kotlin-runtime.jar"/>
<print-file-size-statistic path="${kotlin-home}/lib" file-name="kotlin-reflect.jar"/>
<print-file-size-statistic path="${kotlin-home}/lib" file-name="kotlin-jslib.jar"/>
<print-file-size-statistic path="${output}" file-name="kotlin.js"/>
<print-file-size-statistic path="${output}" file-name="builtins.js"/>
<print-file-size-statistic path="${output}" file-name="builtins.meta.js"/>
<print-file-size-statistic path="${output}" file-name="stdlib.js"/>
<print-file-size-statistic path="${output}" file-name="stdlib.meta.js"/>
</target>
<target name="post_build" depends="zipArtifacts, revertTemplateFiles, printStatistics, remove_internal_artifacts"/>
<target name="none">
<fail message="Either specify pre_build or post_build"/>
</target>
<property name="teamcity.build.branch" value=""/>
<condition property="need.remove.artifacts" value="true">
<and>
<matches pattern="rr/.*" string="${teamcity.build.branch}"/>
<not>
<matches pattern="rr/internal/.*" string="${teamcity.build.branch}"/>
</not>
</and>
</condition>
<target name="remove_internal_artifacts" description="Remove internal artifacts for rr/* branches, but store them for rr/internal/*">
<if>
<istrue value="${need.remove.artifacts}"/>
<then>
<echo message="Remove internal artifacts" />
<delete failonerror="false" verbose="true">
<fileset dir="dist">
<include name="kotlin-compiler-before-shrink.jar"/>
<include name="kotlin-for-upsource.jar"/>
<include name="kotlin-for-upsource-sources.jar"/>
<include name="kotlin-test-data.zip"/>
</fileset>
<fileset dir="out/artifacts/internal">
<include name="kotlin-ide-common.jar"/>
</fileset>
</delete>
</then>
<else>
<echo message="Internal artifacts left untouched"/>
</else>
</if>
</target>
</project>

View File

@@ -5,13 +5,7 @@
<val name="value" val="&quot;fun isAvailable(project: Project, editor: Editor, file: PsiFile): Boolean&quot;"/>
</annotation>
</item>
<item
name='com.intellij.codeInsight.intention.IntentionAction void invoke(com.intellij.openapi.project.Project, com.intellij.openapi.editor.Editor, com.intellij.psi.PsiFile)'>
<annotation name='jet.runtime.typeinfo.KotlinSignature'>
<val name="value" val="&quot;fun invoke(project: Project, editor: Editor, file: PsiFile): Unit&quot;"/>
</annotation>
</item>
<item
<item
name='com.intellij.codeInsight.intention.PsiElementBaseIntentionAction boolean isAvailable(com.intellij.openapi.project.Project, com.intellij.openapi.editor.Editor, com.intellij.psi.PsiElement) 1'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>

View File

@@ -7,7 +7,7 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="ant-1.7" level="project" />
<orderEntry type="library" name="ant" level="project" />
<orderEntry type="library" name="kotlin-runtime" level="project" />
<orderEntry type="module" module-name="preloader" />
</component>

View File

@@ -26,7 +26,7 @@ public class Kotlin2JsTask : KotlinCompilerBaseTask() {
public var outputPrefix: File? = null
public var outputPostfix: File? = null
public var sourceMap: Boolean = false
public var metaInfo: File? = null
public var metaInfo: Boolean = false
/**
* {@link K2JsArgumentConstants.CALL} (default) if need generate a main function call (main function will be auto detected)
@@ -72,10 +72,6 @@ public class Kotlin2JsTask : KotlinCompilerBaseTask() {
if (noStdlib) args.add("-no-stdlib")
if (sourceMap) args.add("-source-map")
metaInfo?.let {
args.add("-meta-info")
args.add(it.canonicalPath)
}
if (metaInfo) args.add("-meta-info")
}
}

View File

@@ -0,0 +1,66 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.ant
import org.apache.tools.ant.AntClassLoader
import org.jetbrains.kotlin.preloading.ClassPreloadingUtils
import java.io.File
import java.lang.ref.SoftReference
import java.net.JarURLConnection
import kotlin.properties.Delegates
object KotlinAntTaskUtil {
private var classLoaderRef = SoftReference<ClassLoader?>(null)
private val libPath: File by Delegates.lazy {
// Find path of kotlin-ant.jar in the filesystem and find kotlin-compiler.jar in the same directory
val resourcePath = "/" + javaClass.getName().replace('.', '/') + ".class"
val jarConnection = javaClass.getResource(resourcePath).openConnection() as? JarURLConnection
?: throw UnsupportedOperationException("Kotlin compiler Ant task should be loaded from the JAR file")
val antTaskJarPath = File(jarConnection.getJarFileURL().toURI())
antTaskJarPath.getParentFile()
}
val compilerJar: File by Delegates.lazy {
File(libPath, "kotlin-compiler.jar").assertExists()
}
val runtimeJar: File by Delegates.lazy {
File(libPath, "kotlin-runtime.jar").assertExists()
}
private fun File.assertExists(): File {
if (!this.exists()) {
throw IllegalStateException("${getName()} is not found in the directory of Kotlin Ant task")
}
return this
}
synchronized fun getOrCreateClassLoader(): ClassLoader {
val cached = classLoaderRef.get()
if (cached != null) return cached
val myLoader = javaClass.getClassLoader()
if (myLoader !is AntClassLoader) return myLoader
val classLoader = ClassPreloadingUtils.preloadClasses(listOf(compilerJar), 4096, myLoader, null)
classLoaderRef = SoftReference(classLoader)
return classLoader
}
}

View File

@@ -16,14 +16,29 @@
package org.jetbrains.kotlin.ant;
import kotlin.KotlinPackage;
import kotlin.jvm.functions.Function1;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.MagicNames;
import org.apache.tools.ant.taskdefs.Javac;
import org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter;
import org.apache.tools.ant.taskdefs.compilers.Javac13;
import org.apache.tools.ant.taskdefs.condition.AntVersion;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.apache.tools.ant.Project.MSG_WARN;
public class KotlinCompilerAdapter extends Javac13 {
private static final List<String> KOTLIN_EXTENSIONS = Arrays.asList("kt", "kts");
public class KotlinCompilerAdapter extends DefaultCompilerAdapter {
private Path externalAnnotations;
public List<Commandline.Argument> additionalArguments = new ArrayList<Commandline.Argument>(0);
public void setExternalAnnotations(Path externalAnnotations) {
this.externalAnnotations = externalAnnotations;
@@ -36,22 +51,103 @@ public class KotlinCompilerAdapter extends DefaultCompilerAdapter {
return externalAnnotations.createPath();
}
public Commandline.Argument createCompilerArg() {
Commandline.Argument argument = new Commandline.Argument();
additionalArguments.add(argument);
return argument;
}
@Override
public String[] getSupportedFileExtensions() {
List<String> result = KotlinPackage.plus(Arrays.asList(super.getSupportedFileExtensions()), KOTLIN_EXTENSIONS);
//noinspection SSBasedInspection
return result.toArray(new String[result.size()]);
}
@Override
public boolean execute() throws BuildException {
Javac javac = getJavac();
Kotlin2JvmTask kotlinTask = new Kotlin2JvmTask();
kotlinTask.setOutput(javac.getDestdir());
kotlinTask.setClasspath(javac.getClasspath());
kotlinTask.setSrc(javac.getSrcdir());
kotlinTask.setExternalAnnotations(externalAnnotations);
checkAntVersion();
kotlinTask.execute();
Kotlin2JvmTask kotlinc = new Kotlin2JvmTask();
kotlinc.setFailOnError(javac.getFailonerror());
kotlinc.setOutput(javac.getDestdir());
Path classpath = javac.getClasspath();
if (classpath != null) {
kotlinc.setClasspath(classpath);
}
// We use the provided src dir instead of compileList, because the latter is insane:
// it is constructed only of sources which are newer than classes with the same name
kotlinc.setSrc(javac.getSrcdir());
kotlinc.setExternalAnnotations(externalAnnotations);
kotlinc.getAdditionalArguments().addAll(additionalArguments);
// Javac13#execute passes everything in compileList to javac, which doesn't recognize .kt files
File[] compileListForJavac = filterOutKotlinSources(compileList);
boolean hasKotlinFilesInSources = compileListForJavac.length < compileList.length;
if (hasKotlinFilesInSources) {
kotlinc.execute();
if (!Integer.valueOf(0).equals(kotlinc.getExitCode())) {
// Don't run javac if failOnError = false and there were errors on Kotlin sources
return false;
}
}
else {
// This is needed for addRuntimeToJavacClasspath, where kotlinc arguments will be used.
kotlinc.fillArguments();
}
javac.log("Running javac...");
Javac13 javac13 = new Javac13();
javac13.setJavac(javac);
return javac13.execute();
compileList = compileListForJavac;
addRuntimeToJavacClasspath(kotlinc);
return compileList.length == 0 || super.execute();
}
private void addRuntimeToJavacClasspath(@NotNull Kotlin2JvmTask kotlinc) {
for (String arg : kotlinc.getArgs()) {
// If "-no-stdlib" was specified explicitly, probably the user also wanted the javac classpath to not have it
if ("-no-stdlib".equals(arg)) return;
}
if (compileClasspath == null) {
compileClasspath = new Path(getProject());
}
compileClasspath.add(new Path(getProject(), KotlinAntTaskUtil.INSTANCE$.getRuntimeJar().getAbsolutePath()));
}
private void checkAntVersion() {
AntVersion checkVersion = new AntVersion();
checkVersion.setAtLeast("1.8.2");
if (!checkVersion.eval()) {
getJavac().log("<withKotlin> task requires Ant of version at least 1.8.2 to operate reliably. " +
"Please upgrade or, as a workaround, make sure you have at least one Java source and " +
"the output directory is clean before running this task. " +
"You have: " + getProject().getProperty(MagicNames.ANT_VERSION), MSG_WARN);
}
}
@NotNull
private static File[] filterOutKotlinSources(@NotNull File[] files) {
List<File> nonKotlinSources = KotlinPackage.filterNot(files, new Function1<File, Boolean>() {
@Override
public Boolean invoke(File file) {
for (String extension : KOTLIN_EXTENSIONS) {
if (file.getPath().endsWith("." + extension)) return true;
}
return false;
}
});
return nonKotlinSources.toArray(new File[nonKotlinSources.size()]);
}
}

View File

@@ -16,45 +16,13 @@
package org.jetbrains.kotlin.ant
import org.apache.tools.ant.BuildException
import org.apache.tools.ant.Task
import org.apache.tools.ant.types.Commandline
import org.apache.tools.ant.types.Path
import org.apache.tools.ant.types.Reference
import java.io.File
import org.apache.tools.ant.BuildException
import org.apache.tools.ant.types.Commandline
import java.io.PrintStream
import org.apache.tools.ant.AntClassLoader
import java.lang.ref.SoftReference
import org.jetbrains.kotlin.preloading.ClassPreloadingUtils
import java.net.JarURLConnection
object CompilerClassLoaderHolder {
private var classLoaderRef = SoftReference<ClassLoader?>(null)
synchronized fun getOrCreateClassLoader(): ClassLoader {
val cached = classLoaderRef.get()
if (cached != null) return cached
val myLoader = javaClass.getClassLoader()
if (myLoader !is AntClassLoader) return myLoader
// Find path of kotlin-ant.jar in the filesystem and find kotlin-compiler.jar in the same directory
val resourcePath = "/" + javaClass.getName().replace('.', '/') + ".class"
val jarConnection = javaClass.getResource(resourcePath).openConnection() as? JarURLConnection
?: throw UnsupportedOperationException("Kotlin compiler Ant task should be loaded from the JAR file")
val antTaskJarPath = File(jarConnection.getJarFileURL().toURI())
val compilerJarPath = File(antTaskJarPath.getParent(), "kotlin-compiler.jar")
if (!compilerJarPath.exists()) {
throw IllegalStateException("kotlin-compiler.jar is not found in the directory of Kotlin Ant task")
}
val classLoader = ClassPreloadingUtils.preloadClasses(listOf(compilerJarPath), 4096, myLoader, null)
classLoaderRef = SoftReference(classLoader)
return classLoader
}
}
public abstract class KotlinCompilerBaseTask : Task() {
protected abstract val compilerFqName: String
@@ -66,11 +34,14 @@ public abstract class KotlinCompilerBaseTask : Task() {
public var nowarn: Boolean = false
public var verbose: Boolean = false
public var printVersion: Boolean = false
public var failOnError: Boolean = false
public var noStdlib: Boolean = false
public val additionalArguments: MutableList<Commandline.Argument> = arrayListOf()
internal var exitCode: Int? = null
public fun createSrc(): Path {
val srcPath = src
if (srcPath == null) {
@@ -94,7 +65,7 @@ public abstract class KotlinCompilerBaseTask : Task() {
abstract fun fillSpecificArguments()
private fun fillArguments() {
public fun fillArguments() {
val sourcePaths = src ?: throw BuildException("\"src\" should be specified")
args.addAll(sourcePaths.list().map { File(it).canonicalPath })
@@ -112,16 +83,16 @@ public abstract class KotlinCompilerBaseTask : Task() {
final override fun execute() {
fillArguments()
val compilerClass = CompilerClassLoaderHolder.getOrCreateClassLoader().loadClass(compilerFqName)
val compilerClass = KotlinAntTaskUtil.getOrCreateClassLoader().loadClass(compilerFqName)
val compiler = compilerClass.newInstance()
val exec = compilerClass.getMethod("execFullPathsInMessages", javaClass<PrintStream>(), javaClass<Array<String>>())
log("Compiling ${src!!.list().toList()} => [${output!!.canonicalPath}]");
val exitCode = exec(compiler, System.err, args.copyToArray())
val result = exec(compiler, System.err, args.toTypedArray())
exitCode = (result as Enum<*>).ordinal()
// TODO: support failOnError attribute of javac
if ((exitCode as Enum<*>).ordinal() != 0) {
if (failOnError && exitCode != 0) {
throw BuildException("Compile failed; see the compiler error output for details.")
}
}

241
build.xml
View File

@@ -10,7 +10,7 @@
<property name="max.heap.size.for.forked.jvm" value="1024m"/>
<property name="bootstrap.home" value="dependencies/bootstrap-compiler"/>
<property name="bootstrap.home" value="${basedir}/dependencies/bootstrap-compiler"/>
<property name="bootstrap.compiler.home" value="${bootstrap.home}/Kotlin/kotlinc"/>
<property name="bootstrap.runtime" value="${bootstrap.compiler.home}/lib/kotlin-runtime.jar"/>
<property name="bootstrap.reflect" value="${bootstrap.compiler.home}/lib/kotlin-reflect.jar"/>
@@ -56,12 +56,13 @@
<path id="classpath">
<file file="${bootstrap.runtime}"/>
<file file="${bootstrap.reflect}"/>
<fileset dir="${idea.sdk}" includes="core/*.jar"/>
<pathelement location="${protobuf.jar}"/>
<fileset dir="${basedir}/lib" includes="**/*.jar"/>
<fileset dir="${dependencies.dir}" includes="jline.jar"/>
<fileset dir="${dependencies.dir}" includes="jansi.jar"/>
<fileset dir="${dependencies.dir}" includes="jline.jar"/>
<fileset dir="${dependencies.dir}" includes="cli-parser-1.1.1.jar"/>
<fileset dir="${basedir}/ideaSDK/jps" includes="jps-model.jar"/>
</path>
@@ -86,10 +87,12 @@
<include name="compiler/builtins-serializer/src"/>
<include name="compiler/cli/src"/>
<include name="compiler/cli/cli-common/src"/>
<include name="compiler/container/src"/>
<include name="compiler/frontend/src"/>
<include name="compiler/frontend.java/src"/>
<include name="compiler/light-classes/src"/>
<include name="compiler/plugin-api/src"/>
<include name="plugins/annotation-collector/src"/>
<include name="compiler/serialization/src"/>
<include name="compiler/util/src"/>
<include name="js/js.dart-ast/src"/>
@@ -103,6 +106,7 @@
<property name="idea.out" value="${basedir}/out/production"/>
<patternset id="compilerClassesFromIDEA.fileset">
<include name="frontend/**"/>
<include name="container/**"/>
<include name="descriptors/**"/>
<include name="deserialization/**"/>
<include name="serialization/**"/>
@@ -116,6 +120,7 @@
<include name="util.runtime/**"/>
<include name="light-classes/**"/>
<include name="plugin-api/**"/>
<include name="annotation-collector/**"/>
<include name="builtins-serializer/**"/>
<include name="js.dart-ast/**"/>
<include name="js.translator/**"/>
@@ -193,13 +198,15 @@
<fileset dir="core/util.runtime/src"/>
<fileset dir="compiler/backend/src"/>
<fileset dir="compiler/backend-common/src"/>
<fileset dir="compiler/builtins-serializer"/>
<fileset dir="compiler/builtins-serializer/src"/>
<fileset dir="compiler/cli/src"/>
<fileset dir="compiler/cli/cli-common/src"/>
<fileset dir="compiler/container/src"/>
<fileset dir="compiler/frontend/src"/>
<fileset dir="compiler/frontend.java/src"/>
<fileset dir="compiler/light-classes/src"/>
<fileset dir="compiler/plugin-api/src"/>
<fileset dir="plugins/annotation-collector/src"/>
<fileset dir="compiler/serialization/src"/>
<fileset dir="compiler/util/src"/>
<fileset dir="js/js.dart-ast/src"/>
@@ -259,7 +266,6 @@
<macrodef name="new-kotlin2js">
<attribute name="output"/>
<attribute name="meta-info"/>
<element name="src"/>
<sequential>
@@ -271,20 +277,22 @@
<pathconvert property="src.line" refid="src.path" pathsep=" "/>
<java classname="org.jetbrains.kotlin.cli.js.K2JSCompiler" failonerror="true" fork="true" maxmemory="${max.heap.size.for.forked.jvm}">
<java classname="org.jetbrains.kotlin.preloading.Preloader" failonerror="true" fork="true"
maxmemory="${max.heap.size.for.forked.jvm}">
<classpath>
<file file="${bootstrap.runtime}"/>
<pathelement location="${kotlin-home}/lib/kotlin-compiler.jar"/>
<pathelement location="${kotlin-home}/lib/kotlin-preloader.jar"/>
</classpath>
<assertions>
<enable/>
</assertions>
<arg value="${kotlin-home}/lib/kotlin-compiler.jar"/>
<arg value="org.jetbrains.kotlin.cli.js.K2JSCompiler"/>
<arg line="4096 notime"/>
<arg line="${src.line}"/>
<arg value="-output"/>
<arg value="@{output}"/>
<arg value="-no-stdlib"/>
<arg value="-meta-info"/>
<arg value="@{meta-info}"/>
<arg line="-main noCall"/>
</java>
</sequential>
@@ -297,13 +305,13 @@
<property name="compiled.stdlib.meta.js" value="stdlib.meta.js"/>
<property name="stdlib.js.dir" value="${basedir}/js/js.translator/testData"/>
<new-kotlin2js output="${output}/${compiled.builtins.js}" meta-info="${output}/${compiled.builtins.meta.js}">
<new-kotlin2js output="${output}/${compiled.builtins.js}">
<src>
<fileset refid="kotlin.builtin.files"/>
</src>
</new-kotlin2js>
<new-kotlin2js output="${output}/${compiled.stdlib.js}" meta-info="${output}/${compiled.stdlib.meta.js}">
<new-kotlin2js output="${output}/${compiled.stdlib.js}">
<src>
<resources refid="js.lib.files"/>
</src>
@@ -350,7 +358,6 @@
</closure-compiler>
<jar jarfile="${kotlin-home}/lib/kotlin-jslib.jar" duplicate="fail">
<resources refid="js.lib.files" />
<zipfileset file="${kotlin-home}/build.txt" prefix="META-INF"/>
<zipfileset file="${output}/kotlin.js" prefix=""/>
<zipfileset file="${output}/${compiled.stdlib.meta.js}" prefix=""/>
@@ -435,7 +442,6 @@
<fileset dir="${output}/builtins">
<include name="kotlin/**"/>
<exclude name="kotlin/internal/**"/>
<exclude name="kotlin/reflect/**"/>
</fileset>
<fileset dir="${basedir}/compiler/frontend.java/src" includes="META-INF/services/**"/>
<fileset dir="${basedir}/compiler/backend/src" includes="META-INF/services/**"/>
@@ -515,121 +521,7 @@
<available property="jssejar" value="${java.home}/lib/jsse.jar" file="${java.home}/lib/jsse.jar"/>
<available property="jssejar" value="${java.home}/../Classes/jsse.jar" file="${java.home}/../Classes/jsse.jar"/>
<proguard><![CDATA[
-injars '${output}/kotlin-compiler-before-shrink.jar'(
!com/thoughtworks/xstream/converters/extended/ISO8601**,
!com/thoughtworks/xstream/converters/reflection/CGLIBEnhancedConverter**,
!com/thoughtworks/xstream/io/xml/Dom4J**,
!com/thoughtworks/xstream/io/xml/Xom**,
!com/thoughtworks/xstream/io/xml/Wstx**,
!com/thoughtworks/xstream/io/xml/KXml2**,
!com/thoughtworks/xstream/io/xml/BEAStax**,
!com/thoughtworks/xstream/io/json/Jettison**,
!com/thoughtworks/xstream/mapper/CGLIBMapper**,
!org/apache/log4j/jmx/Agent*,
!org/apache/log4j/net/JMS*,
!org/apache/log4j/net/SMTP*,
!org/apache/log4j/or/jms/MessageRenderer*,
!org/jdom/xpath/Jaxen*,
!org/mozilla/javascript/xml/impl/xmlbeans/**,
!META-INF/maven**,
**.class,**.properties,**.kt,**.kotlin_*,
META-INF/services/**,META-INF/native/**,META-INF/extensions/**,META-INF/MANIFEST.MF,
messages/**)
-outjars '${kotlin-home}/lib/kotlin-compiler.jar'
-dontnote **
-dontwarn com.intellij.util.ui.IsRetina*
-dontwarn com.intellij.util.RetinaImage*
-dontwarn apple.awt.*
-dontwarn dk.brics.automaton.*
-dontwarn org.fusesource.**
-dontwarn org.xerial.snappy.SnappyBundleActivator
-dontwarn com.intellij.util.CompressionUtil
-dontwarn com.intellij.util.SnappyInitializer
-dontwarn net.sf.cglib.**
-dontwarn org.objectweb.asm.** # this is ASM3, the old version that we do not use
-libraryjars '${rtjar}'
-libraryjars '${jssejar}'
-libraryjars '${bootstrap.runtime}'
-target 1.6
-dontoptimize
-dontobfuscate
-keep class org.fusesource.** { *; }
-keep class org.jdom.input.JAXPParserFactory { *; }
-keep class org.jetbrains.annotations.** {
public protected *;
}
-keep class javax.inject.** {
public protected *;
}
-keep class org.jetbrains.kotlin.** {
public protected *;
}
-keep class org.jetbrains.kotlin.compiler.plugin.** {
public protected *;
}
-keep class org.jetbrains.kotlin.extensions.** {
public protected *;
}
-keep class org.jetbrains.org.objectweb.asm.Opcodes { *; }
-keep class org.jetbrains.kotlin.codegen.extensions.** {
public protected *;
}
-keepclassmembers class com.intellij.openapi.vfs.VirtualFile {
public InputStream getInputStream();
}
-keep class jet.** {
public protected *;
}
-keep class com.intellij.psi.** {
public protected *;
}
# for kdoc & dokka
-keep class com.intellij.openapi.util.TextRange { *; }
-keep class com.intellij.lang.impl.PsiBuilderImpl* {
public protected *;
}
-keep class com.intellij.openapi.util.text.StringHash { *; }
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * {
** toString();
** hashCode();
void start();
void stop();
void dispose();
}
-keepclassmembers class org.jetbrains.org.objectweb.asm.Opcodes {
*** ASM5;
}
-keepclassmembers class org.jetbrains.org.objectweb.asm.ClassReader {
*** SKIP_CODE;
*** SKIP_DEBUG;
*** SKIP_FRAMES;
}
]]></proguard>
<proguard configuration="${basedir}/compiler/compiler.pro"/>
</else>
</if>
@@ -637,6 +529,7 @@
<!-- TODO: don't include both to the jar: it's impossible to test changes to core in the local maven build without bootstrap -->
<zipfileset src="${kotlin-home}/lib/kotlin-compiler.jar" includes="**"/>
<zipfileset src="${bootstrap.runtime}" includes="**" excludes="META-INF/**"/>
<zipfileset src="${bootstrap.reflect}" includes="**" excludes="META-INF/**"/>
<manifest>
<attribute name="Built-By" value="${manifest.impl.vendor}"/>
@@ -661,6 +554,7 @@
<pathelement path="${idea.sdk}/core/intellij-core.jar"/>
<pathelement path="${kotlin-home}/lib/kotlin-compiler.jar"/>
<pathelement path="${bootstrap.runtime}"/>
<pathelement path="${bootstrap.reflect}"/>
</classpath>
</kotlinc>
@@ -685,7 +579,8 @@
<compilerarg value="-Xlint:all"/>
<classpath>
<file file="${bootstrap.runtime}"/>
<pathelement location="${dependencies.dir}/ant-1.7/lib/ant.jar"/>
<file file="${bootstrap.reflect}"/>
<pathelement location="${dependencies.dir}/ant-1.8/lib/ant.jar"/>
<pathelement location="${kotlin-home}/lib/kotlin-preloader.jar"/>
</classpath>
</javac2>
@@ -708,11 +603,27 @@
</target>
<target name="jdk-annotations">
<copy file="dependencies/annotations/kotlin-jdk-annotations.jar" todir="${kotlin-home}/lib"/>
<jar destfile="${kotlin-home}/lib/kotlin-jdk-annotations.jar">
<manifest>
<attribute name="Built-By" value="${manifest.impl.vendor}"/>
<attribute name="Implementation-Vendor" value="${manifest.impl.vendor}"/>
<attribute name="Implementation-Title" value="${manifest.impl.title.kotlin.jdk.annotations}"/>
<attribute name="Implementation-Version" value="${build.number}"/>
</manifest>
</jar>
</target>
<target name="android-sdk-annotations">
<copy file="dependencies/annotations/kotlin-android-sdk-annotations.jar" todir="${kotlin-home}/lib"/>
<jar destfile="${kotlin-home}/lib/kotlin-android-sdk-annotations.jar">
<manifest>
<attribute name="Built-By" value="${manifest.impl.vendor}"/>
<attribute name="Implementation-Vendor" value="${manifest.impl.vendor}"/>
<attribute name="Implementation-Title" value="${manifest.impl.title.kotlin.android.sdk.annotations}"/>
<attribute name="Implementation-Version" value="${build.number}"/>
</manifest>
</jar>
</target>
<macrodef name="new-kotlinc">
@@ -822,14 +733,15 @@
</target>
<macrodef name="pack-runtime-jar">
<attribute name="jar-dir" default="${kotlin-home}/lib"/>
<attribute name="jar-name"/>
<attribute name="implementation-title"/>
<element name="jar-content"/>
<sequential>
<delete file="${kotlin-home}/lib/@{jar-name}" failonerror="false"/>
<delete file="@{jar-dir}/@{jar-name}" failonerror="false"/>
<jar destfile="${kotlin-home}/lib/@{jar-name}" duplicate="fail">
<jar destfile="@{jar-dir}/@{jar-name}" duplicate="fail">
<jar-content/>
<zipfileset file="${kotlin-home}/build.txt" prefix="META-INF"/>
@@ -851,12 +763,13 @@
<zipfileset dir="${output}/builtins">
<include name="kotlin/**"/>
<exclude name="kotlin/internal/**"/>
<exclude name="kotlin/reflect/**"/>
<!-- TODO: load metadata from @KotlinClass annotation in KotlinBuiltIns on JVM and restore this exclusion -->
<!-- exclude name="kotlin/reflect/**"/ -->
</zipfileset>
</jar-content>
</pack-runtime-jar>
<pack-runtime-jar jar-name="kotlin-reflect.jar" implementation-title="${manifest.impl.title.kotlin.jvm.reflect}">
<pack-runtime-jar jar-dir="${output}" jar-name="kotlin-reflect-before-jarjar.jar" implementation-title="${manifest.impl.title.kotlin.jvm.reflect}">
<jar-content>
<fileset dir="${output}/classes/reflection"/>
<fileset dir="${output}/classes/core"/>
@@ -865,26 +778,67 @@
</jar-content>
</pack-runtime-jar>
<jar destfile="${kotlin-home}/lib/kotlin-reflect.jar" update="true">
<jar destfile="${output}/kotlin-reflect-before-jarjar.jar" update="true">
<manifest>
<attribute name="Class-Path" value="kotlin-runtime.jar"/>
</manifest>
</jar>
<delete file="${output}/kotlin-reflect-jarjar.jar" failonerror="false"/>
<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="dependencies/jarjar.jar"/>
<jarjar jarfile="${output}/kotlin-reflect-jarjar.jar" filesonly="true" filesetmanifest="merge">
<zipfileset src="${output}/kotlin-reflect-before-jarjar.jar"/>
<rule pattern="org.jetbrains.kotlin.**" result="kotlin.reflect.jvm.internal.impl.@1"/>
<rule pattern="com.google.protobuf.**" result="kotlin.reflect.jvm.internal.impl.com.google.protobuf.@1"/>
<rule pattern="javax.inject.**" result="kotlin.reflect.jvm.internal.impl.javax.inject.@1"/>
</jarjar>
<kotlinc src="${basedir}/generators/infrastructure/strip-kotlin-annotations.kts" output="">
<compilerarg value="-script"/>
<compilerarg value="kotlin/jvm/internal/.*"/> <!-- Annotations to strip -->
<compilerarg value="kotlin/reflect/jvm/internal/impl/.*"/> <!-- Classes to strip from -->
<compilerarg value="${output}/kotlin-reflect-jarjar.jar"/>
<compilerarg value="${kotlin-home}/lib/kotlin-reflect.jar"/>
<classpath>
<pathelement location="${idea.sdk}/lib/asm-all.jar"/>
</classpath>
</kotlinc>
</target>
<target name="pack-runtime-sources">
<!-- Rename packages in the sources of reflection impl (core) -->
<delete dir="${output}/core.src" failonerror="false"/>
<copy todir="${output}/core.src/kotlin/reflect/jvm/internal/impl">
<fileset dir="core">
<include name="descriptor.loader.java/src/**"/>
<include name="descriptors/src/**"/>
<include name="descriptors.runtime/src/**"/>
<include name="deserialization/src/**"/>
<include name="util.runtime/src/**"/>
</fileset>
<cutdirsmapper dirs="5"/> <!-- module/src/org/jetbrains/kotlin -->
</copy>
<replaceregexp match="org\.jetbrains\.kotlin" replace="kotlin.reflect.jvm.internal.impl" flags="g">
<fileset dir="${output}/core.src"/>
</replaceregexp>
<pack-runtime-jar jar-name="kotlin-runtime-sources.jar" implementation-title="${manifest.impl.title.kotlin.jvm.runtime.sources}">
<jar-content>
<fileset dir="${basedir}/core/builtins/native" includes="**/*"/>
<fileset dir="${basedir}/core/builtins/src" includes="**/*"/>
<fileset dir="${basedir}/core/descriptor.loader.java/src" includes="**/*"/>
<fileset dir="${basedir}/core/descriptors/src" includes="**/*"/>
<fileset dir="${basedir}/core/descriptors.runtime/src" includes="**/*"/>
<fileset dir="${basedir}/core/deserialization/src" includes="**/*"/>
<fileset dir="${basedir}/core/reflection.jvm/src" includes="**/*"/>
<fileset dir="${basedir}/core/runtime.jvm/src" includes="**/*"/>
<fileset dir="${basedir}/core/util.runtime/src" includes="**/*"/>
<fileset dir="${basedir}/libraries/stdlib/src" includes="**/*"/>
<fileset dir="${output}/core.src" includes="**/*"/>
</jar-content>
</pack-runtime-jar>
<pack-runtime-jar jar-dir="${output}" jar-name="kotlin-reflect-sources-for-maven.jar"
implementation-title="${manifest.impl.title.kotlin.jvm.reflect.sources}">
<jar-content>
<fileset dir="${basedir}/core/reflection.jvm/src" includes="**/*"/>
<fileset dir="${output}/core.src" includes="**/*"/>
</jar-content>
</pack-runtime-jar>
</target>
@@ -940,15 +894,16 @@
<fileset dir="${output}/builtins">
<include name="kotlin/**"/>
<exclude name="kotlin/internal/**"/>
<exclude name="kotlin/reflect/**"/>
</fileset>
<fileset dir="${basedir}/compiler/frontend.java/src" includes="META-INF/services/**"/>
<fileset dir="${basedir}/compiler/backend/src" includes="META-INF/services/**"/>
<zipgroupfileset dir="${basedir}/lib" includes="*.jar"/>
<zipgroupfileset dir="${kotlin-home}/lib" includes="kotlin-runtime.jar"/>
<zipgroupfileset dir="${kotlin-home}/lib" includes="kotlin-runtime-sources.jar"/>
<zipgroupfileset file="${kotlin-home}/lib/kotlin-runtime.jar"/>
<zipgroupfileset file="${kotlin-home}/lib/kotlin-runtime-sources.jar"/>
<zipgroupfileset file="${kotlin-home}/lib/kotlin-reflect.jar"/>
<fileset dir="${basedir}/resources"/>
<!-- icons, etc. -->
<fileset dir="idea/resources"/>
<!-- plugin.xml and friends -->

View File

@@ -75,7 +75,7 @@ public class PathManager {
}
public String getAntBinDirectory() {
return getDependenciesRoot() + "/apache-ant-1.8.0/bin";
return rootFolder + "/dependencies/ant-1.8/bin";
}
public String getAndroidModuleRoot() {

View File

@@ -32,7 +32,6 @@ public class SDKDownloader {
private final String systemImages;
private final String platformToolsZipPath;
private final String toolsZipPath;
private final String antZipPath;
private final PathManager pathManager;
@@ -42,7 +41,6 @@ public class SDKDownloader {
this.systemImages = pathManager.getRootForDownload() + "/system-images.zip";
this.platformToolsZipPath = pathManager.getRootForDownload() + "/platform-tools.zip";
this.toolsZipPath = pathManager.getRootForDownload() + "/tools.zip";
this.antZipPath = pathManager.getRootForDownload() + "/apache-ant-1.8.0.zip";
}
public void downloadPlatform() {
@@ -87,16 +85,11 @@ public class SDKDownloader {
download(downloadURL, toolsZipPath);
}
public void downloadAnt() {
download("http://archive.apache.org/dist/ant/binaries/apache-ant-1.8.0-bin.zip", antZipPath);
}
public void downloadAll() {
downloadTools();
downloadAbi();
downloadPlatform();
downloadPlatformTools();
downloadAnt();
}
@@ -105,14 +98,12 @@ public class SDKDownloader {
unzip(systemImages, pathManager.getAndroidSdkRoot() + "/system-images/android-16/");
unzip(platformToolsZipPath, pathManager.getAndroidSdkRoot());
unzip(toolsZipPath, pathManager.getAndroidSdkRoot());
unzip(antZipPath, pathManager.getDependenciesRoot());
}
public void deleteAll() {
delete(platformZipPath);
delete(platformToolsZipPath);
delete(toolsZipPath);
delete(antZipPath);
}
private static void download(String urlString, String output) {

View File

@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.idea.JetFileType;
import org.jetbrains.kotlin.psi.JetFile;
import org.jetbrains.kotlin.test.ConfigurationKind;
import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.utils.Printer;
import org.junit.Assert;
@@ -70,8 +71,8 @@ public class CodegenTestsOnAndroidGenerator extends UsefulTestCase {
}
private void prepareAndroidModule() throws IOException {
System.out.println("Copying kotlin-runtime.jar in android module...");
copyKotlinRuntimeJar();
System.out.println("Copying kotlin-runtime.jar and kotlin-reflect.jar in android module...");
copyKotlinRuntimeJars();
System.out.println("Check \"libs\" folder in tested android module...");
File libsFolderInTestedModule = new File(pathManager.getLibsFolderInAndroidTestedModuleTmpFolder());
@@ -80,11 +81,15 @@ public class CodegenTestsOnAndroidGenerator extends UsefulTestCase {
}
}
private void copyKotlinRuntimeJar() throws IOException {
private void copyKotlinRuntimeJars() throws IOException {
FileUtil.copy(
ForTestCompileRuntime.runtimeJarForTests(),
new File(pathManager.getLibsFolderInAndroidTmpFolder() + "/kotlin-runtime.jar")
);
FileUtil.copy(
ForTestCompileRuntime.reflectJarForTests(),
new File(pathManager.getLibsFolderInAndroidTmpFolder() + "/kotlin-reflect.jar")
);
}
private void generateAndSave() throws Throwable {
@@ -137,9 +142,13 @@ public class CodegenTestsOnAndroidGenerator extends UsefulTestCase {
}
private KotlinCoreEnvironment createEnvironment(boolean isFullJdk) {
return isFullJdk
? JetTestUtils.createEnvironmentWithFullJdk(myTestRootDisposable)
: JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(myTestRootDisposable, ConfigurationKind.JDK_AND_ANNOTATIONS);
return isFullJdk ?
JetTestUtils.createEnvironmentWithJdkAndNullabilityAnnotationsFromIdea(
myTestRootDisposable, ConfigurationKind.ALL, TestJdkKind.FULL_JDK
) :
JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(
myTestRootDisposable, ConfigurationKind.JDK_AND_ANNOTATIONS
);
}
public boolean shouldWriteFilesOnDisk() {

View File

@@ -68,6 +68,8 @@ public class SpecialFiles {
excludedFiles.add("classpath.kt"); // Some classes are not visible on android
excludedFiles.add("manyNumbers.kt"); // Out of memory
excludedFiles.add("smap"); // Line numbers
}
private SpecialFiles() {

View File

@@ -22,22 +22,24 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.bridges.BridgesPackage;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.calls.CallResolverUtil;
import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeUtils;
import org.jetbrains.kotlin.types.checker.JetTypeChecker;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.backend.common.bridges.BridgesPackage;
import java.util.*;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
/**
* Backend-independent utility class.
*/
@@ -70,30 +72,25 @@ public class CodegenUtil {
return null;
}
public static FunctionDescriptor getAnyEqualsMethod() {
ClassDescriptor anyClass = KotlinBuiltIns.getInstance().getAny();
FunctionDescriptor function =
getDeclaredFunctionByRawSignature(anyClass, Name.identifier(EQUALS_METHOD_NAME),
KotlinBuiltIns.getInstance().getBoolean(),
anyClass);
public static FunctionDescriptor getAnyEqualsMethod(@NotNull KotlinBuiltIns builtIns) {
ClassDescriptor anyClass = builtIns.getAny();
FunctionDescriptor function = getDeclaredFunctionByRawSignature(
anyClass, Name.identifier(EQUALS_METHOD_NAME), builtIns.getBoolean(), anyClass
);
assert function != null;
return function;
}
public static FunctionDescriptor getAnyToStringMethod() {
ClassDescriptor anyClass = KotlinBuiltIns.getInstance().getAny();
FunctionDescriptor function =
getDeclaredFunctionByRawSignature(anyClass, Name.identifier(TO_STRING_METHOD_NAME),
KotlinBuiltIns.getInstance().getString());
public static FunctionDescriptor getAnyToStringMethod(@NotNull KotlinBuiltIns builtIns) {
ClassDescriptor anyClass = builtIns.getAny();
FunctionDescriptor function = getDeclaredFunctionByRawSignature(anyClass, Name.identifier(TO_STRING_METHOD_NAME), builtIns.getString());
assert function != null;
return function;
}
public static FunctionDescriptor getAnyHashCodeMethod() {
ClassDescriptor anyClass = KotlinBuiltIns.getInstance().getAny();
FunctionDescriptor function =
getDeclaredFunctionByRawSignature(anyClass, Name.identifier(HASH_CODE_METHOD_NAME),
KotlinBuiltIns.getInstance().getInt());
public static FunctionDescriptor getAnyHashCodeMethod(@NotNull KotlinBuiltIns builtIns) {
ClassDescriptor anyClass = builtIns.getAny();
FunctionDescriptor function = getDeclaredFunctionByRawSignature(anyClass, Name.identifier(HASH_CODE_METHOD_NAME), builtIns.getInt());
assert function != null;
return function;
}
@@ -206,7 +203,7 @@ public class CodegenUtil {
public static boolean isEnumValueOfMethod(@NotNull FunctionDescriptor functionDescriptor) {
List<ValueParameterDescriptor> methodTypeParameters = functionDescriptor.getValueParameters();
JetType nullableString = TypeUtils.makeNullable(KotlinBuiltIns.getInstance().getStringType());
JetType nullableString = TypeUtils.makeNullable(getBuiltIns(functionDescriptor).getStringType());
return DescriptorUtils.ENUM_VALUE_OF.equals(functionDescriptor.getName())
&& methodTypeParameters.size() == 1
&& JetTypeChecker.DEFAULT.isSubtypeOf(methodTypeParameters.get(0).getType(), nullableString);
@@ -227,7 +224,6 @@ public class CodegenUtil {
}
}
Document document = file.getViewProvider().getDocument();
TextRange textRange = statement.getTextRange();
return document != null ? document.getLineNumber(markEndOffset ? textRange.getEndOffset() : textRange.getStartOffset()) + 1 : null;
return document != null ? document.getLineNumber(markEndOffset ? statement.getTextRange().getEndOffset() : statement.getTextOffset()) + 1 : null;
}
}

View File

@@ -34,14 +34,14 @@ public object CodegenUtilKt {
// toTrait = Bar
// delegateExpressionType = typeof(baz)
// return Map<member of Foo, corresponding member of typeOf(baz)>
public [platformStatic] fun getDelegates(
public platformStatic fun getDelegates(
descriptor: ClassDescriptor,
toTrait: ClassDescriptor,
delegateExpressionType: JetType? = null
): Map<CallableMemberDescriptor, CallableDescriptor> {
if (delegateExpressionType?.isDynamic() ?: false) return mapOf();
return descriptor.getDefaultType().getMemberScope().getDescriptors().stream()
return descriptor.getDefaultType().getMemberScope().getDescriptors().asSequence()
.filterIsInstance<CallableMemberDescriptor>()
.filter { it.getKind() == CallableMemberDescriptor.Kind.DELEGATION }
.toList()

View File

@@ -19,18 +19,19 @@ package org.jetbrains.kotlin.backend.common;
import com.google.common.collect.Lists;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.JetClass;
import org.jetbrains.kotlin.psi.JetClassOrObject;
import org.jetbrains.kotlin.psi.JetParameter;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.BindingContextUtils;
import org.jetbrains.kotlin.resolve.OverrideResolver;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
/**
* A platform-independent logic for generating data class synthetic methods.
* TODO: data class with zero components gets no toString/equals/hashCode methods. This is inconsistent and should be
@@ -100,22 +101,22 @@ public abstract class DataClassMethodGenerator {
}
private void generateDataClassToStringIfNeeded(@NotNull List<PropertyDescriptor> properties) {
ClassDescriptor stringClass = KotlinBuiltIns.getInstance().getString();
ClassDescriptor stringClass = getBuiltIns(classDescriptor).getString();
if (!hasDeclaredNonTrivialMember(CodegenUtil.TO_STRING_METHOD_NAME, stringClass)) {
generateToStringMethod(properties);
}
}
private void generateDataClassHashCodeIfNeeded(@NotNull List<PropertyDescriptor> properties) {
ClassDescriptor intClass = KotlinBuiltIns.getInstance().getInt();
ClassDescriptor intClass = getBuiltIns(classDescriptor).getInt();
if (!hasDeclaredNonTrivialMember(CodegenUtil.HASH_CODE_METHOD_NAME, intClass)) {
generateHashCodeMethod(properties);
}
}
private void generateDataClassEqualsIfNeeded(@NotNull List<PropertyDescriptor> properties) {
ClassDescriptor booleanClass = KotlinBuiltIns.getInstance().getBoolean();
ClassDescriptor anyClass = KotlinBuiltIns.getInstance().getAny();
ClassDescriptor booleanClass = getBuiltIns(classDescriptor).getBoolean();
ClassDescriptor anyClass = getBuiltIns(classDescriptor).getAny();
if (!hasDeclaredNonTrivialMember(CodegenUtil.EQUALS_METHOD_NAME, booleanClass, anyClass)) {
generateEqualsMethod(properties);
}
@@ -124,7 +125,7 @@ public abstract class DataClassMethodGenerator {
private List<PropertyDescriptor> getDataProperties() {
List<PropertyDescriptor> result = Lists.newArrayList();
for (JetParameter parameter : getPrimaryConstructorParameters()) {
if (parameter.hasValOrVarNode()) {
if (parameter.hasValOrVar()) {
result.add(bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, parameter));
}
}
@@ -162,7 +163,7 @@ public abstract class DataClassMethodGenerator {
for (CallableDescriptor overridden : OverrideResolver.getOverriddenDeclarations(function)) {
if (overridden instanceof CallableMemberDescriptor
&& ((CallableMemberDescriptor) overridden).getKind() == CallableMemberDescriptor.Kind.DECLARATION
&& !overridden.getContainingDeclaration().equals(KotlinBuiltIns.getInstance().getAny())) {
&& !overridden.getContainingDeclaration().equals(getBuiltIns(classDescriptor).getAny())) {
return true;
}
}

View File

@@ -56,7 +56,7 @@ public fun <Function : FunctionHandle, Signature> generateBridges(
// If it's a concrete fake override, some of the bridges may be inherited from the super-classes. Specifically, bridges for all
// declarations that are reachable from all concrete immediate super-functions of the given function. Note that all such bridges are
// guaranteed to delegate to the same implementation as bridges for the given function, that's why it's safe to inherit them
[suppress("UNCHECKED_CAST")]
@suppress("UNCHECKED_CAST")
for (overridden in function.getOverridden() as Iterable<Function>) {
if (!overridden.isAbstract) {
bridgesToGenerate.removeAll(findAllReachableDeclarations(overridden).map(signature))
@@ -77,7 +77,7 @@ private fun <Function : FunctionHandle> findAllReachableDeclarations(function: F
}
}
}
[suppress("UNCHECKED_CAST")]
@suppress("UNCHECKED_CAST")
DFS.dfs(listOf(function), { it.getOverridden() as Iterable<Function> }, collector)
return HashSet(collector.result())
}

View File

@@ -16,11 +16,12 @@
package org.jetbrains.kotlin.backend.common.bridges
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.OverrideResolver
import org.jetbrains.kotlin.resolve.calls.CallResolverUtil
import org.jetbrains.kotlin.types.TypeUtils
public fun <Signature> generateBridgesForFunctionDescriptor(
descriptor: FunctionDescriptor,
@@ -64,36 +65,50 @@ private data class DescriptorBasedFunctionHandle(val descriptor: FunctionDescrip
/**
* Given a fake override in a class, returns an overridden declaration with implementation in trait, such that a method delegating to that
* trait implementation should be generated into the class containing the fake override; or null if the given function is not a fake
* override of any trait implementation or such method was already generated into some superclass
* override of any trait implementation or such method was already generated into the superclass or is a method from Any.
*/
public fun findTraitImplementation(descriptor: CallableMemberDescriptor): CallableMemberDescriptor? {
if (descriptor.getKind().isReal()) return null
if (CallResolverUtil.isOrOverridesSynthesized(descriptor)) return null
// TODO: this logic is quite common for bridge generation, find a way to abstract it to a single place
// TODO: don't use filterOutOverridden() here, it's an internal front-end utility (see its implementation)
val overriddenDeclarations = OverrideResolver.getOverriddenDeclarations(descriptor)
val filteredOverriddenDeclarations = OverrideResolver.filterOutOverridden(overriddenDeclarations)
val implementation = findImplementationFromInterface(descriptor) ?: return null
val immediateConcreteSuper = firstSuperMethodFromKotlin(descriptor, implementation) ?: return null
var implementation: CallableMemberDescriptor? = null
for (overriddenDeclaration in filteredOverriddenDeclarations) {
if (DescriptorUtils.isTrait(overriddenDeclaration.getContainingDeclaration()) && overriddenDeclaration.getModality() != Modality.ABSTRACT) {
implementation = overriddenDeclaration
}
}
if (implementation == null) {
if (!DescriptorUtils.isTrait(immediateConcreteSuper.getContainingDeclaration())) {
// If this implementation is already generated into the superclass, we need not generate it again, it'll be inherited
return null
}
// If this implementation is already generated into one of the superclasses, we need not generate it again, it'll be inherited
val containingClass = descriptor.getContainingDeclaration() as ClassDescriptor
val implClassType = implementation!!.getDispatchReceiverParameter()!!.getType()
for (supertype in containingClass.getDefaultType().getConstructor().getSupertypes()) {
if (!DescriptorUtils.isTrait(supertype.getConstructor().getDeclarationDescriptor()!!) &&
TypeUtils.getAllSupertypes(supertype).contains(implClassType)) {
return null
}
}
return implementation
return immediateConcreteSuper
}
/**
* Given a fake override, returns an overridden non-abstract function from an interface which is the actual implementation of this function
* that should be called when the given fake override is called.
*/
public fun findImplementationFromInterface(descriptor: CallableMemberDescriptor): CallableMemberDescriptor? {
val overridden = OverrideResolver.getOverriddenDeclarations(descriptor)
val filtered = OverrideResolver.filterOutOverridden(overridden)
val result = filtered.firstOrNull { it.getModality() != Modality.ABSTRACT } ?: return null
val container = result.getContainingDeclaration()
if (DescriptorUtils.isClass(container) || DescriptorUtils.isEnumClass(container)) return null
return result
}
/**
* Given a fake override and its implementation (non-abstract declaration) somewhere in supertypes,
* returns the first immediate super function of the given fake override which overrides that implementation.
* The returned function should be called from TImpl-bridges generated for the given fake override.
*/
public fun firstSuperMethodFromKotlin(
descriptor: CallableMemberDescriptor,
implementation: CallableMemberDescriptor
): CallableMemberDescriptor? {
return descriptor.getOverriddenDescriptors().firstOrNull { overridden ->
overridden.getModality() != Modality.ABSTRACT &&
(overridden == implementation || OverrideResolver.overrides(overridden, implementation))
}
}

View File

@@ -1,34 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.backend.common.builtins
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.resolve.DescriptorUtils
public abstract class CompanionObjectMapping {
public fun hasMappingToObject(classDescriptor: ClassDescriptor): Boolean {
if (!DescriptorUtils.isCompanionObject(classDescriptor)) return false
val containingDeclaration = classDescriptor.getContainingDeclaration()
if (containingDeclaration !is ClassDescriptor) return false
return KotlinBuiltIns.isPrimitiveType(containingDeclaration.getDefaultType()) ||
KotlinBuiltIns.getInstance().getString() == containingDeclaration ||
KotlinBuiltIns.getInstance().getEnum() == containingDeclaration
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import java.util.*
open public class AbstractAccessorForFunctionDescriptor(
containingDeclaration: DeclarationDescriptor,
name: Name
) : SimpleFunctionDescriptorImpl(containingDeclaration, null, Annotations.EMPTY,
name, CallableMemberDescriptor.Kind.DECLARATION, SourceElement.NO_SOURCE) {
protected fun copyTypeParameters(descriptor: FunctionDescriptor): List<TypeParameterDescriptor> = descriptor.getTypeParameters().map {
val copy = TypeParameterDescriptorImpl.createForFurtherModification(
this, it.getAnnotations(), it.isReified(),
it.getVariance(), it.getName(),
it.getIndex(), SourceElement.NO_SOURCE)
for (upperBound in it.getUpperBounds()) {
copy.addUpperBound(upperBound)
}
copy.setInitialized()
copy
}
protected fun copyValueParameters(descriptor: FunctionDescriptor): List<ValueParameterDescriptor> =
descriptor.getValueParameters().map { it.copy(this, it.getName()) }
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
import java.util.*
public class AccessorForConstructorDescriptor(
private val calleeDescriptor: ConstructorDescriptor,
containingDeclaration: DeclarationDescriptor
) : AbstractAccessorForFunctionDescriptor(containingDeclaration, Name.special("<init>"))
, ConstructorDescriptor
, AccessorForCallableDescriptor<ConstructorDescriptor> {
override fun getCalleeDescriptor(): ConstructorDescriptor = calleeDescriptor
override fun getContainingDeclaration(): ClassDescriptor = calleeDescriptor.getContainingDeclaration()
override fun isPrimary(): Boolean = false
init {
initialize(
DescriptorUtils.getReceiverParameterType(getExtensionReceiverParameter()),
calleeDescriptor.getDispatchReceiverParameter(),
copyTypeParameters(calleeDescriptor),
copyValueParameters(calleeDescriptor),
calleeDescriptor.getReturnType(),
Modality.FINAL,
Visibilities.INTERNAL
)
}
}

View File

@@ -18,20 +18,13 @@ package org.jetbrains.kotlin.codegen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.annotations.AnnotationsPackage;
import org.jetbrains.kotlin.types.JetType;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER;
public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl implements AccessorForCallableDescriptor<FunctionDescriptor> {
public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDescriptor implements AccessorForCallableDescriptor<FunctionDescriptor> {
private final FunctionDescriptor calleeDescriptor;
@@ -40,9 +33,8 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl
@NotNull DeclarationDescriptor containingDeclaration,
int index
) {
super(containingDeclaration, null, Annotations.EMPTY,
Name.identifier("access$" + (descriptor instanceof ConstructorDescriptor ? "init" : descriptor.getName()) + "$" + index),
Kind.DECLARATION, SourceElement.NO_SOURCE);
super(containingDeclaration,
Name.identifier("access$" + (descriptor instanceof ConstructorDescriptor ? "init" : descriptor.getName()) + "$" + index));
this.calleeDescriptor = descriptor;
initialize(DescriptorUtils.getReceiverParameterType(descriptor.getExtensionReceiverParameter()),
@@ -56,34 +48,6 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl
Visibilities.INTERNAL);
}
@NotNull
private List<TypeParameterDescriptor> copyTypeParameters(@NotNull FunctionDescriptor descriptor) {
List<TypeParameterDescriptor> typeParameters = descriptor.getTypeParameters();
List<TypeParameterDescriptor> result = new ArrayList<TypeParameterDescriptor>(typeParameters.size());
for (TypeParameterDescriptor typeParameter : typeParameters) {
TypeParameterDescriptorImpl copy = TypeParameterDescriptorImpl.createForFurtherModification(
this, typeParameter.getAnnotations(), typeParameter.isReified(),
typeParameter.getVariance(), typeParameter.getName(), typeParameter.getIndex(), SourceElement.NO_SOURCE
);
for (JetType upperBound : typeParameter.getUpperBounds()) {
copy.addUpperBound(upperBound);
}
copy.setInitialized();
result.add(copy);
}
return result;
}
@NotNull
private List<ValueParameterDescriptor> copyValueParameters(@NotNull FunctionDescriptor descriptor) {
List<ValueParameterDescriptor> valueParameters = descriptor.getValueParameters();
List<ValueParameterDescriptor> result = new ArrayList<ValueParameterDescriptor>(valueParameters.size());
for (ValueParameterDescriptor valueParameter : valueParameters) {
result.add(valueParameter.copy(this, valueParameter.getName()));
}
return result;
}
@NotNull
@Override
public FunctionDescriptor getCalleeDescriptor() {

View File

@@ -38,6 +38,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.*;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getClassObjectType;
public abstract class AnnotationCodegen {
public static final class JvmFlagAnnotation {
@@ -181,7 +183,7 @@ public abstract class AnnotationCodegen {
ClassifierDescriptor classifierDescriptor = annotationDescriptor.getType().getConstructor().getDeclarationDescriptor();
assert classifierDescriptor != null : "Annotation descriptor has no class: " + annotationDescriptor;
RetentionPolicy rp = getRetentionPolicy(classifierDescriptor);
if (rp == RetentionPolicy.SOURCE) {
if (rp == RetentionPolicy.SOURCE && typeMapper.getClassBuilderMode() != ClassBuilderMode.LIGHT_CLASSES) {
return null;
}
@@ -281,7 +283,7 @@ public abstract class AnnotationCodegen {
}
@Override
public Void visitJavaClassValue(JavaClassValue value, Void data) {
public Void visitKClassValue(KClassValue value, Void data) {
annotationVisitor.visit(name, typeMapper.mapType(value.getValue()));
return null;
}
@@ -325,7 +327,7 @@ public abstract class AnnotationCodegen {
CompileTimeConstant<?> compileTimeConstant = valueArguments.iterator().next();
if (compileTimeConstant instanceof EnumValue) {
ClassDescriptor enumEntry = ((EnumValue) compileTimeConstant).getValue();
JetType classObjectType = enumEntry.getClassObjectType();
JetType classObjectType = getClassObjectType(enumEntry);
if (classObjectType != null) {
if ("java/lang/annotation/RetentionPolicy".equals(typeMapper.mapType(classObjectType).getInternalName())) {
return RetentionPolicy.valueOf(enumEntry.getName().asString());

View File

@@ -20,8 +20,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.tree.IElementType;
import kotlin.Function1;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.annotations.AnnotationsPackage;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.inline.InlineUtil;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
import org.jetbrains.kotlin.resolve.jvm.JvmPackage;
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
@@ -57,6 +57,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isBoolean;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveClass;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isInterface;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.ABI_VERSION_FIELD_NAME;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass;
@@ -66,16 +68,6 @@ import static org.jetbrains.kotlin.types.TypeUtils.isNullableType;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class AsmUtil {
private static final Set<ClassDescriptor> PRIMITIVE_NUMBER_CLASSES = Sets.newHashSet(
KotlinBuiltIns.getInstance().getByte(),
KotlinBuiltIns.getInstance().getShort(),
KotlinBuiltIns.getInstance().getInt(),
KotlinBuiltIns.getInstance().getLong(),
KotlinBuiltIns.getInstance().getFloat(),
KotlinBuiltIns.getInstance().getDouble(),
KotlinBuiltIns.getInstance().getChar()
);
private static final Set<Type> STRING_BUILDER_OBJECT_APPEND_ARG_TYPES = Sets.newHashSet(
getType(String.class),
getType(StringBuffer.class),
@@ -150,7 +142,7 @@ public class AsmUtil {
if (!(descriptor instanceof ClassDescriptor)) {
return false;
}
return PRIMITIVE_NUMBER_CLASSES.contains(descriptor);
return isPrimitiveClass((ClassDescriptor) descriptor) && !isBoolean((ClassDescriptor) descriptor);
}
public static Type correctElementType(Type type) {
@@ -178,7 +170,7 @@ public class AsmUtil {
public static boolean isStaticMethod(OwnerKind kind, CallableMemberDescriptor functionDescriptor) {
return isStaticKind(kind) ||
JetTypeMapper.isAccessor(functionDescriptor) ||
JetTypeMapper.isStaticAccessor(functionDescriptor) ||
AnnotationsPackage.isPlatformStaticInObjectOrClass(functionDescriptor);
}
@@ -203,7 +195,7 @@ public class AsmUtil {
if (functionDescriptor.getModality() == Modality.FINAL && !(functionDescriptor instanceof ConstructorDescriptor)) {
DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration();
if (!(containingDeclaration instanceof ClassDescriptor) ||
((ClassDescriptor) containingDeclaration).getKind() != ClassKind.TRAIT) {
((ClassDescriptor) containingDeclaration).getKind() != ClassKind.INTERFACE) {
flags |= ACC_FINAL;
}
}
@@ -260,20 +252,7 @@ public class AsmUtil {
}
public static int getVisibilityAccessFlagForAnonymous(@NotNull ClassDescriptor descriptor) {
if (isDeclarationInsideInlineFunction(descriptor)) {
return ACC_PUBLIC;
}
return NO_FLAG_PACKAGE_PRIVATE;
}
private static boolean isDeclarationInsideInlineFunction(@NotNull ClassDescriptor descriptor) {
//NB: constructor context couldn't be inline
DeclarationDescriptor parentDeclaration = descriptor.getContainingDeclaration();
if (parentDeclaration instanceof SimpleFunctionDescriptor &&
((SimpleFunctionDescriptor) parentDeclaration).getInlineStrategy().isInline()) {
return true;
}
return false;
return InlineUtil.isInline(descriptor.getContainingDeclaration()) ? ACC_PUBLIC : NO_FLAG_PACKAGE_PRIVATE;
}
public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) {
@@ -285,7 +264,7 @@ public class AsmUtil {
private static int innerAccessFlagsForModalityAndKind(@NotNull ClassDescriptor innerClass) {
switch (innerClass.getKind()) {
case TRAIT:
case INTERFACE:
return ACC_ABSTRACT | ACC_INTERFACE;
case ENUM_CLASS:
return ACC_FINAL | ACC_ENUM;
@@ -359,7 +338,7 @@ public class AsmUtil {
return null;
}
private static Type stringValueOfType(Type type) {
public static Type stringValueOfType(Type type) {
int sort = type.getSort();
return sort == Type.OBJECT || sort == Type.ARRAY
? OBJECT_TYPE
@@ -525,7 +504,7 @@ public class AsmUtil {
public Unit invoke(InstructionAdapter v) {
left.put(leftType, v);
right.put(rightType, v);
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "areEqual", "(Ljava/lang/Object;Ljava/lang/Object;)Z", false);
genAreEqualCall(v);
if (opToken == JetTokens.EXCLEQ || opToken == JetTokens.EXCLEQEQEQ) {
genInvertBoolean(v);
@@ -535,6 +514,10 @@ public class AsmUtil {
});
}
public static void genAreEqualCall(InstructionAdapter v) {
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "areEqual", "(Ljava/lang/Object;Ljava/lang/Object;)Z", false);
}
public static void genIncrement(Type expectedType, int myDelta, InstructionAdapter v) {
if (expectedType == Type.LONG_TYPE) {
v.lconst(myDelta);
@@ -624,17 +607,6 @@ public class AsmUtil {
genNotNullAssertion(v, state, descriptor, "checkFieldIsNotNull");
}
public static void genNotNullAssertionForMethod(
@NotNull InstructionAdapter v,
@NotNull GenerationState state,
@NotNull ResolvedCall resolvedCall
) {
CallableDescriptor descriptor = resolvedCall.getResultingDescriptor();
if (descriptor instanceof ConstructorDescriptor) return;
genNotNullAssertion(v, state, descriptor, "checkReturnedValueIsNotNull");
}
private static void genNotNullAssertion(
@NotNull InstructionAdapter v,
@NotNull GenerationState state,
@@ -859,6 +831,15 @@ public class AsmUtil {
}
}
public static void wrapJavaClassIntoKClass(@NotNull InstructionAdapter v) {
v.invokestatic(REFLECTION, "foreignKotlinClass", Type.getMethodDescriptor(K_CLASS_TYPE, getType(Class.class)), false);
}
public static void wrapJavaClassesIntoKClasses(@NotNull InstructionAdapter v) {
v.invokestatic(REFLECTION, "foreignKotlinClasses", Type.getMethodDescriptor(K_CLASS_ARRAY_TYPE, getType(Class[].class)), false);
}
public static int getReceiverIndex(@NotNull CodegenContext context, @NotNull CallableMemberDescriptor descriptor) {
OwnerKind kind = context.getContextKind();
//Trait always should have this descriptor

View File

@@ -0,0 +1,267 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen
import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.codegen.pseudoInsns.fakeAlwaysFalseIfeq
import org.jetbrains.kotlin.codegen.pseudoInsns.fakeAlwaysTrueIfeq
import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.org.objectweb.asm.Opcodes.*
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
open class BranchedValue(
val arg1: StackValue,
val arg2: StackValue? = null,
val operandType: Type,
val opcode: Int
) : StackValue(Type.BOOLEAN_TYPE) {
constructor(or: BranchedValue, opcode: Int) : this(or.arg1, or.arg2, or.operandType, opcode)
override fun putSelector(type: Type, v: InstructionAdapter) {
val branchJumpLabel = Label()
condJump(branchJumpLabel, v, true)
val endLabel = Label()
v.iconst(1)
v.visitJumpInsn(GOTO, endLabel)
v.visitLabel(branchJumpLabel)
v.iconst(0)
v.visitLabel(endLabel)
coerceTo(type, v);
}
open fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
if (arg1 is CondJump) arg1.condJump(jumpLabel, v, jumpIfFalse) else arg1.put(operandType, v)
arg2?.put(operandType, v)
v.visitJumpInsn(patchOpcode(if (jumpIfFalse) opcode else negatedOperations[opcode], v), jumpLabel);
}
open fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
condJump(jumpLabel, v, jumpIfFalse)
}
protected open fun patchOpcode(opcode: Int, v: InstructionAdapter): Int {
return opcode
}
companion object {
val negatedOperations = hashMapOf<Int, Int>()
val TRUE: BranchedValue = object : BranchedValue(StackValue.Constant(true, Type.BOOLEAN_TYPE), null, Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
if (!jumpIfFalse) {
v.goTo(jumpLabel)
}
}
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
if (!jumpIfFalse) {
v.fakeAlwaysTrueIfeq(jumpLabel)
}
else {
v.fakeAlwaysFalseIfeq(jumpLabel)
}
}
override fun putSelector(type: Type, v: InstructionAdapter) {
v.iconst(1)
coerceTo(type, v)
}
}
val FALSE: BranchedValue = object : BranchedValue(StackValue.Constant(false, Type.BOOLEAN_TYPE), null, Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
if (jumpIfFalse) {
v.goTo(jumpLabel)
}
}
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
if (jumpIfFalse) {
v.fakeAlwaysTrueIfeq(jumpLabel)
}
else {
v.fakeAlwaysFalseIfeq(jumpLabel)
}
}
override fun putSelector(type: Type, v: InstructionAdapter) {
v.iconst(0)
coerceTo(type, v)
}
}
init {
registerOperations(IFNE, IFEQ)
registerOperations(IFLE, IFGT)
registerOperations(IFLT, IFGE)
registerOperations(IFGE, IFLT)
registerOperations(IFGT, IFLE)
registerOperations(IF_ACMPNE, IF_ACMPEQ)
registerOperations(IFNULL, IFNONNULL)
}
private fun registerOperations(op: Int, negatedOp: Int) {
negatedOperations.put(op, negatedOp)
negatedOperations.put(negatedOp, op)
}
fun booleanConstant(value: Boolean): BranchedValue {
return if (value) TRUE else FALSE
}
fun createInvertValue(argument: StackValue): StackValue {
return Invert(condJump(argument))
}
fun condJump(condition: StackValue, label: Label, jumpIfFalse: Boolean, iv: InstructionAdapter) {
condJump(condition).condJump(label, iv, jumpIfFalse)
}
fun loopJump(condition: StackValue, label: Label, jumpIfFalse: Boolean, iv: InstructionAdapter) {
condJump(condition).loopJump(label, iv, jumpIfFalse)
}
fun condJump(condition: StackValue): CondJump {
return CondJump(if (condition is BranchedValue) {
condition
}
else {
BranchedValue(condition, null, Type.BOOLEAN_TYPE, IFEQ)
}, IFEQ)
}
public fun cmp(opToken: IElementType, operandType: Type, left: StackValue, right: StackValue): StackValue =
if (operandType.getSort() == Type.OBJECT)
ObjectCompare(opToken, operandType, left, right)
else
NumberCompare(opToken, operandType, left, right)
}
}
class And(
arg1: StackValue,
arg2: StackValue
) : BranchedValue(BranchedValue.condJump(arg1), BranchedValue.condJump(arg2), Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
val stayLabel = Label()
(arg1 as CondJump).condJump(if (jumpIfFalse) jumpLabel else stayLabel, v, true)
(arg2 as CondJump).condJump(jumpLabel, v, jumpIfFalse)
v.visitLabel(stayLabel)
}
}
class Or(
arg1: StackValue,
arg2: StackValue
) : BranchedValue(BranchedValue.condJump(arg1), BranchedValue.condJump(arg2), Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
val stayLabel = Label()
(arg1 as CondJump).condJump(if (jumpIfFalse) stayLabel else jumpLabel, v, false)
(arg2 as CondJump).condJump(jumpLabel, v, jumpIfFalse)
v.visitLabel(stayLabel)
}
}
class Invert(val condition: BranchedValue) : BranchedValue(condition, null, Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
condition.condJump(jumpLabel, v, !jumpIfFalse)
}
}
class CondJump(val condition: BranchedValue, op: Int) : BranchedValue(condition, null, Type.BOOLEAN_TYPE, op) {
override fun putSelector(type: Type, v: InstructionAdapter) {
throw UnsupportedOperationException("Use condJump instead")
}
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
condition.condJump(jumpLabel, v, jumpIfFalse)
}
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
condition.loopJump(jumpLabel, v, jumpIfFalse)
}
}
class NumberCompare(
val opToken: IElementType,
operandType: Type,
left: StackValue,
right: StackValue
) : BranchedValue(left, right, operandType, NumberCompare.getNumberCompareOpcode(opToken)) {
override fun patchOpcode(opcode: Int, v: InstructionAdapter): Int {
when (operandType) {
Type.FLOAT_TYPE, Type.DOUBLE_TYPE -> {
if (opToken == JetTokens.GT || opToken == JetTokens.GTEQ) {
v.cmpl(operandType)
}
else {
v.cmpg(operandType)
}
}
Type.LONG_TYPE -> {
v.lcmp()
}
else -> {
return opcode + (IF_ICMPEQ - IFEQ)
}
}
return opcode
}
companion object {
fun getNumberCompareOpcode(opToken: IElementType): Int {
return when (opToken) {
JetTokens.EQEQ, JetTokens.EQEQEQ -> IFNE
JetTokens.EXCLEQ, JetTokens.EXCLEQEQEQ -> IFEQ
JetTokens.GT -> IFLE
JetTokens.GTEQ -> IFLT
JetTokens.LT -> IFGE
JetTokens.LTEQ -> IFGT
else -> {
throw UnsupportedOperationException("Don't know how to generate this condJump: " + opToken)
}
}
}
}
}
class ObjectCompare(
val opToken: IElementType,
operandType: Type,
left: StackValue,
right: StackValue
) : BranchedValue(left, right, operandType, ObjectCompare.getObjectCompareOpcode(opToken)) {
companion object {
fun getObjectCompareOpcode(opToken: IElementType): Int {
return when (opToken) {
JetTokens.EQEQEQ -> IF_ACMPNE
JetTokens.EXCLEQEQEQ -> IF_ACMPEQ
else -> throw UnsupportedOperationException("don't know how to generate this condjump")
}
}
}
}

View File

@@ -35,16 +35,16 @@ public abstract class CallGenerator {
@Override
public void genCallInner(
@NotNull CallableMethod callableMethod,
@NotNull Callable callableMethod,
ResolvedCall<?> resolvedCall,
boolean callDefault,
@NotNull ExpressionCodegen codegen
) {
if (!callDefault) {
callableMethod.invokeWithNotNullAssertion(codegen.v, codegen.getState(), resolvedCall);
callableMethod.genInvokeInstruction(codegen.v);
}
else {
callableMethod.invokeDefaultWithNotNullAssertion(codegen.v, codegen.getState(), resolvedCall);
((CallableMethod)callableMethod).genInvokeDefaultInstruction(codegen.v);
}
}
@@ -52,7 +52,7 @@ public abstract class CallGenerator {
public void genCallWithoutAssertions(
@NotNull CallableMethod method, @NotNull ExpressionCodegen codegen
) {
method.invokeWithoutAssertions(codegen.v);
method.genInvokeInstruction(codegen.v);
}
@Override
@@ -90,7 +90,7 @@ public abstract class CallGenerator {
}
}
public void genCall(@NotNull CallableMethod callableMethod, @Nullable ResolvedCall<?> resolvedCall, boolean callDefault, @NotNull ExpressionCodegen codegen) {
public void genCall(@NotNull Callable callableMethod, @Nullable ResolvedCall<?> resolvedCall, boolean callDefault, @NotNull ExpressionCodegen codegen) {
if (resolvedCall != null) {
JetExpression calleeExpression = resolvedCall.getCall().getCalleeExpression();
if (calleeExpression != null) {
@@ -101,7 +101,7 @@ public abstract class CallGenerator {
genCallInner(callableMethod, resolvedCall, callDefault, codegen);
}
public abstract void genCallInner(@NotNull CallableMethod callableMethod, @Nullable ResolvedCall<?> resolvedCall, boolean callDefault, @NotNull ExpressionCodegen codegen);
public abstract void genCallInner(@NotNull Callable callableMethod, @Nullable ResolvedCall<?> resolvedCall, boolean callDefault, @NotNull ExpressionCodegen codegen);
public abstract void genCallWithoutAssertions(@NotNull CallableMethod callableMethod, @NotNull ExpressionCodegen codegen);

View File

@@ -1,20 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen;
public interface Callable {
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
public trait Callable {
public val owner: Type
public val dispatchReceiverType: Type?
public val extensionReceiverType: Type?
public val generateCalleeType: Type?
public val valueParameterTypes: List<Type>
public val parameterTypes: Array<Type>
public val returnType: Type
public fun genInvokeInstruction(v: InstructionAdapter)
public fun isStaticCall(): Boolean
public fun invokeMethodWithArguments(resolvedCall: ResolvedCall<*>, receiver: StackValue, codegen: ExpressionCodegen): StackValue {
return StackValue.functionCall(returnType) {
codegen.invokeMethodWithArguments(this, resolvedCall, receiver)
}
}
public fun beforeParameterGeneration(v: InstructionAdapter, value: StackValue?) {
}
}

View File

@@ -1,179 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
import org.jetbrains.org.objectweb.asm.Opcodes;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import org.jetbrains.org.objectweb.asm.commons.Method;
import org.jetbrains.org.objectweb.asm.util.Printer;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.org.objectweb.asm.Opcodes.INVOKESPECIAL;
import static org.jetbrains.org.objectweb.asm.Opcodes.INVOKESTATIC;
public class CallableMethod implements Callable {
private final Type owner;
private final Type defaultImplOwner;
private final Type defaultImplParam;
private final JvmMethodSignature signature;
private final int invokeOpcode;
private final Type thisClass;
private final Type receiverParameterType;
private final Type generateCalleeType;
public CallableMethod(
@NotNull Type owner,
@Nullable Type defaultImplOwner,
@Nullable Type defaultImplParam,
@NotNull JvmMethodSignature signature,
int invokeOpcode,
@Nullable Type thisClass,
@Nullable Type receiverParameterType,
@Nullable Type generateCalleeType
) {
this.owner = owner;
this.defaultImplOwner = defaultImplOwner;
this.defaultImplParam = defaultImplParam;
this.signature = signature;
this.invokeOpcode = invokeOpcode;
this.thisClass = thisClass;
this.receiverParameterType = receiverParameterType;
this.generateCalleeType = generateCalleeType;
}
@NotNull
public Type getOwner() {
return owner;
}
@NotNull
public List<JvmMethodParameterSignature> getValueParameters() {
return signature.getValueParameters();
}
@NotNull
public List<Type> getValueParameterTypes() {
List<JvmMethodParameterSignature> valueParameters = signature.getValueParameters();
List<Type> result = new ArrayList<Type>(valueParameters.size());
for (JvmMethodParameterSignature parameter : valueParameters) {
if (parameter.getKind() == JvmMethodParameterKind.VALUE) {
result.add(parameter.getAsmType());
}
}
return result;
}
@NotNull
public Method getAsmMethod() {
return signature.getAsmMethod();
}
public int getInvokeOpcode() {
return invokeOpcode;
}
@Nullable
public Type getThisType() {
return thisClass;
}
@Nullable
public Type getReceiverClass() {
return receiverParameterType;
}
private void invoke(InstructionAdapter v) {
v.visitMethodInsn(getInvokeOpcode(), owner.getInternalName(), getAsmMethod().getName(), getAsmMethod().getDescriptor());
}
public void invokeWithNotNullAssertion(
@NotNull InstructionAdapter v,
@NotNull GenerationState state,
@NotNull ResolvedCall resolvedCall
) {
invokeWithoutAssertions(v);
AsmUtil.genNotNullAssertionForMethod(v, state, resolvedCall);
}
public void invokeWithoutAssertions(@NotNull InstructionAdapter v) {
invoke(v);
}
@Nullable
public Type getGenerateCalleeType() {
return generateCalleeType;
}
private void invokeDefault(InstructionAdapter v) {
if (defaultImplOwner == null || defaultImplParam == null) {
throw new IllegalStateException();
}
Method method = getAsmMethod();
String desc = JetTypeMapper.getDefaultDescriptor(method, receiverParameterType != null);
if ("<init>".equals(method.getName())) {
v.aconst(null);
v.visitMethodInsn(INVOKESPECIAL, defaultImplOwner.getInternalName(), "<init>", desc, false);
}
else {
if (getInvokeOpcode() != INVOKESTATIC) {
desc = desc.replace("(", "(" + defaultImplParam.getDescriptor());
}
v.visitMethodInsn(INVOKESTATIC, defaultImplOwner.getInternalName(),
method.getName() + JvmAbi.DEFAULT_PARAMS_IMPL_SUFFIX, desc, false);
}
}
public void invokeDefaultWithNotNullAssertion(
@NotNull InstructionAdapter v,
@NotNull GenerationState state,
@NotNull ResolvedCall resolvedCall
) {
invokeDefault(v);
AsmUtil.genNotNullAssertionForMethod(v, state, resolvedCall);
}
public boolean isNeedsThis() {
return thisClass != null && generateCalleeType == null;
}
@NotNull
public Type getReturnType() {
return signature.getReturnType();
}
@Override
public String toString() {
return Printer.OPCODES[invokeOpcode] + " " + owner.getInternalName() + "." + signature;
}
public boolean isStaticCall() {
return getInvokeOpcode() == Opcodes.INVOKESTATIC;
}
}

View File

@@ -0,0 +1,88 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.org.objectweb.asm.Opcodes.INVOKESPECIAL
import org.jetbrains.org.objectweb.asm.Opcodes.INVOKESTATIC
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.org.objectweb.asm.commons.Method
import org.jetbrains.org.objectweb.asm.util.Printer
public class CallableMethod(
override val owner: Type,
private val defaultImplOwner: Type?,
private val defaultImplParam: Type?,
private val signature: JvmMethodSignature,
private val invokeOpcode: Int,
override val dispatchReceiverType: Type?,
override val extensionReceiverType: Type?,
override val generateCalleeType: Type?
) : Callable {
public fun getValueParameters(): List<JvmMethodParameterSignature> =
signature.getValueParameters()
override val valueParameterTypes: List<Type>
get() = signature.getValueParameters().filter { it.getKind() == JvmMethodParameterKind.VALUE }.map { it.getAsmType() }
public fun getAsmMethod(): Method =
signature.getAsmMethod()
override val parameterTypes: Array<Type>
get() = getAsmMethod().getArgumentTypes()
public override fun genInvokeInstruction(v: InstructionAdapter) {
v.visitMethodInsn(invokeOpcode, owner.getInternalName(), getAsmMethod().getName(), getAsmMethod().getDescriptor())
}
public fun genInvokeDefaultInstruction(v: InstructionAdapter) {
if (defaultImplOwner == null || defaultImplParam == null) {
throw IllegalStateException()
}
val method = getAsmMethod()
val desc = JetTypeMapper.getDefaultDescriptor(
method,
if (invokeOpcode == INVOKESTATIC) null else defaultImplParam.getDescriptor(),
extensionReceiverType != null
)
if ("<init>".equals(method.getName())) {
v.aconst(null)
v.visitMethodInsn(INVOKESPECIAL, defaultImplOwner.getInternalName(), "<init>", desc, false)
}
else {
v.visitMethodInsn(INVOKESTATIC, defaultImplOwner.getInternalName(),
method.getName() + JvmAbi.DEFAULT_PARAMS_IMPL_SUFFIX, desc, false)
}
}
override val returnType: Type
get() = signature.getReturnType()
override fun isStaticCall(): Boolean =
invokeOpcode == INVOKESTATIC
override fun toString(): String =
"${Printer.OPCODES[invokeOpcode]} ${owner.getInternalName()}.$signature"
}

View File

@@ -104,7 +104,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen<JetClassOrObject> {
private void generatePrimaryConstructorProperties(PropertyCodegen propertyCodegen, JetClassOrObject origin) {
boolean isAnnotation = origin instanceof JetClass && ((JetClass) origin).isAnnotation();
for (JetParameter p : getPrimaryConstructorParameters()) {
if (p.hasValOrVarNode()) {
if (p.hasValOrVar()) {
PropertyDescriptor propertyDescriptor = bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, p);
if (propertyDescriptor != null) {
if (!isAnnotation) {

View File

@@ -49,6 +49,11 @@ public class ClassBuilderFactories {
public byte[] asBytes(ClassBuilder builder) {
throw new IllegalStateException();
}
@Override
public void close() {
throw new IllegalStateException();
}
};
@NotNull
@@ -79,6 +84,11 @@ public class ClassBuilderFactories {
public byte[] asBytes(ClassBuilder builder) {
return ((TraceBuilder) builder).binary.toByteArray();
}
@Override
public void close() {
}
};
@NotNull
@@ -105,6 +115,11 @@ public class ClassBuilderFactories {
ClassWriter visitor = (ClassWriter) builder.getVisitor();
return visitor.toByteArray();
}
@Override
public void close() {
}
};
private ClassBuilderFactories() {
@@ -117,13 +132,13 @@ public class ClassBuilderFactories {
@Override
protected String getCommonSuperClass(@NotNull String type1, @NotNull String type2) {
try {
return super.getCommonSuperClass(type1, type2);
}
catch (Throwable t) {
// @todo we might need at some point do more sophisticated handling
return "java/lang/Object";
}
// This method is needed to generate StackFrameMap: bytecode metadata for JVM verification. For bytecode version 50.0 (JDK 6)
// these maps can be invalid: in this case, JVM would generate them itself (potentially slowing class loading),
// for bytecode 51.0+ (JDK 7+) JVM would crash with VerifyError.
// It seems that for bytecode emitted by Kotlin compiler, it is safe to return "Object" here, because there will
// be "checkcast" generated before making a call, anyway.
return "java/lang/Object";
}
}

View File

@@ -29,4 +29,6 @@ public interface ClassBuilderFactory {
String asText(ClassBuilder builder);
byte[] asBytes(ClassBuilder builder);
void close();
}

View File

@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.codegen;
import kotlin.Function0;
import kotlin.jvm.functions.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
import org.jetbrains.kotlin.storage.NotNullLazyValue;

View File

@@ -18,11 +18,10 @@ package org.jetbrains.kotlin.codegen;
import com.google.common.collect.Lists;
import com.intellij.util.ArrayUtil;
import kotlin.Function1;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.codegen.binding.CalculatedClosure;
import org.jetbrains.kotlin.codegen.context.ClosureContext;
import org.jetbrains.kotlin.codegen.inline.InlineCodegenUtil;
@@ -32,11 +31,11 @@ import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.JetElement;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
@@ -48,8 +47,11 @@ import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConst;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.*;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.CLOSURE;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.OtherOrigin;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -106,7 +108,7 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
}
else {
this.superInterfaceTypes = Collections.singletonList(samType.getType());
this.superClassType = KotlinBuiltIns.getInstance().getAnyType();
this.superClassType = getBuiltIns(funDescriptor).getAnyType();
}
this.closure = bindingContext.get(CLOSURE, classDescriptor);
@@ -151,7 +153,7 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
@Nullable
@Override
protected ClassDescriptor classForInnerClassRecord() {
return JvmCodegenUtil.isLambdaWhichWillBeInlined(bindingContext, funDescriptor) ? null : classDescriptor;
return JvmCodegenUtil.isArgumentWhichWillBeInlined(bindingContext, funDescriptor) ? null : classDescriptor;
}
@Override
@@ -212,7 +214,10 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
}
@NotNull
public StackValue putInstanceOnStack(@NotNull final ExpressionCodegen codegen) {
public StackValue putInstanceOnStack(
@NotNull final ExpressionCodegen codegen,
@Nullable final FunctionDescriptor functionReferenceTarget
) {
return StackValue.operation(asmType, new Function1<InstructionAdapter, Unit>() {
@Override
public Unit invoke(InstructionAdapter v) {
@@ -226,11 +231,37 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
codegen.pushClosureOnStack(classDescriptor, true, codegen.defaultCallGenerator);
v.invokespecial(asmType.getInternalName(), "<init>", constructor.getDescriptor(), false);
}
if (functionReferenceTarget != null) {
equipFunctionReferenceWithReflection(v, functionReferenceTarget);
}
return Unit.INSTANCE$;
}
});
}
private static void equipFunctionReferenceWithReflection(@NotNull InstructionAdapter v, @NotNull FunctionDescriptor target) {
DeclarationDescriptor container = target.getContainingDeclaration();
Type type;
if (container instanceof PackageFragmentDescriptor) {
type = target.getExtensionReceiverParameter() != null
? K_TOP_LEVEL_EXTENSION_FUNCTION
: K_TOP_LEVEL_FUNCTION;
}
else if (container instanceof ClassDescriptor) {
type = K_MEMBER_FUNCTION;
}
else {
type = K_LOCAL_FUNCTION;
}
Method method = method("function", K_FUNCTION, FUNCTION_REFERENCE);
v.invokestatic(REFLECTION, method.getName(), method.getDescriptor(), false);
StackValue.coerce(K_FUNCTION, type, v);
}
private void generateConstInstance() {
MethodVisitor mv = v.newMethod(OtherOrigin(element, funDescriptor), ACC_STATIC | ACC_SYNTHETIC, "<clinit>", "()V", null, ArrayUtil.EMPTY_STRING_ARRAY);
@@ -304,7 +335,17 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
}
iv.load(0, superClassAsmType);
iv.invokespecial(superClassAsmType.getInternalName(), "<init>", "()V", false);
if (superClassAsmType.equals(LAMBDA) || superClassAsmType.equals(FUNCTION_REFERENCE)) {
int arity = funDescriptor.getValueParameters().size();
if (funDescriptor.getExtensionReceiverParameter() != null) arity++;
if (funDescriptor.getDispatchReceiverParameter() != null) arity++;
iv.iconst(arity);
iv.invokespecial(superClassAsmType.getInternalName(), "<init>", "(I)V", false);
}
else {
iv.invokespecial(superClassAsmType.getInternalName(), "<init>", "()V", false);
}
iv.visitInsn(RETURN);
@@ -363,8 +404,8 @@ public class ClosureCodegen extends MemberCodegen<JetElement> {
public static FunctionDescriptor getErasedInvokeFunction(@NotNull FunctionDescriptor elementDescriptor) {
int arity = elementDescriptor.getValueParameters().size();
ClassDescriptor elementClass = elementDescriptor.getExtensionReceiverParameter() == null
? KotlinBuiltIns.getInstance().getFunction(arity)
: KotlinBuiltIns.getInstance().getExtensionFunction(arity);
return elementClass.getDefaultType().getMemberScope().getFunctions(Name.identifier("invoke")).iterator().next();
? getBuiltIns(elementDescriptor).getFunction(arity)
: getBuiltIns(elementDescriptor).getExtensionFunction(arity);
return elementClass.getDefaultType().getMemberScope().getFunctions(OperatorConventions.INVOKE).iterator().next();
}
}

View File

@@ -216,13 +216,13 @@ class CollectionStubMethodGenerator(
private fun generateMethodStub(signature: JvmMethodSignature, synthetic: Boolean) {
// TODO: investigate if it makes sense to generate abstract stubs in traits
var access = ACC_PUBLIC
if (descriptor.getKind() == ClassKind.TRAIT) access = access or ACC_ABSTRACT
if (descriptor.getKind() == ClassKind.INTERFACE) access = access or ACC_ABSTRACT
if (synthetic) access = access or ACC_SYNTHETIC
val asmMethod = signature.getAsmMethod()
val genericSignature = if (synthetic) null else signature.getGenericsSignature()
val mv = v.newMethod(JvmDeclarationOrigin.NO_ORIGIN, access, asmMethod.getName(), asmMethod.getDescriptor(), genericSignature, null)
if (descriptor.getKind() != ClassKind.TRAIT) {
if (descriptor.getKind() != ClassKind.INTERFACE) {
mv.visitCode()
AsmUtil.genThrow(InstructionAdapter(mv), "java/lang/UnsupportedOperationException", "Mutating immutable collection")
FunctionCodegen.endVisit(mv, "built-in stub for $signature", null)

View File

@@ -0,0 +1,226 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
import org.jetbrains.kotlin.codegen.context.CodegenContext
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.JetClass
import org.jetbrains.kotlin.psi.JetClassOrObject
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.psi.JetNamedFunction
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
import org.jetbrains.kotlin.resolve.jvm.diagnostics.OtherOrigin
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
/**
* Generates Java overloads for functions and constructors that have the default
* parameter values substituted.
*/
public class DefaultParameterValueSubstitutor(val state: GenerationState) {
/**
* If all of the parameters of the specified constructor declare default values,
* generates a no-argument constructor that passes default values for all arguments.
*/
fun generateConstructorOverloadsIfNeeded(constructorDescriptor: ConstructorDescriptor,
classBuilder: ClassBuilder,
context: CodegenContext<*>,
classOrObject: JetClassOrObject) {
if (generateOverloadsIfNeeded(classOrObject, constructorDescriptor, constructorDescriptor,
context, classBuilder)) {
return
}
if (!isEmptyConstructorNeeded(constructorDescriptor, classOrObject)) {
return
}
generateOverloadWithSubstitutedParameters(constructorDescriptor, constructorDescriptor, classBuilder, classOrObject,
context,
constructorDescriptor.countDefaultParameters())
}
/**
* If the function is annotated with [kotlin.jvm.jvmOverloads], generates Java methods that
* have the default parameter values substituted. If a method has N parameters and M of which
* have default values, M overloads are generated: the first one takes N-1 parameters (all but
* the last one that takes a default value), the second takes N-2 parameters, and so on.
*
* @param functionDescriptor the method for which the overloads are generated
* @param delegateFunctionDescriptor the method descriptor for the implementation that we need to call
* (same as [functionDescriptor] in all cases except for companion object methods annotated with [platformStatic],
* where [functionDescriptor] is the static method in the main class and [delegateFunctionDescriptor] is the
* implementation in the companion object class)
* @return true if the overloads annotation was found on the element, false otherwise
*/
fun generateOverloadsIfNeeded(methodElement: JetElement?,
functionDescriptor: FunctionDescriptor,
delegateFunctionDescriptor: FunctionDescriptor,
owner: CodegenContext<*>,
classBuilder: ClassBuilder): Boolean {
if (functionDescriptor.getAnnotations().findAnnotation(FqName("kotlin.jvm.jvmOverloads")) == null) {
return false
}
val count = functionDescriptor.countDefaultParameters()
val context = owner.intoFunction(functionDescriptor)
for (i in 1..count) {
generateOverloadWithSubstitutedParameters(functionDescriptor, delegateFunctionDescriptor, classBuilder, methodElement, context, i)
}
return true
}
private fun FunctionDescriptor.countDefaultParameters() =
getValueParameters().count { it.hasDefaultValue() }
/**
* Generates an overload for [functionDescriptor] that substitutes default values for the last
* [substituteCount] parameters that have default values.
*
* @param functionDescriptor the method for which the overloads are generated
* @param delegateFunctionDescriptor the method descriptor for the implementation that we need to call
* (same as [functionDescriptor] in all cases except for companion object methods annotated with [platformStatic],
* where [functionDescriptor] is the static method in the main class and [delegateFunctionDescriptor] is the
* implementation in the companion object class)
* @param methodElement the PSI element for the method implementation (used in diagnostic messages only)
*/
fun generateOverloadWithSubstitutedParameters(functionDescriptor: FunctionDescriptor,
delegateFunctionDescriptor: FunctionDescriptor,
classBuilder: ClassBuilder,
methodElement: JetElement?,
context: CodegenContext<*>,
substituteCount: Int) {
val typeMapper = state.getTypeMapper()
val isStatic = AsmUtil.isStaticMethod(context.getContextKind(), functionDescriptor)
val flags = AsmUtil.getVisibilityAccessFlag(functionDescriptor) or (if (isStatic) Opcodes.ACC_STATIC else 0)
val remainingParameters = getRemainingParameters(functionDescriptor.getOriginal(), substituteCount)
val signature = typeMapper.mapSignature(functionDescriptor, context.getContextKind(), remainingParameters)
val mv = classBuilder.newMethod(OtherOrigin(methodElement, functionDescriptor), flags,
signature.getAsmMethod().getName(),
signature.getAsmMethod().getDescriptor(),
signature.getGenericsSignature(),
FunctionCodegen.getThrownExceptions(functionDescriptor, typeMapper))
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor, signature.getReturnType())
remainingParameters.withIndex().forEach {
val annotationCodegen = AnnotationCodegen.forParameter(it.index, mv, typeMapper)
annotationCodegen.genAnnotations(it.value, signature.getValueParameters()[it.index].getAsmType())
}
if (state.getClassBuilderMode() == ClassBuilderMode.LIGHT_CLASSES) {
mv.visitEnd()
return
}
val frameMap = FrameMap()
val v = InstructionAdapter(mv)
mv.visitCode()
val methodOwner = typeMapper.mapToCallableMethod(delegateFunctionDescriptor, false, context).owner
if (!isStatic) {
val thisIndex = frameMap.enterTemp(AsmTypes.OBJECT_TYPE)
v.load(thisIndex, methodOwner) // Load this on stack
}
else {
val delegateOwner = delegateFunctionDescriptor.getContainingDeclaration()
if (delegateOwner is ClassDescriptor && delegateOwner.isCompanionObject()) {
val singletonValue = StackValue.singleton(delegateOwner, typeMapper)
singletonValue.put(singletonValue.type, v);
}
}
val receiver = functionDescriptor.getExtensionReceiverParameter()
if (receiver != null) {
val receiverType = typeMapper.mapType(receiver)
val receiverIndex = frameMap.enter(receiver, receiverType)
StackValue.local(receiverIndex, receiverType).put(receiverType, v)
}
remainingParameters.forEach {
frameMap.enter(it, typeMapper.mapType(it))
}
var mask = 0
val masks = arrayListOf<Int>()
for (parameterDescriptor in functionDescriptor.getValueParameters()) {
val paramType = typeMapper.mapType(parameterDescriptor.getType())
if (parameterDescriptor in remainingParameters) {
val index = frameMap.getIndex(parameterDescriptor)
StackValue.local(index, paramType).put(paramType, v)
}
else {
AsmUtil.pushDefaultValueOnStack(paramType, v)
val i = parameterDescriptor.getIndex()
if (i != 0 && i % Integer.SIZE == 0) {
masks.add(mask)
mask = 0
}
mask = mask or (1 shl (i % Integer.SIZE))
}
}
masks.add(mask)
for (m in masks) {
v.iconst(m)
}
// constructors with default arguments has last synthetic argument of specific type
if (functionDescriptor is ConstructorDescriptor) {
v.aconst(null)
}
val defaultMethod = typeMapper.mapDefaultMethod(delegateFunctionDescriptor, context.getContextKind(), context)
if (functionDescriptor is ConstructorDescriptor) {
v.invokespecial(methodOwner.getInternalName(), defaultMethod.getName(), defaultMethod.getDescriptor(), false)
}
else {
v.invokestatic(methodOwner.getInternalName(), defaultMethod.getName(), defaultMethod.getDescriptor(), false)
}
v.areturn(signature.getReturnType())
FunctionCodegen.endVisit(mv, null, methodElement)
}
private fun getRemainingParameters(functionDescriptor: FunctionDescriptor,
substituteCount: Int): List<ValueParameterDescriptor> {
var remainingCount = functionDescriptor.countDefaultParameters() - substituteCount
return functionDescriptor.getValueParameters().filter { !it.declaresDefaultValue() || --remainingCount >= 0 }
}
private fun isEmptyConstructorNeeded(constructorDescriptor: ConstructorDescriptor, classOrObject: JetClassOrObject): Boolean {
val classDescriptor = constructorDescriptor.getContainingDeclaration()
if (classOrObject.isLocal()) return false
if (CodegenBinding.canHaveOuter(state.getBindingContext(), classDescriptor)) return false
if (Visibilities.isPrivate(classDescriptor.getVisibility()) || Visibilities.isPrivate(constructorDescriptor.getVisibility()))
return false
if (constructorDescriptor.getValueParameters().isEmpty()) return false
if (classOrObject is JetClass && hasSecondaryConstructorsWithNoParameters(classOrObject)) return false
return constructorDescriptor.getValueParameters().all { it.declaresDefaultValue() }
}
private fun hasSecondaryConstructorsWithNoParameters(klass: JetClass) =
klass.getSecondaryConstructors().any { it.getValueParameters().isEmpty() }
}

View File

@@ -17,10 +17,9 @@
package org.jetbrains.kotlin.codegen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicObjects;
import org.jetbrains.kotlin.builtins.CompanionObjectMapping;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.org.objectweb.asm.Type;
@@ -34,7 +33,7 @@ public class FieldInfo {
throw new UnsupportedOperationException("Can't create singleton field for class: " + classDescriptor);
}
if (isNonCompanionObject(classDescriptor) || IntrinsicObjects.INSTANCE$.hasMappingToObject(classDescriptor)) {
if (isNonCompanionObject(classDescriptor) || CompanionObjectMapping.hasMappingToObject(classDescriptor)) {
Type type = typeMapper.mapType(classDescriptor);
return new FieldInfo(type, type, JvmAbi.INSTANCE_FIELD, true);
}
@@ -46,18 +45,6 @@ public class FieldInfo {
}
}
@SuppressWarnings("deprecation")
@NotNull
public static FieldInfo deprecatedFieldForCompanionObject(@NotNull ClassDescriptor companionObject, @NotNull JetTypeMapper typeMapper) {
assert DescriptorUtils.isCompanionObject(companionObject) : "Not a companion object: " + companionObject;
return new FieldInfo(
typeMapper.mapType((ClassifierDescriptor) companionObject.getContainingDeclaration()),
typeMapper.mapType(companionObject),
JvmAbi.DEPRECATED_COMPANION_OBJECT_FIELD,
true
);
}
@NotNull
public static FieldInfo createForHiddenField(@NotNull Type owner, @NotNull Type fieldType, @NotNull String fieldName) {
return new FieldInfo(owner, fieldType, fieldName, false);

View File

@@ -21,13 +21,11 @@ import com.intellij.psi.PsiElement;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import kotlin.Function1;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.bridges.Bridge;
import org.jetbrains.kotlin.backend.common.bridges.BridgesPackage;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.codegen.binding.CodegenBinding;
import org.jetbrains.kotlin.codegen.context.CodegenContext;
import org.jetbrains.kotlin.codegen.context.MethodContext;
import org.jetbrains.kotlin.codegen.context.PackageContext;
@@ -39,10 +37,7 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.load.kotlin.nativeDeclarations.NativeDeclarationsPackage;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.psi.JetClass;
import org.jetbrains.kotlin.psi.JetClassOrObject;
import org.jetbrains.kotlin.psi.JetNamedFunction;
import org.jetbrains.kotlin.psi.JetSecondaryConstructor;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
@@ -50,7 +45,7 @@ import org.jetbrains.kotlin.resolve.annotations.AnnotationsPackage;
import org.jetbrains.kotlin.resolve.calls.CallResolverUtil;
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant;
import org.jetbrains.kotlin.resolve.constants.JavaClassValue;
import org.jetbrains.kotlin.resolve.constants.KClassValue;
import org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage;
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
@@ -68,8 +63,12 @@ import org.jetbrains.org.objectweb.asm.util.TraceMethodVisitor;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isNullableAny;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.JvmSerializationBindings.*;
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION;
@@ -114,6 +113,19 @@ public class FunctionCodegen {
generateDefaultIfNeeded(owner.intoFunction(functionDescriptor), functionDescriptor, owner.getContextKind(),
DefaultParameterValueLoader.DEFAULT, function);
generateOverloadsWithDefaultValues(function, functionDescriptor, functionDescriptor);
}
public void generateOverloadsWithDefaultValues(
@Nullable JetNamedFunction function,
@NotNull FunctionDescriptor functionDescriptor,
@NotNull FunctionDescriptor delegateFunctionDescriptor
) {
new DefaultParameterValueSubstitutor(state).generateOverloadsIfNeeded(function,
functionDescriptor,
delegateFunctionDescriptor,
owner, v);
}
public void generateMethod(
@@ -157,8 +169,7 @@ public class FunctionCodegen {
}
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor, asmMethod.getReturnType());
generateParameterAnnotations(functionDescriptor, mv, jvmSignature);
generateParameterAnnotations(functionDescriptor, mv, typeMapper.mapSignature(functionDescriptor));
if (state.getClassBuilderMode() != ClassBuilderMode.LIGHT_CLASSES) {
generateJetValueParameterAnnotations(mv, functionDescriptor, jvmSignature);
@@ -293,7 +304,11 @@ public class FunctionCodegen {
}
@Nullable
private static Type getThisTypeForFunction(@NotNull FunctionDescriptor functionDescriptor, @NotNull MethodContext context, @NotNull JetTypeMapper typeMapper) {
private static Type getThisTypeForFunction(
@NotNull FunctionDescriptor functionDescriptor,
@NotNull MethodContext context,
@NotNull JetTypeMapper typeMapper
) {
ReceiverParameterDescriptor dispatchReceiver = functionDescriptor.getDispatchReceiverParameter();
if (functionDescriptor instanceof ConstructorDescriptor) {
return typeMapper.mapType(functionDescriptor);
@@ -372,14 +387,15 @@ public class FunctionCodegen {
//add this
if (thisType != null) {
mv.visitLocalVariable("this", thisType.getDescriptor(), null, methodBegin, methodEnd, shift);
} else {
}
else {
//TODO: provide thisType for callable reference
}
shift++;
}
for (int i = 0; i < params.size(); i++) {
JvmMethodParameterSignature param = params.get(i);
JvmMethodParameterSignature param = params.get(i);
JvmMethodParameterKind kind = param.getKind();
String parameterName;
@@ -513,8 +529,7 @@ public class FunctionCodegen {
return name.equals("hashCode") || name.equals("toString");
}
else if (parameters.size() == 1 && name.equals("equals")) {
ValueParameterDescriptor parameter = parameters.get(0);
return parameter.getType().equals(KotlinBuiltIns.getInstance().getNullableAnyType());
return isNullableAny(parameters.get(0).getType());
}
return false;
}
@@ -536,8 +551,8 @@ public class FunctionCodegen {
new Function<CompileTimeConstant<?>, String>() {
@Override
public String fun(CompileTimeConstant<?> constant) {
if (constant instanceof JavaClassValue) {
JavaClassValue classValue = (JavaClassValue) constant;
if (constant instanceof KClassValue) {
KClassValue classValue = (KClassValue) constant;
ClassDescriptor classDescriptor = DescriptorUtils.getClassDescriptorForType(classValue.getValue());
return mapper.mapClass(classDescriptor).getInternalName();
}
@@ -548,54 +563,6 @@ public class FunctionCodegen {
return ArrayUtil.toStringArray(strings);
}
static void generateConstructorWithoutParametersIfNeeded(
@NotNull GenerationState state,
@NotNull CallableMethod method,
@NotNull ConstructorDescriptor constructorDescriptor,
@NotNull ClassBuilder classBuilder,
@NotNull JetClassOrObject classOrObject
) {
if (!isEmptyConstructorNeeded(state.getBindingContext(), constructorDescriptor, classOrObject)) {
return;
}
int flags = getVisibilityAccessFlag(constructorDescriptor);
MethodVisitor mv = classBuilder.newMethod(OtherOrigin(constructorDescriptor), flags, "<init>", "()V", null,
getThrownExceptions(constructorDescriptor, state.getTypeMapper()));
if (state.getClassBuilderMode() == ClassBuilderMode.LIGHT_CLASSES) return;
InstructionAdapter v = new InstructionAdapter(mv);
mv.visitCode();
Type methodOwner = method.getOwner();
v.load(0, methodOwner); // Load this on stack
int mask = 0;
List<Integer> masks = new ArrayList<Integer>(1);
for (ValueParameterDescriptor parameterDescriptor : constructorDescriptor.getValueParameters()) {
Type paramType = state.getTypeMapper().mapType(parameterDescriptor.getType());
pushDefaultValueOnStack(paramType, v);
int i = parameterDescriptor.getIndex();
if (i != 0 && i % Integer.SIZE == 0) {
masks.add(mask);
mask = 0;
}
mask |= (1 << (i % Integer.SIZE));
}
masks.add(mask);
for (int m : masks) {
v.iconst(m);
}
// constructors with default arguments has last synthetic argument of specific type
v.aconst(null);
String desc = JetTypeMapper.getDefaultDescriptor(method.getAsmMethod(), false);
v.invokespecial(methodOwner.getInternalName(), "<init>", desc, false);
v.areturn(Type.VOID_TYPE);
endVisit(mv, "default constructor for " + methodOwner.getInternalName(), classOrObject);
}
void generateDefaultIfNeeded(
@NotNull MethodContext owner,
@NotNull FunctionDescriptor functionDescriptor,
@@ -607,7 +574,7 @@ public class FunctionCodegen {
if (kind != OwnerKind.TRAIT_IMPL &&
contextClass instanceof ClassDescriptor &&
((ClassDescriptor) contextClass).getKind() == ClassKind.TRAIT) {
((ClassDescriptor) contextClass).getKind() == ClassKind.INTERFACE) {
return;
}
@@ -617,7 +584,12 @@ public class FunctionCodegen {
int flags = getVisibilityAccessFlag(functionDescriptor) |
getDeprecatedAccessFlag(functionDescriptor) |
(functionDescriptor instanceof ConstructorDescriptor ? 0 : ACC_STATIC);
ACC_SYNTHETIC;
if (!(functionDescriptor instanceof ConstructorDescriptor)) {
flags |= ACC_STATIC;
}
// $default methods are never private to be accessible from other class files (e.g. inner) without the need of synthetic accessors
flags &= ~ACC_PRIVATE;
Method defaultMethod = typeMapper.mapDefaultMethod(functionDescriptor, kind, owner);
@@ -629,6 +601,10 @@ public class FunctionCodegen {
getThrownExceptions(functionDescriptor, typeMapper)
);
// Only method annotations are copied to the $default method. Parameter annotations are not copied until there are valid use cases;
// enum constructors have two additional synthetic parameters which somewhat complicate this task
AnnotationCodegen.forMethod(mv, typeMapper).genAnnotations(functionDescriptor, defaultMethod.getReturnType());
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
if (this.owner instanceof PackageFacadeContext) {
mv.visitCode();
@@ -775,38 +751,6 @@ public class FunctionCodegen {
return needed;
}
private static boolean isEmptyConstructorNeeded(
@NotNull BindingContext context,
@NotNull ConstructorDescriptor constructorDescriptor,
@NotNull JetClassOrObject classOrObject
) {
ClassDescriptor classDescriptor = constructorDescriptor.getContainingDeclaration();
if (classOrObject.isLocal()) return false;
if (CodegenBinding.canHaveOuter(context, classDescriptor)) return false;
if (Visibilities.isPrivate(classDescriptor.getVisibility()) ||
Visibilities.isPrivate(constructorDescriptor.getVisibility())) return false;
if (constructorDescriptor.getValueParameters().isEmpty()) return false;
if (classOrObject instanceof JetClass && hasSecondaryConstructorsWithNoParameters((JetClass) classOrObject)) return false;
for (ValueParameterDescriptor parameterDescriptor : constructorDescriptor.getValueParameters()) {
if (!parameterDescriptor.declaresDefaultValue()) {
return false;
}
}
return true;
}
private static boolean hasSecondaryConstructorsWithNoParameters(@NotNull JetClass klass) {
for (JetSecondaryConstructor constructor : klass.getSecondaryConstructors()) {
if (constructor.getValueParameters().isEmpty()) return true;
}
return false;
}
private void generateBridge(
@Nullable PsiElement origin,
@NotNull FunctionDescriptor descriptor,
@@ -815,7 +759,8 @@ public class FunctionCodegen {
) {
int flags = ACC_PUBLIC | ACC_BRIDGE | ACC_SYNTHETIC; // TODO.
MethodVisitor mv = v.newMethod(DiagnosticsPackage.Bridge(descriptor, origin), flags, delegateTo.getName(), bridge.getDescriptor(), null, null);
MethodVisitor mv =
v.newMethod(DiagnosticsPackage.Bridge(descriptor, origin), flags, bridge.getName(), bridge.getDescriptor(), null, null);
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) return;
mv.visitCode();
@@ -842,7 +787,8 @@ public class FunctionCodegen {
}
public void genDelegate(@NotNull FunctionDescriptor functionDescriptor, FunctionDescriptor overriddenDescriptor, StackValue field) {
genDelegate(functionDescriptor, overriddenDescriptor.getOriginal(), (ClassDescriptor) overriddenDescriptor.getContainingDeclaration(), field);
genDelegate(functionDescriptor, overriddenDescriptor.getOriginal(),
(ClassDescriptor) overriddenDescriptor.getContainingDeclaration(), field);
}
public void genDelegate(
@@ -878,7 +824,7 @@ public class FunctionCodegen {
}
String internalName = typeMapper.mapType(toClass).getInternalName();
if (toClass.getKind() == ClassKind.TRAIT) {
if (toClass.getKind() == ClassKind.INTERFACE) {
iv.invokeinterface(internalName, delegateToMethod.getName(), delegateToMethod.getDescriptor());
}
else {

View File

@@ -0,0 +1,162 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.psi.Call;
import org.jetbrains.kotlin.psi.JetCallExpression;
import org.jetbrains.kotlin.psi.JetExpression;
import org.jetbrains.kotlin.psi.ValueArgument;
import org.jetbrains.kotlin.resolve.calls.model.DelegatingResolvedCall;
import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument;
import org.jetbrains.kotlin.resolve.calls.util.CallMaker;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory;
import static org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER;
public class FunctionReferenceGenerationStrategy extends FunctionGenerationStrategy.CodegenBased<FunctionDescriptor> {
private final ResolvedCall<?> resolvedCall;
private final FunctionDescriptor referencedFunction;
public FunctionReferenceGenerationStrategy(
@NotNull GenerationState state,
@NotNull FunctionDescriptor functionDescriptor,
@NotNull ResolvedCall<?> resolvedCall
) {
super(state, functionDescriptor);
this.resolvedCall = resolvedCall;
this.referencedFunction = (FunctionDescriptor) resolvedCall.getResultingDescriptor();
}
@Override
public void doGenerateBody(@NotNull ExpressionCodegen codegen, @NotNull JvmMethodSignature signature) {
/*
Here we need to put the arguments from our locals to the stack and invoke the referenced method. Since invocation
of methods is highly dependent on expressions, we create a fake call expression. Then we create a new instance of
ExpressionCodegen and, in order for it to generate code correctly, we save to its 'tempVariables' field every
argument of our fake expression, pointing it to the corresponding index in our locals. This way generation of
every argument boils down to calling LOAD with the corresponding index
*/
JetCallExpression fakeExpression = constructFakeFunctionCall();
final List<? extends ValueArgument> fakeArguments = fakeExpression.getValueArguments();
final ReceiverValue dispatchReceiver = computeAndSaveReceiver(signature, codegen, referencedFunction.getDispatchReceiverParameter());
final ReceiverValue extensionReceiver = computeAndSaveReceiver(signature, codegen, referencedFunction.getExtensionReceiverParameter());
computeAndSaveArguments(fakeArguments, codegen);
ResolvedCall<CallableDescriptor> fakeResolvedCall = new DelegatingResolvedCall<CallableDescriptor>(resolvedCall) {
@NotNull
@Override
public ReceiverValue getExtensionReceiver() {
return extensionReceiver;
}
@NotNull
@Override
public ReceiverValue getDispatchReceiver() {
return dispatchReceiver;
}
@NotNull
@Override
public List<ResolvedValueArgument> getValueArgumentsByIndex() {
List<ResolvedValueArgument> result = new ArrayList<ResolvedValueArgument>(fakeArguments.size());
for (ValueArgument argument : fakeArguments) {
result.add(new ExpressionValueArgument(argument));
}
return result;
}
};
StackValue result;
Type returnType = codegen.getReturnType();
if (referencedFunction instanceof ConstructorDescriptor) {
if (returnType.getSort() == Type.ARRAY) {
//noinspection ConstantConditions
result = codegen.generateNewArray(fakeExpression, referencedFunction.getReturnType());
}
else {
result = codegen.generateConstructorCall(fakeResolvedCall, returnType);
}
}
else {
Call call = CallMaker.makeCall(fakeExpression, NO_RECEIVER, null, fakeExpression, fakeArguments);
result = codegen.invokeFunction(call, fakeResolvedCall, StackValue.none());
}
InstructionAdapter v = codegen.v;
result.put(returnType, v);
v.areturn(returnType);
}
@NotNull
private JetCallExpression constructFakeFunctionCall() {
StringBuilder fakeFunctionCall = new StringBuilder("callableReferenceFakeCall(");
for (Iterator<ValueParameterDescriptor> iterator = referencedFunction.getValueParameters().iterator(); iterator.hasNext(); ) {
ValueParameterDescriptor descriptor = iterator.next();
fakeFunctionCall.append("p").append(descriptor.getIndex());
if (iterator.hasNext()) {
fakeFunctionCall.append(", ");
}
}
fakeFunctionCall.append(")");
return (JetCallExpression) JetPsiFactory(state.getProject()).createExpression(fakeFunctionCall.toString());
}
private void computeAndSaveArguments(@NotNull List<? extends ValueArgument> fakeArguments, @NotNull ExpressionCodegen codegen) {
for (ValueParameterDescriptor parameter : callableDescriptor.getValueParameters()) {
ValueArgument fakeArgument = fakeArguments.get(parameter.getIndex());
Type type = state.getTypeMapper().mapType(parameter);
int localIndex = codegen.myFrameMap.getIndex(parameter);
codegen.tempVariables.put(fakeArgument.getArgumentExpression(), StackValue.local(localIndex, type));
}
}
@NotNull
private ReceiverValue computeAndSaveReceiver(
@NotNull JvmMethodSignature signature,
@NotNull ExpressionCodegen codegen,
@Nullable ReceiverParameterDescriptor receiver
) {
if (receiver == null) return NO_RECEIVER;
JetExpression receiverExpression = JetPsiFactory(state.getProject()).createExpression("callableReferenceFakeReceiver");
codegen.tempVariables.put(receiverExpression, receiverParameterStackValue(signature));
return new ExpressionReceiver(receiverExpression, receiver.getType());
}
@NotNull
private static StackValue.Local receiverParameterStackValue(@NotNull JvmMethodSignature signature) {
// 0 is this (the callable reference class), 1 is the invoke() method's first parameter
return StackValue.local(1, signature.getAsmMethod().getArgumentTypes()[0]);
}
}

View File

@@ -25,11 +25,11 @@ import java.util.List;
import java.util.jar.Manifest;
public class GeneratedClassLoader extends URLClassLoader {
private ClassFileFactory state;
private ClassFileFactory factory;
public GeneratedClassLoader(@NotNull ClassFileFactory state, ClassLoader parentClassLoader, URL...urls) {
public GeneratedClassLoader(@NotNull ClassFileFactory factory, ClassLoader parentClassLoader, URL... urls) {
super(urls, parentClassLoader);
this.state = state;
this.factory = factory;
}
@NotNull
@@ -37,7 +37,7 @@ public class GeneratedClassLoader extends URLClassLoader {
protected Class<?> findClass(@NotNull String name) throws ClassNotFoundException {
String classFilePath = name.replace('.', '/') + ".class";
OutputFile outputFile = state.get(classFilePath);
OutputFile outputFile = factory.get(classFilePath);
if (outputFile != null) {
byte[] bytes = outputFile.asByteArray();
int lastDot = name.lastIndexOf('.');
@@ -54,11 +54,11 @@ public class GeneratedClassLoader extends URLClassLoader {
}
public void dispose() {
state = null;
factory = null;
}
@NotNull
public List<OutputFile> getAllGeneratedFiles() {
return state.asList();
return factory.asList();
}
}

View File

@@ -16,11 +16,14 @@
package org.jetbrains.kotlin.codegen;
import com.google.common.collect.Lists;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.psi.PsiElement;
import com.intellij.util.ArrayUtil;
import kotlin.*;
import kotlin.KotlinPackage;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.functions.Function2;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.CodegenUtil;
@@ -40,7 +43,6 @@ import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinClass;
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext;
@@ -54,11 +56,15 @@ import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage;
import org.jetbrains.kotlin.resolve.jvm.AsmTypes;
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver;
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
import org.jetbrains.kotlin.serialization.*;
import org.jetbrains.kotlin.serialization.deserialization.NameResolver;
import org.jetbrains.kotlin.serialization.jvm.BitEncoding;
@@ -74,8 +80,12 @@ import static kotlin.KotlinPackage.firstOrNull;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.*;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedSubclass;
import static org.jetbrains.kotlin.resolve.BindingContextUtils.getDelegationConstructorCall;
import static org.jetbrains.kotlin.resolve.BindingContextUtils.getNotNull;
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
import static org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage.getResolvedCall;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getSecondaryConstructors;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.*;
@@ -121,10 +131,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
if (myClass instanceof JetClass) {
JetClass jetClass = (JetClass) myClass;
if (jetClass.hasModifier(JetTokens.ABSTRACT_KEYWORD)) {
if (jetClass.hasModifier(JetTokens.ABSTRACT_KEYWORD) || jetClass.isSealed()) {
isAbstract = true;
}
if (jetClass.isTrait()) {
if (jetClass.isInterface()) {
isAbstract = true;
isInterface = true;
}
@@ -132,7 +142,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
isAbstract = true;
isInterface = true;
isAnnotation = true;
signature.getInterfaces().add("java/lang/annotation/Annotation");
}
else if (jetClass.isEnum()) {
isAbstract = hasAbstractMembers(descriptor);
@@ -150,7 +159,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
isStatic = !jetClass.isInner();
}
else {
isStatic = myClass instanceof JetObjectDeclaration && ((JetObjectDeclaration) myClass).isCompanion() ;
isStatic = isCompanionObject(descriptor);
isFinal = true;
}
@@ -198,14 +207,16 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
access |= ACC_ENUM;
}
List<String> interfaces = signature.getInterfaces();
v.defineClass(myClass, V1_6,
access,
signature.getName(),
signature.getJavaGenericSignature(),
signature.getSuperclassName(),
ArrayUtil.toStringArray(interfaces)
v.defineClass(
myClass, V1_6,
access,
signature.getName(),
signature.getJavaGenericSignature(),
signature.getSuperclassName(),
ArrayUtil.toStringArray(signature.getInterfaces())
);
v.visitSource(myClass.getContainingFile().getName(), null);
InlineCodegenUtil.initDefaultSourceMappingIfNeeded(context, this, state);
@@ -215,6 +226,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
AnnotationCodegen.forClass(v.getVisitor(), typeMapper).genAnnotations(descriptor, null);
generateReflectionObjectFieldIfNeeded();
generateEnumEntries();
}
@Override
@@ -226,13 +239,20 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
kind = KotlinClass.Kind.ANONYMOUS_OBJECT;
}
else if (isTopLevelOrInnerClass(descriptor)) {
kind = KotlinClass.Kind.CLASS;
// Default value is Kind.CLASS
kind = null;
}
else {
// LOCAL_CLASS is also written to inner classes of local classes
kind = KotlinClass.Kind.LOCAL_CLASS;
}
// Temporarily write class kind anyway because old compiler may not expect its absence
// TODO: remove after M13
if (kind == null) {
kind = KotlinClass.Kind.CLASS;
}
DescriptorSerializer serializer =
DescriptorSerializer.create(descriptor, new JvmSerializerExtension(v.getSerializationBindings(), typeMapper));
@@ -244,11 +264,14 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
AnnotationVisitor av = v.getVisitor().visitAnnotation(asmDescByFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS), true);
av.visit(JvmAnnotationNames.ABI_VERSION_FIELD_NAME, JvmAbi.VERSION);
av.visitEnum(
JvmAnnotationNames.KIND_FIELD_NAME,
Type.getObjectType(KotlinClass.KIND_INTERNAL_NAME).getDescriptor(),
kind.toString()
);
//noinspection ConstantConditions
if (kind != null) {
av.visitEnum(
JvmAnnotationNames.KIND_FIELD_NAME,
Type.getObjectType(KotlinClass.KIND_INTERNAL_NAME).getDescriptor(),
kind.toString()
);
}
AnnotationVisitor array = av.visitArray(JvmAnnotationNames.DATA_FIELD_NAME);
for (String string : BitEncoding.encodeBytes(SerializationUtil.serializeClassData(data))) {
array.visit(null, string);
@@ -285,22 +308,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
sw.writeSuperclassEnd();
List<JetType> interfaceSupertypes = Lists.newArrayList();
for (JetDelegationSpecifier specifier : myClass.getDelegationSpecifiers()) {
JetType superType = bindingContext.get(BindingContext.TYPE, specifier.getTypeReference());
assert superType != null : "No supertype for class: " + myClass.getText();
if (isInterface(superType.getConstructor().getDeclarationDescriptor())) {
interfaceSupertypes.add(superType);
}
}
LinkedHashSet<String> superInterfaces = new LinkedHashSet<String>();
for (JetType supertype : interfaceSupertypes) {
sw.writeInterface();
Type jvmName = typeMapper.mapSupertype(supertype, sw);
sw.writeInterfaceEnd();
superInterfaces.add(jvmName.getInternalName());
for (JetType supertype : descriptor.getTypeConstructor().getSupertypes()) {
if (isInterface(supertype.getConstructor().getDeclarationDescriptor())) {
sw.writeInterface();
Type jvmName = typeMapper.mapSupertype(supertype, sw);
sw.writeInterfaceEnd();
superInterfaces.add(jvmName.getInternalName());
}
}
return new JvmClassSignature(classAsmType.getInternalName(), superClassAsmType.getInternalName(),
@@ -311,37 +327,16 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
superClassAsmType = OBJECT_TYPE;
superClassType = null;
List<JetDelegationSpecifier> delegationSpecifiers = myClass.getDelegationSpecifiers();
if (myClass instanceof JetClass && ((JetClass) myClass).isTrait()) {
if (descriptor.getKind() == ClassKind.INTERFACE) {
return;
}
for (JetDelegationSpecifier specifier : delegationSpecifiers) {
if (specifier instanceof JetDelegatorToSuperClass || specifier instanceof JetDelegatorToSuperCall) {
JetType superType = bindingContext.get(BindingContext.TYPE, specifier.getTypeReference());
assert superType != null :
String.format("No type recorded for \n---\n%s\n---\n", JetPsiUtil.getElementTextWithContext(specifier));
ClassifierDescriptor classifierDescriptor = superType.getConstructor().getDeclarationDescriptor();
if (!(classifierDescriptor instanceof ClassDescriptor)) continue;
ClassDescriptor superClassDescriptor = (ClassDescriptor) classifierDescriptor;
if (!isInterface(superClassDescriptor)) {
superClassType = superType;
superClassAsmType = typeMapper.mapClass(superClassDescriptor);
}
}
}
if (superClassType == null) {
if (descriptor.getKind() == ClassKind.ENUM_CLASS) {
superClassType = KotlinBuiltIns.getInstance().getEnumType(descriptor.getDefaultType());
superClassAsmType = typeMapper.mapType(superClassType);
}
if (descriptor.getKind() == ClassKind.ENUM_ENTRY) {
superClassType = descriptor.getTypeConstructor().getSupertypes().iterator().next();
superClassAsmType = typeMapper.mapType(superClassType);
for (JetType supertype : descriptor.getTypeConstructor().getSupertypes()) {
ClassifierDescriptor superClass = supertype.getConstructor().getDeclarationDescriptor();
if (superClass != null && !isInterface(superClass)) {
superClassAsmType = typeMapper.mapClass(superClass);
superClassType = supertype;
return;
}
}
}
@@ -378,7 +373,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
generateSyntheticAccessors();
generateEnumMethodsAndConstInitializers();
generateEnumMethods();
generateFunctionsForDataClasses();
@@ -421,8 +416,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
JetType paramType = function.getValueParameters().get(0).getType();
if (KotlinBuiltIns.isArray(returnType) && KotlinBuiltIns.isArray(paramType)) {
JetType elementType = function.getTypeParameters().get(0).getDefaultType();
if (JetTypeChecker.DEFAULT.equalTypes(elementType, KotlinBuiltIns.getInstance().getArrayElementType(returnType))
&& JetTypeChecker.DEFAULT.equalTypes(elementType, KotlinBuiltIns.getInstance().getArrayElementType(paramType))) {
if (JetTypeChecker.DEFAULT.equalTypes(elementType, getBuiltIns(descriptor).getArrayElementType(returnType))
&& JetTypeChecker.DEFAULT.equalTypes(elementType, getBuiltIns(descriptor).getArrayElementType(paramType))) {
return true;
}
}
@@ -432,16 +427,16 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
private void generateToArray() {
KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance();
KotlinBuiltIns builtIns = getBuiltIns(descriptor);
if (!isSubclass(descriptor, builtIns.getCollection())) return;
int access = descriptor.getKind() == ClassKind.TRAIT ?
int access = descriptor.getKind() == ClassKind.INTERFACE ?
ACC_PUBLIC | ACC_ABSTRACT :
ACC_PUBLIC;
if (CodegenUtil.getDeclaredFunctionByRawSignature(descriptor, Name.identifier("toArray"), builtIns.getArray()) == null) {
MethodVisitor mv = v.newMethod(NO_ORIGIN, access, "toArray", "()[Ljava/lang/Object;", null, null);
if (descriptor.getKind() != ClassKind.TRAIT) {
if (descriptor.getKind() != ClassKind.INTERFACE) {
InstructionAdapter iv = new InstructionAdapter(mv);
mv.visitCode();
@@ -456,7 +451,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
if (!isGenericToArrayPresent()) {
MethodVisitor mv = v.newMethod(NO_ORIGIN, access, "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;", null, null);
if (descriptor.getKind() != ClassKind.TRAIT) {
if (descriptor.getKind() != ClassKind.INTERFACE) {
InstructionAdapter iv = new InstructionAdapter(mv);
mv.visitCode();
@@ -488,10 +483,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
@Override
public void generateEqualsMethod(@NotNull List<PropertyDescriptor> properties) {
KotlinBuiltIns builtins = getBuiltIns(descriptor);
FunctionDescriptor equalsFunction = CodegenUtil.getDeclaredFunctionByRawSignature(
descriptor, Name.identifier(CodegenUtil.EQUALS_METHOD_NAME),
KotlinBuiltIns.getInstance().getBoolean(),
KotlinBuiltIns.getInstance().getAny()
descriptor, Name.identifier(CodegenUtil.EQUALS_METHOD_NAME), builtins.getBoolean(), builtins.getAny()
);
assert equalsFunction != null : String.format("Should be called only for classes with non-trivial '%s'. In %s, %s",
@@ -520,8 +514,11 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
for (PropertyDescriptor propertyDescriptor : properties) {
Type asmType = typeMapper.mapType(propertyDescriptor);
genPropertyOnStack(iv, context, propertyDescriptor, 0);
genPropertyOnStack(iv, context, propertyDescriptor, 2);
Type thisPropertyType = genPropertyOnStack(iv, context, propertyDescriptor, 0);
StackValue.coerce(thisPropertyType, asmType, iv);
Type otherPropertyType = genPropertyOnStack(iv, context, propertyDescriptor, 2);
StackValue.coerce(otherPropertyType, asmType, iv);
if (asmType.getSort() == Type.ARRAY) {
Type elementType = correctElementType(asmType);
@@ -563,8 +560,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
@Override
public void generateHashCodeMethod(@NotNull List<PropertyDescriptor> properties) {
FunctionDescriptor hashCodeFunction = CodegenUtil.getDeclaredFunctionByRawSignature(
descriptor, Name.identifier(CodegenUtil.HASH_CODE_METHOD_NAME),
KotlinBuiltIns.getInstance().getInt()
descriptor, Name.identifier(CodegenUtil.HASH_CODE_METHOD_NAME), getBuiltIns(descriptor).getInt()
);
assert hashCodeFunction != null : String.format("Should be called only for classes with non-trivial '%s'. In %s, %s",
@@ -582,10 +578,11 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
iv.mul(Type.INT_TYPE);
}
genPropertyOnStack(iv, context, propertyDescriptor, 0);
Type propertyType = genPropertyOnStack(iv, context, propertyDescriptor, 0);
Type asmType = typeMapper.mapType(propertyDescriptor);
StackValue.coerce(propertyType, asmType, iv);
Label ifNull = null;
Type asmType = typeMapper.mapType(propertyDescriptor);
if (!isPrimitive(asmType)) {
ifNull = new Label();
iv.dup();
@@ -619,8 +616,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
@Override
public void generateToStringMethod(@NotNull List<PropertyDescriptor> properties) {
FunctionDescriptor toString = CodegenUtil.getDeclaredFunctionByRawSignature(
descriptor, Name.identifier(CodegenUtil.TO_STRING_METHOD_NAME),
KotlinBuiltIns.getInstance().getString()
descriptor, Name.identifier(CodegenUtil.TO_STRING_METHOD_NAME), getBuiltIns(descriptor).getString()
);
assert toString != null : String.format("Should be called only for classes with non-trivial '%s'. In %s, %s",
@@ -706,7 +702,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, descriptorToDeclaration(parameter));
assert property != null : "Property descriptor is not found for primary constructor parameter: " + parameter;
genPropertyOnStack(iv, context, property, 0);
Type propertyType = genPropertyOnStack(iv, context, property, 0);
StackValue.coerce(propertyType, componentType, iv);
}
iv.areturn(componentType);
}
@@ -739,12 +736,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
MutableClosure closure = ImplementationBodyCodegen.this.context.closure;
if (closure != null) {
ClassDescriptor captureThis = closure.getCaptureThis();
if (captureThis != null) {
iv.load(0, classAsmType);
Type type = typeMapper.mapType(captureThis);
iv.getfield(classAsmType.getInternalName(), CAPTURED_THIS_FIELD, type.getDescriptor());
}
pushCapturedFieldsOnStack(iv, closure);
}
int parameterIndex = 1; // localVariable 0 = this
@@ -759,6 +751,33 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
iv.areturn(thisDescriptorType);
}
private void pushCapturedFieldsOnStack(InstructionAdapter iv, MutableClosure closure) {
ClassDescriptor captureThis = closure.getCaptureThis();
if (captureThis != null) {
iv.load(0, classAsmType);
Type type = typeMapper.mapType(captureThis);
iv.getfield(classAsmType.getInternalName(), CAPTURED_THIS_FIELD, type.getDescriptor());
}
JetType captureReceiver = closure.getCaptureReceiverType();
if (captureReceiver != null) {
iv.load(0, classAsmType);
Type type = typeMapper.mapType(captureReceiver);
iv.getfield(classAsmType.getInternalName(), CAPTURED_RECEIVER_FIELD, type.getDescriptor());
}
for (Map.Entry<DeclarationDescriptor, EnclosedValueDescriptor> entry : closure.getCaptureVariables().entrySet()) {
DeclarationDescriptor declarationDescriptor = entry.getKey();
EnclosedValueDescriptor enclosedValueDescriptor = entry.getValue();
StackValue capturedValue = enclosedValueDescriptor.getInstanceValue();
Type sharedVarType = typeMapper.getSharedVarType(declarationDescriptor);
if (sharedVarType == null) {
sharedVarType = typeMapper.mapType((VariableDescriptor) declarationDescriptor);
}
capturedValue.put(sharedVarType, iv);
}
}
});
functionCodegen.generateDefaultIfNeeded(
@@ -785,16 +804,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
return constructor;
}
private void generateEnumMethodsAndConstInitializers() {
private void generateEnumMethods() {
if (isEnumClass(descriptor)) {
generateEnumValuesMethod();
generateEnumValueOfMethod();
initializeEnumConstants();
}
}
private void generateEnumValuesMethod() {
Type type = typeMapper.mapType(KotlinBuiltIns.getInstance().getArrayType(INVARIANT, descriptor.getDefaultType()));
Type type = typeMapper.mapType(getBuiltIns(descriptor).getArrayType(INVARIANT, descriptor.getDefaultType()));
FunctionDescriptor valuesFunction =
KotlinPackage.single(descriptor.getStaticScope().getFunctions(ENUM_VALUES), new Function1<FunctionDescriptor, Boolean>() {
@@ -845,7 +863,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
private void generateSyntheticAccessor(Map.Entry<DeclarationDescriptor, DeclarationDescriptor> entry) {
if (entry.getValue() instanceof FunctionDescriptor) {
FunctionDescriptor bridge = (FunctionDescriptor) entry.getValue();
final FunctionDescriptor bridge = (FunctionDescriptor) entry.getValue();
final FunctionDescriptor original = (FunctionDescriptor) entry.getKey();
functionCodegen.generateMethod(
Synthetic(null, original), bridge,
@@ -854,7 +872,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
public void doGenerateBody(@NotNull ExpressionCodegen codegen, @NotNull JvmMethodSignature signature) {
markLineNumberForSyntheticFunction(descriptor, codegen.v);
generateMethodCallTo(original, codegen.v);
generateMethodCallTo(original, bridge, codegen.v);
codegen.v.areturn(signature.getReturnType());
}
}
@@ -935,15 +953,21 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
private void generateMethodCallTo(FunctionDescriptor functionDescriptor, InstructionAdapter iv) {
private void generateMethodCallTo(
@NotNull FunctionDescriptor functionDescriptor,
@Nullable FunctionDescriptor bridgeDescriptor,
@NotNull InstructionAdapter iv
) {
boolean isConstructor = functionDescriptor instanceof ConstructorDescriptor;
boolean callFromAccessor = !JetTypeMapper.isAccessor(functionDescriptor);
boolean bridgeIsAccessorConstructor = bridgeDescriptor instanceof AccessorForConstructorDescriptor;
boolean callFromAccessor = bridgeIsAccessorConstructor
|| (bridgeDescriptor != null && JetTypeMapper.isAccessor(bridgeDescriptor));
CallableMethod callableMethod = isConstructor ?
typeMapper.mapToCallableMethod((ConstructorDescriptor) functionDescriptor) :
typeMapper.mapToCallableMethod(functionDescriptor, callFromAccessor, context);
int reg = 1;
if (isConstructor) {
if (isConstructor && !bridgeIsAccessorConstructor) {
iv.anew(callableMethod.getOwner());
iv.dup();
reg = 0;
@@ -954,11 +978,16 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
for (Type argType : callableMethod.getAsmMethod().getArgumentTypes()) {
iv.load(reg, argType);
reg += argType.getSize();
for (Type argType : callableMethod.getParameterTypes()) {
if (AsmTypes.DEFAULT_CONSTRUCTOR_MARKER.equals(argType)) {
iv.aconst(null);
}
else {
iv.load(reg, argType);
reg += argType.getSize();
}
}
callableMethod.invokeWithoutAssertions(iv);
callableMethod.genInvokeInstruction(iv);
}
private void generateFieldForSingleton() {
@@ -988,12 +1017,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
StackValue.Field field = StackValue.singleton(companionObjectDescriptor, typeMapper);
v.newField(OtherOrigin(companionObject), ACC_PUBLIC | ACC_STATIC | ACC_FINAL, field.name, field.type.getDescriptor(), null, null);
StackValue.Field deprecatedField = StackValue.deprecatedCompanionObjectAccessor(companionObjectDescriptor, typeMapper);
FieldVisitor fv = v.newField(OtherOrigin(companionObject), ACC_PUBLIC | ACC_STATIC | ACC_FINAL | ACC_DEPRECATED,
deprecatedField.name, deprecatedField.type.getDescriptor(), null, null);
fv.visitAnnotation(asmDescByFqNameWithoutInnerClasses(new FqName("java.lang.Deprecated")), true).visitEnd();
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) return;
if (!isCompanionObjectWithBackingFieldsInOuter(companionObjectDescriptor)) {
@@ -1042,29 +1065,31 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
private void copyFieldFromCompanionObject(PropertyDescriptor propertyDescriptor) {
ExpressionCodegen codegen = createOrGetClInitCodegen();
StackValue property = codegen.intermediateValueForProperty(propertyDescriptor, false, null, StackValue.none());
StackValue.Field field = StackValue.field(property.type, classAsmType, propertyDescriptor.getName().asString(), true, StackValue.none());
StackValue.Field field = StackValue
.field(property.type, classAsmType, propertyDescriptor.getName().asString(), true, StackValue.none(), propertyDescriptor);
field.store(property, codegen.v);
}
private void generateCompanionObjectInitializer(@NotNull ClassDescriptor companionObject) {
ExpressionCodegen codegen = createOrGetClInitCodegen();
FunctionDescriptor constructor = codegen.accessibleFunctionDescriptor(KotlinPackage.single(companionObject.getConstructors()));
generateMethodCallTo(constructor, codegen.v);
FunctionDescriptor constructor = context.accessibleFunctionDescriptor(KotlinPackage.single(companionObject.getConstructors()));
generateMethodCallTo(constructor, null, codegen.v);
codegen.v.dup();
StackValue instance = StackValue.onStack(typeMapper.mapClass(companionObject));
StackValue.singleton(companionObject, typeMapper).store(instance, codegen.v, true);
StackValue.deprecatedCompanionObjectAccessor(companionObject, typeMapper).store(instance, codegen.v, true);
}
private void generatePrimaryConstructor(final DelegationFieldsInfo delegationFieldsInfo) {
if (ignoreIfTraitOrAnnotation()) return;
if (isTrait(descriptor) || isAnnotationClass(descriptor)) return;
ConstructorDescriptor constructorDescriptor = descriptor.getUnsubstitutedPrimaryConstructor();
if (constructorDescriptor == null) return;
ConstructorContext constructorContext = context.intoConstructor(constructorDescriptor);
functionCodegen.generateMethod(OtherOrigin(myClass, constructorDescriptor), constructorDescriptor, constructorContext,
JetPrimaryConstructor primaryConstructor = myClass.getPrimaryConstructor();
JvmDeclarationOrigin origin = OtherOrigin(primaryConstructor != null ? primaryConstructor : myClass, constructorDescriptor);
functionCodegen.generateMethod(origin, constructorDescriptor, constructorContext,
new FunctionGenerationStrategy.CodegenBased<ConstructorDescriptor>(state, constructorDescriptor) {
@Override
public void doGenerateBody(@NotNull ExpressionCodegen codegen, @NotNull JvmMethodSignature signature) {
@@ -1076,8 +1101,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
functionCodegen.generateDefaultIfNeeded(constructorContext, constructorDescriptor, OwnerKind.IMPLEMENTATION,
DefaultParameterValueLoader.DEFAULT, null);
CallableMethod callableMethod = typeMapper.mapToCallableMethod(constructorDescriptor);
FunctionCodegen.generateConstructorWithoutParametersIfNeeded(state, callableMethod, constructorDescriptor, v, myClass);
new DefaultParameterValueSubstitutor(state).generateConstructorOverloadsIfNeeded(constructorDescriptor, v,
constructorContext, myClass);
if (isCompanionObject(descriptor)) {
context.recordSyntheticAccessorIfNeeded(constructorDescriptor, bindingContext);
@@ -1085,6 +1110,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
private void generateSecondaryConstructor(@NotNull ConstructorDescriptor constructorDescriptor) {
if (!canHaveDeclaredConstructors(descriptor)) return;
ConstructorContext constructorContext = context.intoConstructor(constructorDescriptor);
functionCodegen.generateMethod(OtherOrigin(descriptorToDeclaration(constructorDescriptor), constructorDescriptor),
@@ -1099,6 +1126,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
functionCodegen.generateDefaultIfNeeded(constructorContext, constructorDescriptor, OwnerKind.IMPLEMENTATION,
DefaultParameterValueLoader.DEFAULT, null);
new DefaultParameterValueSubstitutor(state).generateOverloadsIfNeeded(myClass, constructorDescriptor, constructorDescriptor,
constructorContext, v);
}
private void generatePrimaryConstructorImpl(
@@ -1126,7 +1156,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
int curParam = 0;
List<ValueParameterDescriptor> parameters = constructorDescriptor.getValueParameters();
for (JetParameter parameter : getPrimaryConstructorParameters()) {
if (parameter.hasValOrVarNode()) {
if (parameter.hasValOrVar()) {
VariableDescriptor descriptor = parameters.get(curParam);
Type type = typeMapper.mapType(descriptor);
iv.load(0, classAsmType);
@@ -1263,7 +1293,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
result.addField((JetDelegatorByExpressionSpecifier) specifier, propertyDescriptor);
}
else {
JetType expressionType = bindingContext.get(BindingContext.EXPRESSION_TYPE, expression);
JetType expressionType = expression != null ? bindingContext.getType(expression) : null;
Type asmType =
expressionType != null ? typeMapper.mapType(expressionType) : typeMapper.mapType(getSuperClass(specifier));
result.addField((JetDelegatorByExpressionSpecifier) specifier, asmType, "$delegate_" + n);
@@ -1307,12 +1337,15 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
public void visitSimpleNameExpression(@NotNull JetSimpleNameExpression expr) {
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, expr);
DeclarationDescriptor toLookup;
if (isLocalFunction(descriptor)) {
toLookup = descriptor;
lookupInContext(descriptor);
}
else if (descriptor instanceof CallableMemberDescriptor) {
toLookup = descriptor.getContainingDeclaration();
ResolvedCall<? extends CallableDescriptor> call = getResolvedCall(expr, bindingContext);
if (call != null) {
lookupReceiver(call.getDispatchReceiver());
lookupReceiver(call.getExtensionReceiver());
}
}
else if (descriptor instanceof VariableDescriptor) {
if (descriptor.getContainingDeclaration() instanceof ConstructorDescriptor) {
@@ -1320,10 +1353,26 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
(ClassDescriptor) descriptor.getContainingDeclaration().getContainingDeclaration();
if (classDescriptor == ImplementationBodyCodegen.this.descriptor) return;
}
toLookup = descriptor;
lookupInContext(descriptor);
}
else return;
}
private void lookupReceiver(@NotNull ReceiverValue value) {
if (value instanceof ThisReceiver) {
if (value instanceof ExtensionReceiver) {
ReceiverParameterDescriptor parameter =
((ExtensionReceiver) value).getDeclarationDescriptor().getExtensionReceiverParameter();
assert parameter != null : "Extension receiver should exist: " + ((ExtensionReceiver) value).getDeclarationDescriptor();
lookupInContext(parameter);
}
else {
lookupInContext(((ThisReceiver) value).getDeclarationDescriptor());
}
}
}
private void lookupInContext(@NotNull DeclarationDescriptor toLookup) {
context.lookupInContext(toLookup, StackValue.LOCAL_0, state, true);
}
@@ -1333,13 +1382,13 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
assert descriptor instanceof CallableDescriptor ||
descriptor instanceof ClassDescriptor : "'This' reference target should be class or callable descriptor but was " + descriptor;
if (descriptor instanceof ClassDescriptor) {
context.lookupInContext(descriptor, StackValue.LOCAL_0, state, true);
lookupInContext(descriptor);
}
if (descriptor instanceof CallableDescriptor) {
ReceiverParameterDescriptor parameter = ((CallableDescriptor) descriptor).getExtensionReceiverParameter();
if (parameter != null) {
context.lookupInContext(parameter, StackValue.LOCAL_0, state, true);
lookupInContext(parameter);
}
}
}
@@ -1388,21 +1437,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
private boolean ignoreIfTraitOrAnnotation() {
if (myClass instanceof JetClass) {
JetClass aClass = (JetClass) myClass;
if (aClass.isTrait()) {
return true;
}
if (aClass.isAnnotation()) {
return true;
}
}
return false;
}
private void generateTraitMethods() {
if (JetPsiUtil.isTrait(myClass)) return;
if (isTrait(descriptor)) return;
for (Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) {
FunctionDescriptor traitFun = entry.getKey();
@@ -1413,7 +1449,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull FunctionDescriptor inheritedFun) {
private void generateDelegationToTraitImpl(@NotNull final FunctionDescriptor traitFun, @NotNull final FunctionDescriptor inheritedFun) {
functionCodegen.generateMethod(
DelegationToTraitImpl(descriptorToDeclaration(traitFun), traitFun),
inheritedFun,
@@ -1422,6 +1458,13 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
public void doGenerateBody(@NotNull ExpressionCodegen codegen, @NotNull JvmMethodSignature signature) {
DeclarationDescriptor containingDeclaration = traitFun.getContainingDeclaration();
if (!DescriptorUtils.isTrait(containingDeclaration)) return;
DeclarationDescriptor declarationInheritedFun = inheritedFun.getContainingDeclaration();
PsiElement classForInheritedFun = descriptorToDeclaration(declarationInheritedFun);
if (classForInheritedFun instanceof JetDeclaration) {
codegen.markLineNumber((JetElement) classForInheritedFun, false);
}
ClassDescriptor containingTrait = (ClassDescriptor) containingDeclaration;
Type traitImplType = typeMapper.mapTraitImpl(containingTrait);
@@ -1440,7 +1483,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
reg += argTypes[i].getSize();
}
if (KotlinBuiltIns.getInstance().isCloneable(containingTrait) && traitMethod.getName().equals("clone")) {
if (KotlinBuiltIns.isCloneable(containingTrait) && traitMethod.getName().equals("clone")) {
// A special hack for Cloneable: there's no kotlin/Cloneable$$TImpl class at runtime,
// and its 'clone' method is actually located in java/lang/Object
iv.invokespecial("java/lang/Object", "clone", "()Ljava/lang/Object;", false);
@@ -1468,7 +1511,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
return;
}
iv.load(0, OBJECT_TYPE);
ConstructorDescriptor delegateConstructor = SamCodegenUtil.resolveSamAdapter(delegationConstructorCall.getResultingDescriptor());
ConstructorDescriptor delegateConstructor = SamCodegenUtil.resolveSamAdapter(codegen.getConstructorDescriptor(delegationConstructorCall));
CallableMethod delegateConstructorCallable = typeMapper.mapToCallableMethod(delegateConstructor);
CallableMethod callable = typeMapper.mapToCallableMethod(constructorDescriptor);
@@ -1626,75 +1669,64 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
}
@Override
protected void generateDeclaration(JetDeclaration declaration) {
if (declaration instanceof JetEnumEntry) {
String name = declaration.getName();
assert name != null : "Enum entry has no name: " + declaration.getText();
ClassDescriptor entryDescriptor = bindingContext.get(BindingContext.CLASS, declaration);
FieldVisitor fv = v.newField(OtherOrigin(declaration, entryDescriptor), ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL,
name, classAsmType.getDescriptor(), null, null);
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(entryDescriptor, null);
myEnumConstants.add((JetEnumEntry) declaration);
private void generateEnumEntries() {
if (descriptor.getKind() != ClassKind.ENUM_CLASS) return;
List<JetEnumEntry> enumEntries = KotlinPackage.filterIsInstance(element.getDeclarations(), JetEnumEntry.class);
for (JetEnumEntry enumEntry : enumEntries) {
ClassDescriptor descriptor = getNotNull(bindingContext, BindingContext.CLASS, enumEntry);
FieldVisitor fv = v.newField(OtherOrigin(enumEntry, descriptor), ACC_PUBLIC | ACC_ENUM | ACC_STATIC | ACC_FINAL,
descriptor.getName().asString(), classAsmType.getDescriptor(), null, null);
AnnotationCodegen.forField(fv, typeMapper).genAnnotations(descriptor, null);
}
super.generateDeclaration(declaration);
initializeEnumConstants(enumEntries);
}
private final List<JetEnumEntry> myEnumConstants = new ArrayList<JetEnumEntry>();
private void initializeEnumConstants() {
private void initializeEnumConstants(@NotNull List<JetEnumEntry> enumEntries) {
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) return;
ExpressionCodegen codegen = createOrGetClInitCodegen();
InstructionAdapter iv = codegen.v;
Type arrayAsmType = typeMapper.mapType(KotlinBuiltIns.getInstance().getArrayType(INVARIANT, descriptor.getDefaultType()));
Type arrayAsmType = typeMapper.mapType(getBuiltIns(descriptor).getArrayType(INVARIANT, descriptor.getDefaultType()));
v.newField(OtherOrigin(myClass), ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, ENUM_VALUES_FIELD_NAME,
arrayAsmType.getDescriptor(), null, null);
iv.iconst(myEnumConstants.size());
iv.iconst(enumEntries.size());
iv.newarray(classAsmType);
if (!myEnumConstants.isEmpty()) {
if (!enumEntries.isEmpty()) {
iv.dup();
for (int ordinal = 0, size = myEnumConstants.size(); ordinal < size; ordinal++) {
initializeEnumConstant(codegen, ordinal);
for (int ordinal = 0, size = enumEntries.size(); ordinal < size; ordinal++) {
initializeEnumConstant(enumEntries, ordinal);
}
}
iv.putstatic(classAsmType.getInternalName(), ENUM_VALUES_FIELD_NAME, arrayAsmType.getDescriptor());
}
private void initializeEnumConstant(@NotNull ExpressionCodegen codegen, int ordinal) {
private void initializeEnumConstant(@NotNull List<JetEnumEntry> enumEntries, int ordinal) {
ExpressionCodegen codegen = createOrGetClInitCodegen();
InstructionAdapter iv = codegen.v;
JetEnumEntry enumConstant = myEnumConstants.get(ordinal);
JetEnumEntry enumEntry = enumEntries.get(ordinal);
iv.dup();
iv.iconst(ordinal);
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, enumConstant);
assert classDescriptor != null;
ClassDescriptor classDescriptor = getNotNull(bindingContext, BindingContext.CLASS, enumEntry);
Type implClass = typeMapper.mapClass(classDescriptor);
List<JetDelegationSpecifier> delegationSpecifiers = enumConstant.getDelegationSpecifiers();
if (delegationSpecifiers.size() > 1) {
throw new UnsupportedOperationException("multiple delegation specifiers for enum constant not supported");
}
iv.anew(implClass);
iv.dup();
iv.aconst(enumConstant.getName());
iv.aconst(enumEntry.getName());
iv.iconst(ordinal);
if (delegationSpecifiers.size() == 1 && !enumEntryNeedSubclass(bindingContext, enumConstant)) {
JetDelegationSpecifier specifier = delegationSpecifiers.get(0);
if (!(specifier instanceof JetDelegatorToSuperCall)) {
throw new UnsupportedOperationException("unsupported type of enum constant initializer: " + specifier);
}
ResolvedCall<?> resolvedCall = CallUtilPackage.getResolvedCallWithAssert(specifier, bindingContext);
List<JetDelegationSpecifier> delegationSpecifiers = enumEntry.getDelegationSpecifiers();
if (delegationSpecifiers.size() == 1 && !enumEntryNeedSubclass(bindingContext, enumEntry)) {
ResolvedCall<?> resolvedCall = CallUtilPackage.getResolvedCallWithAssert(delegationSpecifiers.get(0), bindingContext);
CallableMethod method = typeMapper.mapToCallableMethod((ConstructorDescriptor) resolvedCall.getResultingDescriptor());
@@ -1705,7 +1737,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
iv.dup();
iv.putstatic(classAsmType.getInternalName(), enumConstant.getName(), classAsmType.getDescriptor());
iv.putstatic(classAsmType.getInternalName(), enumEntry.getName(), classAsmType.getDescriptor());
iv.astore(OBJECT_TYPE);
}
@@ -1715,7 +1747,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
DelegationFieldsInfo.Field field = delegationFieldsInfo.getInfo((JetDelegatorByExpressionSpecifier) specifier);
generateDelegateField(field);
JetExpression delegateExpression = ((JetDelegatorByExpressionSpecifier) specifier).getDelegateExpression();
JetType delegateExpressionType = bindingContext.get(BindingContext.EXPRESSION_TYPE, delegateExpression);
JetType delegateExpressionType = delegateExpression != null ? bindingContext.getType(delegateExpression) : null;
generateDelegates(getSuperClass(specifier), delegateExpressionType, field);
}
}

View File

@@ -0,0 +1,52 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
public class InlineCycleReporter(val diagnostics: DiagnosticSink) {
val processingFunctions = linkedMapOf<PsiElement, CallableDescriptor>()
public fun enterIntoInlining(call: ResolvedCall<*>?): Boolean {
//null call for default method inlining
if (call != null) {
val callElement = call.getCall().getCallElement()
if (processingFunctions.contains(callElement)) {
val cycle = processingFunctions.asSequence().dropWhile { it.getKey() != callElement }
cycle.forEach {
diagnostics.report(Errors.INLINE_CALL_CYCLE.on(it.getKey(), it.getValue()))
}
return false
}
processingFunctions.put(callElement, call.getResultingDescriptor().getOriginal())
}
return true
}
public fun exitFromInliningOf(call: ResolvedCall<*>?) {
if (call != null) {
val callElement = call.getCall().getCallElement()
processingFunctions.remove(callElement)
}
}
}

View File

@@ -20,8 +20,8 @@ import com.intellij.openapi.vfs.StandardFileSystems;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import kotlin.Function1;
import kotlin.KotlinPackage;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.binding.CalculatedClosure;
@@ -35,14 +35,12 @@ import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass;
import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClass;
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider;
import org.jetbrains.kotlin.psi.JetFile;
import org.jetbrains.kotlin.psi.JetFunctionLiteral;
import org.jetbrains.kotlin.psi.JetFunctionLiteralExpression;
import org.jetbrains.kotlin.psi.JetFunction;
import org.jetbrains.kotlin.psi.codeFragmentUtil.CodeFragmentUtilPackage;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.InlineDescriptorUtils;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.inline.InlineUtil;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor;
import org.jetbrains.kotlin.types.JetType;
@@ -59,7 +57,7 @@ public class JvmCodegenUtil {
public static boolean isInterface(DeclarationDescriptor descriptor) {
if (descriptor instanceof ClassDescriptor) {
ClassKind kind = ((ClassDescriptor) descriptor).getKind();
return kind == ClassKind.TRAIT || kind == ClassKind.ANNOTATION_CLASS;
return kind == ClassKind.INTERFACE || kind == ClassKind.ANNOTATION_CLASS;
}
return false;
}
@@ -172,7 +170,10 @@ public class JvmCodegenUtil {
if (JetTypeMapper.isAccessor(property)) return false;
// Inline functions can't use direct access because a field may not be visible at the call site
if (context.isInlineFunction() && !Visibilities.isPrivate(property.getVisibility())) return false;
if (context.isInlineFunction() &&
(!Visibilities.isPrivate(property.getVisibility()) || DescriptorUtils.isTopLevelDeclaration(property))) {
return false;
}
// Only properties of the same class can be directly accessed, except when we are evaluating expressions in the debugger
if (!isCallInsideSameClassAsDeclared(property, context) && !isDebuggerContext(context)) return false;
@@ -231,18 +232,9 @@ public class JvmCodegenUtil {
: descriptor;
}
public static boolean isLambdaWhichWillBeInlined(@NotNull BindingContext bindingContext, @NotNull DeclarationDescriptor descriptor) {
public static boolean isArgumentWhichWillBeInlined(@NotNull BindingContext bindingContext, @NotNull DeclarationDescriptor descriptor) {
PsiElement declaration = DescriptorToSourceUtils.descriptorToDeclaration(descriptor);
return declaration instanceof JetFunctionLiteral &&
declaration.getParent() instanceof JetFunctionLiteralExpression &&
InlineDescriptorUtils.isInlineLambda((JetFunctionLiteralExpression) declaration.getParent(), bindingContext, false);
}
@Nullable
public static ResolvedCall<ConstructorDescriptor> getDelegationConstructorCall(
@NotNull BindingContext bindingContext,
@NotNull ConstructorDescriptor constructorDescriptor
) {
return bindingContext.get(BindingContext.CONSTRUCTOR_RESOLVED_DELEGATION_CALL, constructorDescriptor);
return InlineUtil.canBeInlineArgument(declaration) &&
InlineUtil.isInlinedArgument((JetFunction) declaration, bindingContext, false);
}
}

View File

@@ -17,68 +17,49 @@
package org.jetbrains.kotlin.codegen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
import org.jetbrains.kotlin.descriptors.impl.MutableClassDescriptor;
import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor;
import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.*;
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM;
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils;
import org.jetbrains.kotlin.types.reflect.ReflectionTypes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Collections;
import static org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM.createJavaModule;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
public class JvmRuntimeTypes {
private final ReflectionTypes reflectionTypes;
private final ClassDescriptor lambda;
private final ClassDescriptor functionReference;
private final ClassDescriptor functionImpl;
private final ClassDescriptor memberFunctionImpl;
private final ClassDescriptor extensionFunctionImpl;
public JvmRuntimeTypes(@NotNull ReflectionTypes reflectionTypes) {
this.reflectionTypes = reflectionTypes;
PackageFragmentDescriptor kotlinJvmInternal = new MutablePackageFragmentDescriptor(
createJavaModule("<jvm functions impl>"),
new FqName("kotlin.jvm.internal")
public JvmRuntimeTypes() {
ModuleDescriptorImpl module = new ModuleDescriptorImpl(
Name.special("<jvm functions impl>"),
LockBasedStorageManager.NO_LOCKS,
TopDownAnalyzerFacadeForJVM.JVM_MODULE_PARAMETERS
);
PackageFragmentDescriptor kotlinJvmInternal = new MutablePackageFragmentDescriptor(module, new FqName("kotlin.jvm.internal"));
this.functionImpl = createClass(kotlinJvmInternal, "FunctionImpl", "out R");
this.memberFunctionImpl = createClass(kotlinJvmInternal, "MemberFunctionImpl", "in T", "out R");
this.extensionFunctionImpl = createClass(kotlinJvmInternal, "ExtensionFunctionImpl", "in T", "out R");
this.lambda = createClass(kotlinJvmInternal, "Lambda");
this.functionReference = createClass(kotlinJvmInternal, "FunctionReference");
}
@NotNull
private static ClassDescriptor createClass(
@NotNull PackageFragmentDescriptor packageFragment,
@NotNull String name,
@NotNull String... typeParameters
) {
MutableClassDescriptor descriptor = new MutableClassDescriptor(packageFragment, packageFragment.getMemberScope(), ClassKind.CLASS,
false, Name.identifier(name), SourceElement.NO_SOURCE);
List<TypeParameterDescriptor> typeParameterDescriptors = new ArrayList<TypeParameterDescriptor>(typeParameters.length);
for (int i = 0; i < typeParameters.length; i++) {
String[] s = typeParameters[i].split(" ");
Variance variance = Variance.valueOf(s[0].toUpperCase() + "_VARIANCE");
String typeParameterName = s[1];
TypeParameterDescriptorImpl typeParameter = TypeParameterDescriptorImpl.createForFurtherModification(
descriptor, Annotations.EMPTY, false, variance, Name.identifier(typeParameterName), i, SourceElement.NO_SOURCE
);
typeParameter.setInitialized();
typeParameterDescriptors.add(typeParameter);
}
private static ClassDescriptor createClass(@NotNull PackageFragmentDescriptor packageFragment, @NotNull String name) {
MutableClassDescriptor descriptor = new MutableClassDescriptor(
packageFragment, packageFragment.getMemberScope(), ClassKind.CLASS, false, Name.identifier(name), SourceElement.NO_SOURCE
);
descriptor.setModality(Modality.FINAL);
descriptor.setVisibility(Visibilities.PUBLIC);
descriptor.setTypeParameterDescriptors(typeParameterDescriptors);
descriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
descriptor.createTypeConstructor();
return descriptor;
@@ -88,36 +69,15 @@ public class JvmRuntimeTypes {
public Collection<JetType> getSupertypesForClosure(@NotNull FunctionDescriptor descriptor) {
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
List<TypeProjection> typeArguments = new ArrayList<TypeProjection>(2);
ClassDescriptor classDescriptor;
if (receiverParameter != null) {
classDescriptor = extensionFunctionImpl;
typeArguments.add(new TypeProjectionImpl(receiverParameter.getType()));
}
else {
classDescriptor = functionImpl;
}
//noinspection ConstantConditions
typeArguments.add(new TypeProjectionImpl(descriptor.getReturnType()));
JetType functionImplType = new JetTypeImpl(
classDescriptor.getDefaultType().getAnnotations(),
classDescriptor.getTypeConstructor(),
false,
typeArguments,
classDescriptor.getMemberScope(typeArguments)
);
JetType functionType = KotlinBuiltIns.getInstance().getFunctionType(
JetType functionType = getBuiltIns(descriptor).getFunctionType(
Annotations.EMPTY,
receiverParameter == null ? null : receiverParameter.getType(),
ExpressionTypingUtils.getValueParametersTypes(descriptor.getValueParameters()),
descriptor.getReturnType()
);
return Arrays.asList(functionImplType, functionType);
return Arrays.asList(lambda.getDefaultType(), functionType);
}
@NotNull
@@ -125,44 +85,17 @@ public class JvmRuntimeTypes {
ReceiverParameterDescriptor extensionReceiver = descriptor.getExtensionReceiverParameter();
ReceiverParameterDescriptor dispatchReceiver = descriptor.getDispatchReceiverParameter();
List<TypeProjection> typeArguments = new ArrayList<TypeProjection>(2);
ClassDescriptor classDescriptor;
JetType receiverType;
if (extensionReceiver != null) {
classDescriptor = extensionFunctionImpl;
receiverType = extensionReceiver.getType();
typeArguments.add(new TypeProjectionImpl(receiverType));
}
else if (dispatchReceiver != null) {
classDescriptor = memberFunctionImpl;
receiverType = dispatchReceiver.getType();
typeArguments.add(new TypeProjectionImpl(receiverType));
}
else {
classDescriptor = functionImpl;
receiverType = null;
}
JetType receiverType =
extensionReceiver != null ? extensionReceiver.getType() : dispatchReceiver != null ? dispatchReceiver.getType() : null;
//noinspection ConstantConditions
typeArguments.add(new TypeProjectionImpl(descriptor.getReturnType()));
JetType functionImplType = new JetTypeImpl(
classDescriptor.getDefaultType().getAnnotations(),
classDescriptor.getTypeConstructor(),
false,
typeArguments,
classDescriptor.getMemberScope(typeArguments)
);
JetType kFunctionType = reflectionTypes.getKFunctionType(
JetType functionType = getBuiltIns(descriptor).getFunctionType(
Annotations.EMPTY,
receiverType,
ExpressionTypingUtils.getValueParametersTypes(descriptor.getValueParameters()),
descriptor.getReturnType(),
extensionReceiver != null
descriptor.getReturnType()
);
return Arrays.asList(functionImplType, kFunctionType);
return Arrays.asList(functionReference.getDefaultType(), functionType);
}
}

View File

@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.codegen;
import com.intellij.openapi.util.Pair;
import kotlin.jvm.functions.Function3;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
@@ -28,7 +29,6 @@ import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.Collection;
import java.util.Map;
public final class JvmSerializationBindings {
public static final SerializationMappingSlice<FunctionDescriptor, Method> METHOD_FOR_FUNCTION =
@@ -82,13 +82,18 @@ public final class JvmSerializationBindings {
@NotNull
public static JvmSerializationBindings union(@NotNull Collection<JvmSerializationBindings> bindings) {
MutableSlicedMap result = SlicedMapImpl.create();
final MutableSlicedMap result = SlicedMapImpl.create();
for (JvmSerializationBindings binding : bindings) {
for (Map.Entry<SlicedMapKey<?, ?>, ?> entry : binding.map) {
SlicedMapKey<?, ?> key = entry.getKey();
result.put((WritableSlice) key.getSlice(), key.getKey(), entry.getValue());
}
binding.map.forEach(new Function3<WritableSlice, Object, Object, Void>() {
@Override
public Void invoke(WritableSlice slice, Object key, Object value) {
result.put(slice, key, value);
return null;
}
});
}
return new JvmSerializationBindings(result);
}

View File

@@ -21,9 +21,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.kotlin.load.kotlin.SignatureDeserializer;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.serialization.AnnotationSerializer;
import org.jetbrains.kotlin.serialization.ProtoBuf;
import org.jetbrains.kotlin.serialization.SerializerExtension;
import org.jetbrains.kotlin.serialization.StringTable;
@@ -31,6 +33,7 @@ import org.jetbrains.kotlin.serialization.deserialization.NameResolver;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor;
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor;
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf;
import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.Method;
@@ -70,6 +73,14 @@ public class JvmSerializerExtension extends SerializerExtension {
}
}
@Override
public void serializeType(@NotNull JetType type, @NotNull ProtoBuf.Type.Builder proto, @NotNull StringTable stringTable) {
// TODO: don't store type annotations in our binary metadata on Java 8, use *TypeAnnotations attributes instead
for (AnnotationDescriptor annotation : type.getAnnotations()) {
proto.addExtension(JvmProtoBuf.typeAnnotation, AnnotationSerializer.INSTANCE$.serializeAnnotation(annotation, stringTable));
}
}
@Override
@NotNull
public String getLocalClassName(@NotNull ClassDescriptor descriptor) {
@@ -257,15 +268,11 @@ public class JvmSerializerExtension extends SerializerExtension {
public JvmProtoBuf.JvmType type(@NotNull Type givenType) {
JvmProtoBuf.JvmType.Builder builder = JvmProtoBuf.JvmType.newBuilder();
int arrayDimension = 0;
Type type = givenType;
while (type.getSort() == Type.ARRAY) {
arrayDimension++;
if (type.getSort() == Type.ARRAY) {
builder.setArrayDimension(type.getDimensions());
type = type.getElementType();
}
if (arrayDimension != 0) {
builder.setArrayDimension(arrayDimension);
}
if (type.getSort() == Type.OBJECT) {
FqName fqName = internalNameToFqName(type.getInternalName());

View File

@@ -20,6 +20,7 @@ import com.google.common.collect.Sets;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.psi.JetFile;
import org.jetbrains.kotlin.psi.JetScript;
@@ -54,8 +55,12 @@ public class KotlinCodegenFacade {
@NotNull GenerationState state,
@NotNull CompilationErrorHandler errorHandler
) {
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
prepareForCompilation(state);
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
MultiMap<FqName, JetFile> packageFqNameToFiles = new MultiMap<FqName, JetFile>();
for (JetFile file : state.getFiles()) {
if (file == null) throw new IllegalArgumentException("A null file given for compilation");
@@ -64,9 +69,11 @@ public class KotlinCodegenFacade {
Set<FqName> packagesWithObsoleteParts = new HashSet<FqName>(state.getPackagesWithObsoleteParts());
for (FqName fqName : Sets.union(packagesWithObsoleteParts, packageFqNameToFiles.keySet())) {
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
generatePackage(state, fqName, packageFqNameToFiles.get(fqName), errorHandler);
}
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
state.getFactory().done();
}

View File

@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.codegen;
import com.intellij.openapi.progress.ProcessCanceledException;
import kotlin.Function0;
import kotlin.jvm.functions.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.context.*;
@@ -200,7 +200,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
ClassContext classContext = parentContext.intoClass(descriptor, OwnerKind.IMPLEMENTATION, state);
new ImplementationBodyCodegen(aClass, classContext, classBuilder, state, parentCodegen).generate();
if (aClass instanceof JetClass && ((JetClass) aClass).isTrait()) {
if (aClass instanceof JetClass && ((JetClass) aClass).isInterface()) {
Type traitImplType = state.getTypeMapper().mapTraitImpl(descriptor);
ClassBuilder traitImplBuilder = state.getFactory().newVisitor(TraitImpl(aClass, descriptor), traitImplType, aClass.getContainingFile());
ClassContext traitImplContext = parentContext.intoClass(descriptor, OwnerKind.TRAIT_IMPL, state);
@@ -242,8 +242,13 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
private void writeInnerClass(@NotNull ClassDescriptor innerClass) {
DeclarationDescriptor containing = innerClass.getContainingDeclaration();
String outerClassInternalName =
containing instanceof ClassDescriptor ? typeMapper.mapClass((ClassDescriptor) containing).getInternalName() : null;
String outerClassInternalName = null;
if (containing instanceof ClassDescriptor) {
outerClassInternalName = typeMapper.mapClass((ClassDescriptor) containing).getInternalName();
} /* disabled cause of KT-7775
else if (containing instanceof ScriptDescriptor) {
outerClassInternalName = asmTypeForScriptDescriptor(bindingContext, (ScriptDescriptor) containing).getInternalName();
}*/
String innerName = innerClass.getName().isSpecial() ? null : innerClass.getName().asString();
@@ -280,7 +285,10 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
}
else if (outermost instanceof PackageContext && !(outermost instanceof PackageFacadeContext)) {
return PackagePartClassUtils.getPackagePartType(element.getContainingJetFile());
}
}/*disabled cause of KT-7775
else if (outermost instanceof ScriptContext) {
return asmTypeForScriptDescriptor(bindingContext, ((ScriptContext) outermost).getScriptDescriptor());
}*/
return null;
}
@@ -395,7 +403,7 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
private JetType getPropertyOrDelegateType(@NotNull JetProperty property, @NotNull PropertyDescriptor descriptor) {
JetExpression delegateExpression = property.getDelegateExpression();
if (delegateExpression != null) {
JetType delegateType = bindingContext.get(BindingContext.EXPRESSION_TYPE, delegateExpression);
JetType delegateType = bindingContext.getType(delegateExpression);
assert delegateType != null : "Type of delegate expression should be recorded";
return delegateType;
}

View File

@@ -24,7 +24,8 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import kotlin.Function0;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.Mutable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -34,6 +35,7 @@ import org.jetbrains.kotlin.codegen.context.MethodContext;
import org.jetbrains.kotlin.codegen.context.PackageContext;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.config.IncrementalCompilation;
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
@@ -135,7 +137,7 @@ public class PackageCodegen {
}
// TODO rewrite it to something more robust when module system is implemented
for (PackageFragmentDescriptor fragment : state.getModule().getPackageFragmentProvider().getPackageFragments(fqName)) {
for (PackageFragmentDescriptor fragment : state.getModule().getPackage(fqName).getFragments()) {
if (fragment instanceof IncrementalPackageFragmentProvider.IncrementalPackageFragment &&
((IncrementalPackageFragmentProvider.IncrementalPackageFragment) fragment).getModuleId().equals(state.getModuleId())) {
return fragment;
@@ -190,6 +192,8 @@ public class PackageCodegen {
memberCodegen.functionCodegen.generateDefaultIfNeeded(
context.intoFunction(function), function, OwnerKind.PACKAGE, DefaultParameterValueLoader.DEFAULT, null
);
memberCodegen.functionCodegen.generateOverloadsWithDefaultValues(null, function, function);
}
else if (member instanceof DeserializedPropertyDescriptor) {
memberCodegen.propertyCodegen.generateInPackageFacade((DeserializedPropertyDescriptor) member);
@@ -208,6 +212,7 @@ public class PackageCodegen {
Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks = new HashMap<CallableMemberDescriptor, Runnable>();
for (JetFile file : files) {
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
try {
ClassBuilder builder = generate(file, generateCallableMemberTasks);
if (builder != null) {
@@ -246,7 +251,7 @@ public class PackageCodegen {
}
bindings.add(v.getSerializationBindings());
writeKotlinPackageAnnotationIfNeeded(JvmSerializationBindings.union(bindings));
writeKotlinPackageAnnotationIfNeeded(JvmSerializationBindings.union(bindings), tasks.keySet());
}
private void generateKotlinPackageReflectionField() {
@@ -258,7 +263,10 @@ public class PackageCodegen {
FunctionCodegen.endVisit(mv, "package facade static initializer", null);
}
private void writeKotlinPackageAnnotationIfNeeded(@NotNull JvmSerializationBindings bindings) {
private void writeKotlinPackageAnnotationIfNeeded(
@NotNull JvmSerializationBindings bindings,
@NotNull final Collection<CallableMemberDescriptor> relevantCallables
) {
if (state.getClassBuilderMode() != ClassBuilderMode.FULL) {
return;
}
@@ -272,7 +280,12 @@ public class PackageCodegen {
Collection<PackageFragmentDescriptor> packageFragments = Lists.newArrayList();
ContainerUtil.addIfNotNull(packageFragments, packageFragment);
ContainerUtil.addIfNotNull(packageFragments, compiledPackageFragment);
ProtoBuf.Package packageProto = serializer.packageProto(packageFragments).build();
ProtoBuf.Package packageProto = serializer.packageProto(packageFragments, new Function1<DeclarationDescriptor, Boolean>() {
@Override
public Boolean invoke(DeclarationDescriptor descriptor) {
return !(descriptor instanceof CallableMemberDescriptor && relevantCallables.contains(descriptor));
}
}).build();
if (packageProto.getMemberCount() == 0) return;

View File

@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.codegen;
import com.intellij.util.ArrayUtil;
import kotlin.Function0;
import kotlin.jvm.functions.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext;
import org.jetbrains.kotlin.codegen.state.GenerationState;

View File

@@ -16,19 +16,20 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.backend.common.CodegenUtil
import org.jetbrains.kotlin.codegen.context.MethodContext
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.psi.JetNamedFunction
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.kotlin.resolve.jvm.diagnostics.Synthetic
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.org.objectweb.asm.MethodVisitor
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.codegen.context.MethodContext
import org.jetbrains.kotlin.psi.JetElement
import org.jetbrains.kotlin.backend.common.CodegenUtil
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.org.objectweb.asm.MethodVisitor
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import kotlin.platform.platformStatic
class PlatformStaticGenerator(
@@ -40,8 +41,9 @@ class PlatformStaticGenerator(
override fun invoke(codegen: ImplementationBodyCodegen, classBuilder: ClassBuilder) {
val staticFunctionDescriptor = createStaticFunctionDescriptor(descriptor)
val originElement = declarationOrigin.element
codegen.functionCodegen.generateMethod(
Synthetic(declarationOrigin.element, staticFunctionDescriptor),
Synthetic(originElement, staticFunctionDescriptor),
staticFunctionDescriptor,
object : FunctionGenerationStrategy() {
override fun generateBody(
@@ -69,15 +71,20 @@ class PlatformStaticGenerator(
false,
codegen.getContext()
)
syntheticOrOriginalMethod.invokeWithoutAssertions(iv)
syntheticOrOriginalMethod.genInvokeInstruction(iv)
iv.areturn(asmMethod.getReturnType());
}
}
)
if (originElement is JetNamedFunction) {
codegen.functionCodegen.generateOverloadsWithDefaultValues(originElement, staticFunctionDescriptor, descriptor)
}
}
companion object {
[platformStatic]
@platformStatic
public fun createStaticFunctionDescriptor(descriptor: FunctionDescriptor): FunctionDescriptor {
val memberDescriptor = if (descriptor is PropertyAccessorDescriptor) descriptor.getCorrespondingProperty() else descriptor
val copies = CodegenUtil.copyFunctions(

View File

@@ -28,8 +28,11 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorFactory;
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
import org.jetbrains.kotlin.resolve.annotations.AnnotationsPackage;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature;
@@ -166,10 +169,15 @@ public class PropertyCodegen {
}
public void generateConstructorPropertyAsMethodForAnnotationClass(JetParameter p, PropertyDescriptor descriptor) {
Type type = typeMapper.mapType(descriptor);
JvmMethodSignature signature = typeMapper.mapAnnotationParameterSignature(descriptor);
String name = p.getName();
assert name != null : "Annotation parameter has no name: " + p.getText();
MethodVisitor mv = v.newMethod(OtherOrigin(p, descriptor), ACC_PUBLIC | ACC_ABSTRACT, name, "()" + type.getDescriptor(), null, null);
if (name == null) return;
MethodVisitor mv = v.newMethod(
OtherOrigin(p, descriptor), ACC_PUBLIC | ACC_ABSTRACT, name,
signature.getAsmMethod().getDescriptor(),
signature.getGenericsSignature(),
null
);
if (state.getClassBuilderMode() == ClassBuilderMode.FULL) {
JetExpression defaultValue = p.getDefaultValue();
@@ -249,9 +257,19 @@ public class PropertyCodegen {
ClassBuilder builder = v;
boolean hasPublicFieldAnnotation = AnnotationsPackage.findPublicFieldAnnotation(propertyDescriptor) != null;
FieldOwnerContext backingFieldContext = context;
if (AsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor) ) {
modifiers |= ACC_STATIC | getVisibilityForSpecialPropertyBackingField(propertyDescriptor, isDelegate);
modifiers |= ACC_STATIC;
if (hasPublicFieldAnnotation && !isDelegate) {
modifiers |= ACC_PUBLIC;
}
else {
modifiers |= getVisibilityForSpecialPropertyBackingField(propertyDescriptor, isDelegate);
}
if (AsmUtil.isPropertyWithBackingFieldInOuterClass(propertyDescriptor)) {
ImplementationBodyCodegen codegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen();
builder = codegen.v;
@@ -259,6 +277,9 @@ public class PropertyCodegen {
v.getSerializationBindings().put(STATIC_FIELD_IN_OUTER_CLASS, propertyDescriptor);
}
}
else if (!isDelegate && hasPublicFieldAnnotation) {
modifiers |= ACC_PUBLIC;
}
else if (kind != OwnerKind.PACKAGE || isDelegate) {
modifiers |= ACC_PRIVATE;
}
@@ -278,7 +299,8 @@ public class PropertyCodegen {
}
private void generatePropertyDelegateAccess(JetProperty p, PropertyDescriptor propertyDescriptor) {
JetType delegateType = bindingContext.get(BindingContext.EXPRESSION_TYPE, p.getDelegateExpression());
JetExpression delegateExpression = p.getDelegateExpression();
JetType delegateType = delegateExpression != null ? bindingContext.getType(p.getDelegateExpression()) : null;
if (delegateType == null) {
// If delegate expression is unresolved reference
delegateType = ErrorUtils.createErrorType("Delegate type");
@@ -367,7 +389,7 @@ public class PropertyCodegen {
}
}
throw new IllegalStateException("Delegated property not found in its parent: " + JetPsiUtil.getElementTextWithContext(property));
throw new IllegalStateException("Delegated property not found in its parent: " + PsiUtilPackage.getElementTextWithContext(property));
}
@@ -382,6 +404,11 @@ public class PropertyCodegen {
PropertyDescriptor propertyDescriptor = callableDescriptor.getCorrespondingProperty();
StackValue property = codegen.intermediateValueForProperty(propertyDescriptor, true, null, StackValue.LOCAL_0);
PsiElement jetProperty = DescriptorToSourceUtils.descriptorToDeclaration(propertyDescriptor);
if (jetProperty instanceof JetProperty || jetProperty instanceof JetParameter) {
codegen.markLineNumber((JetElement) jetProperty, false);
}
if (callableDescriptor instanceof PropertyGetterDescriptor) {
Type type = signature.getReturnType();
property.put(type, v);

View File

@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.JetFile;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.expressions.OperatorConventions;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
@@ -146,8 +147,8 @@ public class SamWrapperCodegen {
FunctionCodegen codegen = new FunctionCodegen(CodegenContext.STATIC.intoClass(
(ClassDescriptor) erasedInterfaceFunction.getContainingDeclaration(), OwnerKind.IMPLEMENTATION, state), cv, state, parentCodegen);
FunctionDescriptor invokeFunction = functionJetType.getMemberScope()
.getFunctions(Name.identifier("invoke")).iterator().next().getOriginal();
FunctionDescriptor invokeFunction =
functionJetType.getMemberScope().getFunctions(OperatorConventions.INVOKE).iterator().next().getOriginal();
StackValue functionField = StackValue.field(functionType, ownerType, FUNCTION_FIELD_NAME, false, StackValue.none());
codegen.genDelegate(erasedInterfaceFunction, invokeFunction, functionField);

View File

@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.codegen;
import com.intellij.util.ArrayUtil;
import kotlin.Function0;
import kotlin.jvm.functions.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.codegen.context.CodegenContext;
import org.jetbrains.kotlin.codegen.context.MethodContext;

View File

@@ -47,6 +47,10 @@ public abstract class SignatureCollectingClassBuilderFactory(
return delegate.asText((builder as SignatureCollectingClassBuilder)._delegate)
}
public override fun close() {
delegate.close()
}
private inner class SignatureCollectingClassBuilder(
private val classCreatedFor: JvmDeclarationOrigin,
internal val _delegate: ClassBuilder
@@ -74,8 +78,7 @@ public abstract class SignatureCollectingClassBuilderFactory(
}
override fun done() {
var hasDuplicateSignatures = false
for ((signature, elementsAndDescriptors) in signatures.entrySet()!!) {
for ((signature, elementsAndDescriptors) in signatures.entrySet()) {
if (elementsAndDescriptors.size() == 1) continue // no clash
handleClashingSignatures(ConflictingJvmDeclarationsData(
classInternalName,
@@ -83,7 +86,6 @@ public abstract class SignatureCollectingClassBuilderFactory(
signature,
elementsAndDescriptors
))
hasDuplicateSignatures = true
}
onClassDone(classCreatedFor, classInternalName, signatures)
super.done()

View File

@@ -17,32 +17,28 @@
package org.jetbrains.kotlin.codegen;
import com.intellij.psi.tree.IElementType;
import kotlin.Function1;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.PrimitiveType;
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethod;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.lexer.JetTokens;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.psi.JetArrayAccessExpression;
import org.jetbrains.kotlin.psi.JetExpression;
import org.jetbrains.kotlin.resolve.annotations.AnnotationsPackage;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument;
import org.jetbrains.kotlin.resolve.jvm.AsmTypes;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind;
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterSignature;
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.Type;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
@@ -138,17 +134,6 @@ public abstract class StackValue {
throw new UnsupportedOperationException("Cannot store to value " + this);
}
public void condJump(@NotNull Label label, boolean jumpIfFalse, @NotNull InstructionAdapter v) {
put(this.type, v);
coerceTo(Type.BOOLEAN_TYPE, v);
if (jumpIfFalse) {
v.ifeq(label);
}
else {
v.ifne(label);
}
}
@NotNull
public static Local local(int index, @NotNull Type type) {
return new Local(index, type);
@@ -166,17 +151,39 @@ public abstract class StackValue {
@NotNull
public static StackValue constant(@Nullable Object value, @NotNull Type type) {
return new Constant(value, type);
if (type == Type.BOOLEAN_TYPE) {
assert value instanceof Boolean : "Value for boolean constant should have boolean type: " + value;
return BranchedValue.Companion.booleanConstant((Boolean) value);
}
else {
return new Constant(value, type);
}
}
@NotNull
public static StackValue cmp(@NotNull IElementType opToken, @NotNull Type type, StackValue left, StackValue right) {
return type.getSort() == Type.OBJECT ? new ObjectCompare(opToken, type, left, right) : new NumberCompare(opToken, type, left, right);
return BranchedValue.Companion.cmp(opToken, type, left, right);
}
@NotNull
public static StackValue not(@NotNull StackValue stackValue) {
return new Invert(stackValue);
return BranchedValue.Companion.createInvertValue(stackValue);
}
public static StackValue or(@NotNull StackValue left, @NotNull StackValue right) {
return new Or(left, right);
}
public static StackValue and(@NotNull StackValue left, @NotNull StackValue right) {
return new And(left, right);
}
public static StackValue compareIntWithZero(@NotNull StackValue argument, int operation) {
return new BranchedValue(argument, null, Type.INT_TYPE, operation);
}
public static StackValue compareWithNull(@NotNull StackValue argument, int operation) {
return new BranchedValue(argument, null, AsmTypes.OBJECT_TYPE, operation);
}
@NotNull
@@ -190,20 +197,31 @@ public abstract class StackValue {
Type type,
ResolvedCall<FunctionDescriptor> getter,
ResolvedCall<FunctionDescriptor> setter,
ExpressionCodegen codegen,
GenerationState state
ExpressionCodegen codegen
) {
return new CollectionElement(collectionElementReceiver, type, getter, setter, codegen, state);
return new CollectionElement(collectionElementReceiver, type, getter, setter, codegen);
}
@NotNull
public static Field field(@NotNull Type type, @NotNull Type owner, @NotNull String name, boolean isStatic, @NotNull StackValue receiver) {
return new Field(type, owner, name, isStatic, receiver);
return field(type, owner, name, isStatic, receiver, null);
}
@NotNull
public static Field field(
@NotNull Type type,
@NotNull Type owner,
@NotNull String name,
boolean isStatic,
@NotNull StackValue receiver,
@Nullable DeclarationDescriptor descriptor
) {
return new Field(type, owner, name, isStatic, receiver, descriptor);
}
@NotNull
public static Field field(@NotNull StackValue.Field field, @NotNull StackValue newReceiver) {
return new Field(field.type, field.owner, field.name, field.isStaticPut, newReceiver);
return field(field.type, field.owner, field.name, field.isStaticPut, newReceiver, field.descriptor);
}
@NotNull
@@ -339,12 +357,23 @@ public abstract class StackValue {
}
}
else if (toType.getSort() == Type.ARRAY) {
v.checkcast(toType);
if (fromType.getSort() == Type.ARRAY &&
fromType.getElementType().equals(AsmTypes.JAVA_CLASS_TYPE) && toType.equals(K_CLASS_ARRAY_TYPE)) {
wrapJavaClassesIntoKClasses(v);
}
else {
v.checkcast(toType);
}
}
else if (toType.getSort() == Type.OBJECT) {
if (fromType.getSort() == Type.OBJECT || fromType.getSort() == Type.ARRAY) {
if (!toType.equals(OBJECT_TYPE)) {
v.checkcast(toType);
if (fromType.equals(AsmTypes.JAVA_CLASS_TYPE) && toType.equals(AsmTypes.K_CLASS_TYPE)) {
wrapJavaClassIntoKClass(v);
}
else {
v.checkcast(toType);
}
}
}
else {
@@ -379,24 +408,27 @@ public abstract class StackValue {
return UNIT;
}
public void putAsBoolean(InstructionAdapter v) {
Label ifTrue = new Label();
Label end = new Label();
condJump(ifTrue, false, v);
v.iconst(0);
v.goTo(end);
v.mark(ifTrue);
v.iconst(1);
v.mark(end);
}
public static StackValue none() {
return None.INSTANCE;
}
public static FieldForSharedVar fieldForSharedVar(@NotNull Type localType, @NotNull Type classType, @NotNull String fieldName, @NotNull StackValue receiver) {
Field receiverWithRefWrapper = field(sharedTypeForType(localType), classType, fieldName, false, receiver);
return new FieldForSharedVar(localType, classType, fieldName, receiverWithRefWrapper);
public static Field receiverWithRefWrapper(
@NotNull Type localType,
@NotNull Type classType,
@NotNull String fieldName,
@NotNull StackValue receiver,
@Nullable DeclarationDescriptor descriptor
) {
return field(sharedTypeForType(localType), classType, fieldName, false, receiver, descriptor);
}
public static FieldForSharedVar fieldForSharedVar(
@NotNull Type localType,
@NotNull Type classType,
@NotNull String fieldName,
@NotNull Field refWrapper
) {
return new FieldForSharedVar(localType, classType, fieldName, refWrapper);
}
@NotNull
@@ -413,11 +445,16 @@ public abstract class StackValue {
return new CoercionValue(value, castType);
}
public static StackValue thisOrOuter(@NotNull ExpressionCodegen codegen, @NotNull ClassDescriptor descriptor, boolean isSuper, boolean isExplicit) {
// Coerce this/super for traits to support traits with required classes.
@NotNull
public static StackValue thisOrOuter(
@NotNull ExpressionCodegen codegen,
@NotNull ClassDescriptor descriptor,
boolean isSuper,
boolean isExplicit
) {
// Coerce explicit 'this' for the case when it is smart cast.
// Do not coerce for other classes due to the 'protected' access issues (JVMS 7, 4.9.2 Structural Constraints).
boolean coerceType = descriptor.getKind() == ClassKind.TRAIT || (isExplicit && !isSuper);
// Do not coerce for other cases due to the 'protected' access issues (JVMS 7, 4.9.2 Structural Constraints).
boolean coerceType = descriptor.getKind() == ClassKind.INTERFACE || (isExplicit && !isSuper);
return new ThisOuter(codegen, descriptor, isSuper, coerceType);
}
@@ -433,18 +470,20 @@ public abstract class StackValue {
@NotNull Type type,
@NotNull StackValue stackValue,
int delta,
@NotNull Callable method,
ResolvedCall resolvedCall,
@NotNull ExpressionCodegen codegen
) {
return new PrefixIncrement(type, stackValue, delta, method, resolvedCall, codegen);
if (stackValue instanceof StackValue.Local && Type.INT_TYPE == stackValue.type) {
return preIncrementForLocalVar(((StackValue.Local) stackValue).index, delta);
}
return new PrefixIncrement(type, stackValue, resolvedCall, codegen);
}
public static StackValue receiver(
ResolvedCall<?> resolvedCall,
StackValue receiver,
ExpressionCodegen codegen,
@Nullable CallableMethod callableMethod
@Nullable Callable callableMethod
) {
if (resolvedCall.getDispatchReceiver().exists() || resolvedCall.getExtensionReceiver().exists() || isLocalFunCall(callableMethod)) {
boolean hasExtensionReceiver = resolvedCall.getExtensionReceiver().exists();
@@ -463,7 +502,7 @@ public abstract class StackValue {
@NotNull StackValue receiver,
@NotNull ExpressionCodegen codegen,
@NotNull ResolvedCall resolvedCall,
@Nullable CallableMethod callableMethod,
@Nullable Callable callableMethod,
boolean isExtension
) {
ReceiverValue receiverValue = isExtension ? resolvedCall.getExtensionReceiver() : resolvedCall.getDispatchReceiver();
@@ -497,7 +536,7 @@ public abstract class StackValue {
}
@Contract("null -> false")
private static boolean isLocalFunCall(@Nullable CallableMethod callableMethod) {
private static boolean isLocalFunCall(@Nullable Callable callableMethod) {
return callableMethod != null && callableMethod.getGenerateCalleeType() != null;
}
@@ -513,10 +552,6 @@ public abstract class StackValue {
return field(FieldInfo.createForSingleton(classDescriptor, typeMapper));
}
public static Field deprecatedCompanionObjectAccessor(ClassDescriptor classDescriptor, JetTypeMapper typeMapper) {
return field(FieldInfo.deprecatedFieldForCompanionObject(classDescriptor, typeMapper));
}
public static StackValue operation(Type type, Function1<InstructionAdapter, Unit> lambda) {
return new OperationStackValue(type, lambda);
}
@@ -587,10 +622,28 @@ public abstract class StackValue {
int size = this.type.getSize();
if (size == 1) {
v.swap();
} else if (size == 2) {
}
else if (size == 2) {
v.dupX2();
v.pop();
} else {
}
else {
throw new UnsupportedOperationException("don't know how to move type " + type + " to top of stack");
}
coerceTo(type, v);
}
else if (depth == 2) {
int size = this.type.getSize();
if (size == 1) {
v.dup2X1();
v.pop2();
}
else if (size == 2) {
v.dup2X2();
v.pop2();
}
else {
throw new UnsupportedOperationException("don't know how to move type " + type + " to top of stack");
}
@@ -631,129 +684,6 @@ public abstract class StackValue {
coerceTo(type, v);
}
@Override
public void condJump(@NotNull Label label, boolean jumpIfFalse, @NotNull InstructionAdapter v) {
if (value instanceof Boolean) {
boolean boolValue = (Boolean) value;
if (boolValue ^ jumpIfFalse) {
v.goTo(label);
}
}
else {
throw new UnsupportedOperationException("don't know how to generate this condjump");
}
}
}
private static class NumberCompare extends StackValue {
protected final IElementType opToken;
protected final Type operandType;
protected final StackValue left;
protected final StackValue right;
public NumberCompare(IElementType opToken, Type operandType, StackValue left, StackValue right) {
super(Type.BOOLEAN_TYPE);
this.opToken = opToken;
this.operandType = operandType;
this.left = left;
this.right = right;
}
@Override
public void putSelector(@NotNull Type type, @NotNull InstructionAdapter v) {
putAsBoolean(v);
coerceTo(type, v);
}
@Override
public void condJump(@NotNull Label label, boolean jumpIfFalse, @NotNull InstructionAdapter v) {
left.put(this.operandType, v);
right.put(this.operandType, v);
int opcode;
if (opToken == JetTokens.EQEQ || opToken == JetTokens.EQEQEQ) {
opcode = jumpIfFalse ? IFNE : IFEQ;
}
else if (opToken == JetTokens.EXCLEQ || opToken == JetTokens.EXCLEQEQEQ) {
opcode = jumpIfFalse ? IFEQ : IFNE;
}
else if (opToken == JetTokens.GT) {
opcode = jumpIfFalse ? IFLE : IFGT;
}
else if (opToken == JetTokens.GTEQ) {
opcode = jumpIfFalse ? IFLT : IFGE;
}
else if (opToken == JetTokens.LT) {
opcode = jumpIfFalse ? IFGE : IFLT;
}
else if (opToken == JetTokens.LTEQ) {
opcode = jumpIfFalse ? IFGT : IFLE;
}
else {
throw new UnsupportedOperationException("Don't know how to generate this condJump: " + opToken);
}
if (operandType == Type.FLOAT_TYPE || operandType == Type.DOUBLE_TYPE) {
if (opToken == JetTokens.GT || opToken == JetTokens.GTEQ) {
v.cmpl(operandType);
}
else {
v.cmpg(operandType);
}
}
else if (operandType == Type.LONG_TYPE) {
v.lcmp();
}
else {
opcode += (IF_ICMPEQ - IFEQ);
}
v.visitJumpInsn(opcode, label);
}
}
private static class ObjectCompare extends NumberCompare {
public ObjectCompare(IElementType opToken, Type operandType, StackValue left, StackValue right) {
super(opToken, operandType, left, right);
}
@Override
public void condJump(@NotNull Label label, boolean jumpIfFalse, @NotNull InstructionAdapter v) {
left.put(this.operandType, v);
right.put(this.operandType, v);
int opcode;
if (opToken == JetTokens.EQEQEQ) {
opcode = jumpIfFalse ? IF_ACMPNE : IF_ACMPEQ;
}
else if (opToken == JetTokens.EXCLEQEQEQ) {
opcode = jumpIfFalse ? IF_ACMPEQ : IF_ACMPNE;
}
else {
throw new UnsupportedOperationException("don't know how to generate this condjump");
}
v.visitJumpInsn(opcode, label);
}
}
private static class Invert extends StackValue {
private final StackValue myOperand;
private Invert(StackValue operand) {
super(Type.BOOLEAN_TYPE);
myOperand = operand;
if (myOperand.type != Type.BOOLEAN_TYPE) {
throw new UnsupportedOperationException("operand of ! must be boolean");
}
}
@Override
public void putSelector(@NotNull Type type, @NotNull InstructionAdapter v) {
putAsBoolean(v);
coerceTo(type, v);
}
@Override
public void condJump(@NotNull Label label, boolean jumpIfFalse, @NotNull InstructionAdapter v) {
myOperand.condJump(label, !jumpIfFalse, v);
}
}
private static class ArrayElement extends StackValueWithSimpleReceiver {
@@ -788,10 +718,6 @@ public abstract class StackValue {
private final Callable callable;
private final boolean isGetter;
private final ExpressionCodegen codegen;
private final JetExpression array;
private final Type arrayType;
private final JetArrayAccessExpression expression;
private final Type[] argumentTypes;
private final ArgumentGenerator argumentGenerator;
private final List<ResolvedValueArgument> valueArguments;
private final FrameMap frame;
@@ -800,18 +726,14 @@ public abstract class StackValue {
private final ResolvedCall<FunctionDescriptor> resolvedSetCall;
public CollectionElementReceiver(
Callable callable,
StackValue receiver,
@NotNull Callable callable,
@NotNull StackValue receiver,
ResolvedCall<FunctionDescriptor> resolvedGetCall,
ResolvedCall<FunctionDescriptor> resolvedSetCall,
boolean isGetter,
ExpressionCodegen codegen,
@NotNull ExpressionCodegen codegen,
ArgumentGenerator argumentGenerator,
List<ResolvedValueArgument> valueArguments,
JetExpression array,
Type arrayType,
JetArrayAccessExpression expression,
Type[] argumentTypes
List<ResolvedValueArgument> valueArguments
) {
super(OBJECT_TYPE);
this.callable = callable;
@@ -823,33 +745,15 @@ public abstract class StackValue {
this.argumentGenerator = argumentGenerator;
this.valueArguments = valueArguments;
this.codegen = codegen;
this.array = array;
this.arrayType = arrayType;
this.expression = expression;
this.argumentTypes = argumentTypes;
this.frame = codegen.myFrameMap;
}
@Override
public void putSelector(
@NotNull Type type, @NotNull InstructionAdapter v
) {
public void putSelector(@NotNull Type type, @NotNull InstructionAdapter v) {
ResolvedCall<?> call = isGetter ? resolvedGetCall : resolvedSetCall;
if (callable instanceof CallableMethod) {
StackValue newReceiver = StackValue.receiver(call, receiver, codegen, (CallableMethod) callable);
newReceiver.put(newReceiver.type, v);
argumentGenerator.generate(valueArguments);
}
else {
codegen.gen(array, arrayType); // intrinsic method
int index = call.getExtensionReceiver().exists() ? 1 : 0;
for (JetExpression jetExpression : expression.getIndexExpressions()) {
codegen.gen(jetExpression, argumentTypes[index]);
index++;
}
}
StackValue newReceiver = StackValue.receiver(call, receiver, codegen, callable);
newReceiver.put(newReceiver.type, v);
argumentGenerator.generate(valueArguments);
}
@Override
@@ -858,7 +762,8 @@ public abstract class StackValue {
}
public void dupReceiver(@NotNull InstructionAdapter v) {
if (isStandardStack(resolvedGetCall, 1) && isStandardStack(resolvedSetCall, 2)) {
if (CollectionElement.isStandardStack(codegen.typeMapper, resolvedGetCall, 1) &&
CollectionElement.isStandardStack(codegen.typeMapper, resolvedSetCall, 2)) {
v.dup2(); // collection and index
return;
}
@@ -945,65 +850,31 @@ public abstract class StackValue {
mark.dropTo();
}
private boolean isStandardStack(ResolvedCall<?> call, int valueParamsSize) {
if (call == null) {
return true;
}
List<ValueParameterDescriptor> valueParameters = call.getResultingDescriptor().getValueParameters();
if (valueParameters.size() != valueParamsSize) {
return false;
}
for (ValueParameterDescriptor valueParameter : valueParameters) {
if (codegen.typeMapper.mapType(valueParameter.getType()).getSize() != 1) {
return false;
}
}
if (call.getDispatchReceiver().exists()) {
if (call.getExtensionReceiver().exists()) {
return false;
}
}
else {
if (codegen.typeMapper.mapType(call.getResultingDescriptor().getExtensionReceiverParameter().getType())
.getSize() != 1) {
return false;
}
}
return true;
}
}
public static class CollectionElement extends StackValueWithSimpleReceiver {
private final Callable getter;
private final Callable setter;
private final ExpressionCodegen codegen;
private final GenerationState state;
private final ResolvedCall<FunctionDescriptor> resolvedGetCall;
private final ResolvedCall<FunctionDescriptor> resolvedSetCall;
private final FunctionDescriptor setterDescriptor;
private final FunctionDescriptor getterDescriptor;
public CollectionElement(
StackValue collectionElementReceiver,
Type type,
ResolvedCall<FunctionDescriptor> resolvedGetCall,
ResolvedCall<FunctionDescriptor> resolvedSetCall,
ExpressionCodegen codegen,
GenerationState state
@NotNull StackValue collectionElementReceiver,
@NotNull Type type,
@Nullable ResolvedCall<FunctionDescriptor> resolvedGetCall,
@Nullable ResolvedCall<FunctionDescriptor> resolvedSetCall,
@NotNull ExpressionCodegen codegen
) {
super(type, false, false, collectionElementReceiver, true);
this.resolvedGetCall = resolvedGetCall;
this.resolvedSetCall = resolvedSetCall;
this.state = state;
this.setterDescriptor = resolvedSetCall == null ? null : resolvedSetCall.getResultingDescriptor();
this.getterDescriptor = resolvedGetCall == null ? null : resolvedGetCall.getResultingDescriptor();
this.setter = resolvedSetCall == null ? null : codegen.resolveToCallable(setterDescriptor, false);
this.getter = resolvedGetCall == null ? null : codegen.resolveToCallable(getterDescriptor, false);
this.setter = resolvedSetCall == null ? null : codegen.resolveToCallable(setterDescriptor, false, resolvedSetCall);
this.getter = resolvedGetCall == null ? null : codegen.resolveToCallable(getterDescriptor, false, resolvedGetCall);
this.codegen = codegen;
}
@@ -1012,19 +883,14 @@ public abstract class StackValue {
if (getter == null) {
throw new UnsupportedOperationException("no getter specified");
}
if (getter instanceof CallableMethod) {
((CallableMethod) getter).invokeWithNotNullAssertion(v, state, resolvedGetCall);
}
else {
StackValue result = ((IntrinsicMethod) getter).generate(codegen, this.type, null, Collections.<JetExpression>emptyList(), StackValue.none());
result.put(result.type, v);
}
getter.genInvokeInstruction(v);
coerceTo(type, v);
}
@Override
public int receiverSize() {
if (isStandardStack(resolvedGetCall, 1) && isStandardStack(resolvedSetCall, 2)) {
if (isStandardStack(codegen.typeMapper, resolvedGetCall, 1) && isStandardStack(codegen.typeMapper, resolvedSetCall, 2)) {
return 2;
}
else {
@@ -1032,7 +898,7 @@ public abstract class StackValue {
}
}
private boolean isStandardStack(ResolvedCall<?> call, int valueParamsSize) {
public static boolean isStandardStack(@NotNull JetTypeMapper typeMapper, @Nullable ResolvedCall<?> call, int valueParamsSize) {
if (call == null) {
return true;
}
@@ -1043,7 +909,7 @@ public abstract class StackValue {
}
for (ValueParameterDescriptor valueParameter : valueParameters) {
if (codegen.typeMapper.mapType(valueParameter.getType()).getSize() != 1) {
if (typeMapper.mapType(valueParameter.getType()).getSize() != 1) {
return false;
}
}
@@ -1054,8 +920,8 @@ public abstract class StackValue {
}
}
else {
if (codegen.typeMapper.mapType(call.getResultingDescriptor().getExtensionReceiverParameter().getType())
.getSize() != 1) {
//noinspection ConstantConditions
if (typeMapper.mapType(call.getResultingDescriptor().getExtensionReceiverParameter().getType()).getSize() != 1) {
return false;
}
}
@@ -1068,21 +934,13 @@ public abstract class StackValue {
if (setter == null) {
throw new UnsupportedOperationException("no setter specified");
}
if (setter instanceof CallableMethod) {
CallableMethod method = (CallableMethod) setter;
Method asmMethod = method.getAsmMethod();
Type[] argumentTypes = asmMethod.getArgumentTypes();
coerce(topOfStackType, argumentTypes[argumentTypes.length - 1], v);
method.invokeWithNotNullAssertion(v, state, resolvedSetCall);
Type returnType = asmMethod.getReturnType();
if (returnType != Type.VOID_TYPE) {
pop(v, returnType);
}
}
else {
//noinspection ConstantConditions
StackValue result = ((IntrinsicMethod) setter).generate(codegen, null, null, Collections.<JetExpression>emptyList(), StackValue.none());
result.put(result.type, v);
Type[] argumentTypes = setter.getParameterTypes();
coerce(topOfStackType, argumentTypes[argumentTypes.length - 1], v);
setter.genInvokeInstruction(v);
Type returnType = setter.getReturnType();
if (returnType != Type.VOID_TYPE) {
pop(v, returnType);
}
}
}
@@ -1091,11 +949,20 @@ public abstract class StackValue {
public static class Field extends StackValueWithSimpleReceiver {
public final Type owner;
public final String name;
public final DeclarationDescriptor descriptor;
public Field(Type type, Type owner, String name, boolean isStatic, StackValue receiver) {
public Field(
@NotNull Type type,
@NotNull Type owner,
@NotNull String name,
boolean isStatic,
@NotNull StackValue receiver,
@Nullable DeclarationDescriptor descriptor
) {
super(type, isStatic, isStatic, receiver, receiver.canHaveSideEffects());
this.owner = owner;
this.name = name;
this.descriptor = descriptor;
}
@Override
@@ -1145,8 +1012,8 @@ public abstract class StackValue {
coerceTo(type, v);
}
else {
getter.invokeWithoutAssertions(v);
coerce(getter.getAsmMethod().getReturnType(), type, v);
getter.genInvokeInstruction(v);
coerce(getter.getReturnType(), type, v);
}
}
@@ -1158,7 +1025,7 @@ public abstract class StackValue {
v.visitFieldInsn(isStaticStore ? PUTSTATIC : PUTFIELD, backingFieldOwner.getInternalName(), fieldName, this.type.getDescriptor());
}
else {
setter.invokeWithoutAssertions(v);
setter.genInvokeInstruction(v);
}
}
@@ -1342,8 +1209,6 @@ public abstract class StackValue {
}
private static class PrefixIncrement extends StackValue {
private final int delta;
private final Callable callable;
private final ResolvedCall resolvedCall;
private final ExpressionCodegen codegen;
private StackValue value;
@@ -1351,15 +1216,11 @@ public abstract class StackValue {
public PrefixIncrement(
@NotNull Type type,
@NotNull StackValue value,
int delta,
@NotNull Callable callable,
ResolvedCall resolvedCall,
@NotNull ExpressionCodegen codegen
) {
super(type);
this.value = value;
this.delta = delta;
this.callable = callable;
this.resolvedCall = resolvedCall;
this.codegen = codegen;
}
@@ -1369,13 +1230,7 @@ public abstract class StackValue {
value = StackValue.complexReceiver(value, true, false, true);
value.put(this.type, v);
if (callable instanceof CallableMethod) {
value.store(codegen.invokeFunction(resolvedCall, StackValue.onStack(this.type)), v, true);
}
else {
genIncrement(this.type, delta, v);
value.store(StackValue.onStack(this.type), v, true);
}
value.store(codegen.invokeFunction(resolvedCall, StackValue.onStack(this.type)), v, true);
value.put(this.type, v, true);
coerceTo(type, v);
@@ -1399,23 +1254,21 @@ public abstract class StackValue {
public static Type calcType(
@NotNull ResolvedCall<?> resolvedCall,
@NotNull JetTypeMapper typeMapper,
@Nullable CallableMethod callableMethod
@Nullable Callable callableMethod
) {
CallableDescriptor descriptor = resolvedCall.getResultingDescriptor();
ReceiverParameterDescriptor dispatchReceiver = descriptor.getDispatchReceiverParameter();
Type dispatchReceiverType = smartDispatchReceiverType(descriptor, typeMapper);
ReceiverParameterDescriptor extensionReceiver = descriptor.getExtensionReceiverParameter();
if (extensionReceiver != null) {
return callableMethod != null ? callableMethod.getReceiverClass() : typeMapper.mapType(extensionReceiver.getType());
return callableMethod != null ? callableMethod.getExtensionReceiverType() : typeMapper.mapType(extensionReceiver.getType());
}
else if (dispatchReceiver != null) {
else if (dispatchReceiverType != null) {
if (AnnotationsPackage.isPlatformStaticInObjectOrClass(descriptor)) {
return Type.VOID_TYPE;
}
else {
return callableMethod != null ? callableMethod.getThisType() : typeMapper.mapType(dispatchReceiver.getType());
}
return callableMethod != null ? callableMethod.getDispatchReceiverType() : dispatchReceiverType;
}
else if (isLocalFunCall(callableMethod)) {
return callableMethod.getGenerateCalleeType();
@@ -1424,6 +1277,22 @@ public abstract class StackValue {
return Type.VOID_TYPE;
}
/**
* Extracts the receiver from the resolved call, workarounding the fact that ResolvedCall#dispatchReceiver doesn't have
* all the needed information, for example there's no way to find out whether or not a smart cast was applied to the receiver.
*/
@Nullable
private static Type smartDispatchReceiverType(@NotNull CallableDescriptor descriptor, @NotNull JetTypeMapper typeMapper) {
ReceiverParameterDescriptor dispatchReceiverParameter = descriptor.getDispatchReceiverParameter();
if (dispatchReceiverParameter == null) return null;
DeclarationDescriptor container = descriptor.getContainingDeclaration();
if (container instanceof ClassDescriptor) {
return typeMapper.mapClass((ClassDescriptor) container);
}
return typeMapper.mapType(dispatchReceiverParameter);
}
@Override
public void putSelector(@NotNull Type type, @NotNull InstructionAdapter v) {

View File

@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.codegen
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.org.objectweb.asm.Label
class CoercionValue(
val value: StackValue,
@@ -39,10 +38,6 @@ class CoercionValue(
value.putReceiver(v, isRead)
}
override fun condJump(label: Label, jumpIfFalse: Boolean, v: InstructionAdapter) {
value.condJump(label, jumpIfFalse, v)
}
override fun isNonStaticAccess(isRead: Boolean): Boolean {
return value.isNonStaticAccess(isRead)
}
@@ -51,21 +46,16 @@ class CoercionValue(
public class StackValueWithLeaveTask(
val stackValue: StackValue,
val leaveTasks: StackValueWithLeaveTask.() -> Unit
val leaveTasks: (StackValue) -> Unit
) : StackValue(stackValue.type) {
override fun condJump(label: Label, jumpIfFalse: Boolean, v: InstructionAdapter) {
stackValue.condJump(label, jumpIfFalse, v)
leaveTasks()
}
override fun putReceiver(v: InstructionAdapter, isRead: Boolean) {
stackValue.putReceiver(v, isRead)
}
override fun putSelector(type: Type, v: InstructionAdapter) {
stackValue.putSelector(type, v)
leaveTasks()
leaveTasks(stackValue)
}
}

View File

@@ -67,25 +67,25 @@ public class TailRecursionCodegen {
public void generateTailRecursion(ResolvedCall<?> resolvedCall) {
CallableDescriptor fd = resolvedCall.getResultingDescriptor();
assert fd instanceof FunctionDescriptor : "Resolved call doesn't refer to the function descriptor: " + fd;
CallableMethod callable = (CallableMethod) codegen.resolveToCallable((FunctionDescriptor) fd, false);
CallableMethod callable = (CallableMethod) codegen.resolveToCallable((FunctionDescriptor) fd, false, resolvedCall);
List<ResolvedValueArgument> arguments = resolvedCall.getValueArgumentsByIndex();
if (arguments == null) {
throw new IllegalStateException("Failed to arrange value arguments by index: " + fd);
}
assignParameterValues(fd, callable, arguments);
if (callable.getReceiverClass() != null) {
if (callable.getExtensionReceiverType() != null) {
if (resolvedCall.getExtensionReceiver() != fd.getExtensionReceiverParameter().getValue()) {
StackValue expression = context.getReceiverExpression(codegen.typeMapper);
expression.store(StackValue.onStack(callable.getReceiverClass()), v, true);
expression.store(StackValue.onStack(callable.getExtensionReceiverType()), v, true);
}
else {
AsmUtil.pop(v, callable.getReceiverClass());
AsmUtil.pop(v, callable.getExtensionReceiverType());
}
}
if (callable.getThisType() != null) {
AsmUtil.pop(v, callable.getThisType());
if (callable.getDispatchReceiverType() != null) {
AsmUtil.pop(v, callable.getDispatchReceiverType());
}
v.goTo(context.getMethodStartLabel());

View File

@@ -1,61 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.codegen;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.context.ClassContext;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.psi.JetClassOrObject;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import static org.jetbrains.kotlin.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.KotlinSyntheticClass;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class TraitImplBodyCodegen extends ClassBodyCodegen {
public TraitImplBodyCodegen(
@NotNull JetClassOrObject aClass,
@NotNull ClassContext context,
@NotNull ClassBuilder v,
@NotNull GenerationState state,
@Nullable MemberCodegen<?> parentCodegen
) {
super(aClass, context, v, state, parentCodegen);
}
@Override
protected void generateDeclaration() {
v.defineClass(myClass, V1_6,
ACC_PUBLIC | ACC_FINAL,
typeMapper.mapTraitImpl(descriptor).getInternalName(),
null,
"java/lang/Object",
ArrayUtil.EMPTY_STRING_ARRAY
);
v.visitSource(myClass.getContainingFile().getName(), null);
}
@Override
protected void generateKotlinAnnotation() {
writeKotlinSyntheticClassAnnotation(v, DescriptorUtils.isTopLevelOrInnerClass(descriptor)
? KotlinSyntheticClass.Kind.TRAIT_IMPL
: KotlinSyntheticClass.Kind.LOCAL_TRAIT_IMPL);
}
}

Some files were not shown because too many files have changed in this diff Show More