Compare commits

..

2552 Commits

Author SHA1 Message Date
Victor Petukhov
16f714c4b8 [Draft] Jspecify: support type use annotations 2020-11-25 11:51:33 +03:00
Victor Petukhov
93d3cd4d1f JSpecify: Don't enhance types based on annotations on type parameters themselves 2020-11-20 15:04:53 +03:00
Victor Petukhov
6bef864fe3 JSpecify: Exclude non-Java files during downloading tests from jspecify repo 2020-11-20 15:04:04 +03:00
Victor Petukhov
b4112210fe JSpecify: Support of generation Kotlin use sites according to newly added tests 2020-11-10 14:39:08 +03:00
Victor Petukhov
0f2f68836c JSpecify: Add use sites for the corresponding tests to check that in fact an annotation hasn't been applied 2020-11-10 14:38:07 +03:00
Victor Petukhov
6d6805677b JSpecify: Update annotations in accordance with the jspecify repo 2020-11-10 14:36:01 +03:00
Victor Petukhov
3d8354b3d5 JSpecify: Add invocation of the tests generator for generateKotlinUseSiteFromJavaOnesForJspecifyTestsWithAutoApplyingChanges task 2020-11-10 14:35:18 +03:00
Victor Petukhov
e454a5bfb7 JSpecify: Fix some tests 2020-11-06 12:40:23 +03:00
Victor Petukhov
dab8ed64fe JSpecify: Add auto-applying diagnostics during Kotlin use sites generation 2020-10-27 16:06:50 +03:00
Victor Petukhov
38806ecb1b JSpecify: Fix some tests 2020-10-27 16:06:38 +03:00
Victor Petukhov
cc7fa10c8a JSpecify: support conversion of Java overloads to Kotlin ones 2020-10-25 14:44:54 +03:00
Victor Petukhov
d0daace46f JSpecify: add existing jspecify tests 2020-10-25 13:08:50 +03:00
Victor Petukhov
18a9fb2aac JSpecify: add strict mode for tests 2020-10-25 13:08:04 +03:00
Victor Petukhov
c89461e654 JSpecify: add gradle task to download JSpecify test suite 2020-10-12 17:33:35 +03:00
Victor Petukhov
d0cd7a4008 JSpecify: exclude test running from the common test task 2020-10-12 17:33:35 +03:00
Victor Petukhov
9dab052266 JSpecify: implement tests generator and test runner with checking compliance of kotlin diagnostics and jspecify marks 2020-10-12 17:33:35 +03:00
Victor Petukhov
f39e2d4a2d JSpecify: convert java use sites for existing tests to kotlin ones 2020-10-12 17:24:35 +03:00
Victor Petukhov
ce44f7d4d3 JSpecify: implement kotlin use sites to java ones converter 2020-10-12 17:24:31 +03:00
Victor Petukhov
520e35baaf JSpecify: rework tests – replace kotlin use sites to java ones with future j2k conversion 2020-10-12 17:24:29 +03:00
Victor Petukhov
8974128be4 JSpecify: remove annotations unsupported yet 2020-10-12 17:24:27 +03:00
Victor Petukhov
fb8bba4dfb Include kotlin reflect test runtime dependency for tests-java8 module to make jps tests running work 2020-10-12 17:24:26 +03:00
Vladimir Dolzhenko
677f5ca4e3 Don't keep ref to ABSENT_KOTLIN_INJECTION in companion object
As it prevents from dynamic reloading of plugin

^KT-39958 Fixed
2020-10-12 13:09:18 +00:00
Vladimir Dolzhenko
7c2112d014 Prepare for KT dynamic plugin: make EP dynamic
Relates to ^KT-38518
2020-10-12 13:09:17 +00:00
Vladimir Dolzhenko
0e7e24c498 Add more diagnostics to address invalid module
Relates to ^KT-42274
2020-10-12 13:03:22 +00:00
Roman Artemev
fa7104213c Temporary disable test until bootstrap is updated 2020-10-12 15:22:44 +03:00
Roman Artemev
f824bb6987 [JS BE] Merge Legacy and IR BE exceptions-related test data
- regenerate tests
 - add consistency test
2020-10-12 15:22:44 +03:00
Roman Artemev
c16b11a124 [JS IR BE] Fix throwable stuff to make exceptions similar to JVM 2020-10-12 15:22:43 +03:00
Roman Artemev
ff093d363a [JS IR BE] Fix Throwable ancestor transformation
Make sure that `message` and `cause` are properly configured

 - synchronize IR BE and Legacy behaviour
 - fix corresponding IR lowering
 - fix JS IR core runtime
 - add test
 - fix KT-39964
2020-10-12 15:22:43 +03:00
Roman Artemev
383146f836 [JS IR BE] Add compiler instrinsic to express undefined value in BE 2020-10-12 15:22:43 +03:00
Dmitriy Novozhilov
f794ced888 [FIR] Fix incorrect cluster creating in CFG dumps 2020-10-12 11:55:05 +03:00
Dmitriy Dolovov
3495ec198d Minor. Small clean-up in KLIB decompiler 2020-10-12 10:24:18 +03:00
Vladimir Dolzhenko
3eeaa07e0c Sync up plugin.xml AS42 with 202
Relates to #KT-42274
2020-10-12 06:49:43 +00:00
Mads Ager
f941733f13 [JVM_IR] Rebase init blocks stepping test that is working as intended. 2020-10-12 08:36:17 +02:00
Vladimir Dolzhenko
a9bc63dece Drop redundant legacy_name from ide perf tests json stats 2020-10-10 23:57:39 +02:00
Alexander Udalov
a4fb2a445f Minor, add spaces to diagnostic message 2020-10-09 22:11:37 +02:00
Alexander Udalov
ac39e4d89c Minor, add regression test
#KT-42554
2020-10-09 22:11:37 +02:00
pyos
6f9f437f15 IR: refuse to copy classes in InitializersLowering 2020-10-09 22:11:00 +02:00
pyos
e6c0575d3a JVM_IR: do not deep-copy suspend lambdas in initializers
This loses reflection metadata (and also sometimes fails). Which was
missing anyway - this is also fixed now.

 #KT-42554 Fixed
2020-10-09 22:11:00 +02:00
Mark Punzalan
8bc7370b92 ForLoopsLowering: Add PLUSEQ origin to increment to use IINC
instructions if possible.
2020-10-09 21:34:56 +02:00
Mark Punzalan
14137cb013 ForLoopsLowering: Remove additionalNotEmptyCondition as it is no
longer used in UntilHandler.
2020-10-09 21:34:56 +02:00
Mark Punzalan
ccbf7cc2ee ForLoopsLowering: Use last-exclusive for-loops for optimized until
progressions instead of decrementing "last".

#KT-41352 Fixed
2020-10-09 21:34:56 +02:00
Mark Punzalan
1adb130509 ForLoopsLowering: Move isLastInclusive to HeaderInfo. 2020-10-09 21:34:56 +02:00
Mark Punzalan
a093efde11 Add blackbox test for KT-42533. 2020-10-09 21:34:56 +02:00
Ilmir Usmanov
375d92cf67 Merge two consequent records in LVT
Otherwise, atomicfu will be unable to transform atomic variable usages.
2020-10-09 18:36:37 +02:00
Dmitry Petrov
91b8e32d43 Add ABI tests for classes extending Number and CharSequence 2020-10-09 16:36:35 +03:00
Dmitry Petrov
6dd2d8bbdb JVM_IR drop 'SpecialMethodWithDefaultInfo#needsArgumentBoxing' 2020-10-09 16:06:09 +03:00
Dmitry Petrov
a412596d8e JVM_IR emulate old back-end behavior in special bridges + inline classes
KT-42491 KT-42539
2020-10-09 16:06:08 +03:00
Dmitry Petrov
92fa13cbab Workaround for a possible compiler bug in object literals 2020-10-09 16:06:08 +03:00
Dmitry Gridin
23beaa5883 [formatter] add tests for line indent after properties
^KT-42560
2020-10-09 20:03:48 +07:00
Dmitry Gridin
434139d986 Revert "Add indent before accessor for extension property (KT-33131)"
This reverts commit ab34f8c7

^KT-42560 Fixed
2020-10-09 19:44:50 +07:00
Ilya Kirillov
852d705c71 FIR: optimize converting string expressions in raw FIR builder
Do get ASTNode for every string template entry as it is expensive operation
2020-10-09 15:00:56 +03:00
Ilya Kirillov
5937ffae4d FIR: optimize checking if placeholder projection for raw FIR builder 2020-10-09 15:00:55 +03:00
Ilya Kirillov
bbc641b390 FIR: do not get statement text for every statement in raw FIR builder
PsiElement.getText This is rather expensive operation
2020-10-09 15:00:55 +03:00
Ilya Goncharov
b1768d805f [Gradle, JS] Rename dukatMode to externalsOutputFormat
^KT-42339 fixed
2020-10-09 13:58:34 +03:00
Ilya Goncharov
3ad6d58153 [Gradle, JS] Execute dukat on import in both mode
^KT-42339 fixed

[Gradle, JS] Fix tests for dukat

^KT-42339 fixed

[Gradle, JS] Add tests on binaries-both mode

^KT-42339 fixed

[Gradle, JS] Remove snapshot versions

^KT-42339 fixed

[Gradle, JS] Fix file dependency resolution into imported package

^KT-42339 fixed
2020-10-09 13:58:34 +03:00
Ilya Goncharov
0a86beeb64 [Gradle, JS] Add descriptors to dependencies in configurations phase
- Add file collection dependencies to gradle node module building

^KT-42339 fixed
2020-10-09 13:58:34 +03:00
Ilya Goncharov
af65365d6a [Gradle, JS] Move gradle post processing after executing of dukat
^KT-42339 fixed

[Gradle, JS] Use 2 integrated tasks for dukat in both mode

^KT-42339 fixed

[Gradle, JS] Dukat into jar

^KT-42339 fixed
2020-10-09 13:58:33 +03:00
Ilya Goncharov
4eea52e4e7 [Gradle, JS] Add TaskAction on overriden method for integrated task
^KT-42339 fixed

[Gradle, JS] Temporarily used next version of dukat

^KT-42339 fixed
2020-10-09 13:58:33 +03:00
Ilya Goncharov
b37414ae0b [Gradle, JS] Add test on compilation with dukat binaries
^KT-42339 fixed
2020-10-09 13:58:33 +03:00
Ilya Goncharov
c1fe8defd2 [Gradle, JS] Dukat descriptors
^KT-42339 fixed
2020-10-09 13:58:33 +03:00
Ilya Goncharov
500fceb438 [Gradle, JS] Add binary dukat mode
^KT-42339 fixed

[Gradle, JS] Prepare sources and binary modes for dukat

^KT-42339 fixed
2020-10-09 13:58:33 +03:00
Dmitry Savvinov
f50851a982 Fix testdata after migrating to NewKotlinTypeCheckerImpl in OverrideResolver
- In kt10409 both 'pipe'-declarations contain error type.
NewKotlinTypeChecker in OverrideResolver considers error types as equal,
thus they are matched as bound declarations, thus 'IterablePipeline'
isn't considered to contain abstract member, thus no suggestion to add
abstract modifier.
Because initially test was covering purely technical issue of working
with error types, instead of removing it completely the additional
abstract member has been added

- in kt10808 we don't add explicit type anymore because
'noTypeInference' is false, because both expected type and actual type
are error-types, and KotlinIntroduceVariableHandler explicitly uses type
checker with 'errorTypesEqualToAnything=false'.
Also, this change might be ultimately seen as small improvement, because
if one extracts something with error type, they would certainly prefer
it to have a proper type as soon as errors are resolved (i.e. additional
code/imports written), rather than having a useless Any-type.
2020-10-09 13:44:06 +03:00
Dmitry Savvinov
f02593074f Drop isEqualTypeConstructor in favour of areEqualTypeConstructors 2020-10-09 13:44:06 +03:00
Dmitry Savvinov
fc4b488d43 Use NewKotlinTypeChecker in OverridingUtil
This allows to use deep type refinement in OverridingUtil, fixing issues
with expect/actuals in composite types
2020-10-09 13:44:06 +03:00
Dmitry Savvinov
01d6181050 Add test on overriding declaration with a composite type with expect declaration 2020-10-09 13:44:06 +03:00
Dmitry Savvinov
f8b9011667 Minor: unify error reporting for fun/properties overriding 2020-10-09 13:44:05 +03:00
Dmitry Savvinov
ac63d8b3bf Unify code for checking return type on override for fun/property
This fixes issues with the refinement of property' return type because
for functions' return type we already perform refinement properly
2020-10-09 13:44:05 +03:00
Dmitry Savvinov
736ecf3e9f Add test case on overriding property of expect-type
Current behaviour is undesired, the fix is in the next commit
2020-10-09 13:44:05 +03:00
Dmitry Savvinov
ac107f362e Refine types of type parameters before checking their equality in OverridingUtil 2020-10-09 13:44:05 +03:00
Dmitry Savvinov
80f4061a3d Add test on override with expect in return type 2020-10-09 13:44:04 +03:00
Vladimir Dolzhenko
f8b8f94040 Adjust vega IDE performance test charts 2020-10-09 11:03:26 +02:00
Mikhail Glukhikh
a6efaf440a FIR supertypes: replace class phase even if it hasn't unresolved supers 2020-10-09 09:45:46 +03:00
Mikhail Glukhikh
94302614cd [FIR] Add forgotten resolving status of enum entries (by Dmitry) 2020-10-09 09:45:45 +03:00
Dmitriy Novozhilov
5fbe715871 [FIR] Add forgotten replacing resolve phase during type resolve 2020-10-09 09:45:45 +03:00
Mikhail Glukhikh
1f5797e929 Don't resolve annotation arguments in FirTypeResolveTransformer 2020-10-09 09:45:45 +03:00
Mikhail Glukhikh
6f89385aec Transform forgotten property annotations in FirTypeResolveTransformer 2020-10-09 09:45:44 +03:00
Mikhail Glukhikh
e5463be6ba Don't transform parameter default values in FirTypeResolveTransformer 2020-10-09 09:45:44 +03:00
Mikhail Glukhikh
bdec245424 Don't transform enum entry initializer in FirTypeResolveTransformer 2020-10-09 09:45:44 +03:00
Mikhail Glukhikh
880eb6da6c Don't transform delegated constructor args in FirTypeResolveTransformer 2020-10-09 09:45:43 +03:00
Alexander Udalov
949952e766 kotlinx-metadata: minor, remove incorrect ReplaceWith from IS_PRIMARY deprecation 2020-10-08 17:44:35 +02:00
Mads Ager
afd710292a [JVM_IR] Fix mangling of default argument stubs for internal methods.
The MethodSignatureMapper expected to be able to look at the body
of the default argument stub. That is of course not possible when
it is from an external dependency.

Instead, we go through the attribute owner to get to the method
the stub is a default argument adapter for.
2020-10-08 17:43:24 +02:00
Jinseong Jeon
8c88670185 FIR: copy constructor for typealias'ed inner/nested class 2020-10-08 16:33:13 +03:00
Svyatoslav Kuzmich
5e5712afbb [JS IR] Make JsExport not fail on companion objects (KT-37829) 2020-10-08 14:07:50 +03:00
Victor Petukhov
9f716ba37c Jspecify: Rename DefaultNotNull to DefaultNonNull 2020-10-08 14:00:10 +03:00
Victor Petukhov
c3bada44cf Jspecify: Rename NullnessUnknown to NullnessUnspecified 2020-10-08 14:00:10 +03:00
Victor Petukhov
2685c7efce Jspecify: Rename codeanalysis annotations to jspecify ones 2020-10-08 14:00:10 +03:00
Denis Zharkov
59bd7364ab Enhance bounds for type parameters after loops disconnection
Otherwise behavior might change because enhancement may force computation
for other type parameters in cases like:
class A<X extends Y, Y extends X> {}

See the test:
org.jetbrains.kotlin.checkers.DiagnosticsTestGenerated.Tests.J_k#testRecursiveRawUpperBound3
2020-10-08 14:00:10 +03:00
Denis Zharkov
6661814e40 Do not enhance star projections for bounds of raw types
We have an invariant that their lower bound is always
SomeType<Any?> and their upper bound is SomeType<*>.
Ehancing the latter to SomeType<out Any> making
lower bound not being a subtype of upper bound that breaks contract
for flexible types (fails with exception)
2020-10-08 14:00:10 +03:00
Denis Zharkov
16b4a2c465 Do not enhance type parameter bounds if they contain a raw type
Otherwise enhancement algorithm starts forcing lazy mutually recursive
computations that leads to RECURSION_IN_SUPERTYPES in complex cases
2020-10-08 14:00:09 +03:00
Denis Zharkov
c1b34a83e9 Fix enhancement behavior in case of error-typed upper bounds 2020-10-08 14:00:09 +03:00
Denis Zharkov
2964d52640 Add test case for codeanalysis annotation 2020-10-08 14:00:09 +03:00
Denis Zharkov
dfb1cb8642 Minor. Rename UnknownNullness -> NullnessUnknown 2020-10-08 14:00:09 +03:00
Denis Zharkov
0b958c8ac5 Fix annotation name in test data to DefaultNullnessUnknown 2020-10-08 14:00:09 +03:00
Denis Zharkov
f3a490ee16 Support compiler flag -Xcodeanalysis-annotations 2020-10-08 14:00:09 +03:00
Denis Zharkov
c734bac676 Minor. Reformat JavaNullabilityChecker.kt 2020-10-08 14:00:08 +03:00
Denis Zharkov
ce2b7bded6 Minor. Reformat AbstractForeignAnnotationsTest.kt 2020-10-08 14:00:08 +03:00
Denis Zharkov
90a9ca6cb3 Minor. Rename flag in JvmAnalysisFlags: jsr305 -> javaTypeEnhancementState 2020-10-08 14:00:08 +03:00
Denis Zharkov
93d9301847 Minor. Extract JavaTypeEnhancementStateParser::parseJsr305State 2020-10-08 14:00:08 +03:00
Denis Zharkov
e7208f0c05 Rename Jsr305Parser -> JavaTypeEnhancementStateParser 2020-10-08 14:00:08 +03:00
Denis Zharkov
6c37574fce Rename Jsr305State -> JavaTypeEnhancementState
Also, rename some of the properties
It's needed to store status for codeanalysis annotation in that class
2020-10-08 14:00:08 +03:00
Denis Zharkov
2f04a1505d Support enhancement for unbounded wildcards from codeanalysis annotations 2020-10-08 14:00:07 +03:00
Denis Zharkov
392ef9aa2b Support type arguments enhancement from type parameters bounds
Currently, only works for codeanalysis annotations because
type parameters bounds are enhanced only for them
2020-10-08 14:00:07 +03:00
Denis Zharkov
e9e05c53e1 Support enhancement for type parameter based types
Load them as non-flexible when a relevant type parameter has non-flexible upper bound
(Currently, it only works for case of codeanalysis annotations)
2020-10-08 14:00:07 +03:00
Denis Zharkov
fa2578c795 Prepare type enhancement for codeanalysis annotations
- Rename NullabilityQualifierWithApplicability -> JavaDefaultQualifiers
- Use JavaDefaultQualifiers instead of JavaTypeQualifiers for default qualifiers

This change is intended to make code more clear and to allow add some additional
parameters specific for default qualifiers needed for codeanalysis annotations
2020-10-08 14:00:07 +03:00
Denis Zharkov
e27501497b Support codeanalysis annotations on type parameters bounds 2020-10-08 14:00:06 +03:00
Denis Zharkov
82d39dd86a Add basic support for default codeanalysis annotations 2020-10-08 14:00:06 +03:00
Denis Zharkov
517cc84f4d Add initial support for codeanalysis annotations 2020-10-08 14:00:06 +03:00
Vladimir Dolzhenko
165a147dd8 Improved IDE performance tests vega specs 2020-10-08 12:26:45 +02:00
Roman Golyshev
0682084ca3 [FIR Completion] Generate part of performance tests for FIR completion 2020-10-08 11:10:50 +03:00
Mikhail Glukhikh
beac3757bc [IR text test] Minor: add forgotten .fir.txt file 2020-10-08 10:33:58 +03:00
Vladimir Dolzhenko
46535bbd9d Add IDE performance tests vega specs 2020-10-08 00:07:17 +02:00
Dmitriy Dolovov
280fcb5c4b IDE: IndexNotReadyException while creating new Kotlin file in Dumb mode
^KT-42518
2020-10-07 22:36:52 +03:00
Alexander Udalov
2f003bdcb5 Minor, add regression test
#KT-42527
2020-10-07 21:31:43 +02:00
pyos
af98720720 JVM_IR: move MoveOrCopyCompanionObjectFields down a bit
More specifically, it should be done *just before*
JvmPropertiesLowering, as walking the IR tree between them will result
in visiting the moved backing fields twice (once via the companion's
parent, once via the IrProperty).

Ideally, this group of 3 lowerings should be merged into 1 as they are
completely inseparable, but this is slightly harder to do properly.

 #KT-42527 Fixed
2020-10-07 21:31:19 +02:00
pyos
dd1682510f JVM_IR: generate accessors for inherited abstract members too
#KT-41468 Fixed
2020-10-07 21:23:18 +02:00
Alexander Udalov
68157f09fa Minor, add temporary workaround for KT-42492 2020-10-07 19:33:40 +02:00
Roman Golyshev
7833698038 [FIR IDE] Fix idea-fir-performance-tests module references 2020-10-07 19:45:03 +03:00
Ilya Kirillov
efef18c2ca FIR IDE: mute not passing highlighting test 2020-10-07 19:45:02 +03:00
Ilya Kirillov
96422ea3fe FIR IDE: introduce highlighting performance test 2020-10-07 19:45:01 +03:00
Denis Zharkov
5cc12b49fc Hide java.lang.CharSequence::isEmpty from Kotlin built-in class
Also, prohibit using it as a synthetic property

^KT-42467 In progress
2020-10-07 17:48:19 +03:00
Denis Zharkov
90044f9672 Use correct naming for additional built-in member lists 2020-10-07 17:48:19 +03:00
pyos
98088f739d PSI2IR: do not generate when subjects multiple times
`in x` is represented as `<subject expression> in x` in psi, so
generating the entire call and then replacing the argument with a read
of a temporary results in redundant regenerations of the subject.

 #KT-42054 Fixed
 #KT-42455 Fixed
2020-10-07 17:22:25 +03:00
Alexander Udalov
e280416fe2 Minor, add regression test 2020-10-07 14:31:01 +02:00
pyos
8ef0fdf021 JVM_IR: remove two outdated comments 2020-10-07 14:30:36 +02:00
pyos
f7441813a9 JVM_IR: move SuspendLambdaLowering to a separate file 2020-10-07 14:30:36 +02:00
pyos
a6c62d3339 JVM_IR: do not inherit delegated property trackers
This is no longer needed now that lambdas are generated before
`$$delegatedProperties`.
2020-10-07 14:30:36 +02:00
pyos
05c856f1f7 JVM_IR: move SuspendLambdaLowering next to FunctionReferenceLowering
#KT-42253 Fixed
 #KT-39434 Fixed
2020-10-07 14:30:36 +02:00
pyos
44e0bfe90b JVM_IR: split AddContinuationLowering
One half handles suspend lambdas, the other - named functions.
2020-10-07 14:30:36 +02:00
pyos
4f171a9eb5 JVM_IR: move FunctionReference lowering before PropertyReference
so that `$$delegatedProperties` are generated in the lambdas' classes.
2020-10-07 14:30:36 +02:00
pyos
1190457759 JVM_IR: fix copying of receivers when unboxing inline class parameters
If an extension receiver is copied into a normal parameter, this may
later cause default argument masks to be shifted.
2020-10-07 13:21:50 +02:00
pyos
adcbfc7b4c IR: add an emptiness check to all unsigned until loops
Unlike signed integers, a larger unsigned type does not mean a lower
minimum value, so `x - 1` can overflow even if `x` is casted to a larger
type.

 #KT-42186 Fixed
2020-10-07 12:53:00 +02:00
pyos
4a03006162 Generate min/max constants as non-const in ranges tests
in order to make them appear as unknown values to codegen.
2020-10-07 12:53:00 +02:00
Pavel Punegov
260f66183c Don't ignore the test on JS backend as it doesn't fail any more. 2020-10-07 12:22:49 +03:00
Pavel Punegov
93b2ea2feb Regenerate tests 2020-10-07 12:18:12 +03:00
Pavel Punegov
a439860e12 Replace IGNORE_BACKENDs to TARGET_BACKEND for the Java test 2020-10-07 12:18:09 +03:00
Pavel Punegov
4d8ca074bc Ignore test for the full reflection in Native 2020-10-07 12:18:09 +03:00
Pavel Punegov
33d28b44fa Unmute typeOf tests in Native backend 2020-10-07 12:18:09 +03:00
Igor Yakovlev
d92aa94c6d [Usages] Provide BWC change for 1.4.20 and mark it as deprecated
Fixed #KT-42406
2020-10-07 12:09:59 +03:00
Vladimir Dolzhenko
23d33f51a2 Open build tool window on Gradle DSL errors
^EA-236697 Fixed
2020-10-07 10:46:52 +02:00
KotlinIsland
0e29f6f48b DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE: is -> are 2020-10-07 10:41:43 +02:00
Dmitry Gridin
9a0c3c47c8 [inspections] fix false positive "Redundant Unit" inspection in lambda with dynamic return type
^KT-40700 Fixed
2020-10-07 08:38:28 +00:00
Yaroslav Chernyshev
26d03295cf [Cocoapods] Remove hierarchical PodInstall dependsOn to Podspecs
#KT-41844 Fixed
2020-10-07 11:05:25 +03:00
Mikhail Glukhikh
e49f881e7f [FIR2IR] Add more clear exception about absent setter (see KT-42496) 2020-10-07 10:43:46 +03:00
Mikhail Glukhikh
aa4a042612 [FIR2IR] Use deepest matching symbol also for synthetic properties
#KT-42359 Fixed
2020-10-07 10:43:43 +03:00
Mikhail Glukhikh
fb4f27e136 [FIR2IR] Add test for problematic KT-42359 2020-10-07 10:43:38 +03:00
Jinseong Jeon
49307e243c FIR deserializer: load annotations on default accessors 2020-10-07 09:46:40 +03:00
Dmitriy Dolovov
c25742c91a kotlinx-metadata: Fix tests for Flag.Constructor.IS_SECONDARY flag
^KT-42429
2020-10-07 09:43:23 +03:00
Dmitriy Dolovov
52e56ca070 kotlinx-metadata: Wrong interpretation of Flag.Constructor.IS_PRIMARY
^KT-42429
2020-10-07 09:43:14 +03:00
Sergey Igushkin
3a5ffe479e General fixes for composite builds in HMPP
* Register project structure metadata providers globally, so included
  builds can access it from the root build.

* Rework some dependency management logic so that it doesn't assume that
  dependencies resolved to projects are safe to access – it is so only
  if the project is in the same build; also, in dependency handling, use
  proper keys which distinguish project with same ID in different
  builds.

* Add a separate implementation of `MppDependencyMetadataExtractor` that
  reads the project structure metadata from the mentioned global storage
  (as we can't read it from artifacts – those are not yet build at the
  project configuration phase) but when it comes to artifacts
  processing, takes real artifacts rather than introspect the project
  structure.

* Register the Kotlin/Native host-specific metadata artifact
  configurations as consumable, so that a consumer from a different
  build can properly resolve a dependency to such a configuration and
  get the artifact.
2020-10-06 23:26:17 +03:00
Sergey Igushkin
7d1a3a137b Publish MPP -metadata artifact in the root module, drop separate module
Until now, there was a separate module foo-metadata that contained the
Kotlin metadata artifacts. The reasons for this were only historical,
namely the platform modules used to depend on the metadata module and
expect it to bring the common sources to the IDE.

Now we don't really need the -metadata module, and it's now more harm
from it than good, as users never need to specify it as a dependency.

We fix this by removing the -metadata module from the default publishing
layout and putting the -metadata artifact(-s) directly to the root
module.
2020-10-06 23:26:17 +03:00
Sergey Igushkin
a0fbf54d11 Simplify matching of Kotlin variant name and Gradle configuration name
Earlier, the matching was non-trivial and required the consumer to look
through all of the producer's targets to find the Kotlin variant given
the name of the configuration that Gradle chose during variant-aware
dependency resolution. This is not feasible in composite builds as we
can't look into a project model of an included build.

To fix this, simplify the matching of the Gradle configuration name and
the Kotlin variant name by just using a suffix for the published
configurations.

Namely, instead of names like `jvm-api`, use the original configuration
name `jvmApiElements` for Kotlin variant names. To avoid ambiguity with
Gradle configurations (which we might want to customize for publishing,
like by altering the attributes or the published artifacts compared to
the configuration exposed for inter-project dependencies), create
publishing configurations
2020-10-06 23:26:16 +03:00
Sergey Igushkin
16d493558e HMPP resolution fixes
While we already had the associateWith relationship
that established additional visibility between such
source sets as fooMain and fooTest, this
relationship was not used properly when requested
dependencies were built for source set visibility
inference in HMPP. Instead, an old workaround was
used that just added dependencies of commonMain to
commonTest.

Fix this by using the associateWith relationship in
the preparation logic of source sets visibiltiy.

ALso, make the artifact view used in source sets visibility inference
lenient, so that a host-specific module that has not yet been published
won't lead to fail in source sets visibility and will instead be
ingored.
2020-10-06 23:08:01 +03:00
Sergey Igushkin
5963b07987 Use JSON as the format for the Kotlin project structure metadata 2020-10-06 23:08:01 +03:00
Sergey Igushkin
f19ef0184c Cleanup GranularMetadataTransformation after refactoring 2020-10-06 23:08:00 +03:00
Mads Ager
3817aa32a1 [IR] Move isAssignable to IrValueDeclaration. 2020-10-06 21:47:29 +02:00
Mads Ager
af0999ec6f [IR] Support isAssignable in builders and serialization. 2020-10-06 21:47:29 +02:00
Mads Ager
37145fb055 [JS_IR] Fix exponential behavior accidentally introduced. 2020-10-06 21:47:29 +02:00
Mads Ager
1f2ca606a5 [IR] Add isAssignable property to IrValueParameter.
Use it to check that only the value parameters that are explicitly
marked assignable are assigned.

Currently, the only parameters marked assignable are those for
default argument stubs.
2020-10-06 21:47:29 +02:00
Mads Ager
8d791ca98e [IR] Update naming, but not binary format for IrSetValue. 2020-10-06 21:47:29 +02:00
Mads Ager
33ab2299f9 [IR] Fix the type of the default argument mask condition.
On JVM and JS we can get away with using an Int but it really
should be a Boolean and Native reasonably insists on that.
2020-10-06 21:47:29 +02:00
Mads Ager
87f17dec4a [JS_IR] Use IrSetValue for default argument handling for JS backend.
Fix a couple of parameter remappings that now have to take IrSetValue
into account as well as IrGetValue.
2020-10-06 21:47:29 +02:00
Mads Ager
9a93bb3f09 [IR] Add IR support for setting parameters.
Use it in the JVM_IR backend for default values code. The parameter
local has to be overwritten for the inliner to work.
2020-10-06 21:47:29 +02:00
Ilya Chernikov
db23460fd5 Implement proper script runtime exception rendering with tests
#KT-42335 fixed
2020-10-06 21:43:11 +02:00
Ilya Kirillov
d5ad424e8f FIR: introduce source element mappings tests for raw FIR 2020-10-06 22:24:01 +03:00
Ilya Kirillov
a8ca2f8065 FIR IDE: fix diagnostics collection 2020-10-06 22:24:00 +03:00
Ilya Kirillov
551864d8c1 FIR: fix source element of FirQualifiedAccessExpression 2020-10-06 22:24:00 +03:00
Yan Zhulanow
c6de983476 Keep class members of the ExtensionPoint interface instead of its implementation for easier usage 2020-10-07 04:11:02 +09:00
Yan Zhulanow
0dc243d74c Parcelize: Don't activate both 'kotlin-parcelize' and 'kotlin-android-extensions' in IDE (KT-42267)
The actual problem is a lack of plugin activation check in ParcelableUltraLightClassModifierExtension (see how it should be done in ParcelizeUltraLightClassModifierExtension). However, ParcelableUltraLightClassModifierExtension lays inside ADT sources, and it's impossible to make an fast&easy fix from our side. However, we control the compiler plugin on which the IDE support is based, so the check is added there.

There should be no troubles if the application with 'kotlin-android-extensions' includes an Android library with 'kotlin-parcelize' or vise-versa, as runtime libraries of both plugins are attached to the 'implementation' Gradle configuration since AGP 2.5.
2020-10-07 04:11:02 +09:00
Yan Zhulanow
4c540152fe Parcelize: Forbid applying both 'kotlin-parcelize' and 'kotlin-android-extensions' (KT-42342) 2020-10-07 04:11:02 +09:00
Mads Ager
a37f16d7a2 [IR] Do not generate line numbers for synthesized data class members.
Fixes KT-41903.
2020-10-06 19:53:47 +02:00
Mikhael Bogdanov
5048471835 Properly check default kind on inheriting from old DefaultImpls scheme 2020-10-06 18:10:44 +02:00
Steven Schäfer
714d17ac63 Parcelize, JVM IR: Handle star projected and nullable arrays. 2020-10-06 17:42:35 +02:00
pyos
a6d5c02d9b JVM_IR: add a transformChildren call to PropertyReferenceLowering
#KT-42354 Fixed
2020-10-06 17:06:34 +02:00
Dmitry Petrov
b1bd138afb JVM_IR fix inline class <-> collection stubs issues
Move collectionStubMethodLowering before jvmInlineClassPhase, and make
them interact properly.

Note that some issues still remain in inline class <-> special bridges
interaction.

KT-40187 KT-42469
2020-10-06 17:08:24 +03:00
Alexander Udalov
2573eaa77f IR: do not crash renderer on functions with uninitialized return type
This is a follow-up to b497f39c29. It
turns out that it didn't help because `IrFunction.returnType` throws
exception, and checking for `IrUninitializedType` in `IrType.render` was
already too late. Throw and catch specific exception instead.

Also add function name into the exception message for better diagnostics
elsewhere (can't compute the full FQ name because in cases like
KT-42020, the parent is also uninitialized).
2020-10-06 14:23:34 +02:00
Alexander Udalov
06f1bd6101 Reformat IR tree declarations and implementations
Most of the changes are to the incorrect formatting introduced in
d1fd1da56f.
2020-10-06 14:21:40 +02:00
Mads Ager
b47e0e861b [PSI2IR] Use SYNTHETIC_OFFSET for delegated brigdes.
This allows kotlin-native to generate code in debug mode.
LLVM requires debug attributes for this code and SYNTHETIC_OFFSET
makes kotlin-native generate dummy debug attributes.
2020-10-06 13:32:55 +02:00
Mikhael Bogdanov
ed5c2b0565 Add tests for data class runtime string concatenation
#KT-35176
2020-10-06 13:20:41 +02:00
Mikhael Bogdanov
eb32a6ddbd Add test for for kt42457 wrong behaviour. Align runtime concatenation with it
#KT-42457
2020-10-06 13:20:40 +02:00
Mikhail Glukhikh
64fb114c30 FIR Java annotations: create vararg or Array depending on parameter name
#KT-42346 Fixed
2020-10-06 12:13:58 +03:00
Mikhail Glukhikh
f6b49a2c9a FirAnnotationArgumentChecker: handle conversion calls properly 2020-10-06 12:13:58 +03:00
Mikhail Glukhikh
6f432ea5dd [FIR] Add problematic test for KT-42346 (double vararg in annotation) 2020-10-06 12:13:57 +03:00
Mikhail Glukhikh
862fb6a405 FIR Java: make annotation parameters not-null 2020-10-06 12:13:57 +03:00
Ilya Goncharov
bcdc53d1c4 [Gradle, JS] Consider GString in npm dependencies parse in root dependencies
^KT-42462 fixed
2020-10-06 11:32:59 +03:00
Mikhael Bogdanov
39cde978d0 Minor. Rename test folder 2020-10-06 07:14:39 +02:00
Mikhael Bogdanov
d2c4be18a0 Rename runtime-string-concat option into 'string-concat' 2020-10-06 07:14:39 +02:00
LepilkinaElena
402f7df0d4 [IR] Save several last calculated line numbers not to recalculate them several times during code and debug info generation (#3792) 2020-10-06 08:03:50 +03:00
Roman Artemev
a52e045c91 [IR BE] Remap references in default arg value in inner class constructor
Make sure that there is no reference into zombie declarations.

 - fix KT-40771
 - add test
2020-10-06 00:06:47 +03:00
Roman Artemev
f597585ffb [IR BE] Refactor DefaultArgumentStubGenerator a bit 2020-10-06 00:06:46 +03:00
Ilya Chernikov
d7e0649d93 Automatically add -- after script/expression in kotlin runner
#KT-37987 fixed
2020-10-05 22:35:58 +02:00
Vladimir Dolzhenko
153217ae2e Clean up muted tests 2020-10-05 21:34:39 +02:00
Mikhael Bogdanov
b27955d268 Wrong specialization diagnostic is reported on java default inheritance 2020-10-05 20:09:21 +02:00
Jinseong Jeon
2d001a46fc FIR CFG traverser: do not skip graph enter node
#KT-42348 fixed
2020-10-05 19:48:12 +03:00
Jinseong Jeon
a154cf4c45 FIR checker: reproduce KT-42348 2020-10-05 19:48:11 +03:00
Vladimir Dolzhenko
be84110ada Clean up muted tests
Muted tests failed with `Range must be inside element being annotated` is fixed

Relates to ^KT-38959
2020-10-05 18:09:45 +02:00
Vladimir Dolzhenko
71d76bdb4b Revert "Perform shorten references under modal dialog"
This reverts commit 0b822aa4
2020-10-05 18:00:46 +02:00
Yaroslav Chernyshev
dcf18ec500 [Gradle, Cocoapods] Fix false-negative testCinteropExtraOpts failing 2020-10-05 16:40:32 +03:00
Ilya Gorbunov
76c5d036a8 Do not pack source of invisible runtime helpers to stdlib-js
Use reference sources of built-in Enum and Comparable instead.

KT-42318
2020-10-05 16:07:05 +03:00
Vyacheslav Gerasimov
4a9819bf9e Build: Upgrade gradle-enterprise plugin to 3.4.1 2020-10-05 15:57:10 +03:00
Vladimir Dolzhenko
0b822aa492 Perform shorten references under modal dialog
To prevent freezes and show progress to user shorten references has to be performed in a background thread

^KT-42170 Fixed
2020-10-05 11:41:56 +00:00
Vladimir Dolzhenko
36b3a8e0e3 Revert "Open build tool window on Gradle DSL errors"
This reverts commit 741df42c
2020-10-05 12:57:35 +02:00
Vladimir Dolzhenko
5eac949b43 Report EXPLICIT_DELEGATION_CALL_REQUIRED on relevant element
^KT-38959 Fixed
2020-10-05 09:43:05 +00:00
Jinseong Jeon
7af564c9f2 FIR: fix vararg remapping that merged named vararg 2020-10-05 12:33:03 +03:00
Vladimir Dolzhenko
29b23e79f3 Register EXPRESSION_CODE_FRAGMENT, BLOCK_CODE_FRAGMENT in KtStubElementTypes
Stubbed type has to be register earlier (see IStubFileElementType#checkNotInstantiatedTooLate)

Relates to ^KT-28732
2020-10-05 11:10:06 +02:00
Mikhail Glukhikh
3cd552cb43 [FIR2IR] Process anonymous object nested classes correctly
#KT-42373 Fixed
2020-10-05 12:06:53 +03:00
Mikhail Glukhikh
76cdf97b6d [FIR2IR] Set facade class for backing field properly #KT-42384 Fixed 2020-10-05 12:06:52 +03:00
Yaroslav Chernyshev
ad7ad98738 [Gradle, Cocoapods] Custom packageName and extraOpts for pods cinterop
#KT-40999 Fixed
2020-10-05 11:59:30 +03:00
Georgy Bronnikov
b0b971cd0a IR: Remove unused class 2020-10-05 11:02:12 +03:00
Georgy Bronnikov
80b7194799 IR: remove KotlinType usage from Ir.kt 2020-10-05 11:02:12 +03:00
Georgy Bronnikov
7afad9a91d Use wrapped descriptors in IrReturnableBlock 2020-10-05 11:02:12 +03:00
Georgy Bronnikov
38ee182f51 IR: remove unused AbstractClosureAnnotator 2020-10-05 11:02:11 +03:00
Ilmir Usmanov
5e02a4efd7 Mark implicit receiver as captured if the function is expression
#KT-40260 Fixed
 #KT-42280 Fixed
2020-10-05 09:36:54 +02:00
Dmitry Gridin
3078bd7b67 [formatter] line indent provider: fix indent for empty braces
^KT-42411 Fixed
2020-10-05 07:27:53 +00:00
Jinseong Jeon
380226cba0 FIR2IR: correct dispatch receiver inside inner class constructor 2020-10-05 09:12:19 +03:00
Jinseong Jeon
aa488eabc9 FIR2IR: distinguish constructor when picking return target 2020-10-05 09:09:39 +03:00
Ilya Chernikov
5ab822be36 Import scope of the imported script
#KT-34178
2020-10-02 18:53:31 +02:00
Ilya Chernikov
a71eab89e7 Remove unused code...
left after "Optimize scopes handling inside LexicalChainedScope"
refactoring commit.
2020-10-02 18:53:31 +02:00
Leonid Startsev
bdbf8d7980 Use correct class type when creating class references
(for e.g. PolymorphicSerializer)

Former class reference may had type arguments in it, which lead to bugs
in JS IR.

Fixes https://github.com/Kotlin/kotlinx.serialization/issues/1072
2020-10-02 19:11:25 +03:00
Leonid Startsev
d4bdb0eedc Remove requirement on 'Serializable class must have single primary constructor'
#KT-38868 Fixed
 #KT-41627 Fixed
 Fixes https://github.com/Kotlin/kotlinx.serialization/issues/396
 Fixes https://github.com/Kotlin/kotlinx.serialization/issues/1049
2020-10-02 19:11:25 +03:00
Ilya Goncharov
de8776ec1d [Gradle, JS] Support for groovy dsl and Pair in kotlin dsl
[Gradle, JS] Use package json custom fields as inputs

^KT-42400 fixed
2020-10-02 18:42:33 +03:00
Victor Petukhov
6c1dc43d25 Add check already fixed variables in PostponedArgumentInputTypesResolver during adding constraints on them and using inside a functional type
^KT-42374 Fixed
2020-10-02 18:31:54 +03:00
Ilya Goncharov
96ccf03794 [Gradle, JS] Test: Add yarn resolution by version shortcut
^KT-42420 fixed
2020-10-02 18:14:53 +03:00
Ilya Goncharov
18ec9f10f9 [Gradle, JS] Add yarn resolution by version shortcut
^KT-42420 fixed
2020-10-02 18:14:42 +03:00
Dmitriy Dolovov
07f78f5ab8 [Commonizer] Drop "kind" from CirClassConstructor
... as it is always CallableMemberDescriptor.Kind.DECLARATION
for serialized constructor declarations
2020-10-02 16:47:29 +03:00
Vladimir Dolzhenko
abc4aef403 Store kotlin-script-cache-dependencies as project file attribute
To avoid extra root project scan we need to store already processed script cache dependencies

^KT-41640 Fixed
2020-10-02 13:23:43 +00:00
Dmitry Petrov
941a506885 Add test for inline classes implementing collection interfaces
KT-40186
2020-10-02 14:06:07 +03:00
Ilya Chernikov
2828f0a814 Fix restoring script configuration from file attributes
#KT-41622 fixed
2020-10-02 12:38:22 +02:00
Ilya Chernikov
d88e87aaac Fix ScriptDefinition subtyping after earlier refactorings
#KT-41905 fixed
(may also fix other yet undetected or not analyzed problems with script
definitions)
2020-10-02 12:38:21 +02:00
Ilya Chernikov
adcfca3f98 Treat classpath extraction problems on script definition loading as warnings
#KT-44206 fixed
2020-10-02 12:38:21 +02:00
Vladimir Dolzhenko
741df42c18 Open build tool window on Gradle DSL errors
^EA-236697 Fixed
2020-10-02 10:08:49 +00:00
Dmitry Petrov
e018f2bd3e JVM_IR more precise check for special bridges in super class
KT-41123
2020-10-02 12:51:49 +03:00
Mikhael Bogdanov
cf5bd38bec JVM_IR. Support runtime string concatenation 2020-10-02 11:47:28 +02:00
Mikhael Bogdanov
1938f9459f Support indy concatenation 2020-10-02 11:47:28 +02:00
Mikhael Bogdanov
942e1962d9 Properly process constants 2020-10-02 11:47:27 +02:00
Mikhael Bogdanov
8a1f7c5859 Add TODO 2020-10-02 11:47:27 +02:00
Mikhael Bogdanov
c329c22630 Add runtime string concat options. Some renaming 2020-10-02 11:47:27 +02:00
Mikhael Bogdanov
04012951c1 Basic invokedynamic string concatenation support 2020-10-02 11:47:27 +02:00
Mikhael Bogdanov
88892ec65d Introduce StringAppendGenerator 2020-10-02 11:47:27 +02:00
Mikhael Bogdanov
bf35818438 Minor. Reformat 2020-10-02 11:47:27 +02:00
Mark Punzalan
b58d75440b [FIR] Fix tests for vararg execution order after rebase. 2020-10-02 12:08:07 +03:00
Mark Punzalan
e175e87225 [FIR] Change type of argumentMapping properties and parameters from Map
to LinkedHashMap, to signify that the order is important and we don't
assume that mutableMapOf() will always return a LinkedHashMap.
2020-10-02 12:08:06 +03:00
Mark Punzalan
6b83f2d70e [FIR] Remove Candidate.oldToNewArgumentMapping and use
Candidate.argumentMapping instead of the Fir*Call's argumentList to
remap vararg arguments to a FirVarargArgumentExpression.

The argumentList was used to preserve the order, but we can rely on
Candidate.argumentMapping to have its keys in order.
2020-10-02 12:08:05 +03:00
Mark Punzalan
a2a4d94834 [FIR] Capture array and indices for postfix/prefix increment/decrement
of array element (including overloaded indexed access operators, e.g.,
`a[b, c]++`).

This prevents double-evaluation of the array and indices expressions,
which may have side-effects.
2020-10-02 12:08:03 +03:00
Mark Punzalan
eb631bc429 [FIR] Keep vararg argument order in resolved calls (KT-17691). 2020-10-02 12:08:02 +03:00
Mark Punzalan
f6ce2d893c [FIR] Handle varargs in overloaded indexed access operator. 2020-10-02 12:08:01 +03:00
Yan Zhulanow
c471a7735e Keep all variants of ExtensionPointImpl.registerExtension() in the pro-guarded compiler (KT-42103) 2020-10-02 17:50:23 +09:00
Toshiaki Kameyama
bcbb90dd81 "Receiver parameter is never used" inspection: don't report it when anonymous function is called with receiver
#KT-41246 Fixed
2020-10-02 13:32:31 +07:00
Mikhail Glukhikh
112e07814e [FIR] Mute test after rebase 2020-10-02 08:58:01 +03:00
Mikhail Glukhikh
cc88374fd7 [FIR] Add compile Kotlin against Kotlin test group 2020-10-02 08:57:55 +03:00
Mikhail Glukhikh
582f8fe287 FIR: recursive transform annotation if it has annotation as argument
#KT-42344 Fixed
2020-10-02 08:57:49 +03:00
Mikhail Glukhikh
2fd752f8f6 IR interpreter: fix calculation of constant Java fields
#KT-42117 Fixed
2020-10-02 08:57:44 +03:00
Mikhail Glukhikh
44ebec05bb FIR Java: support read of field constant initializers 2020-10-02 08:57:39 +03:00
Ilya Gorbunov
fafb4a7914 Use regex for case-insensitive String.replace
KT-41799
2020-10-02 00:29:26 +03:00
Francesco Vasco
4a0109cf44 Use StringBuilder in String.replace (2x faster)
KT-41799
2020-10-02 00:28:53 +03:00
Vladimir Ilmov
51a37bffff Incorrect package name for multipart classes 2020-10-01 23:06:17 +03:00
LepilkinaElena
dc2845df10 [IR] Avoid extra lists creation during getting explicit/all parameters (#3769) 2020-10-01 21:19:40 +03:00
Denis Zharkov
6d7744a921 FIR2IR: Use correct origin for lazily created fake overrides 2020-10-01 17:49:02 +03:00
Denis Zharkov
26a43b253f FIR2IR: Avoid recreation of declarations
They may be previously created for fake overrides
2020-10-01 17:49:02 +03:00
Denis Zharkov
ff4b6a0bf9 FIR: Fix modality computation for corner cases in FirTypeIntersectionScope
See org.jetbrains.kotlin.resolve.OverridingUtil#determineModalityForFakeOverride
2020-10-01 17:49:02 +03:00
Denis Zharkov
de3df799bc FIR: Fix implicit return type computation for synthetic property+intersection 2020-10-01 17:49:02 +03:00
Denis Zharkov
754e17a28f FIR2IR: Fix checking if accessor is allowed to have fake override 2020-10-01 17:49:02 +03:00
Denis Zharkov
70bf7063c9 FIR2IR: Add hack for delegate combinated with intersection 2020-10-01 17:49:02 +03:00
Denis Zharkov
85b8673434 FIR: Fix overload resolution with defaults 2020-10-01 17:49:02 +03:00
Denis Zharkov
4964ff0019 FIR2IR: Refine definition if we need a fake override
`realDeclarationSymbols` that was used before is built from klass.declarations that doesn't
contain e.g. declarations from enhancement
Next time, we should get rid of `realDeclarationSymbols` and use only
originalDeclaration.origin.fromSupertypes, but originalSymbol.callableId.classId == classId
doesn't work correctly
2020-10-01 17:49:02 +03:00
Denis Zharkov
3dfbd36f15 FIR: Unmute passing blackbox tests 2020-10-01 17:49:02 +03:00
Denis Zharkov
be6bef13d3 FIR2IR: Drop some unused declarations 2020-10-01 17:49:02 +03:00
Denis Zharkov
5c9187b270 FIR2IR: Rework fake overrides generation
- To discriminate what's already been generated, use the set of declaration
instead of names (it's obviously more correct)
- Make it possible to set more then one overridden (base)
2020-10-01 17:49:02 +03:00
Denis Zharkov
b241161c35 FIR2IR: Rework DelegatedMemberGenerator
Use scope content instead of manual traversing of declarations
2020-10-01 17:49:02 +03:00
Denis Zharkov
e311a60055 FIR: Refine FirDelegatedMemberScope
- Use an attribute instead of overriddenSymbol
- Use createCopyForFir because it copies type parameters
2020-10-01 17:49:02 +03:00
Denis Zharkov
28c536e511 FIR: Add temporary workaround to avoid changes in test data
CallableId for intersection overrides has been changed in previous commits
and many rendered FIR test data needs to be changed
But, we're going to get rid of callableId's/or fix them back for intersection overrides soon
2020-10-01 17:49:02 +03:00
Denis Zharkov
ff83555729 Minor. Optimize imports 2020-10-01 17:49:02 +03:00
Denis Zharkov
fd9c6479bf FIR: Do not call withReplacedConeType if type is unresolved 2020-10-01 17:49:02 +03:00
Denis Zharkov
cb07ffc4fd FIR: Clarify contracts for two versions FirClass<*>::scope
- One of them really creates a scope a specific type
- Another one is used for supertypes and includes creation of FirDelegatedMemberScope wrapper
2020-10-01 17:49:02 +03:00
Denis Zharkov
1adf731fc5 FIR: Minor. Use buildValueParameterCopy 2020-10-01 17:49:02 +03:00
Denis Zharkov
9696fecab5 FIR: Use refined visibility/modality for intersection overrides 2020-10-01 17:49:02 +03:00
Denis Zharkov
20bf238c27 FIR2IR: Fix signature computed for fake-overrides
Take into account _new owner_ of the function
Namely, if there's a substitution override from a class A<T> in its subtype B,
it will refer `B` as its owner in the signature
2020-10-01 17:49:02 +03:00
Denis Zharkov
9914b487b7 FIR: Do not load hashCode/toString/equals methods from Java interface
As it's done in FE 1.0, and there are subtle semantics in the language that depends on it
2020-10-01 17:49:02 +03:00
Denis Zharkov
7c7c5336f9 FIR: Reuse callables copying parts in FirClassSubstitutionScope
It changes the behavior in FirTypeIntersectionScope:
- now type parameters are also get copied
- value parameters are being copied unchanged
2020-10-01 17:49:02 +03:00
Denis Zharkov
0297be1fa8 FIR: Replace callableId for intersection overrides 2020-10-01 17:49:02 +03:00
Denis Zharkov
11bc0e3225 FIR: Extract FirTypeScope.getDirectOverridden* 2020-10-01 17:49:02 +03:00
Denis Zharkov
73c6eb2793 FIR2IR: Extract common parts in FakeOverrideGenerator 2020-10-01 17:49:02 +03:00
Denis Zharkov
d67a1f9123 FIR: Rework default parameters propagation through overrides 2020-10-01 17:49:02 +03:00
Denis Zharkov
ac666187b0 FIR: Use correct session in FirJvmMangleComputer 2020-10-01 17:49:02 +03:00
Denis Zharkov
c8afa8f715 FIR2IR: Remove unused FakeOverrideMode 2020-10-01 17:49:02 +03:00
Roman Golyshev
2b76fe8a72 [FIR Completion] Enable basic insertion handler tests for FIR completion
Enable tests that are passing
2020-10-01 15:42:50 +03:00
Steven Schäfer
39736868bf JVM IR: Allow debugger to evaluate expressions involving IR dependencies 2020-10-01 14:35:05 +02:00
Steven Schäfer
48b736e551 JVM IR: Enable evaluate expression tests for the JVM IR backend 2020-10-01 14:35:05 +02:00
Toshiaki Kameyama
33969c5f9a Redundant semicolon: fix false negative on start of line
^KT-40704 Fixed
2020-10-01 14:31:59 +02:00
Nikita Skvortsov
02c31a711c Avoid iterating over all idea modules.
Use hash table to quickly lookup idea module by gradle project path
2020-10-01 14:09:34 +02:00
Florian Kistner
713f6e1ed3 Load artifactory in root script to workaround conflicts 2020-10-01 13:46:01 +02:00
Yaroslav Chernyshev
4c9d3b4668 [Gradle, Cocoapods] Add Podfile missing info to podInstall error report
#KT-42243 Fixed
2020-10-01 14:30:19 +03:00
Roman Golyshev
6c79040cfb [FIR Completion] Enable passing tests 2020-10-01 13:07:20 +03:00
Roman Golyshev
12cd5fb43a [FIR Completion] Refactor FIR completion tests
Extract logic about checking the directive and catching the exception
2020-10-01 13:07:20 +03:00
anastasiia.spaseeva
31de584d14 [Spec tests] Generate sections json map 2020-10-01 12:32:22 +03:00
Victor Petukhov
d02432cf93 Introduce warning for the changing arguments execution order for named varargs (KT-17691) 2020-10-01 12:15:13 +03:00
Victor Petukhov
d62c665e99 Introduce language feature to enable the correct arguments execution order for named varargs (KT-17691) 2020-10-01 12:14:49 +03:00
Bart van Helvert
485ada7b90 Move getColon from KtClass to KtClassOrObject
Makes it possible to retrieve the colon from a KtObjectDeclaration.
2020-10-01 10:20:20 +03:00
Vladimir Dolzhenko
4d5b32b140 Clean up perf tests TC stats output 2020-10-01 07:52:01 +02:00
Victor Petukhov
986ee11aab Fix failing spec test 2020-09-30 22:14:11 +03:00
Kirill Shmakov
4f51367196 Remove build settings of CLion plugin 2020-09-30 19:56:49 +03:00
Vyacheslav Gerasimov
f03b957812 Build: Check ivy repository by empty marker file instead of directory
Should fix situations when directory exists but contents are invalid
which happens when unpacking process is interrupted.
2020-09-30 17:51:22 +03:00
Victor Petukhov
d0a1f18c7d Fix failing test after fcfabb70d5 2020-09-30 17:37:20 +03:00
Bingran
60cf3b5740 Upgradle agp version for ConfigurationCacheForAndroidIT
The new agp version contains the fix regarding build listeners which
will allow kgp run config caching test without warnings.

Fixes: n/a
Test: existing
2020-09-30 16:06:35 +03:00
Dmitry Petrov
af86c52101 JVM_IR merge annotations when substituting types
Otherwise special annotations such as @EnhancedNullability are lost,
which affects JVM signatures.

KT-42330
2020-09-30 15:44:54 +03:00
sebastian.sellmair
4b152a635e multiplatformUtil; Module.implementedModules: Extend Android M2 fallback to also include M3 relevant modules
Port of `kotlin-ide` commit: 9053046ad5731b7aca73e2f74b93e8bd8251f507
2020-09-30 12:34:26 +00:00
sebastian.sellmair
f9b8bc0edb Move KotlinAndroidDependsOnEdgesTest.kt to new functionalTest source set 2020-09-30 12:26:49 +00:00
sebastian.sellmair
1173c4380a KotlinPlugin: Setup default 'dependsOn' edges for Android source sets 2020-09-30 12:26:48 +00:00
Dmitriy Novozhilov
dbf34205ff Advance bootstrap to 1.4.30-dev-738 2020-09-30 15:00:44 +03:00
Victor Petukhov
fcfabb70d5 Report invisible setter error if it's resolved to synthetic property of base class with public getter and protected setter
^KT-11713 Fixed
2020-09-30 14:35:43 +03:00
Denis Zharkov
fdd71c0bce Fix incorrect NULLABLE_TYPE_PARAMETER_AGAINST_NOT_NULL_TYPE_PARAMETER
^KT-42257 Fixed
2020-09-30 14:10:53 +03:00
Jinseong Jeon
d09ccdbe3c FIR serializer: distinguish typealias classifier 2020-09-30 12:21:57 +03:00
Jinseong Jeon
b4ac2f5b55 FIR serializer: special handling of Continuation 2020-09-30 12:21:57 +03:00
Konstantin Tskhovrebov
5d2adce7ab as42: Add lost project parameter to CliLightClassGenerationSupport. 2020-09-30 11:38:18 +03:00
Vladimir Dolzhenko
3212df6183 Reverted back occasional commenting of perf runs 2020-09-30 09:41:21 +02:00
Konstantin Tskhovrebov
803463ac11 Revert "as42: Fix override."
This reverts commit d33391f4
2020-09-30 10:28:38 +03:00
Nikolay Krasko
646e6446f7 as41: Fix compile error in :compiler:tests-common:compileTestJava 2020-09-30 10:05:57 +03:00
Nikolay Krasko
6d2647c681 Clean .bunch file
No need to pass base branch in the rule
2020-09-30 10:05:56 +03:00
Vladimir Dolzhenko
ce1b388668 Add registry key kotlin.resolve.forceFullResolveOnHighlighting
Relates to ^KT-41195
Relates to ^KT-38687
2020-09-30 05:56:46 +00:00
Vladimir Dolzhenko
50a16aa9bc Do not print metadata for perf tests 2020-09-29 23:48:16 +02:00
Dmitry Petrov
f79afd67f4 Add more tests for collections implemented by delegation 2020-09-29 22:44:00 +03:00
Vladimir Dolzhenko
3c380faeb5 Added deprecated PackageFragmentProvider#getPackageFragments for BWC
Relates to ^KT-33394
^KT-42259 Fixed
2020-09-29 19:14:44 +00:00
Mikhael Bogdanov
a228206cf5 Minor. Regenerate tests 2020-09-29 20:29:40 +02:00
Dmitry Petrov
79a2d9858c JVM_IR emulate JVM stub generation scheme
KT-42114
KT-42115
2020-09-29 21:06:30 +03:00
pyos
6dc08cb2fd Add a bytecode test that checks inlining of adapted references 2020-09-29 19:49:46 +02:00
pyos
9a3507af59 JVM_IR: treat adapted references as lambdas for inlining
#KT-38536 Fixed
 #KT-38535 Fixed
2020-09-29 19:49:46 +02:00
pyos
0e8a664c9b JVM_IR: fix bound suspend-converted references
Note: inlining of adapted callable references is still suboptimal.

 #KT-42021 Fixed
2020-09-29 19:49:46 +02:00
Mikhail Glukhikh
ac50433e17 Fix failing bytecode text test
In this commit I moved IGNORE_BACKEND_FIR to the end or deleted it
when it was applicable, to preserve correct line numbers
2020-09-29 19:16:42 +03:00
Yan Zhulanow
cfd90c85cb Kapt: Re-enable JDK 9/11 tests disabled by occasion 2020-09-30 00:31:08 +09:00
Pavel Kirpichenkov
b39af51390 [FIR] Extract language settings into a dedicated component
^KT-42080 Fixed
2020-09-29 18:22:56 +03:00
Pavel Kirpichenkov
8f31b1ca83 [FIR] Use default language settings in inference components
Without settings common inference components require additional parameters
to be passed explicitly from components not shared between FIR and FE10.
Proper configuration can be postponed in FIR, defaults are good enough for now.

^KT-42080 In progress
2020-09-29 18:22:56 +03:00
Yan Zhulanow
dba1b50aed Parcelize: Don't write Parcelize model if the Parcelize plugin is disabled 2020-09-29 23:58:30 +09:00
Yan Zhulanow
9cdd6e9a8f Kapt: Support new @JvmDefault functionality (KT-25960) 2020-09-29 23:58:30 +09:00
Yan Zhulanow
a44fd964cf Kapt: Don't convert field initializers for enum fields inside companion objects (KT-37732)
For classes with companion objects, Kotlin compiler generates a 'Companion' static accessor field.
Java prioritizes fields over inner types (apparently, Scala does this as well, KT-29864), so the generated initializer doesn't compile.
As a workaround, initializer generatation is disabled for enum fields inside companion objects. Certainly, it's not a proper fix, however it does fix the regression.
2020-09-29 23:58:29 +09:00
Toshiaki Kameyama
86ac44c23e "Replace 'if' with elvis operator": don't suggest if val initializer is a complex expression
#KT-35165 Fixed
2020-09-29 23:58:29 +09:00
Toshiaki Kameyama
653e20dcba Convert put to assignment: don't report when receiver object has custom 'set' method
#KT-33212 Fixed
2020-09-29 23:58:29 +09:00
Toshiaki Kameyama
5abb6bc7a5 Add quickfix for SENSELESS_NULL_IN_WHEN to remove redundant when branch
#KT-24556 Fixed
2020-09-29 23:58:29 +09:00
Toshiaki Kameyama
668473c337 Add quickfix for CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT to remove const modifier
#KT-35215 Fixed
2020-09-29 23:58:28 +09:00
Toshiaki Kameyama
5a3c6def8f Join with assignment: fix false negative when local variable are used
#KT-34270 Fixed
2020-09-29 23:58:28 +09:00
Toshiaki Kameyama
b56272dc64 Add name to argument: do not remove necessary backticks
#KT-30894 Fixed
2020-09-29 23:58:28 +09:00
Toshiaki Kameyama
a492fe7757 "Put arguments/parameters on separate lines": respect code style settings
#KT-20420 Fixed
2020-09-29 23:58:27 +09:00
Toshiaki Kameyama
74ee68e57b Remove redundant backticks: do not report if variable inside the string and isn't followed by space
#KT-35051 Fixed
2020-09-29 23:58:27 +09:00
Toshiaki Kameyama
ad3ea9a36a Replace with binary operator: don't highlight when receiver is platform type
#KT-35097 Fixed
2020-09-29 23:58:27 +09:00
Toshiaki Kameyama
93db78e7ac JavaMapForEachInspection: report for expression with implicit receiver
#KT-31833 Fixed
2020-09-29 23:58:27 +09:00
Yan Zhulanow
85e8b56a02 Minor: Simplify code 2020-09-29 23:58:26 +09:00
Toshiaki Kameyama
75e8849c94 Add quick fix for INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER
#KT-34533 Fixed
2020-09-29 23:58:26 +09:00
Yan Zhulanow
9f192ba85e Fix false positive in +0.0 == -0.0 comparison simplification (KT-17735) 2020-09-29 23:58:26 +09:00
Toshiaki Kameyama
915dc6ce91 FoldInitializerAndIfToElvisInspection: don't report when 'var' variable has no explicit type and it's used as not nullable type
#KT-38349 Fixed
2020-09-29 23:58:26 +09:00
Yan Zhulanow
db140b2815 Fix Pill debug IDEA run configurations 2020-09-29 23:58:25 +09:00
Yan Zhulanow
7b5fc19156 Minor: Simplify replacement check logic in ReplaceJavaStaticMethodWithKotlinAnalogInspection 2020-09-29 23:58:25 +09:00
Yan Zhulanow
ed2b547973 Minor: Extract suspend call check to a separate function 2020-09-29 23:58:25 +09:00
Toshiaki Kameyama
ef5335ba99 ReplaceJavaStaticMethodWithKotlinAnalogInspection: don't report for Character.toString(int)
#KT-34859 Fixed
2020-09-29 23:58:25 +09:00
Toshiaki Kameyama
b008e6c9be SimplifiableCallChainInspection: don't report if suspend function cannot be called correctly
#KT-23934 Fixed
2020-09-29 23:58:24 +09:00
Yan Zhulanow
1e9bb00744 Debugger: Disable "missing dependency superclass" diagnostic in evaluator (KT-38659) 2020-09-29 23:58:24 +09:00
Yan Zhulanow
62affd8e0d Kapt: Allow to strip @Metadata annotation from stubs (KT-36667) 2020-09-29 23:58:24 +09:00
Ilya Goncharov
da16b8e527 [Gradle, JS] Add includedRange with version only 2020-09-29 16:29:01 +03:00
Kirill Shmakov
3075de917b Add useAndroidX property into mobile library template KT-42123 2020-09-29 16:22:56 +03:00
Kirill Shmakov
ac9b5dabfc Clarify test names to avoid clashes in resolve
This is to workaround problem described in #KT-41342
2020-09-29 16:22:54 +03:00
Ilya Goncharov
31e7dd5fcc [Gradle, JS] Fix escaped characters in package.json
^KT-40202 fixed
2020-09-29 15:46:16 +03:00
Ilya Goncharov
337a66f906 [Gradle, JS] Fix NpmRange string representation with concrete version
^KT-42222 fixed
^KT-40986 fixed
^KT-39838 fixed
2020-09-29 15:46:16 +03:00
Ilya Goncharov
0fa4f0572b [Gradle, JS] Add test for duplicated dependency with range version
^KT-42222 fixed
^KT-40986 fixed
^KT-39838 fixed
2020-09-29 15:46:16 +03:00
Ilya Goncharov
024771028c [Gradle, JS] Fix yarn.lock resolution in case of duplicated dependencies
^KT-42222 fixed
^KT-40986 fixed
^KT-39838 fixed
2020-09-29 15:46:16 +03:00
Konstantin Tskhovrebov
34b6003371 as42: remove unused bunch files 2020-09-29 15:32:35 +03:00
Konstantin Tskhovrebov
c8def4543d Bump AS versions. 2020-09-29 15:32:35 +03:00
Konstantin Tskhovrebov
8a4aac53d8 as42: Fix override. 2020-09-29 15:32:34 +03:00
Andrei Klunnyi
ddfb86c839 KT-42014 ClassNotFoundException in Android Studio 4.2
KotlinCodeHintsPass was removed in 5fe1eaea but later a reference to
it appeared by accident in 50461e61.
2020-09-29 15:32:34 +03:00
Mikhail Zarechenskiy
8ff141357e as42: move plugin.xml to appropriate resource directy
#KT-41930 Fixed
2020-09-29 15:32:34 +03:00
Mikhail Zarechenskiy
11ac5bd32a as42: Fix test about forgotten bunches 2020-09-29 15:32:34 +03:00
Mikhail Zarechenskiy
929fb1f178 as42: Fix compilation of tests 2020-09-29 15:32:34 +03:00
Nikolay Krasko
99b9bc83a1 as42: Fix assertEqualsToFile usage 2020-09-29 15:32:34 +03:00
Nikolay Krasko
d83355e4c4 as42: Remove setupGradleSettings usage 2020-09-29 15:32:34 +03:00
Nikolay Krasko
fa9368125f as42: Remove clearing scratchesMapping in tests 2020-09-29 15:32:33 +03:00
Nikolay Krasko
c5b70797e2 as42: Fix compilation errors in AbstractJavaToKotlinConverterForWebDemoTest 2020-09-29 15:32:33 +03:00
Nikolay Krasko
1dc3cb5978 as42: Fix compilation errors caused by 202 platform 2020-09-29 15:32:33 +03:00
Nikolay Krasko
ecff2816ac as42: Fix duplication registration for com.intellij.psi.classFileDecompiler in plugin 2020-09-29 15:32:33 +03:00
Nikolay Krasko
a3bef10b97 as42: Add fastutil library to dependency to make KtUsefulTestCase.<clinit> work
java.lang.NoClassDefFoundError: it/unimi/dsi/fastutil/objects/Object2FloatMap
  at com.intellij.configurationStore.MyXmlSerializer$bindingProducer$1.createRootBinding(xmlSerializer.kt:172)
  at com.intellij.configurationStore.MyXmlSerializer$bindingProducer$1.createRootBinding(xmlSerializer.kt:170)
  at com.intellij.configurationStore.OldBindingProducer.getRootBinding(xmlSerializer.kt:154)
  at com.intellij.configurationStore.MyXmlSerializer.getRootBinding(xmlSerializer.kt:186)
  at com.intellij.util.xmlb.Serializer.getRootBinding(Serializer.java:18)
  at com.intellij.configurationStore.JdomSerializerImpl.serializeObjectInto(xmlSerializer.kt:78)
  at com.intellij.configurationStore.XmlSerializer.serializeObjectInto(xmlSerializer.kt:39)
  at com.intellij.configurationStore.XmlSerializer.serializeObjectInto$default(xmlSerializer.kt:38)
  at com.intellij.configurationStore.XmlSerializer.serializeObjectInto(xmlSerializer.kt)
  at com.intellij.codeInsight.CodeInsightSettings.writeExternal(CodeInsightSettings.java:231)
  at org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase.<clinit>(KtUsefulTestCase.java:123)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at junit.framework.TestSuite.createTest(TestSuite.java:60)
  at junit.framework.TestSuite.addTestMethod(TestSuite.java:307)
  at junit.framework.TestSuite.addTestsFromTestCase(TestSuite.java:150)
  at junit.framework.TestSuite.<init>(TestSuite.java:129)
2020-09-29 15:32:33 +03:00
Nikolay Krasko
1f3602c4b7 as42: Register DumbUtil service as it required in PsiElementFinderImpl 2020-09-29 15:32:33 +03:00
Nikolay Krasko
1b97511248 as42: Register classFileDecompiler through xml
It doesn't work otherwise. It's expected that extension point is registered
at the moment of ClassFileDecompilers instatiation or it fails.
2020-09-29 15:32:32 +03:00
Nikolay Krasko
5ba70b2cbb as42: Additional fixes for AS42 and 202 platform 2020-09-29 15:32:32 +03:00
Nikolay Krasko
2df030f583 as42: Apply 201 <-> AS41 diff 2020-09-29 15:32:32 +03:00
Nikolay Krasko
17e43aadaa Introduce AS42 bunch 2020-09-29 15:32:32 +03:00
Dmitry Petrov
1fc459ab4c JVM_IR KT-42260 add abstract overrides for generated stubs 2020-09-29 14:06:12 +03:00
Alexander Udalov
445b2d6eb1 JVM IR: minor, unmute bytecode text test
Also fix typo in the name
2020-09-29 12:38:54 +02:00
Alexander Udalov
b497f39c29 IR: do not try to render IrUninitializedType
This will improve exception messages in case some error happens on a
function whose return type is uninitialized, as in KT-41401.
2020-09-29 12:32:45 +02:00
Ilya Goncharov
522fdb3e59 [Gradle, JS] Empty compiler plugin classpath for KotlinJsIrLink
^KT-42245 fixed
2020-09-29 12:17:38 +03:00
Mikhail Glukhikh
cebbd21a1e FIR2IR: simplify analysis of companion' callable references 2020-09-29 11:51:21 +03:00
Jinseong Jeon
3151fc8577 FIR2IR: set dispatch receiver for companion member reference
#KT-42132 fixed
2020-09-29 11:51:21 +03:00
Jinseong Jeon
01d852c006 FIR: carry annotations on delegated property accessors 2020-09-29 11:35:19 +03:00
Aleksei Cherepanov
f1aa75fdf8 [JPS] Fix startup environment for Android Studio 2020-09-29 11:30:14 +03:00
Ilmir Usmanov
6ae2951850 Minor. Do not check suffix of function for tail-call optimization hit 2020-09-29 10:04:03 +02:00
Dmitriy Novozhilov
7d277b907f [FIR] Add new backend tests to "[JPS] Run fast FIR tests" configuration 2020-09-29 10:45:16 +03:00
Victor Petukhov
8f333aef3a Introduce warning about forbidden referencing to underscore named parameter of the catch block in a future release (KT-31567) 2020-09-29 10:23:45 +03:00
Victor Petukhov
09f1764f82 Introduce warning for private inline functions which return anonymous objects without specified supertypes (KT-33917) 2020-09-29 10:23:45 +03:00
Victor Petukhov
63d825fa24 Introduce warning for secondary constructor in enums without delegation to primary constructors (KT-35870) 2020-09-29 10:23:45 +03:00
Mikhail Glukhikh
416874f9d0 [FIR] Update BB test license comments 2020-09-29 10:21:22 +03:00
Mark Punzalan
238cc7c257 [FIR] Enable BytecodeText tests for FIR.
143 out of 767 tests (18.6%) are currently failing.
2020-09-29 10:21:21 +03:00
Mark Punzalan
69cd729506 [FIR] Enable BlackBoxAgainstJavaCodegen tests for FIR.
23 out of 156 tests (14.7%) are currently failing.
2020-09-29 10:21:21 +03:00
Mark Punzalan
348ba3e08c [FIR] Enable BlackBoxInlineCodegen tests for FIR.
16 out of 638 tests (2.5%) are currently failing.
2020-09-29 10:21:21 +03:00
Dmitriy Novozhilov
53a7d69ca6 [FIR] Make FirPropertyAccessor inherits FirCallableMemberDeclaration 2020-09-29 10:17:43 +03:00
Dmitriy Novozhilov
8f1062594f [FIR] Add ability to get scopes for declarations of TYPES resolve phase 2020-09-29 10:17:43 +03:00
Dmitriy Novozhilov
cc4f72e032 [FIR] Capture type from type parameter upper bound when needed 2020-09-29 10:17:43 +03:00
Dmitriy Novozhilov
393688ad82 [FIR] Add extension to FirSession to get ConeTypeCheckerContext 2020-09-29 10:17:42 +03:00
Dmitriy Novozhilov
9e4623c52b [FIR] Fix resolution of calls on super to avoid resolve to interface methods
#KT-38400 Fixed
2020-09-29 10:17:42 +03:00
Dmitriy Novozhilov
fb871a55a3 [FIR] Don't create backing field for property without explicit type
#KT-41977 Fixed
2020-09-29 10:17:42 +03:00
Dmitriy Novozhilov
0c0a8f9849 [FIR] Properly pass type attributes for inference of lambda with type variable as expected type
#KT-41989 Fixed
#KT-37317 Fixed
2020-09-29 10:17:42 +03:00
Dmitry Petrov
d9906ae8da Minor: unmute some bytecode listing tests in JVM_IR 2020-09-28 21:48:14 +03:00
Dmitry Petrov
565c156ddb Minor: reformat and cleanup warnings in CollectionStubMethodGenerator.kt 2020-09-28 21:48:14 +03:00
Yan Zhulanow
af1ed77d15 Parcelize: Fix NPE on availability check 2020-09-29 02:37:44 +09:00
pyos
8c423729e4 JVM_IR: slightly refactor ClassCodegen
* reduce code duplication for constructing JvmDeclarationOrigin;
 * move all `visitor.visitInnerClass` calls to before `visitor.done`;
 * make the order of members more strict & remove 3 mutable fields, as
   order-dependent mutation can lead to differences with incremental
   compilation due to inline calls (thus keeping mutable state in
   ClassCodegen is in general unsafe).
2020-09-28 17:08:01 +02:00
Andrei Klunnyi
79e5177126 [KTIJ-145] Memory leak detected 2020-09-28 15:21:21 +02:00
Yaroslav Chernyshev
819e83b68b [Gradle, Cocoapods] Complete logging for corner-case pod configurations 2020-09-28 16:09:36 +03:00
Yaroslav Chernyshev
5f4aa4db27 [Gradle, Cocoapods] Improve logging when deprecated podspec path is used
#KT-41948 Fixed
2020-09-28 16:09:36 +03:00
Toshiaki Kameyama
330502a0a6 KT-22665 "Create object" quick fix produce wrong code for enum (#2883)
* "Create object" quick fix: do not suggest for enum

#KT-22665 Fixed
2020-09-28 14:02:10 +02:00
Victor Petukhov
076eacb3d1 Check implicitly inferred Nothing inside special calls properly: compare constructors instead of types
^KT-41176 Open
2020-09-28 13:27:02 +03:00
Dmitriy Novozhilov
051d64742c Make SpaceBootstrap as default bootstrap source 2020-09-28 12:45:36 +03:00
Dmitriy Novozhilov
f39adfdf15 Update version of kotlin-build-gradle-plugin dependency 2020-09-28 12:43:10 +03:00
Dmitriy Novozhilov
7aef253a36 Add SpaceBootstrap option to kotlin-build-gradle-plugin 2020-09-28 12:43:10 +03:00
Vladimir Dolzhenko
a149d38c98 Register TYPE_CODE_FRAGMENT in KtStubElementTypes
Stubbed type has to be register earlier (see IStubFileElementType#checkNotInstantiatedTooLate)

^KT-28732 Fixed
2020-09-28 11:15:04 +02:00
Alexander Udalov
243db689af Build: fix "unknown enum constant" warning on Nls.Capitalization
#KTI-88 Fixed
2020-09-25 22:17:10 +02:00
Alexander Udalov
cb5c317f91 Gradle: support moduleName option in KotlinJvmOptions
#KT-42058 Fixed
2020-09-25 22:15:55 +02:00
Ilya Kirillov
0edbdaf0c7 Wizard: use EAP Kotlin versions for running import tests 2020-09-25 21:38:36 +03:00
Toshiaki Kameyama
bc580d2fd9 Introduce "Unused result of data class copy" inspection
#KT-34121 Fixed
2020-09-25 17:18:41 +02:00
Alexander Udalov
ae6d89b100 Minor, mute new test for FIR 2020-09-25 16:50:58 +02:00
pyos
bd6ead0467 JVM_IR: check for null when converting unboxed inline classes to strings
`C?` can be unboxed into `T?` if if wraps a reference type `T!!`, but in
this case `null` is not a valid value to pass to `toString-impl`.

 #KT-42005 Fixed
2020-09-25 16:50:34 +02:00
Igor Yakovlev
d2bdab2ef5 [FIR IDE] Add find usages tests for FIR plugin 2020-09-25 17:26:22 +03:00
Igor Yakovlev
d534d92123 [FIR IDE] Implement FIR for KotlinUsageTypeProvider 2020-09-25 17:26:22 +03:00
Toshiaki Kameyama
37ba9eccc4 KT-31553 Complete Statement: Wrong auto-insertion of closing curly brace for a code block (#2378)
* Complete statement: wrap property initializer by run/when block

#KT-31553 Fixed
2020-09-25 16:04:03 +02:00
Toshiaki Kameyama
14bdcb1e26 "Create enum constant" quick fix: suggest if expected type is Any
#KT-22666 Fixed
2020-09-25 15:57:11 +02:00
Mikhael Bogdanov
31ed5430ee Minor. Update test data 2020-09-25 15:45:56 +02:00
Alexander Udalov
f8f2be3d9f Minor, improve test on suspend invoke function reference
Add WITH_RUNTIME to enable it for the old backend, check the generated
function reference methods by starting the coroutine.
2020-09-25 14:52:46 +02:00
Steven Schäfer
20a5c44e41 JVM IR: Fix types in generated function reference constructor
For references to suspend functions this fixes an IllegalStateException
in the type mapper, which is what the "suspendFunctionMethodReference"
test is about.
2020-09-25 14:52:19 +02:00
Jinseong Jeon
f3db113a82 FIR2IR: use @Target to put annotations on either property or backing field 2020-09-25 14:45:49 +03:00
Jinseong Jeon
b59832c5fd FIR: refactor annotation-related utils 2020-09-25 14:45:48 +03:00
Jinseong Jeon
c8170702c6 FIR serializer: special version requirement for @JvmField property in interface companion 2020-09-25 14:45:48 +03:00
Jinseong Jeon
dc2226b42f FIR2IR: put @JvmField on field, not property
#KT-42118 fixed
2020-09-25 14:45:48 +03:00
Mikhail Glukhikh
ae23adb6f5 FIR Java: fix exception during synthetic property enhancement 2020-09-25 14:44:13 +03:00
Mikhail Glukhikh
368de43623 FIR Java: support Java setters more properly in use-site scope 2020-09-25 14:44:11 +03:00
Mikhail Glukhikh
873ea560a9 [FIR2IR] Fix conversion of flexible class reference 2020-09-25 14:44:10 +03:00
Mikhail Glukhikh
fe8e3e99ab [FIR Java] Hide function in scope in case it's an accessor by fact
#KT-42116 Fixed
2020-09-25 14:44:09 +03:00
Dmitry Petrov
70095712eb Minor: drop new bytecode listing test that passes only in JVM_IR
Unfortunately, there's no way to mute it in JVM right now.
Corresponding case is tracked as KT-42179, anyway.
2020-09-25 13:49:53 +03:00
Toshiaki Kameyama
a2f70dfc3d KT-41298 "Remove redundant 'with' call" intention works incorrectly with non-local returns and single-expression functions (#3713)
* Remove redundant 'with' call: remove redundant 'return' keyword

#KT-41298 Fixed
2020-09-25 12:48:31 +02:00
Konstantin Tskhovrebov
8a58ada4cd Fix version parser for versions without status "1.4-M1-42-IJ2020.1-1". 2020-09-25 12:17:17 +03:00
Roman Golyshev
945edfe987 KT-41859 Place classes after typealiases in DeserializedMemberScope
This way, the order in stubs and in deserialized text would be the same

On the next stub version bump, this fix should be reworked: the order
in the `DeserializedMemberScope` should be restored, and the order in
the stubs should be fixed to match the order in `MemberComparator`

^KT-41859 Fixed
2020-09-25 09:03:12 +00:00
Dmitry Petrov
cfd62c15bf JVM_IR KT-36994 don't generate stub if present in superclass 2020-09-25 11:57:33 +03:00
Dmitry Petrov
1adce11257 Add tests for KT-40191 2020-09-25 11:57:32 +03:00
Dmitry Petrov
a45b409e23 Minor: update generated JS tests 2020-09-25 11:57:32 +03:00
Mads Ager
4e518e77ca [JVM_IR] Fix expectations for parcelize tests.
The generated bridges now have line numbers as for the JVM
backend. There are some extra (irrelevant) labels in the JVM_IR
bytecode listing compared to JVM so expectations can still not
be shared even though they are closer.
2020-09-24 20:52:22 +02:00
Alexander Udalov
6d13fe8213 Minor, add explicit type argument to workaround KT-42175 2020-09-24 19:38:26 +02:00
pyos
f30e564c90 JVM_IR: do not use fields' superQualifierSymbol to cast the receiver
It's only for computing the field owner.

 #KT-42131 Fixed
2020-09-24 18:28:23 +02:00
anastasiia.spaseeva
a57c95624d Add changelog for 1.4.20-M1 2020-09-24 18:59:56 +03:00
Dmitriy Novozhilov
0d954f1190 Change module :core:compiler.backend.common.jvm to :compiler:backend.common.jvm 2020-09-24 16:51:06 +03:00
Dmitriy Novozhilov
b343d05e14 [FIR] Implement JvmTypeMapper based on cone types 2020-09-24 16:51:06 +03:00
Dmitriy Novozhilov
a28d0e0b7f Make IrTypeMapper delegate to AbstractTypeMapper 2020-09-24 16:51:06 +03:00
Dmitriy Novozhilov
86d4d320c4 Introduce AbstractTypeMapper based on type markers 2020-09-24 16:51:06 +03:00
Dmitriy Novozhilov
7380abac13 Split AsmUtils to descriptors dependent and independent parts 2020-09-24 16:51:05 +03:00
Dmitriy Novozhilov
54a5a066e8 Introduce new module for common parts of backend utils
Mainly it needed for abstract jvm type mapper for different type systems:
  IrTypes and ConeKotlinTypes
2020-09-24 16:51:05 +03:00
Dmitriy Novozhilov
c3a89e2507 Move common part of typeSignatureMapping.kt to :core:compiler.common.jvm 2020-09-24 16:51:05 +03:00
Dmitriy Novozhilov
d215c413cc Move TypeMappingMode to :core:compiler.common.jvm 2020-09-24 16:51:05 +03:00
Dmitriy Novozhilov
4ef57c120f [FIR] Consider variance of type parameters during java type enhancement
#KT-41940 Fixed
2020-09-24 15:43:20 +03:00
Dmitriy Novozhilov
a0db510e49 [FIR] Split creating fir for java declarations to separate methods 2020-09-24 14:59:35 +03:00
Dmitriy Novozhilov
0d29d6d361 [FIR] Transform when conditions with boolean expected type
#KT-42130 Fixed
2020-09-24 14:59:35 +03:00
Dmitriy Novozhilov
68a47d6efb [FIR] Add helpers for creating diagnostics on nullable source 2020-09-24 14:59:34 +03:00
Svyatoslav Kuzmich
162d9744ff [JS IR] Fix export of constructor with default argument (KT-41275) 2020-09-24 14:58:14 +03:00
Jinseong Jeon
5b136516c4 FIR: utilize checking subtype of functional type and finding invoke symbol 2020-09-24 14:05:52 +03:00
Jinseong Jeon
b10466f6a2 FIR: extend suspend conversion to subtype of functional type 2020-09-24 14:05:52 +03:00
Toshiaki Kameyama
17176c00ae Move lambda out: don't remove block comments
#KT-35357 Fixed
2020-09-24 12:05:43 +02:00
Roman Artemev
6670e4b21d [JS IR] Fix callable reference to generic constructor
- add tests
 - fix KT-42025
2020-09-24 12:50:47 +03:00
Ilmir Usmanov
4da67bf013 Minor. Unmute tests 2020-09-24 10:08:43 +02:00
Ilmir Usmanov
f22f10febb JVM_IR: Unbox inline classes in suspend functions
if the function can be verified to safely returning unboxed
inline class.
Box the return value on resume path.
2020-09-24 10:08:41 +02:00
Victor Petukhov
ccc9b757c0 Fix failing MPP tests after 25ea3df5ca through registering InferenceCompatibilityCheckerImpl instance 2020-09-24 10:49:33 +03:00
Mads Ager
ac742123fd [JVM_IR] Generate line numbers in synthetic bridges.
The current backend does that for some bridges. We do it consistently
for all bridges.

The line number used differs. For the JVM_IR backend, we use the
line number of the class to which the bridge is added. For the
JVM backend, that does not appear to be the case for bridges
in lambdas. I prefer the line number for a lambda invoke bridge
to be the line for the lambda instead os some surrounding class.
2020-09-24 08:59:48 +02:00
Yan Zhulanow
acf1a15f3e Parcelize: Add integration test for the new kotlin-parcelize plugin 2020-09-24 15:51:00 +09:00
Yan Zhulanow
2d158ffebd Parcelize: Add tests for deprecated (kotlinx.android.parcel) annotations 2020-09-24 15:50:59 +09:00
Yan Zhulanow
1d5ab192f5 Parcelize: Support old (kotlinx.android.parcel) annotations in Parcelize plugin 2020-09-24 15:50:59 +09:00
Yan Zhulanow
f0b93bf352 Parcelize: Move back annotations from kotlinx.android.parcel, deprecate them 2020-09-24 15:50:59 +09:00
Yan Zhulanow
75a1323974 Parcelize: Add deprecation warning to Android Extensions Gradle plugin (KT-42121) 2020-09-24 15:50:58 +09:00
Yan Zhulanow
419c88d1f2 Parcelize: Publish Parcelize compiler plugin to IDE dependencies repository 2020-09-24 15:50:58 +09:00
Yan Zhulanow
0ce9003ef7 Parcelize: Add missing dependencies to Parcelize components in tests 2020-09-24 15:50:58 +09:00
Yan Zhulanow
4bd8e2f78c Parcelize: Support the new Parcelize plugin in Gradle (KT-40030) 2020-09-24 15:50:57 +09:00
Yan Zhulanow
15b2850ee0 Parcelize: Add IDE support for the Parcelize compiler plugin with sources extracted from Android Extensions plugin (KT-40030) 2020-09-24 15:50:57 +09:00
Yan Zhulanow
b7796d63d8 Parcelize: Add the Parcelize compiler plugin with sources extracted from Android Extensions plugin (KT-40030) 2020-09-24 15:50:57 +09:00
Yan Zhulanow
c9bca165bc Update generated tests in android-extension-compiler 2020-09-24 15:50:57 +09:00
Steven Schäfer
aca9478998 Parcelize: Recognize (suspend) function types as serializable 2020-09-24 15:50:56 +09:00
Steven Schäfer
a2418484bb Parcelize: More robust code for locating layoutlib.jar 2020-09-24 15:50:56 +09:00
Steven Schäfer
9bf3f105d9 Parcelize: Add a test for sealed Parcelable classes 2020-09-24 15:50:56 +09:00
Steven Schäfer
77fb0ddd32 Parcelize: Update test expectations 2020-09-24 15:50:55 +09:00
rbares
9d000529e7 Fix JVM Parcelize use of Parceler 2020-09-24 15:50:55 +09:00
Steven Schäfer
8ab6411b93 Parcelize, JVM IR: Fix types in nested containers 2020-09-24 15:50:55 +09:00
Yan Zhulanow
eaa5d08736 Move all sources for android-tests to the 'test' source set 2020-09-24 15:50:55 +09:00
Steven Schäfer
3a7cc93c4e JVM IR: More precise check for calls to the implementation method in a default stub 2020-09-24 07:53:31 +02:00
Steven Schäfer
648bc9b1c4 JVM IR: Check for cycles when inlining into default stubs 2020-09-24 07:53:31 +02:00
Steven Schäfer
111c550f3c JVM IR: More tests for inlining in $default stubs 2020-09-24 07:53:31 +02:00
Steven Schäfer
5e27d9b089 JVM IR: Make inlining in $default stubs compatible with the JVM BE
The JVM BE inlines calls to the underlying function in a $default stub
verbatim, e.g., without renaming LVT entries or regenerating anonymous
objects. This commit introduces the same behavior in the JVM IR BE.

Fixes KT-36769.
2020-09-24 07:53:31 +02:00
Steven Schäfer
bef0437edb JVM IR: Generate LVT entries for parameters in inline $default methods 2020-09-24 07:53:31 +02:00
Ilya Kirillov
347a984ce0 FIR IDE: fix tests compilation 2020-09-23 21:43:58 +03:00
Ilya Kirillov
f36cd28696 FIR IDE: introduce withFir function 2020-09-23 21:43:58 +03:00
Ilya Kirillov
a516264923 FIR IDE: introduce withFirDeclaration function 2020-09-23 21:43:57 +03:00
Ilya Kirillov
ebc2ea59cd FIR IDE: introduce WeakFirRef for low level 2020-09-23 21:43:57 +03:00
Ilya Kirillov
8ee4c4e047 FIR IDE: introduce scoped fir functions 2020-09-23 21:43:57 +03:00
Ilya Kirillov
e19d2ecc73 FIR IDE: make FirModuleResolveState functions to be internal 2020-09-23 21:43:57 +03:00
Ilya Kirillov
8e41384f6d FIR IDE: separate LowLevelFirApiFacade from completion 2020-09-23 21:43:56 +03:00
Ilya Kirillov
7cc714c598 FIR IDE: move all public low level api to separate package 2020-09-23 21:43:56 +03:00
Ilya Kirillov
a0337ec10d FIR: fix invalid increasing inner array size in ArrayMapImpl 2020-09-23 21:43:56 +03:00
Ilya Kirillov
4238fd3842 FIR IDE: fix compilation after rename registerJavaSpecificComponents -> registerJavaSpecificResolveComponents 2020-09-23 21:43:55 +03:00
Ilya Kirillov
65ef629ca7 FIR: add ensureResolved to processConstructors 2020-09-23 21:43:55 +03:00
Ilya Kirillov
a570be4e76 FIR IDE: fix compilation of AbstractFirIdeDiagnosticsCollector.kt 2020-09-23 21:43:55 +03:00
Ilya Kirillov
fa570710ee FIR IDE: move diagnostic highlighting to separate
pass
2020-09-23 21:41:54 +03:00
Ilya Kirillov
1f4aff9643 FIR: add ensureResolved to FirSealedClassInheritorsTransformer 2020-09-23 21:41:53 +03:00
Ilya Kirillov
1c0bbaf225 FIR: add ensureResolved to FirExposedVisibilityDeclarationChecker 2020-09-23 21:41:53 +03:00
Ilya Kirillov
04fca93b1e FIR IDE: fix completion on parenthesized expression 2020-09-23 21:41:52 +03:00
Ilya Kirillov
879cf3b049 FIR IDE: do not fail whole completion on exception in lookup element creation 2020-09-23 21:41:52 +03:00
Ilya Kirillov
e9fb79741a FIR IDE: fix completion in initializer 2020-09-23 21:41:51 +03:00
Roman Golyshev
1ab6595ae2 FIR Completion: Use name filtering in completion contributor 2020-09-23 21:41:51 +03:00
Roman Golyshev
75d8710bf6 FIR IDE: Add name filtering to scope KtScope and implementations 2020-09-23 21:41:50 +03:00
Roman Golyshev
dc600e3caf FIR IDE: Fix buildKtType for ConeDefinitelyNotNullType 2020-09-23 21:41:49 +03:00
Ilya Kirillov
74298aae32 FIR IDE: invalidate sessions on exception 2020-09-23 21:41:48 +03:00
Ilya Kirillov
a743b80d17 FIR IDE: reuse up-to-date fir sessions 2020-09-23 21:41:47 +03:00
Ilya Kirillov
22c2d34b14 FIR IDE: add debug info when can not build KtType 2020-09-23 21:41:46 +03:00
Ilya Kirillov
a52262bf97 FIR IDE: run completion resolve under lock 2020-09-23 21:41:45 +03:00
Ilya Kirillov
f1c808384e FIR IDE: do not resolve symbols by transitive module dependencies 2020-09-23 21:41:44 +03:00
Ilya Kirillov
01875635db FIR IDE: do not resolve whole firFile in completion 2020-09-23 21:41:44 +03:00
Ilya Kirillov
2cfbfabe04 FIR IDE: do not recreate transformer phases & ScopeSession 2020-09-23 21:41:42 +03:00
Ilya Kirillov
9a99703f24 FIR IDE: implement incremental function analysis 2020-09-23 21:41:41 +03:00
Ilya Kirillov
8bcba00bb7 FIR IDE: do not resolve declarations if they are already resolved when we are inside lock 2020-09-23 21:41:40 +03:00
Ilya Kirillov
fc64d8d5e8 FIR IDE: reanalyse dependent modules only then they change 2020-09-23 21:41:40 +03:00
Ilya Kirillov
07be30c5db FIR IDE: separate fir session for current module from dependent modules session 2020-09-23 21:41:39 +03:00
Ilya Kirillov
ab897752de FIR IDE: remove invalid comments from FirIdeSessionFactory 2020-09-23 21:41:39 +03:00
Ilya Kirillov
4045c8fbf4 FIR IDE: fix invalid order of classes in classIdIfNonLocal 2020-09-23 21:41:38 +03:00
Ilya Kirillov
766063ba77 FIR IDE: optimize search for FirDeclaration by KtDeclaration 2020-09-23 21:41:37 +03:00
Ilya Kirillov
36e57545e8 FIR IDE: simplify psiModificationTrackerBasedCachedValue 2020-09-23 21:41:36 +03:00
Ilya Kirillov
73451b1616 FIR IDE: reresolve libraries only when they change 2020-09-23 21:41:35 +03:00
Ilya Kirillov
c48cc615dd FIR IDE: use KtAnalysisSession as receiver 2020-09-23 21:41:35 +03:00
Ilya Kirillov
d4786e06a9 FIR IDE: ignore PCE when running lazy resolve phase 2020-09-23 21:41:34 +03:00
Ilya Kirillov
9130392eb9 FIR IDE: resolve symbol to status to get it modality 2020-09-23 21:41:34 +03:00
Ilya Kirillov
0c47d42659 FIR IDE: add failing multiModuleLazyResolve test 2020-09-23 21:41:33 +03:00
Ilya Kirillov
a3a59131b5 FIR IDE: fix passing whenWithHeiarchy test 2020-09-23 21:41:32 +03:00
Roman Golyshev
6d0a5a0bb2 KT-41346 Implement NoReorderImplementation without reordering
- See the documentation for `DeserializedMemberScopeHelper` for the full
info about the fix and the issue
- Add `preserveDeclarationsOrdering` setting to
`DeserializationConfiguration`
- Enable this setting in `DeserializerForClassfileDecompiler`
- Also, use `List` instead of `Collection` to pass members to
`DeserializedMemberScope`. It is done to emphasize that the order of
the members is important and may be used
- Review: https://jetbrains.team/p/kt/review/1627
- ^KT-41346 Fixed
2020-09-23 15:27:51 +00:00
Roman Golyshev
bf371ff98a KT-41346 Refactor computeNonDeclared*
Change the signature of the `computeNonDeclared*` methods so they expect
mutable lists - it better suits their contracts. Also, add a little
documentations about the contract

Also, change `Collection` to `List` for incoming protos to `emphasize`
that their order might be used
2020-09-23 15:27:50 +00:00
Roman Golyshev
b1097c49d3 KT-41346 Move Implementation to DeserializedMemberScope 2020-09-23 15:27:49 +00:00
Roman Golyshev
5596bf33d8 KT-41346 Move related code to OptimizedImplementation
This does not change any semantics, only moves the code around
2020-09-23 15:27:49 +00:00
Roman Golyshev
c8878f862d KT-41346 Introduce inner OptimizedImplementation class
Make it implement `Implementation` and move definitions
there
2020-09-23 15:27:48 +00:00
Roman Golyshev
683dd57f24 KT-41346 Extract Implementation interface
This is a temporary interface to make refactoring easier
2020-09-23 15:27:47 +00:00
Roman Golyshev
341a7478ed KT-41346 Move removing non-available functions to protected method
This would allow to stricten contract on `computeNonDeclaredFunctions`
2020-09-23 15:27:47 +00:00
Roman Golyshev
4f4c25ca5e KT-41346 Cleanup DeserializedMemberScope 2020-09-23 15:27:46 +00:00
Ilya Kirillov
622f71bd65 Fix binary compatibility with AS
#KT-42061 fixed
2020-09-23 18:25:07 +03:00
Dmitry Petrov
1c4567c999 Add tests for KT-40152 2020-09-23 18:14:21 +03:00
Dmitry Petrov
cd37301ea2 Minor: TARGET_BACKEND=JVM in JVM-specific tests 2020-09-23 18:14:21 +03:00
Dmitry Petrov
99dbeecc40 Some more bytecode listing tests for JVM_IR 2020-09-23 18:14:20 +03:00
Victor Petukhov
25ea3df5ca Put fix in 9123c4f73baf77f8a50dede6c890c46f5ffafd6c under the inference compatibility flag 2020-09-23 17:15:58 +03:00
Victor Petukhov
bfb46befa5 Mark projection of a nullable captured type as not null during simplification constrains with it and a nullable type variable
^KT-41913 Fixed
2020-09-23 17:15:57 +03:00
Dmitriy Novozhilov
0f868ff83f [TEST] Regenerate tests 2020-09-23 17:12:14 +03:00
Alexander Udalov
84df996204 JVM IR: fix "step over" for inline function calls in conditions
Reimplement the same hacky approach used in the old backend (see
cc2fe6b0c6).

Previously, the debugger incorrectly stepped into Collections.kt on
"step over" inline function calls from stdlib like 'any'.

Since `if` and `when` expressions are represented the same way in IR,
the behavior is fixed for both of them. It's not the case in the old JVM
backend, where stepping over `when` conditions still suffers from the
same problem, which the newly added test checks.
2020-09-23 15:54:15 +02:00
Toshiaki Kameyama
4144adf4ee Make internal: don't suggest in interface
#KT-35346 Fixed
2020-09-23 15:34:09 +02:00
Toshiaki Kameyama
6e8565917e MapGetWithNotNullAssertionOperatorInspection: decrease severity to INFORMATION
#KT-33096 Fixed
2020-09-23 14:52:14 +02:00
Dmitriy Novozhilov
5e73e28695 [FIR-TEST] Fix psi consistency test due to 5efd533f 2020-09-23 15:32:09 +03:00
Dmitriy Novozhilov
10e7c0f1b2 [TEST] Fix long literal in testdata broken in 4374c06 2020-09-23 15:22:03 +03:00
Toshiaki Kameyama
a2bde2ffb2 Redundant overriding method: do not report when super method is not called
#KT-34959 Fixed
2020-09-23 14:12:06 +02:00
Roman Artemev
76ed09482f [IR BE] Fix inline class lowering
- provide additional type parameters from context when transforming
 constructor into static function.
 - fix KT-41771
 - add test
2020-09-23 14:49:38 +03:00
pyos
5954db18cb JVM_IR: fix lifting of arguments to object super constructors
If the arguments are reordered, they can not only be reads of temporary
variables, but also implicit type casts of said reads.

Fixes #KT-42002
2020-09-23 13:49:16 +02:00
Dmitriy Novozhilov
4d5e54cab6 [FIR] Unwrap definitely not null when matching overrides
#KT-41984 Fixed
2020-09-23 14:05:11 +03:00
Dmitriy Novozhilov
08b5f3ddde [FIR] Remove unused list with java.lang.Object member names 2020-09-23 14:05:11 +03:00
Dmitriy Novozhilov
896103b94b [FIR] Properly resolve implicit invoke calls
#KT-41990 Fixed
2020-09-23 14:05:11 +03:00
Dmitriy Novozhilov
a8e81e9ad1 [FIR] Add special node for implicit invoke calls 2020-09-23 14:05:11 +03:00
Dmitriy Novozhilov
696c8f07b4 [FIR] Add pretty toString to CallKind 2020-09-23 14:05:11 +03:00
Dmitriy Novozhilov
40a9bb6eac [FIR] Assume nullable types as good types for ILT approximation
#KT-41982 Fixed
2020-09-23 14:05:10 +03:00
Dmitriy Novozhilov
f069857492 [FIR] Cleanup annotations transform in FirExpressionsResolveTransformer 2020-09-23 14:05:10 +03:00
Dmitriy Novozhilov
0e91c8f048 [FIR] Create synthetic properties for members of java annotations
#KT-41939 Fixed
2020-09-23 14:05:10 +03:00
Dmitriy Novozhilov
da3a676c2a [FIR] Get rid of FirIntegerLiteralTypeScope and corresponding stuff 2020-09-23 14:05:10 +03:00
Dmitriy Novozhilov
4374c06537 [FIR] Approximate all integer literals which resolved in independent mode
#KT-42016
2020-09-23 14:05:10 +03:00
Dmitriy Novozhilov
5efd533f55 [FIR] Desugar unary plus and minus as part of integer literal
#KT-42016
2020-09-23 14:05:09 +03:00
Dmitriy Novozhilov
a018847f85 [FIR] Properly deserialize type attributes for type arguments
#KT-41991 Fixed
2020-09-23 14:05:09 +03:00
Dmitriy Novozhilov
a274216f14 [FIR] Check that expected lambda type is extension function using cone expected type
#KT-41991 In progress
2020-09-23 14:05:09 +03:00
Dmitriy Novozhilov
57a57d10da [FIR] Add rendering for attribites of cone types 2020-09-23 14:05:07 +03:00
Alexander Udalov
d48307ec34 JVM IR: do not copy type parameters into suspend lambda classes
Declarations inside that class are referencing the type parameters of
the containing function anyway, since we don't do any remapping. So the
resulting IR is slightly more correct, and doesn't lead to type
parameter/argument size mismatch error on IrBased/Wrapped-descriptors.

This reverts a part of 01da7f289b, which looks like it was no longer
necessary after 8d0ffa1444.

 #KT-42028 Fixed
2020-09-23 12:21:37 +02:00
Toshiaki Kameyama
bdf502edef Override/Implement members: don't add 'external' modifier
#KT-33466 Fixed
2020-09-23 11:51:08 +02:00
Vladimir Dolzhenko
4e5c61cd2f Notify if gradle points to invalid JDK
^KT-41141 Fixed
2020-09-23 09:44:07 +00:00
Vladimir Dolzhenko
be20a8bd80 Configure modules Kotlin language settings in a background with a progress
^KT-41936 Fixed
2020-09-23 09:18:52 +00:00
Dmitriy Dolovov
f0cbd6b1a5 HMPP: Avoid NPE during Kotlin facet serialization
^KT-42029
2020-09-23 10:39:11 +03:00
Mikhail Glukhikh
4653a16450 [FIR2IR] Add problematic test with in/out clash during approximation 2020-09-23 09:01:45 +03:00
Mikhail Glukhikh
3a57a541f4 FIR mangler: support captured types 2020-09-23 09:01:42 +03:00
Mikhail Glukhikh
b64b32e06b FIR: keep captured types in substitution scope 2020-09-23 09:00:57 +03:00
Mikhail Glukhikh
b7059a3eeb FIR: perform type approximation when completion isn't required 2020-09-23 09:00:57 +03:00
Mikhail Glukhikh
0310272738 FIR: perform more proper type approximation in completion
Note: test data change is questionable here
2020-09-23 09:00:57 +03:00
Mikhail Glukhikh
14cfc62745 FIR: fix calculation of type arguments for bare types 2020-09-23 09:00:57 +03:00
Mikhail Glukhikh
3c3aa3210e FIR: use FROM_EXPRESSION, not FOR_SUBTYPING capt. types in substitution 2020-09-23 09:00:56 +03:00
Mikhail Glukhikh
86d1a3be37 FIR serializer: throw exception on getting ConeIntegerLiteralType
This commit assumes that ILTs are forbidden
at the end of resolve, at least in public API
2020-09-23 09:00:56 +03:00
Mikhail Glukhikh
5a919cc827 FIR element serializer: drop duplicated approximation code 2020-09-23 09:00:56 +03:00
Mikhail Glukhikh
104f088d4e FIR serializer: throw exception on getting ConeCapturedType
This commit assumes that captured types are forbidden
at the end of resolve, at least in public API
2020-09-23 09:00:56 +03:00
Georgy Bronnikov
83ee705c0a IR: make IrClassReference.classType mutable 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
9d22ef948c IR: rework ScopeValidator 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
377940a6ea IR: handle IrVararg.varargElementType in RemapTypes 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
a542bb6af7 IR: check IrClassReference.classType in ScopeValidator 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
728c55973a IR: handle MemberAccessExpression type parameters in RemapTypes 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
3041a2815c IR: handle varargElementType in LocalDeclarationsLowering 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
8990344bb2 Varargs: add test 2020-09-22 23:53:41 +03:00
Georgy Bronnikov
67d7bf3269 IR: take care of supertypes when copying IrTypeParameters 2020-09-22 23:53:40 +03:00
Georgy Bronnikov
916d66c220 IR: add ScopeValidator 2020-09-22 23:53:40 +03:00
Georgy Bronnikov
382f423ab9 Mute a test under DCE 2020-09-22 23:53:40 +03:00
Georgy Bronnikov
33a2c69122 IR: remap types in LocalDeclarationsLowering 2020-09-22 23:53:40 +03:00
Georgy Bronnikov
1f3d344835 IR: add RemapTypes.kt 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
df1d9a0113 IR: make IrTypeParameter.superTypes persistent mutable field 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
a409976d28 IR: make IrValueParameter.varargElementType mutable 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
a3763e8276 IR: make IrTypeAlias.expandedType mutable 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
78fc690f29 IR: make IrLocaldelegatedProperty.type mutable 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
09a906cc9a IR: make IrTypeOperatorCall.typeOperand mutable 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
d9681e535d IR: make IrField.type mutable 2020-09-22 23:53:39 +03:00
Georgy Bronnikov
5065b1a4c6 Make IrValueDeclaration.type mutable 2020-09-22 23:53:38 +03:00
Georgy Bronnikov
1f37795e08 IR: make IrExpression.type mutable 2020-09-22 23:53:38 +03:00
Alexander Udalov
fde7fc6951 JVM IR: use correct file for final test output check in debugger tests
Before this change, a test with incorrect .ir.out could pass if the test
execution result was equivalent to the main .out file, which was a bit
confusing.
2020-09-22 19:15:35 +02:00
Mads Ager
78483930bc [JVM_IR] Fix offsets in constant propagation optimization.
Loads of temporary variables that contain constants are replaced
with a copy of the constant. This avoids locals loads and stores.
However, the copy of the constant needs to have the offset of
the load and not of the original constant.

Fixes KT-41963.
2020-09-22 19:12:06 +02:00
Alexander Udalov
f273edeb8e Build: upgrade language to 1.3 in cli, compiler plugins and Gradle plugin
The language/API version restriction here is to make sure the code works
with Gradle of earlier versions, but all versions of Gradle that we
support already depend on Kotlin 1.3+.
2020-09-22 19:10:58 +02:00
Alexander Udalov
5755c32c84 Minor, fix appendln deprecation warnings in cli
Can't use appendLine yet because this module is compiled with API
version 1.3.
2020-09-22 19:10:58 +02:00
Toshiaki Kameyama
f20a6b7fe1 Change function signature: add/change receiver type
#KT-21799 Fixed
2020-09-22 18:07:24 +02:00
Mads Ager
9f3ce099ee [JVM_IR] Fix line numbers for function reference invoke methods. 2020-09-22 16:59:46 +02:00
Ilya Goncharov
16b2379cd7 [Gradle, JS] Use new npm versions 2020-09-22 16:57:21 +03:00
Ilya Goncharov
9f9cb4f57e [Gradle, JS] Parallelize requests 2020-09-22 16:57:21 +03:00
Ilya Goncharov
a86dd8b5ba [Gradle, JS] Refactor with coroutines 2020-09-22 16:57:21 +03:00
Ilya Goncharov
4986e8c9cc [Gradle, JS] Fetch NPM package versions in separate module 2020-09-22 16:57:21 +03:00
Ilya Goncharov
db90c9cc88 [Gradle, JS] Move from NpmVersions 2020-09-22 16:57:21 +03:00
Mikhael Bogdanov
7d4a734791 Fix nullability of typePath parameter
#KT-41484 Fixed
2020-09-22 15:37:02 +02:00
Dmitry Petrov
0539b2b389 Mute some FIR->JVM_IR box tests
FIR generates delegated class members incorrectly (with non-substituted
signatures).
2020-09-22 16:32:27 +03:00
Dmitry Petrov
c03573fc18 JVM_IR fix override equivalence check for collection stub generation
KT-42043 KT-42033
2020-09-22 15:26:34 +03:00
Pavel Kirpichenkov
fdc134ff66 [NI] Use compatibility mode for KT-41934 2020-09-22 15:06:12 +03:00
Pavel Kirpichenkov
1465e10f12 Add language feature for inference compatibility mode
The feature is intended for updates in the inference algorithm
that change behaviour compared to the previous stable version.
2020-09-22 15:06:12 +03:00
Pavel Kirpichenkov
896fbbd1a3 [NI] Add extra ordering for ready-for-fixation variables
Helps fixing to more specific type in the following situations:
Type1 <: Var1
Var2 <: Var1
Var2 <: Type2

Type1 and Type2 may also be nullable and non-nullable versions of the same type.
Note that no additional constraints can be inferred from such constraints before fixation.
Resulting types for variables will always Type1 and Type2 may also be nullable and non-nullable versions of the same type.
Fixing Var1 first will make Var2's type more specific while fixing Var2 first
will make Var1's type less specific. The first is preferrable in general.
2020-09-22 15:06:12 +03:00
Kirill Shmakov
ec8465859c Support rerun of MPP tests for jvm target 2020-09-22 14:44:22 +03:00
Kirill Shmakov
23642d2f86 Support rerun of common MPP tests
This is to fix #KT-36909
2020-09-22 14:44:19 +03:00
Toshiaki Kameyama
c09c0468d4 Replace deprecated symbol usage: move named lambda argument outside parentheses
#KT-31523 Fixed
2020-09-22 10:51:36 +02:00
Toshiaki Kameyama
d9cf4ee732 Add intention to evaluate compile time expression
#KT-40251 Fixed
2020-09-22 10:46:54 +02:00
Mark Punzalan
8cac3f654c [FIR] Handle pre/postfix dec/increment of labeled expression 2020-09-22 11:06:27 +03:00
Mark Punzalan
f55ff8eb1b [FIR] Capture receiver for pre/postfix dec/increment of qualified access
This prevents double-evaluation of the receiver expression, which may
have side-effects. E.g.: a.b++
2020-09-22 10:20:46 +03:00
Mikhail Glukhikh
393189db8d FIR JVM serializer: fix compilation after rebase 2020-09-22 09:54:43 +03:00
pyos
6e143a2656 JVM_IR: collect free type parameters when serializing FIR metadata
The "free" in "createFreeFakeLambdaDescriptor" and such refers to the
fact that there are no references to type parameters from outside the
current declaration. This is necessary because at the point where the
metadata is written, the type parameters may not even be in scope (e.g.
local delegated properties are serialized at class level, but may refer
to function-scope type parameters).
2020-09-22 09:35:50 +03:00
pyos
aa58ed9234 JVM_IR: partially implement FIR local delegated property reflection
Type parameter references are broken, just like for lambdas. Also, the
code is super ugly.
2020-09-22 09:35:45 +03:00
Alexander Udalov
6f622920e7 Minor, deduplicate matching JVM_OLD/JVM_IR duplicateJvmSignature tests 2020-09-21 18:49:36 +02:00
Mads Ager
05c662ec55 [JVM_IR] Remove line numbers from delegated member functions.
This fixes smart step into for delegated member functions.
Additionally, we align on the string "memberFunctionName(...)"
for expression non-null checks for both JVM_IR and JVM
backends.
2020-09-21 18:49:08 +02:00
Leonid Startsev
eea4ff33a0 Adapt serialization exceptions constructor calls to signature change
(see https://github.com/Kotlin/kotlinx.serialization/pull/1054)
2020-09-21 17:10:12 +03:00
Leonid Startsev
fe5dbf75fa Add diagnostic to check whether provided custom serializer matches
type of the property.

Check for serializer type mismatch only when custom serializer is present

Otherwise, there are too many false positives on e.g. PolymorphicSerializer

#KT-36329 Fixed

Fixes https://github.com/Kotlin/kotlinx.serialization/issues/830
2020-09-21 17:10:12 +03:00
Leonid Startsev
bc432ecb85 Improve remove/specify type intentions in Explicit API mode
Do not suggest to remove type for public declarations

 #KT-38915 Fixed

Do not show intention to specify type when corresponding quickfix is available

 #KT-39026 Fixed
2020-09-21 17:10:10 +03:00
Leonid Startsev
5f0e7c3c3f Check return type of internal @PublishedApi functions in Explicit API mode
#KT-38981 Fixed
2020-09-21 17:03:06 +03:00
Mikhail Glukhikh
a9972913a6 [FIR TEST] Add some FIR_IDENTICAL to fix recently changed tests 2020-09-21 16:20:37 +03:00
Andrey Uskov
c9054e7a04 Added possibility to split gradle-integration-tests locally
Added property `gradle.integration.tests.split.tasks` for splitting
gradle-integration-tests into several tasks locally (like it happens
at TeamCity)
2020-09-21 13:34:32 +03:00
Andrey Uskov
d151f0e573 Fixed splitting gradle tests into different tasks 2020-09-21 13:34:25 +03:00
Dmitry Savvinov
769c741d87 Revert "Pack jvm builtins into kotlin-stdlib shipped with idea plugin"
This reverts commit 0b5aedb0a2.
2020-09-18 17:30:44 +03:00
Dmitry Savvinov
6db70bb97d Minor: fix forgotten testdata after 6a55475392 2020-09-18 16:42:49 +03:00
Ilya Gorbunov
0b5aedb0a2 Pack jvm builtins into kotlin-stdlib shipped with idea plugin
This lessens the possibility that kotlin plugin will get different
variants of builtins in the classpath, thus making builtins resources
loading less order-dependent.
2020-09-18 15:11:45 +03:00
Leonid Startsev
f2cf64aec7 Create plugin context before launching actual psi2ir process.
Because IrPluginContextImpl constructor creates new instance of
BuiltinSymbolsBase (with symbols for stdlib declarations like `arrayOf` etc),
there should be at least one pass of `declareUnboundSymbolsAsDependencies`
between creation and usage in plugin. Such pass is located between psi2ir
and compiler plugins application. If plugin context is created inside lambda,
right before plugins are applied, the symbols will remain unbound.

 #KT-41764 Fixed
2020-09-18 14:58:38 +03:00
Dmitry Petrov
ee3ada4e55 JVM_IR KT-40304 KT-41998 special handling for 'removeAt' 2020-09-18 14:27:36 +03:00
Kirill Shmakov
9008944860 Use target of the test in rerun dialog
This is to fix #KT-37799
2020-09-18 13:15:41 +03:00
Ilmir Usmanov
b406022315 Mark Unit unspillable if it is merged with unspillable Unit
#KT-42004: Fixed
2020-09-17 23:23:14 +02:00
Alexander Udalov
f6e4705d9c Regenerate KotlinSteppingTestGenerated 2020-09-17 22:16:47 +02:00
Mads Ager
a62ffbf992 [JVM_IR] Ignore fwBackingField stepping test.
The test relies on fixes not yet landed, so it currently fails.
2020-09-17 22:14:30 +02:00
Georgy Bronnikov
8343ca093c IR: bugfix in wrapped, IR-based descriptors 2020-09-17 19:16:03 +03:00
Georgy Bronnikov
c2bdedfbae JVM_IR: remove descriptor usage from JvmSignatureClashDetector 2020-09-17 19:16:03 +03:00
Georgy Bronnikov
c7f10c272a JVM_IR: remove .toKotlinType() from PromisedValue 2020-09-17 19:16:03 +03:00
Georgy Bronnikov
7c5e255fa3 JVM_IR: remove .toKotlinType() from IrInlineIntrinsicsSupport 2020-09-17 19:16:03 +03:00
Georgy Bronnikov
991a832d8c JVM_IR: remove KotlinType reference from jvm/ir/IrUtils.kt 2020-09-17 19:16:03 +03:00
Georgy Bronnikov
3c0fbd5f45 IR: remove .toKotlinType() usage from coerceToUnit calls in lowerings 2020-09-17 19:16:03 +03:00
Dmitry Savvinov
6a55475392 Dont show warning for KT-21515 with LV>=1.3 2020-09-17 18:33:19 +03:00
Dmitriy Novozhilov
57ceb0fa20 [FIR] Don't create call to this in generated provideDelegate for top-level extension properies 2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
a666eee67b [FIR] Properly deserialize annotations on typealias and underlying type 2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
748049daa3 [FIR] Don't call inline lambda twice in withFullBodyResolve 2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
f9de2621b2 [FIR] Minor, fix TODO in constantValues
KT-8507
2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
535de7bdc8 [FIR] Cleanup code of FirTypeDeserializer.kt 2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
8deab3559e [FIR] Get rid of FirDeserializationComponents 2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
d4cc98fab1 [FIR] Safe VersionRequirementTable in deserialized declarations 2020-09-17 17:23:26 +03:00
Dmitriy Novozhilov
7c5160a968 [FIR] Remove meaningless TODO's 2020-09-17 17:23:25 +03:00
Dmitriy Novozhilov
73c8059884 [FIR] Properly deserialize arrays in annotation arguments 2020-09-17 17:23:25 +03:00
Dmitriy Novozhilov
ae819ff059 [FIR] Add configurable typeRef to FirArrayOfCallBuilder 2020-09-17 17:23:25 +03:00
Dmitriy Novozhilov
d4891cb464 [FIR] Move Jsr305State from FirSession to separate component 2020-09-17 17:23:25 +03:00
Dmitriy Novozhilov
93d63f7c66 [FIR] Get rid of FirResolvedFunctionTypeRef 2020-09-17 17:23:25 +03:00
Dmitriy Novozhilov
edab50ac61 [FIR] Get rid of FirResolvedTypeRef.isSuspend 2020-09-17 17:23:25 +03:00
Dmitriy Novozhilov
6c5cf8eda3 [FIR] Cleanup code in body resolve 2020-09-17 17:23:24 +03:00
Dmitriy Novozhilov
d4038f35b6 [FIR] Make BodyResolveComponents an abstract class 2020-09-17 17:23:24 +03:00
Ilmir Usmanov
dfd7f33bd3 Minor. Add test with reified type parameter 2020-09-17 16:14:07 +02:00
Ilmir Usmanov
9ecf5dc9af Support is/as operations on suspend callable reference conversion 2020-09-17 16:14:04 +02:00
Vladimir Dolzhenko
dfe6c42f63 Remove 203 version from idea range for kotlin plugin 1.4.20
^KT-41976 Fixed
2020-09-17 11:58:46 +02:00
Vladimir Dolzhenko
985f2b839c Add regression tests to cover Unused symbol with private anonymous object property
^KT-39454 Fixed
2020-09-17 11:54:53 +02:00
Jinseong Jeon
d1ba69044e FIR: update the type of anonymous function as SAM 2020-09-17 12:45:26 +03:00
Ilmir Usmanov
f960201f52 Ignore type parameters of inline class
when checking whether we can return unboxed inline class
from suspend function
2020-09-17 11:20:48 +02:00
Dmitry Petrov
fbfe56e0cc JVM_IR KT-41915 compare Kotlin signatures when adding collection stubs 2020-09-17 11:37:29 +03:00
Toshiaki Kameyama
0e4bd70c29 Redundant nullable return type: fix false positive with elvis return
#KT-41878 Fixed
2020-09-17 09:49:02 +02:00
Vladimir Dolzhenko
51d405e950 Add json output for IDE performance tests 2020-09-17 08:57:08 +02:00
Jinseong Jeon
72dea05854 FIR2IR: approximate type argument if reified 2020-09-17 09:43:46 +03:00
Jinseong Jeon
721248f883 FIR: migrate type-related utils to relevant file 2020-09-17 09:32:52 +03:00
Mikhail Glukhikh
0436a555d5 [FIR serializer] Support type approximation
Before this commit we relied on a fact that exotic types aren't
possible at serialization stage. However, in non-ABI mode we can get
even a private function (e.g. top-level private), so we have to perform
this approximation.
2020-09-17 09:19:34 +03:00
Mikhail Glukhikh
94a30ff904 [FIR] Drop redundant type check 2020-09-17 09:16:00 +03:00
Roman Artemev
4da7e762fe [IR] Skip hidden parameters in WrappedDescriptors 2020-09-17 00:57:17 +03:00
Roman Artemev
1da2830e2b [IR] Support hidden parameters in ir builder 2020-09-17 00:57:16 +03:00
Roman Artemev
b84084d54e [IR] Support hidden parameters in IrMangler
- make them be skipped in signature
2020-09-17 00:57:16 +03:00
Roman Artemev
8209b70a2f [KLIB] Support isHidden flag in deserialization 2020-09-17 00:57:16 +03:00
Roman Artemev
83d6255294 [KLIB] Support isHidden in proto flags 2020-09-17 00:57:16 +03:00
Roman Artemev
f01941d1dd [IR] Support isHidden is IrFactory API
- add API to create a hidden value parameter
2020-09-17 00:57:16 +03:00
Roman Artemev
79e2886da1 [IR] Add isHidden flag into IrValueParameter 2020-09-17 00:57:15 +03:00
Ilya Kirillov
be16fa76ab Wizard: fix not auto-updated artifactId on project name change
#KT-41695 fixed
2020-09-17 00:29:48 +03:00
Ilya Kirillov
ca3b327592 Wizard: add missing jvm target version for tests in Groovy DSL
#KT-41958 fixed
2020-09-17 00:29:48 +03:00
Ilya Kirillov
ee2f0f45fc Wizard: ignore Kotlin repo in tests
They may differ sometimes as they depend on the latest Kotlin release
2020-09-17 00:29:47 +03:00
pyos
9b157fd291 JVM_IR: remove a descriptor-related hack from InterfaceLowering
It will break with FIR.
2020-09-16 18:58:40 +02:00
pyos
dd913ef450 JVM_IR: move common metadata serialization code to ClassCodegen 2020-09-16 18:58:40 +02:00
pyos
a06181771f IR: make DescriptorMetadataSource a subtype of MetadataSource
FirMetadataSource is a metadata source too.
2020-09-16 18:58:40 +02:00
Alexander Udalov
86cc5840ed JVM IR: unmute stepping test noParameterExtensionLambdaArgumentCallInInline3.kt
Bytecode generated by JVM IR ensures that on multiline expressions,
every call is stepped over, which seems better than in the old backend.

Also remove kt34905.kt since it duplicates this test case.
2020-09-16 17:52:27 +02:00
Alexander Udalov
0cccc61654 JVM IR: unmute stepping test smartStepIntoInterfaceImpl.kt
The only difference seems to be that step into IImpl.fooOverride is
actually supported in JVM_IR. Also fix slightly incorrect line numbers
in the comments.
2020-09-16 17:52:27 +02:00
Mads Ager
e943d76266 [JVM_IR] Rebase fwBackingField stepping test.
The difference is that JVM_IR generates line numbers for the
constructor field initialization.

In this case:

```
29: class B {
30:   // comment
31:   val bPropVal: Int,
32:   // comment
33:   var bProbVar: Int
34: ) {
```

the line numbers for the field initializations are 31 and 33 where
in the current backend the whole constructor has line number 29.
2020-09-16 17:51:22 +02:00
Лихолетов Михаил
cfc1ebb4be [FIR] Support several annotation argument diagnostics 2020-09-16 16:53:31 +03:00
Mikhail Glukhikh
0c13d3197c [FIR] Fix non-serializable type argument at the end of resolve 2020-09-16 16:53:29 +03:00
Dmitry Petrov
54d5494ecd JVM_IR special handling for 'remove' collection method stub 2020-09-16 15:36:16 +03:00
Kirill Shmakov
e6e47f8848 Make watchOS test runnable on another bitness 2020-09-16 14:58:28 +03:00
Alexey Tsvetkov
c56952a01e Provide message collector for Java IC analysis
#KT-37446 Fixed
2020-09-16 14:04:51 +03:00
Victor Petukhov
17db188b0e Add regression test for already fixed issue KT-41396 2020-09-16 14:02:32 +03:00
Alexander Anisimov
5e46e5355d Merge pull request #3706 from 1anisim/patch-2
Update ReadMe.md
2020-09-16 13:59:12 +03:00
Igor Yakovlev
57ebd0e13a [FIR IDE] Remove unused code and add logging to LightClassProvider
Remove not used icons from independed icons provider
Add class logging to KotlinUsageTypeProvider
Remove redundant comments from LightClassProvider
2020-09-16 10:47:47 +03:00
Igor Yakovlev
be4fcd626c [FIR IDE] Separate searchers from descriptor usage
KotlinConstructorDelegationCallReferenceSearcher
KotlinConventionMethodReferencesSearcher
KotlinDefinitionsSearcher
KotlinOverridingMethodReferenceSearcher
KotlinPropertyAccessorsReferenceSearcher
KotlinTodoSearcher
2020-09-16 10:47:47 +03:00
Abduqodiri Qurbonzoda
36e6247125 Add more details about bit shift operations #KT-41112 2020-09-16 04:05:12 +03:00
Abduqodiri Qurbonzoda
1c0ac850e8 Incorrect documentation for rangeTo function #KT-41356 2020-09-16 04:05:12 +03:00
Steven Schäfer
56c4a27887 Android Synthetics: Resolve unbound symbols in the AndroidIrExtension 2020-09-15 22:36:50 +02:00
Steven Schäfer
fe466f3dc6 Android Synthetics: Update test infrastructure 2020-09-15 22:36:50 +02:00
Alexander Udalov
fb183ec3f8 Never use JVM IR to compile coroutines-experimental
JVM IR backend doesn't support old coroutines, so we disable it via
-Xno-use-ir, just as for the main source set. This option has no effect
for the current master builds, but will be necessary once JVM IR is
enabled project-wide.
2020-09-15 19:59:14 +02:00
Alexander Udalov
f6187b9d64 Remove dependency of fir:tree:tree-generator on kotlin-reflect
This dependency was unused. It allows to avoid waiting for compiling
kotlin-reflect (which includes descriptors, deserialization, etc.)
before compiling FIR modules and thus improves total build time.
2020-09-15 19:59:14 +02:00
Ilmir Usmanov
58146c4452 Keep DebugMetadata annotation when regenerate lambda with state-machine
When a suspend lambda does not capture crossinline lambda, it is
generated with as state-machine, since it does not inline anything.
However, when regenerating, the inliner used to remove all DebugMetadata
annotations to avoid duplication. This lead to missing annotation if
the lambda is regenerated, but state-machine is not regenerated.
This change fixes the blind spot by readding the annotation after
regeneration.
 #KT-41789 Fixed
2020-09-15 19:57:02 +02:00
Kirill Shmakov
12489ef1b4 Show run test gutters only when appropriate
This is to fix KT-36370
2020-09-15 19:09:52 +03:00
Victor Petukhov
8cabfda832 Add regression test for already fixed issue KT-41885 2020-09-15 19:03:16 +03:00
Ivan Gavrilovic
7c360c0068 Kotlin Gradle plugin - use build service to share incremental compilation info
For large projects, incremental comilation mapping information may be quite
large. With configuration caching enabled, each task gets its own copy of that
state, and for a project with 1400 subprojects, this resulted in 3.6GB of additional
state stored (once task graph is cached).

This change introduces IncrementalModuleInfoProvider which allows build service
to be used if configuration caching is enabled, and it falls back to static
constant otherwise.
2020-09-15 15:19:56 +03:00
Igor Yakovlev
16d51eb510 [FIR IDE] Add ReadWriteAccessChecker FIR stub 2020-09-15 11:25:07 +03:00
Igor Yakovlev
7a19bc32a7 [FIR IDE] Add base implementation of find usages of overrides 2020-09-15 11:25:07 +03:00
Igor Yakovlev
f05630fcab [FIR IDE] Enabled search services and added services stubs 2020-09-15 11:25:07 +03:00
Igor Yakovlev
1a10275d0d [FIR IDE] Enabled usages services and added services stubs 2020-09-15 11:25:06 +03:00
Igor Yakovlev
75347d06b9 [FIR IDE] Move IconProvider in fir independed module 2020-09-15 11:25:06 +03:00
Igor Yakovlev
e30f09d513 [FIR IDE] Separate find usages logic from descriptors 2020-09-15 11:25:06 +03:00
Pavel Kirpichenkov
b102042dd8 Minor: add regression test for KT-41806 2020-09-15 10:52:47 +03:00
Jinseong Jeon
2fad935ce2 FIR deserializer: load inline/external flags properly 2020-09-15 10:21:35 +03:00
Sergey Bogolepov
2154c94100 [Native] Add tests for resolvable properties 2020-09-15 13:54:10 +07:00
Sergey Bogolepov
5a0a853d9b [Native] Add simple symbol mechanism to konan.properties
Java Properties format is extremely trivial and does not support any
kind of references or variables. It makes konan.properties repetitive.
This commits adds support of perl-like `$` sigil which allows to
reference properties inside values.
2020-09-15 13:54:09 +07:00
Pavel Punegov
fc35b5398c Mute test in Native 2020-09-14 23:41:47 +03:00
Nikita Bobko
0b2d05ee30 Minor: dereference archiveFile when logging it
Previously it was "Plugin artifacts packed to task ':zipPlugin' property 'archiveFile'"
After fix it's    "Plugin artifacts packed to /home/bobko/jb/kotlin/build/kotlin-plugin.zip"

`archiveFile` has type `Provider<RegularFile>`
2020-09-14 21:37:09 +03:00
Aleksei Cherepanov
c64c319231 JPS. Suppress "Add new files to git" during portable artifacts extraction 2020-09-14 19:06:43 +03:00
Roman Golyshev
7e2269a3cf Update completion-ranking-kotlin dependency (0.1.2 -> 0.1.3) 2020-09-14 15:19:36 +00:00
Mikhail Glukhikh
97ebf2867a [FIR] Get rid of type mismatch suppression during diagnostic casting 2020-09-14 18:08:33 +03:00
Mikhail Glukhikh
6fd3b011ca [FIR] Simplify substitution for unsafe-variant type parameter types
#KT-41792 Fixed
2020-09-14 18:08:31 +03:00
Mikhail Glukhikh
e1b4108e4a [FIR2IR] Mute some tests due to captured type problems 2020-09-14 18:08:30 +03:00
Mikhail Glukhikh
aa897db132 [FIR] Introduce UnsafeVariance attribute (see KT-41792) 2020-09-14 18:08:29 +03:00
Mikhail Glukhikh
e4aaae9ae7 FIR call completion: approximate type argument types
This commit removes some captured / ILT types at the end of resolve
2020-09-14 18:08:28 +03:00
Mikhail Glukhikh
3b828ac62b [FIR] Bad test data fixes (around captured types) 2020-09-14 18:08:27 +03:00
Mikhail Glukhikh
cf5480a398 [FIR] Questionable test data fixes (around captured types) 2020-09-14 18:08:26 +03:00
Mikhail Glukhikh
4605a65f41 [FIR] Good test data fixes (around captured types) 2020-09-14 17:56:39 +03:00
Mikhail Glukhikh
c2d9fc469a Get rid of exception at ConeKotlinType.varargElementType 2020-09-14 17:56:37 +03:00
Mikhail Glukhikh
2f61a2f56f [FIR] Provide correct comparison of captured types 2020-09-14 17:56:36 +03:00
Mikhail Glukhikh
b5f8fec213 FIR substitution: use standard approximation to remove captured types 2020-09-14 17:56:35 +03:00
Mikhail Glukhikh
7a73787680 [FIR] Use captureFromArguments in createSubstitution
This commit breaks ~57 resolve tests because captured types
now exists at the end of FIR resolve
2020-09-14 17:56:34 +03:00
Mikhail Glukhikh
e83f3bbf04 Introduce substitution to ConeTypeContext.captureFromArguments
This commit itself does not influence anything
2020-09-14 17:56:33 +03:00
Mikhail Glukhikh
414842343d [FIR2IR] Add another problematic test with captured type argument 2020-09-14 17:56:32 +03:00
Mikhail Glukhikh
267382d86b [FIR2IR] Add problematic test with incorrect type argument
NB: we should not have <E> as AbstractFirBasedSymbol type argument,
because it isn't accessible in the current scope. Star expected instead.
2020-09-14 17:56:30 +03:00
Dmitry Petrov
b395771d01 KT-37050 don't generate redundant special bridges
Loosely based on https://github.com/JetBrains/kotlin/pull/3662
2020-09-14 16:13:34 +03:00
Alexander Udalov
f0282bcfdf JVM IR: add module name for internal functions before "$default"
The change is a bit complicated because the name mapping logic is
refactored so that we would compute the needed suffix first (either
module name, or multifile part class name), and then shove it into the
mangled name between the original function name and "$default", if the
function in question is the default arguments adapter.

The main motivation for this change was to fix KT-41809, but as a side
effect, private functions with default arguments in multifile parts now
also contain the file name, just like normal private functions.

 #KT-41809 Fixed
2020-09-14 13:18:24 +02:00
Alexander Udalov
93f38e1c61 JVM IR: minor, use more specific types in MethodSignatureMapper 2020-09-14 13:18:24 +02:00
Alexander Udalov
2a0f64ebcb JVM IR: do not generate Deprecated(HIDDEN) class as synthetic
#KT-41810 Fixed
2020-09-14 13:18:24 +02:00
Ivan Gavrilovic
162dc3aa0c KT-41295: Friend paths and compiler options compatible with conf caching
This change fixes serialization of friend paths and it uses
a file collection to record all friend paths. Also, when
computing the tested classpath for android projects, we now avoid
resolving the file collection until necessary.

Fixes: KT-41295
Test: ConfigurationCacheForAndroidIT
2020-09-14 13:31:52 +03:00
Dmitriy Novozhilov
be916e556a [FIR] Properly update type of block after postponed analysis of it's content 2020-09-14 11:46:06 +03:00
Dmitriy Novozhilov
535898c8a4 [FIR] Fix processing integer operator calls for not integer types 2020-09-14 10:57:10 +03:00
Dmitriy Novozhilov
def647c094 [FIR] Don't constraints for return expressions of lambda if it has Unit return type 2020-09-14 10:57:09 +03:00
Dmitriy Novozhilov
8e0d0d2fd8 Remove redundant safe call to fix FIR compilation 2020-09-14 10:57:09 +03:00
Dmitriy Novozhilov
4929417aea Remove redundant type arguments to fix compilation with FIR
#KT-41835
2020-09-14 10:57:09 +03:00
Dmitriy Novozhilov
324aaaddad [FIR] Rename createArrayOf to createArrayType 2020-09-14 10:57:09 +03:00
Dmitriy Novozhilov
3b941a8f43 [FIR] Complete types of array literals in annotations 2020-09-14 10:57:09 +03:00
Dmitriy Novozhilov
fbe964c074 [FIR] Transform annotations on safe calls 2020-09-14 10:57:08 +03:00
Jinseong Jeon
0bd7de158c FIR: update suspend lambda type during declaration resolution 2020-09-14 10:20:45 +03:00
Jinseong Jeon
680dd64211 FIR2IR: pick return target based on matched IrFunction 2020-09-14 10:09:51 +03:00
Jinseong Jeon
6ebad9589a FIR2IR: set proper IR origin for iterator in ranges 2020-09-14 10:09:45 +03:00
Mikhail Glukhikh
578e707ab9 FIR2IR: set VARIABLE_AS_FUNCTION origin only for invoke receivers 2020-09-14 10:09:32 +03:00
Mikhail Glukhikh
f0a2a62405 [FIR2IR] Minor: coneTypeSafe -> coneType 2020-09-14 09:18:46 +03:00
Jinseong Jeon
89ffce22d8 FIR2IR: set proper IR origin for variable as function 2020-09-14 09:05:08 +03:00
Andrey Uskov
bf3a7e5fea Add more tasks in Gradle build for running GradleIT in parallel 2020-09-13 22:48:12 +03:00
Nikolay Krasko
a7f57646bf Prevent rebuilding by avoid registering doFirst on source tasks (KTI-324)
Do the check for empty directories at the build end instead.

Registering doFirst makes constant recompile when switching from Kotlin to Kotlin
Native composite with the reason:

```
The task was not up-to-date because of the following reasons:
One or more additional actions for task ':kotlin:kotlin-stdlib-common:compileKotlinCommon' have changed.
```

Exact reason why actions are different is not clear (there's a single
action in both builds in comparison), but probably the reason in
different types due to usage of composite build.

 #KTI-324 Fixed
2020-09-13 19:18:01 +03:00
Alexander Udalov
9250d86915 JVM IR: generate field for private companion object in interface as synthetic 2020-09-13 09:13:27 +02:00
Alexander Udalov
fc141a52da IR: minor, make IrClass.companionObject return IrClass 2020-09-13 09:13:26 +02:00
Alexander Udalov
2f86554d5a IR: don't produce fake overrides for static and private declarations
Note that only irrelevantStaticProperty.kt failed before this change.
Having private declarations caused no problems, but it seems incorrect,
so it's fixed now and irrelevantPrivateDeclarations is added just in
case.

 #KT-41848 Fixed
2020-09-12 20:01:34 +02:00
Roman Golyshev
703150e3ad FIR IDE: Refactor LowLevelFirApiFacade.kt 2020-09-12 11:49:36 +00:00
Roman Golyshev
edb277b30a FIR Completion: Enable passing tests 2020-09-12 11:49:36 +00:00
Roman Golyshev
dcc22d3e5d FIR IDE: Fix completion in property setters
Property consists of getter and setter (both optional). The setter
have a single `value` parameter with type

Because of it, we have to make a separate 'frankenstein setter' with
original resolved header, but with the body of the fake one

It seems that getters does not have such issues
2020-09-12 11:49:35 +00:00
Roman Golyshev
5c1520305b FIR IDE: Build symbols from any FirValueParameter 2020-09-12 11:49:35 +00:00
Roman Golyshev
ae8933dbd2 FIR IDE: Correctly handle properties in KtFirCompletionCandidateChecker
- Introduce `EnclosingDeclarationContext` to remove code duplication
2020-09-12 11:49:34 +00:00
Roman Golyshev
6fd871d0ba FIR IDE: Add building completion context for properties 2020-09-12 11:49:33 +00:00
Roman Golyshev
58965d1e71 FIR IDE: Implement RawFirBuilder::buildPropertyWithBody, add tests 2020-09-12 11:49:33 +00:00
Georgy Bronnikov
5f57311015 JVM_IR: remove .toKotlinType() from intrinsics.Equals 2020-09-12 12:59:12 +03:00
Georgy Bronnikov
2c1735c211 JVM_IR: remove descriptor usage from JvmOptimizationLowering 2020-09-12 12:59:12 +03:00
Georgy Bronnikov
a14c9018b1 JVM_IR: remove descriptor usage from SyntheticAccessorLowering 2020-09-12 12:59:12 +03:00
Georgy Bronnikov
3327524e18 JVM_IR: remove descriptor usage from TypeAliasAnnotationMethodsLowering 2020-09-12 12:59:12 +03:00
Georgy Bronnikov
905978a458 JVM_IR: remove descriptor usage from JvmCachedDeclarations 2020-09-12 12:59:12 +03:00
Georgy Bronnikov
92b03e7ede JVM_IR: Remove descriptor usage from IrSourceCompilerForInline 2020-09-12 12:59:03 +03:00
Georgy Bronnikov
0a66dbf2b5 JVM_IR: remove descriptor usage in CompareTo intrinsic 2020-09-12 12:58:29 +03:00
Toshiaki Kameyama
370622087b Redundant nullable return type: false negative with return expression in local function or lambda
#KT-41817 Fixed
2020-09-11 19:09:57 +02:00
Toshiaki Kameyama
de3907e8cc Redundant nullable return type: fix false positive with non-local return
#KT-41800 Fixed
2020-09-11 19:09:57 +02:00
Ilya Gorbunov
349cad7b9a Minor: migrate remaining scanReduceIndexed usages 2020-09-11 19:08:04 +03:00
Alexander Gorshenev
744f290fc4 A proper modality calculation was missing in IR fake override construction algorithm
#KT-41765 Fixed
2020-09-11 18:56:17 +03:00
Louis CAD
2886f48795 Improve spelling in Kotlin Test module's README.md 2020-09-11 18:45:58 +03:00
Louis CAD
64408c19f8 Add missing "The" article in kotlin.test doc 2020-09-11 18:20:37 +03:00
Andrey Uskov
175a8bec9d Make KotlinCoreEnvironment.disposeApplicationEnvironment() public
The method disposeApplicationEnvironment should be used in Gradle
after the configuration phase. This allows not to recreate the compiler
environment after each kts file compilation and improve overall
performance the evaluation and configuration phases.
2020-09-11 15:13:11 +03:00
Victor Petukhov
fca6436170 Fix IDE test after bcd33da6f8 2020-09-11 13:51:15 +03:00
Igor Yakovlev
e08763f3dd [ULC] Add annotations for PsiTypes in UltraLight classes
WIP on KT-41148, KT-41406, KT-41420
2020-09-11 12:49:05 +03:00
Igor Yakovlev
b82d8cd4f4 [ULC] Fixed invalid access to lightclass infrastructure from UL 2020-09-11 12:49:05 +03:00
Igor Yakovlev
8fc94ddb8c [UCL] Minor fixes 2020-09-11 12:49:05 +03:00
Igor Yakovlev
97ac86273a [ULC] Add support of const fields to multifile facade 2020-09-11 12:49:05 +03:00
Igor Yakovlev
309bf49a83 Update lightclass tests renderer
+mute invalid old light classes tests
2020-09-11 12:49:04 +03:00
Igor Yakovlev
c70383cc70 [ULC] Add compiler flag -Xdisable-ultra-light-classes to fallback to light implementation in CLI 2020-09-11 12:49:04 +03:00
Nicolay Mitropolsky
e53db4c771 Uast: fixing WrappedUAnnotation identifiers 2020-09-11 12:49:04 +03:00
Igor Yakovlev
4b8f1bb362 [ULC] Add LanguageVersionSettings to CliLightClassGenerationSupport
+ refactoring
2020-09-11 12:49:04 +03:00
Igor Yakovlev
31b4a021a9 [ULC] Add JvmDeclarationOriginKind.DELEGATION to DeclarationOriginKindForOrigin of delegated methods 2020-09-11 12:49:03 +03:00
Igor Yakovlev
b263e1c924 [ULC] Remove nullability annotation for UL backing fields of private props 2020-09-11 12:49:03 +03:00
Igor Yakovlev
a36d53e086 [ULC] Skip nullability annotation for backing field of lateinit property 2020-09-11 12:49:03 +03:00
Igor Yakovlev
cd32cf7828 [ULC] Add PsiElement overrides for UL elements with source 2020-09-11 12:49:03 +03:00
Igor Yakovlev
131c14626c [ULC] Fix invalid alias search for UL classes 2020-09-11 12:49:03 +03:00
Igor Yakovlev
2c16ae968d [ULC] Add support @receiver annotation site to UL classes 2020-09-11 12:49:02 +03:00
Igor Yakovlev
dbb4337ac4 [ULC] Fix invalid annotation resolve for KtUltraLightParameterForSetterParameter 2020-09-11 12:49:02 +03:00
Igor Yakovlev
db6aa9140d [ULC] Refactor for lightAnnotations classes 2020-09-11 12:49:02 +03:00
Igor Yakovlev
c4cee35cca [ULC] Fixed invalid UL facade annotations
1) Hide annotations for MultiFile class
2) Remove nullability for private fields
2020-09-11 12:49:01 +03:00
Igor Yakovlev
6542ea9ba1 [ULC] Add constant evaluation to light classes service 2020-09-11 12:49:01 +03:00
Igor Yakovlev
55bb8f24e3 [ULC] Move UltraLightSupport to service provided bridge 2020-09-11 12:49:01 +03:00
Igor Yakovlev
7cb2631991 [ULC] Fix light class Coherence test 2020-09-11 12:49:01 +03:00
Igor Yakovlev
7b0eb51f8d [ULC] Add annotation support for UL facades 2020-09-11 12:49:01 +03:00
Igor Yakovlev
a5e304f520 [ULC] Better nullability annotations for light classes 2020-09-11 12:49:00 +03:00
Igor Yakovlev
c3810dc223 [ULC] Fixed UL backing field initializers 2020-09-11 12:49:00 +03:00
Igor Yakovlev
129979b0ff [ULC] Improve UL facades for private properties without accessors 2020-09-11 12:49:00 +03:00
Igor Yakovlev
025e2f2fe9 [ULC] Better support for UL MultifileFacade classes 2020-09-11 12:49:00 +03:00
Igor Yakovlev
bc12fb0d6b [ULC] Enable UL for script classes 2020-09-11 12:49:00 +03:00
Igor Yakovlev
1d248f1a00 [ULC] Fixed invalid fqName for script inner classes 2020-09-11 12:49:00 +03:00
Igor Yakovlev
236e41e024 [ULC] Fixed invalid super type for UL scripts 2020-09-11 12:48:59 +03:00
Igor Yakovlev
6accc8fcf9 [ULC] Fixed invalid constructor parameter list for UL script 2020-09-11 12:48:59 +03:00
Dmitriy Novozhilov
bf91ada06c [NI] Suppress false positive IDEA warnings in NewConstraintSystemImpl 2020-09-11 12:13:34 +03:00
Dmitriy Novozhilov
178cef5631 [FIR] Don't create synchronized lazy for constraint system in candidate 2020-09-11 12:13:34 +03:00
Dmitriy Novozhilov
a528deef0a [FIR] Update testdata due to previous commit and KT-37638
JavaSymbolProvider looks for available class names using KotlinJavaPsiFacade
  which don't return package private java classes which lays in files
  with names that don't match with class names, so we can not build FIR
  for such classes
2020-09-11 12:13:34 +03:00
Dmitriy Novozhilov
1dc3c93efa [FIR] Don't assume types with not found symbol as error types 2020-09-11 12:13:33 +03:00
Dmitriy Novozhilov
7f692be11e [FIR] Properly detect callable reference type according conversions 2020-09-11 12:13:33 +03:00
Mikhail Glukhikh
ec93e5886a [FIR2IR] Fix generation of accessors' extension receiver (f/o case) 2020-09-11 11:43:00 +03:00
Dmitriy Novozhilov
36d2129fd3 Move common deserialization classes from :core:metadata modules 2020-09-11 10:08:37 +03:00
Dmitriy Novozhilov
07a3009d43 Introduce new modules for common parts of deserialization 2020-09-11 10:08:37 +03:00
Dmitriy Novozhilov
2f4bd626fc [FIR] Make constant values in fir serialization internal
This is needed to avoid possible name clash with ConstantValue from FE 1.0
2020-09-11 10:08:36 +03:00
Dmitriy Novozhilov
9e1e525343 Fix circular dependency between :core:compiler:common.jvm and :core:metadata.jvm 2020-09-11 10:08:36 +03:00
Dmitriy Novozhilov
c82d9ea9f4 Remove dependency on :compiler:frontend.java from :compiler:fir:java 2020-09-11 10:08:36 +03:00
Dmitriy Novozhilov
1417fcecb8 Move more common parts from :compiler:descriptors.jvm 2020-09-11 10:08:36 +03:00
Dmitriy Novozhilov
192e07a07b [FIR] Remove dependency on FE 1.0 modules form :compiler:fir:fir-deserialization 2020-09-11 10:08:35 +03:00
Dmitriy Novozhilov
5d4d07066b Move common deserialization components to :core:metadata and :core:metadata.jvm 2020-09-11 10:08:35 +03:00
Dmitriy Novozhilov
cdab00fdc8 [FIR] Remove dependency on :core:deserialization from :compiler:fir:fir-serialization 2020-09-11 10:08:35 +03:00
Dmitriy Novozhilov
9beeb51227 [FIR] Implement fir-specific contract values and fix annotations serialization 2020-09-11 10:08:35 +03:00
Dmitriy Novozhilov
e1ad1aabc4 Move RequireKotlinConstants to :core:compiler.common 2020-09-11 10:08:34 +03:00
Dmitriy Novozhilov
8d2e89a9ea Move ProtoEnumFlags to :core:metadata 2020-09-11 10:08:34 +03:00
Igor Chevdar
e39ce91253 [IR] Fixed fake override builder for lowerings 2020-09-11 09:35:01 +05:00
Andrey Uskov
7f4bda0d52 Enable FUS internal mode on IDE launching 2020-09-10 21:07:14 +03:00
Alexander Udalov
ae9c1af883 Do not use erroneous unsigned/signed comparison in UnsignedArraysTest
The error SIGNED_CONSTANT_CONVERTED_TO_UNSIGNED is suppressed in this
file, and JVM IR is not able to generate comparisons of UInt and Long
(KT-41780).
2020-09-10 19:27:09 +02:00
Victor Petukhov
bcd33da6f8 Don't check an argument type during passing it to vararg in the named form to avoid false positives if the argument type is type variable yet
^KT-41144 Fixed
2020-09-10 19:38:26 +03:00
Ilya Goncharov
2c4c8cdf01 [Wizard] Update versions in wizard 2020-09-10 19:25:26 +03:00
Vladimir Dolzhenko
38854ce40b Disable profilerConfig for AHeavyInspectionsPerformanceTest 2020-09-10 16:23:51 +02:00
Vyacheslav Gerasimov
e3b07120bb Build: Don't retry tests in local builds 2020-09-10 16:50:43 +03:00
Kirill Shmakov
29f3811bab Update gradle tooling
In response to a766369e72
2020-09-10 16:07:30 +03:00
Kirill Shmakov
60b812f452 Reorder arguments in KotlinNativeTest for better debug
Previously it was broken on Linux and worked poorly on macOS
2020-09-10 16:07:28 +03:00
1anisim
b202cf0f55 Apply suggestions from code review
Co-authored-by: Alexander Udalov <udalov@users.noreply.github.com>
2020-09-10 15:30:33 +03:00
1anisim
33d3e1f13e Update ReadMe.md 2020-09-10 14:13:42 +03:00
Jinseong Jeon
ef58e0cd71 FIR2IR: refactor adapter generation 2020-09-10 11:31:24 +03:00
Jinseong Jeon
5fdd06676f FIR: discriminate candidates with suspend conversion 2020-09-10 11:31:24 +03:00
Jinseong Jeon
6de8ba40c1 FIR: initial support of suspend conversion on arguments 2020-09-10 11:31:24 +03:00
Jinseong Jeon
49679f3145 FIR: map arguments for overloading indexed access operator 2020-09-10 11:25:36 +03:00
Vladimir Dolzhenko
a73856be66 Add warn message to ReplaceWithIgnoreCaseEquals inspection.
Relates to ^KT-40016
2020-09-10 08:20:54 +00:00
Vladimir Dolzhenko
5036673187 Improve package caching in KotlinJavaPsiFacade
^KT-33394 Fixed
2020-09-10 07:38:46 +00:00
Andrey Uskov
05d3e48564 Implemented collecting statistics about JS target mode 2020-09-10 00:39:27 +03:00
Ilya Goncharov
4716228500 Add js generate executable default collecting statistics
#KT-40462 Fixed
2020-09-10 00:39:24 +03:00
Ilya Goncharov
405e271b68 Add js generate externals collecting statistics
#KT-39995 Fixed
2020-09-10 00:39:20 +03:00
Vladimir Dolzhenko
6f03e42ef7 Revert back Inspection: convert initialized val to non-null type
Relates to ^KT-35757
Relates to ^KT-19321
2020-09-09 23:38:21 +02:00
Vladimir Ilmov
12ebd429bc Revert "Light classes support for declarations in multipart classes."
This reverts commit 3ea51a982c.
2020-09-09 19:46:03 +02:00
Vladimir Dolzhenko
d324ae6cda Fix AS 4.0 compilation 2020-09-09 17:59:49 +02:00
Ilmir Usmanov
0492a52a6a Minor. Regenerate tests 2020-09-09 17:43:43 +02:00
Ilmir Usmanov
52f9569d33 Generate CHECKCAST Object inside the markers
otherwise, the unboxing interferes with bytecode analysis.
2020-09-09 17:43:42 +02:00
Ilmir Usmanov
e8a451072e Minor. Add tests with same JvmType in covariant override 2020-09-09 17:43:41 +02:00
Ilmir Usmanov
7cbd067460 Add tests with resume path 2020-09-09 17:43:39 +02:00
Ilmir Usmanov
1c97eafea8 Check for COROUTINE_SUSPENDED inside callable reference
#KT-41429 Fixed
2020-09-09 17:43:37 +02:00
Ilmir Usmanov
4303e8126f Do not generate suspend markers inside callable reference
#KT-41429
 #KT-25519 Fixed
2020-09-09 17:43:36 +02:00
Ilmir Usmanov
ccc5b7afe0 Box inline class in resume path of suspend call
#KT-41429
2020-09-09 17:43:35 +02:00
Ilmir Usmanov
023cdd7cd4 Support not boxing inline class of reference class
even if the class is other than Any.
 #KT-41429 In progress
2020-09-09 17:43:34 +02:00
Toshiaki Kameyama
5c011bc954 Don't report when property is multi-line and action is MOVE 2020-09-09 22:31:56 +07:00
Toshiaki Kameyama
4569b85a16 MoveVariableDeclarationIntoWhenInspection: report it if initializer is single line even if property is multi line
#KT-39467 Fixed
2020-09-09 22:31:56 +07:00
Vladimir Ilmov
75d4c7e91c Find stdlib usages test case
relates to #KT-39196
2020-09-09 17:30:04 +02:00
Vladimir Ilmov
8b239d89b6 SourceNavigationHelper multifile classes support
Use .class files as BINARY instead of .metadata.
 relates to #KT-39196
2020-09-09 17:30:04 +02:00
Vyacheslav Gerasimov
3764eeba25 Build: Setup gradle.test-retry plugin for all test tasks in the project 2020-09-09 18:20:01 +03:00
Alexander Udalov
3d7619421f JVM IR: fix exception on star projection in type parameter upper bound
#KT-41761 Fixed
2020-09-09 17:07:52 +02:00
Victor Petukhov
685d16ec68 NI: don't do substitution for unsupported callable descriptors to use as callable references
^KT-41729 Fixed
2020-09-09 18:00:41 +03:00
Ilya Goncharov
668098f3a8 [Gradle, JS] Add simple files without kotlinx.html
^KT-41696 fixed
2020-09-09 17:24:08 +03:00
Vladimir Ilmov
3ea51a982c Light classes support for declarations in multipart classes.
relates to #KT-39196
2020-09-09 15:01:55 +02:00
Vladimir Ilmov
a5d91339b5 (lightClass) multifile classes facade in libraries added
relates to #KT-39196
2020-09-09 15:01:54 +02:00
Vladimir Dolzhenko
ac22232b8d Register disposable startup items in PluginStartupService 2020-09-09 12:51:19 +00:00
Vladimir Dolzhenko
e5985ad98b Rename PluginStartupService to PluginStartupApplicationService 2020-09-09 12:51:18 +00:00
Victor Petukhov
c1ebd33833 Capture flexible intersection types properly: take into account both bounds and use the same captured arguments for them
^KT-41693 Fixed
2020-09-09 14:52:12 +03:00
Victor Petukhov
140edb2215 Consider intersection with ILT subtype of ILT 2020-09-09 13:55:07 +03:00
Roman Golyshev
7bd9c52732 FIR Completion: Fix completion in function calls (foo.bar<caret>())
In such expressions, `KtCallExpression` wraps `KtSimpleNameExpression`,
so `getQualifiedExpressionForSelector()` returns `null`

Also, enable tests that are fixed by this
2020-09-09 13:14:08 +03:00
Roman Golyshev
2d4d48b401 FIR IDE: Invert the order of the scopes for completion
This way local declarations will be fetched first
2020-09-09 13:14:08 +03:00
Dmitriy Novozhilov
f748d8cf70 [FIR] Extract ResolutionContext to separate file 2020-09-09 12:38:36 +03:00
Dmitriy Novozhilov
1a84ec9677 [FIR] Mark all session components respectively to they have mutable state or not
Also add documentation for all fir annotations
2020-09-09 12:38:35 +03:00
Dmitriy Novozhilov
8686e3779e [FIR] Make all session components abstract classes 2020-09-09 12:38:35 +03:00
Dmitriy Novozhilov
caf325934c [FIR] Unmake FirSamResolver as session component
It can not be stored in session because it depends on scope session
  and have mutable state
2020-09-09 12:38:35 +03:00
Dmitriy Novozhilov
29addd2a2b [FIR] Make InferenceComponents session component 2020-09-09 12:38:35 +03:00
Dmitriy Novozhilov
41b395b0aa [FIR] Extract mutable state from InferenceComponents 2020-09-09 12:38:35 +03:00
Dmitriy Novozhilov
d70858edfa [FIR] Get rid of inference components in CheckerSink 2020-09-09 12:38:35 +03:00
Dmitriy Novozhilov
912676d868 [FIR] Introduce ResolutionContext and get rid of components in Candidate 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
c53ffca34f [FIR] Extract BodyResolveContext from FirAbstractBodyResolveTransformer 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
edb1273355 [FIR] Report ResolutionDiagnostics instead of applicability in resolve 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
a148db9d81 [FIR] Get rid of CandidateApplicability.SYNTHETIC_RESOLVED 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
19707667fd [FIR] Cleanup detection that applicability is successful 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
68f3d84e22 [FIR] Use CandidateApplicability from FE 1.0 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
cd557ad178 Change order of enum entries in CandidateApplicability 2020-09-09 12:38:34 +03:00
Dmitriy Novozhilov
d1568c1ce6 Rename ResolutionCandidateApplicability to CandidateApplicability 2020-09-09 12:38:33 +03:00
Mikhail Glukhikh
db2e3f219f [FIR] Keep bare type for type alias case 2020-09-09 12:16:09 +03:00
Alexander Udalov
3a5d0ab427 JVM IR: fix HashCode intrinsic for generics substituted with primitives
The problem here was that although the IR type of the expression was
primitive, the type of the actual expression in the bytecode generated
after type erasure was `Ljava/lang/Object;`, and we were trying to call
a non-existing method `Object.hashCode(Object)`.

 #KT-41669 Fixed
2020-09-08 23:37:00 +02:00
Alexander Udalov
c46c80822c JVM IR: fix enclosing constructor for lambdas in inner classes
Before this change, we stored the enclosing constructor in a map in
JvmBackendContext before moving lambdas and local classes out of
initializer blocks. However, in case the lambda was declared in an inner
class, we stored a reference to the unlowered constructor of the inner
class, whose JVM signature is "()V" instead of the correct "(LOuter;)V".
Java reflection then threw exception if we tried to call
`getEnclosingConstructor()` on such class at runtime. Proguard finished
with errors for the same reason.

It turns out that we can just store the fact that the class has been
moved, and load the matching constructor in codegen, where everything is
already lowered and guaranteed to match with the signatures of the
actual generated declarations.

 #KT-41668 Fixed
2020-09-08 23:37:00 +02:00
Alexander Udalov
228e329d1f JVM IR: generate enclosing constructor only for lambdas in initializers
There was a typo in JvmLocalClassPopupLowering which allowed the
EnclosingMethod for lambdas and anonymous classes in initializers to
become any function in a class, in case when there was no primary
constructor in that class. E.g. in the added test, `getIrrelevantField`
was the EnclosingMethod of the lambda class before this change.
2020-09-08 23:37:00 +02:00
Ilya Kirillov
2ab68b3245 Wizard: move boolean setting description to the bottom 2020-09-09 00:20:58 +03:00
Ilya Kirillov
ce00366c7f Wizard: fix when first selected template cannot be applied 2020-09-09 00:20:58 +03:00
Ilya Kirillov
3a6011fae9 Wizard: always generate android MPP tests
#KT-40940 fixed
2020-09-09 00:20:57 +03:00
Ilya Kirillov
553c525701 Wizard: fix Gradle buildscript formatting
#KT-37965 fixed
2020-09-09 00:20:57 +03:00
Ilya Kirillov
0f799d593d Wizard: specify test platform to use on JVM
#KT-37965 fixed
2020-09-09 00:20:57 +03:00
Ilya Kirillov
7002e86d6b Wizard: fix path & artifactId updating on name update
#KT-41695 fixed
2020-09-09 00:20:56 +03:00
Alexander Udalov
929b5f727d Build: add :compiler:fir:entrypoint to compilerModules
This fixes FIR usage from the CLI compiler.
2020-09-08 20:26:28 +02:00
Alexander Udalov
7fb7dc0210 Fix deprecation warnings related to Project extensions 2020-09-08 20:26:20 +02:00
Alexander Udalov
196893bc4d Build: fix more warnings about deprecated/Alpha MPP plugins
Using the new flags added in KT-41340 and
413d02621b.
2020-09-08 20:26:20 +02:00
Mads Ager
06680452dc [JVM_IR] Always look for default lambdas in the inliner.
This allows compiler plugins such as Compose to do custom
default argument handling in methods that do not have origin
`FUNCTION_FOR_DEFAULT_PARAMETER`.

The code still bails out early is there is not defaults
mask, so there should be no compile-time penalty.
2020-09-08 19:07:31 +02:00
anastasiia.spaseeva
a12e22bba4 [Spec tests] Fix dependencies for spec tests generator 2020-09-08 16:14:47 +03:00
1anisim
cf9f120d55 Update ReadMe.md
Added a section about Multiplatform Capabilities, highlighted KMM
2020-09-08 14:54:47 +03:00
Ilya Goncharov
9d3426486b [Gradle, JS] Support explicitApi in js plugin
^KT-41328 fixed
2020-09-08 12:54:11 +03:00
Dmitriy Novozhilov
28a83b04cd [FIR] Minor. Fix code style 2020-09-08 12:51:13 +03:00
Dmitriy Novozhilov
67604dcb66 [FIR] Add generator for checkers aliases and sets of checkers 2020-09-08 12:51:12 +03:00
Dmitriy Novozhilov
4de57fcac2 [FIR] Initialize module for checkers generator 2020-09-08 12:51:12 +03:00
Dmitriy Novozhilov
6656669551 [FIR] Fix typo 2020-09-08 12:51:12 +03:00
Dmitriy Novozhilov
3b9e86ccbf [FIR] Remove empty file 2020-09-08 12:51:12 +03:00
Dmitriy Novozhilov
a8a5ed3cd3 [FIR] Get rid of runCheck in checkers components 2020-09-08 12:51:11 +03:00
Dmitriy Novozhilov
71a855112e [FIR] Get rid of ParallelDiagnosticsCollector 2020-09-08 12:51:11 +03:00
Ilya Goncharov
20a1ea0413 [Wizard, JS] Change js compiler default
^KT-41656 fixed
2020-09-08 12:48:52 +03:00
Dmitry Petrov
6746bd81d5 PSI2IR tests for KT-41735 2020-09-08 12:34:19 +03:00
Vladimir Ilmov
aa04c0b5df Parent call already on KotlinBuiltInDecompiler.kt:79 2020-09-08 10:59:17 +02:00
Steven Schäfer
44ffb1fb3e Psi2Ir: Fix SAM conversion with new inference 2020-09-08 11:14:14 +03:00
pyos
75891e860b FIR2IR: split getIrPropertyOrFieldSymbol, handle locals there 2020-09-08 08:40:13 +03:00
pyos
f198a19ab0 FIR2IR: add local delegated property generation 2020-09-08 08:40:07 +03:00
Steven Schäfer
4792be2522 JVM IR: Optimize static property references (KT-36975) 2020-09-07 21:01:29 +02:00
Alexander Udalov
669fda6b77 Do not add duplicate $completion when compiling JVM against JVM_IR
This change fixes JvmOldAgainstIrBoxInlineTestGenerated.Suspend and
JvmIrAgainstOldBoxInlineTestGenerated.Suspend tests.
2020-09-07 19:41:38 +02:00
Alexander Udalov
ae448ececb Minor, add compileKotlinAgainstKotlin test case for KT-41374 2020-09-07 19:41:37 +02:00
Alexander Udalov
9e357354fb Add JVM/JVM_IR mixed compilation tests for compileKotlinAgainstKotlin/boxInline 2020-09-07 19:41:37 +02:00
Alexander Udalov
e324733b01 Tests: accept TargetBackend in KotlinBaseTest.createConfiguration 2020-09-07 19:41:37 +02:00
Alexander Udalov
0dea6b94c6 JVM IR: unmute boxInline tests on enclosing method/class
In box tests, only check that Java reflection does not crash on the
EnclosingMethod attribute generated in these classes. If it doesn't
crash, most likely it returns the value that can be read from the class
file by ASM, which is what the newly added bytecode listing tests are
checking now.
2020-09-07 19:41:37 +02:00
Ilya Goncharov
985088a3f1 [Gradle, JS] Add test on dukat with both mode 2020-09-07 19:29:17 +03:00
Ilya Goncharov
b694e3b009 [Gradle, JS] Dukat with both create externals only once 2020-09-07 19:29:17 +03:00
Ilya Goncharov
210cd982f0 [Gradle, JS] Use webpack config's required dependencies in karma
^KT-41663 fixed
^KT-41662 fixed
2020-09-07 18:56:47 +03:00
Pavel Kirpichenkov
b5aca450b1 Make cancellation checks when building resolution anchor caches
^KT-39734
2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
54811613f4 Minor: drop unnecessary wrapper for utility function
^KT-39734
2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
1ff064d98d Make Kotlin OOCBM updater for modules internal again
Replace direct API access with dedicated service.
2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
9d6bdc6fc4 Support modification tracking for source-dependent LibraryInfo
#KT-39734
2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
6abd708d42 Preserve order entry to module info mapping in IdeaModelInfosCache 2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
24d8aee2bb Prioritize resolution anchors during resolution
When required dependency is present both in source dependencies and in
library dependencies, the former one should be selected.

#KT-24309
2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
f8ee976720 Use union of all available descriptors in composite importing scope 2020-09-07 18:52:10 +03:00
Pavel Kirpichenkov
5892bdf3f4 Extend import resolution for library-to-source analysis
Use composite importing scope for references when resolution anchors are enabled.
Composite scope provides additional descriptors from scope of resolution anchor module.
Overriding old importing scope with a new one is not possible as it breaks library
dependencies on other libraries, which are inaccessible in anchor scope (scope for sources).

KT-24309 In Progress
2020-09-07 18:52:10 +03:00
Roman Golyshev
8c876e4621 FIR IDE: Get rid of originalPosition in KtFirCompletionCandidateChecker 2020-09-07 18:46:38 +03:00
Roman Golyshev
828fc2520c FIR IDE: Refactor KtFirCompletionCandidateChecker
- Move searching for the `originalEnclosingFunction`
to the `getImplicitReceivers`
2020-09-07 18:18:02 +03:00
Pavel Kirpichenkov
33ac487a42 [FIR-IDE] Fix leaking KtAnalysisSession 2020-09-07 17:40:18 +03:00
Roman Golyshev
909d418dd1 Improve diagnostics in KtElementImplStub::getContainingKtFile
- If containing file is not a `PsiFileImpl`, `getNode()` will
throw a CCE (which will prevent collecting the diagnostics)
- Relates to #EA-209630
2020-09-07 14:36:09 +00:00
Dmitry Petrov
5b53663eb8 PSI2IR KT-41181 don't generate deep trees in hashCode 2020-09-07 16:09:42 +03:00
Dmitry Petrov
ade1a346e1 JVM: add test for KT-40123 2020-09-07 16:09:42 +03:00
Vladimir Ilmov
45c67a90c2 (CoroutineDebugger) Disposing under IW lock.
#KT-41505 fixed
2020-09-07 14:50:07 +02:00
Sebastian Kaspari
01143f24a4 Add KotlinClassConstructorInfoHandler for showing parameter info of parameterized super class constructor.
^KT-41617 Fixed
2020-09-07 13:23:08 +02:00
Pavel Kirpichenkov
d674f519fd [FIR-IDE] Fix completion check for generic extensions
Generic candidate extensions are completed in partial mode
when there is not enough information for type parameter in return position.
Partial completion mode in single candidate resolver leads to unconditionally failing candidate.
Providing noExpectedType instead of null guarantees full completion.
2020-09-07 13:38:11 +03:00
Vladimir Ilmov
60dfa8cc84 Ignore ProcessCancelledException in VirtualFileKotlinClass 2020-09-07 12:17:06 +02:00
Vladimir Dolzhenko
3de32e13ea Clean up declarationAccessorNames debug check in UnusedSymbolInspection
declarationAccessorNames(KtNamedDeclaration) could be more than declaration.getAccessorNames() as it relies on LC, some of them could be not accessible

^EA-237873 Fixed
2020-09-07 09:36:28 +00:00
Vladimir Dolzhenko
127257aa27 Provide setter-method for LC for private property setter
^KT-41694 Fixed
2020-09-07 09:36:28 +00:00
Vladimir Dolzhenko
b5b319803b Add more diagnostics to tackle exception in KotlinFunctionParameterInfoHandler
Relates to #EA-221900
2020-09-07 09:36:27 +00:00
Vladimir Dolzhenko
87e70cf690 Handle project disposed in ScriptDefinitionsManager
^EA-237136 Fixed
2020-09-07 09:36:26 +00:00
Vladimir Dolzhenko
4e3b1f141e Use runReadActionInSmartMode instead of runReadAction in ConfigureKotlinInProjectUtils
runReadActionInSmartMode has no effect if it is already run under runReadAction - therefore it could lead to IndexNotReadyException

^EA-220414 Fixed
^EA-210940 Fixed
^KT-30929 Fixed
2020-09-07 09:36:26 +00:00
Vladimir Dolzhenko
02be470e91 Check if vFile is still valid in ScriptClassRootsUpdater#updateHighlighting
^EA-218774 Fixed
2020-09-07 09:36:25 +00:00
Vladimir Dolzhenko
ba027a785c Fix NPE in GradleScriptInfo
^EA-237746 Fixed
2020-09-07 09:36:24 +00:00
Vladimir Dolzhenko
698f51079f Perform paste reference resolve in smart mode
^EA-226712 Fixed
2020-09-07 09:36:24 +00:00
Dmitry Petrov
b00ce872ea JVM: record JVM signature for equals/hashCode/toString in inline classes 2020-09-07 12:25:50 +03:00
Lilia
38975e4e7c Add changelog for 1.4.10 2020-09-06 19:10:42 +07:00
cketti
7755d9fe24 Mark used parameters as disabled in parameter info popup
When using named arguments the IDE might be unable to map the current
argument to a parameter. In that case mark already used parameters as
disabled. That way developers can easily see which parameters have not
been used yet.

^KTIJ-128 Fixed
2020-09-05 23:17:46 +02:00
Yaroslav Chernyshev
81339d54eb Added :core:compiler.common.jvm and :compiler:resolution.common.jvm
dependencies to pill importer
2020-09-05 10:56:55 +03:00
Toshiaki Kameyama
3f7aab6fae Redundant 'asSequence' call: don't report when reciever type is Map
#KT-41338 Fixed
2020-09-04 22:10:34 +02:00
cketti
78493395c3 Don't mark signature as inapplicable when argument is empty/incomplete
This will improve the usability when using named arguments where
incomplete arguments can't be mapped to a parameter simply by position.

^KT-24172 Fixed
2020-09-04 13:11:24 +02:00
Toshiaki Kameyama
343010a833 "Unused equals expression" inspection: highlight whole expression with yellow background
^KT-41615 Fixed
2020-09-04 12:55:55 +02:00
Dmitriy Novozhilov
b81ec2c8f0 Fix compilation errors in bunches 2020-09-04 11:42:51 +03:00
Dmitriy Novozhilov
a8c68d9e6f Remove dependency on :compiler:frontend.java from :compiler:fir:jvm 2020-09-04 11:42:51 +03:00
Dmitriy Novozhilov
6906e0d82d Move common jvm classes from :core:descriptors.jvm to :core:compiler.common.jvm 2020-09-04 11:42:51 +03:00
Dmitriy Novozhilov
9806a85cc1 Move Java model classes to :core:compiler.common.jvm 2020-09-04 11:42:51 +03:00
Dmitriy Novozhilov
b81c0e91d5 Replace DescriptorVisibility with Visibility in Java model classes 2020-09-04 11:42:51 +03:00
Dmitriy Novozhilov
696f089b3e Make DescriptorVisibility delegate to Visibility 2020-09-04 11:42:50 +03:00
Dmitriy Novozhilov
a05d6da43b Move descriptor-independent Visibilities to common modules 2020-09-04 11:42:50 +03:00
Dmitriy Novozhilov
d1fd1da56f Rename Visibility to DescriptorVisibility 2020-09-04 11:07:42 +03:00
Dmitriy Novozhilov
2bcd8ee07f Get rid of Visibility.effectiveVisibility member 2020-09-04 11:07:42 +03:00
Dmitriy Novozhilov
7d9b7df3b4 Cleanup code in EffectiveVisibility.kt and extract descriptors related part to separate file 2020-09-04 11:07:42 +03:00
Dmitriy Novozhilov
6346b1b2ab Use type markers instead of class descriptors in effective visibility 2020-09-04 11:07:42 +03:00
Dmitriy Novozhilov
64ec3fc42b Move BuiltinSpecialProperties and JvmAbi to :core:compiler.common.jvm 2020-09-04 11:07:41 +03:00
Dmitriy Novozhilov
10fd164b77 Extract FE 1.0 dependent part from JavaToKotlinClassMap
Also move JavaToKotlinClassMap to :core:compiler.common.jvm
2020-09-04 11:07:41 +03:00
Dmitriy Novozhilov
136435bcc2 Move JvmPrimitiveType to :core:compiler.common 2020-09-04 11:07:41 +03:00
Dmitriy Novozhilov
4d5f28d5c0 Move FunctionInvokeDescriptor.BIG_ARITY to :core:compiler.common 2020-09-04 11:07:41 +03:00
Dmitriy Novozhilov
bf4bf30b4a Move CompanionObjectMapping to :core:compiler.common 2020-09-04 11:07:40 +03:00
Dmitriy Novozhilov
0e04af463d Move JvmTypeSpecificityComparator to :compiler:resolution.common.jvm 2020-09-04 11:07:40 +03:00
Dmitriy Novozhilov
564d382b9d Introduce new modules for common jvm related parts of compiler 2020-09-04 11:07:40 +03:00
Dmitry Petrov
dd016b759e JVM_IR: write raw types as raw in JVM generic signatures 2020-09-04 10:21:49 +03:00
Dmitry Petrov
475522f938 Represent raw types in IR using a special type annotation 2020-09-04 10:21:48 +03:00
Dmitry Petrov
714ab7c37f Handle java raw types in IR
Raw type Q is represented as a flexible type
  Q<B1, ... Bn> .. Q<*, ... *>
where Bi is a representative upper bound of the corresponding ith type
parameter of Q.
When mapping generic signature, JVM takes type arguments of lower bound
(which is 'Q<B1, ..., Bn>').

There is still some difference in how JVM and JVM_IR handle raw type in
signature. It requires additional investigation.
2020-09-04 10:21:48 +03:00
Toshiaki Kameyama
8420c0b7c7 Add "Redundant nullable return type" inspection
^KT-19321 Fixed
2020-09-04 09:07:22 +02:00
Toshiaki Kameyama
d703284d01 Naming convention inspection: don't report for factory functions
#KT-20438 Fixed
2020-09-03 22:25:06 +02:00
Vladimir Dolzhenko
4f4db68a61 I18N fixes after merging convert initialized val to non-null type inspection
Relates to ^KT-35757
2020-09-03 22:01:11 +02:00
Vladimir Dolzhenko
eb3bde1538 Amend test data after adding Convert assignment to assignment expression intention
Relates to #KT-22420
2020-09-03 21:38:46 +02:00
Dmitriy Dolovov
8a7f33f044 [Commonizer] Fix internal error when TAs have different expanded classes
^KT-41643
2020-09-04 01:19:41 +07:00
Vladimir Dolzhenko
d4ef85f6c2 Amend test data after adding Convert assignment to assignment expression intention
Relates to #KT-22420
2020-09-03 18:04:55 +02:00
Mark Punzalan
16ab11289c [JS_IR] Enable RangeContainsLowering optimizations. 2020-09-03 18:42:35 +03:00
Ilya Goncharov
88755a8d20 [Gradle, JS] Use npm project dir as executable
^KT-40812 fixed
2020-09-03 18:31:56 +03:00
Toshiaki Kameyama
6db0785615 Wrap with let: apply to unsafe qualified expression
#KT-18125 Fixed
2020-09-03 17:04:06 +02:00
kvirolainen
18fbf5729d Inspection: convert initialized val to non-null type
^KT-35757 Fixed
2020-09-03 16:30:28 +02:00
Pavel Kirpichenkov
8b28e54584 [FIR-IDE] Update tests 2020-09-03 16:44:57 +03:00
Pavel Kirpichenkov
177fcefa68 [FIR-IDE] Minor: refactor completion contributor 2020-09-03 16:44:41 +03:00
Enteerman
c3aeaa9052 Inspection: Simplify Nested forEach/onEach in also/apply to onEach
^KT-40283 Fixed
2020-09-03 15:29:32 +02:00
Victor Petukhov
85d99612a2 Don't create inconsistent types (with contradictive use site and declaration site variances) for star projections with corresponding contravariant type parameters during substitution
^KT-41388 Fixed
2020-09-03 16:24:28 +03:00
Dereck Bridie
94970e2d1e Intention to replace a = b with b.also { a = it }
^KT-22420 Fixed
2020-09-03 15:11:36 +02:00
Vladimir Dolzhenko
e387d56d93 Drop redundant synchronized from LibraryEffectiveKindProviderImpl
effectiveKindMap is SoftFactoryMap that wraps CHM

^KT-41634 Fixed
2020-09-03 12:25:38 +00:00
Enterman
d09b20f11d Inspection to replace !string.isBlank() with string.isNotBlank()
#KT-40769 Fixed
2020-09-03 14:20:35 +02:00
vldf
f9a2d01d57 [FIR] Add UselessCallOnNotNullChecker 2020-09-03 14:28:57 +03:00
Mikhail Glukhikh
548adc29d0 [FIR] Enter loops in resolve using independent context 2020-09-03 14:24:31 +03:00
Mikhail Glukhikh
a7da0d5080 [FIR] Approximate exotic return types for public declarations 2020-09-03 14:24:31 +03:00
Jinseong Jeon
bf918e6184 FIR: hide local types if needed 2020-09-03 14:24:31 +03:00
Mikhail Glukhikh
9e38e6d051 [FIR2IR] Intercept exceptions in convertToIrCall to provide more info 2020-09-03 14:24:31 +03:00
Mikhail Glukhikh
23e83e8933 FirClassSubstitutionScope: don't recreate type parameters for unbound f/o 2020-09-03 14:24:30 +03:00
Jinseong Jeon
e8157a5488 FIR: introduce & use various comparators to sort members while de/serialization
#KT-41018 fixed
2020-09-03 13:55:52 +03:00
cketti
91c021c699 Add support for mixed named arguments to parameter info popup
Don't display parameter info in square brackets if the caller doesn't
have to use a named argument. This makes the parameter info popup
reflect the new capability introduced with
MixedNamedArgumentsInTheirOwnPosition.

^KT-41645 Fixed
2020-09-03 12:30:27 +02:00
n-p-s
af6e744b65 Allow generate toString(), equals(), and hashCode() to include non-default accessors
^KT-15262 Fixed
2020-09-03 12:12:33 +02:00
KotlinIsland
3bf18343f5 Build: Upgrade gradle to 6.6.1
[We recommend that you use Gradle 6.6.1 over the initial release of Gradle 6.6](https://github.com/gradle/gradle/releases/tag/v6.6.1)
2020-09-03 10:50:22 +02:00
Roman Artemev
685b74769d [JVM IR] Fix lineNumber passing into CoroutineTransformer.
- Get it from `IrFile` & `IrElement.startOffset` instead of descriptor
 - Unmute stepping tests
2020-09-03 11:37:24 +03:00
Alexander Udalov
5aca8ebda8 Minor, add test case on metadata of lambdas in constructors
KT-41465
2020-09-02 20:04:05 +02:00
pyos
6b65a2ea7d JVM_IR: move classes out of lambdas inlined into initializers
Fixes KT-41465
2020-09-02 20:03:38 +02:00
Florian Kistner
9775a2148a 203: Fix compilation 2020-09-02 18:48:57 +02:00
Pavel Kirpichenkov
9d12df28c1 [FIR-IDE] Add idea-fir test runtime dep for fir plugin only
Leads to duplicated bundled resources annotation templates otherwise.
2020-09-02 19:15:07 +03:00
Pavel Kirpichenkov
26982d1b48 [FIR-IDE] Use delegating KtScope for type param scope 2020-09-02 19:15:06 +03:00
Pavel Kirpichenkov
0d3f1af6e4 Fix imports after rebase 2020-09-02 19:15:06 +03:00
Pavel Kirpichenkov
5ddf62b30f [FIR-IDE] Use thread-local cache in completion component 2020-09-02 19:15:06 +03:00
Pavel Kirpichenkov
f229ae413d [FIR-IDE] Ignore FirMemberTypeParameterScope in KtScopes 2020-09-02 19:15:06 +03:00
Pavel Kirpichenkov
dc538d420e [FIR-IDE] Changes after review
Move usage of SingleCandidateResolver into dedicated component from KtFirAnalysisSession.
Add validity assertion, use concurrent map for context cache, provide original PSI when building context.
Update names, make other minor changes.
2020-09-02 19:15:06 +03:00
Pavel Kirpichenkov
ec072798b1 [FIR-IDE] Hack for checking single candidate resolver in tests 2020-09-02 19:15:06 +03:00
Pavel Kirpichenkov
2c816d8911 [FIR-IDE] Introduce resolver for a single candidate
The purpose of this resolver is to reuse parts of tower resolver in IDE tasks.
For now it can run resolution stages to check suitability of extension receiver.
2020-09-02 19:15:06 +03:00
Roman Artemev
c6a338bcdc Mute broken stepping JVM IR tests
They are broken because of c7b57c0fb3.
Current debug info generator in IR uses information from descriptors so
removing that break tests.
2020-09-02 17:52:27 +03:00
Alexander Udalov
b8d16f3d46 Add EnclosingMethod information to bytecode listing tests 2020-09-02 16:46:05 +02:00
Alexander Udalov
d4ecde5cb0 Minor, don't use token COROUTINES_PACKAGE in bytecode listing tests
Most of the tests that are run both for 1.2 and 1.3 coroutines have
different expectation .txt files anyway.
2020-09-02 16:46:05 +02:00
Alexander Udalov
24aee1cce3 JVM IR: unmute tests on anonymous objects in inline lambdas
All tests on anonymous objects should use the NO_CHECK_LAMBDA_INLINING
directive, since the test framework can't tell an anonymous object from
a lambda and checking that anonymous objects are "inlined" makes no
sense.
2020-09-02 16:46:04 +02:00
Alexander Udalov
e7937db8fa Add link to the online docs to kotlinc's help
#KT-35111 Fixed
2020-09-02 16:45:56 +02:00
Alexander Udalov
6b05e1d179 Add warning to 'kotlinc.bat help' that delimiters need to be escaped
Related to KT-41303, KT-41309.
2020-09-02 16:45:40 +02:00
Roman Artemev
2612609664 [JS] Add test for KT-39378 2020-09-02 14:42:17 +03:00
Roman Golyshev
3d5ec8aa10 FIR Completion: Add simple classifiers completion
- This also fixes a few test
2020-09-02 14:32:53 +03:00
Roman Golyshev
64645c5049 FIR Completion: Refactor KotlinAvailableScopesCompletionProvider
- Move different types of completion to separate functions
2020-09-02 14:32:53 +03:00
Roman Golyshev
0375a19e78 FIR Completion: Refactor KotlinAvailableScopesCompletionProvider 2020-09-02 14:32:53 +03:00
Roman Golyshev
1ab246f71e FIR Completion: Drop originalPosition parameter from getScopeContextForPosition
- It is easier to retrieve the original enclosing function by the fake
enclosing function than trying to correct the `originalPosition` in
different situations
2020-09-02 14:32:52 +03:00
Roman Golyshev
ab5059e08e FIR Completion: Rename FIR completion classes to be more uniform 2020-09-02 14:32:52 +03:00
Leonid Startsev
c881347110 Use correct return type for constructor call when creating EnumDescriptor
Previous one was converted using obsolete API, which caused unbound symbols to appear.

#KT-41321 Fixed
2020-09-02 13:22:23 +03:00
Leonid Startsev
8b0bb430e7 Fix multiple serialization plugin problems
Do not use fallback serializer if it is the same (fixes
https://github.com/Kotlin/kotlinx.serialization/issues/957).

Use correct number of serializable KClasses when creating sealed class
serializer (fixes https://github.com/Kotlin/kotlinx.serialization/issues/925).
2020-09-02 13:22:23 +03:00
Ilya Kirillov
106d8e74d4 FIR IDE: unmute passing completion tests 2020-09-02 11:16:20 +03:00
Ilya Kirillov
775dc7b135 FIR IDE: add type parameters support to completion 2020-09-02 11:16:20 +03:00
Ilya Kirillov
6d18bb6ba2 FIR IDE: add type parameters support to scopes 2020-09-02 11:16:19 +03:00
Ilya Kirillov
c0e9f05921 FIR: make FirTypeParameterScope to be name aware 2020-09-02 11:16:18 +03:00
Ilya Kirillov
7a1b1efef3 FIR IDE: register missing Java specific components for libraries session 2020-09-02 11:16:18 +03:00
Ilya Kirillov
162a2ac7b0 FIR IDE: fix lazy resolve for non local declaration without containing class 2020-09-02 11:16:17 +03:00
Ilya Kirillov
87898021a1 FIR IDE: introduce multi module lazy resolve tests 2020-09-02 11:16:17 +03:00
Ilya Kirillov
8714ad575f FIR IDE: move FIR IDE completion tests to idea-fir module 2020-09-02 11:16:16 +03:00
Ilya Kirillov
7cb3f62f51 FIR IDE: remove IGNORE_FIR from passing resolve tests 2020-09-02 11:16:16 +03:00
Ilya Kirillov
31f2c4a857 FIR: add fake source element to implicit function return statement 2020-09-02 11:16:16 +03:00
Ilya Kirillov
1ccf8bfb67 FIR IDE: fix completion in function with expression body 2020-09-02 11:16:15 +03:00
Mikhail Glukhikh
7c0467944d FullPipelineModularizedTest: fix compilation 2020-09-01 21:58:26 +03:00
Mikhail Glukhikh
0324c0d02f FullPipelineModularizedTest: code cleanup 2020-09-01 21:51:49 +03:00
Ilya Goncharov
9f27bc62c0 [Gradle, JS] Args should concat after input file
^KT-41286 fixed
2020-09-01 19:15:13 +03:00
Roman Artemev
fdbc657656 [IR] Fix isFileClass checker 2020-09-01 18:53:17 +03:00
Ivan Gavrilovic
91b99da7a0 KT-41313: Only load .jar files when locating annotation processors
Previously, we'd only check if file exists and try to load it. However,
some compile classpaths may contain .tar.gz files.

Test: ProcessorLoaderTest
2020-09-02 00:48:25 +09:00
Ilya Goncharov
b9bc11d5e0 [Gradle, JS] Consider custom launcher's base
^KT-41475 fixed
2020-09-01 17:47:25 +03:00
Denis Zharkov
02b72e16ef FIR: Temporary weaken required phase in ensureResolvedForCalls
Currently, lazy resolution in IDE immediately starts common body resolution
after STATUS (that lead to loops during recursive resolve)
2020-09-01 17:43:30 +03:00
Denis Zharkov
b0a7960b42 FIR: Call ensureResolved(TYPES) when computing supertypes of a class 2020-09-01 17:43:30 +03:00
Denis Zharkov
8427cc373f FIR: Fix coroutines related IDE exception from TowerResolveManager
Do not try to steal tasks in suspendResolverTask
Otherwise, it might lead to resuming current coroutine through
"resume" methods that is kind of illegal when using suspendCoroutineUninterceptedOrReturn
2020-09-01 17:43:30 +03:00
Denis Zharkov
d532529c30 FIR: Add workaround for recursive contracts in ensureResolvedForCalls 2020-09-01 17:43:30 +03:00
Denis Zharkov
0a1440d80c FIR: Optimize ensureResolvedForCalls for common case 2020-09-01 17:43:30 +03:00
Denis Zharkov
1c0e3b30a2 FIR: Use return type calculator in FirTypeMismatchOnOverrideChecker 2020-09-01 17:43:30 +03:00
Denis Zharkov
992a2d556a FIR: Add ensureResolved calls for types of sub-expressions
These calls resolve a class that a type of expression is built upon
2020-09-01 17:43:30 +03:00
Denis Zharkov
d05e947d25 FIR: Ensure resolved callable symbols came out of the declared scopes
Otherwise, we need to add `ensureResolved` to almost any usage of process*:
- Call resolution need fully resolved callables
- UseSiteScope when binding overrides should ensure resolved for callables from supertypes
- checkers have to make sure they use correct overridden
- SAM resolver
2020-09-01 17:43:30 +03:00
Denis Zharkov
d80caf7dbf FIR: Extract common code in FirPackageMemberScope 2020-09-01 17:43:30 +03:00
Denis Zharkov
b4aef21423 FIR: Simplify API for ensureResolved
Additional `as` casts look redundant, but it's a design issue (see KT-41421)
2020-09-01 17:43:30 +03:00
Denis Zharkov
bb84dc2ed4 FIR: Minor. Extract common parts in FirClassDeclaredMemberScope 2020-09-01 17:43:30 +03:00
Denis Zharkov
1cc68762e1 FIR: Minor. Fix error message 2020-09-01 17:43:30 +03:00
Denis Zharkov
4cdc36abb3 FIR: Drop unused 'phasedFir' callables 2020-09-01 17:43:30 +03:00
Denis Zharkov
c3c8115163 FIR: Use explicit version of 'ensureResolved' 2020-09-01 17:43:30 +03:00
Denis Zharkov
517056e0c6 FIR: Do not require specific phase for super-call receiver class
It's anyway defined in the outer context (outer class) that already
should have proper context
2020-09-01 17:43:30 +03:00
Denis Zharkov
fcc2abcf40 FIR: Fix phase requirement for call resolution 2020-09-01 17:43:30 +03:00
Denis Zharkov
ff182f191e FIR: Fix some contracts resolutions side-effects
- Resolve anonymous objects' contents
- Update phase for constructors
- Do not transform annotations
(while resolving they may refer to other declarations that don't have yet CONTRACTS phase)
2020-09-01 17:43:30 +03:00
Denis Zharkov
67cc85e02b FIR: Avoid redundant calls to ensureResolved during call resolution
Call ensureResolved only once when creating a candidate
2020-09-01 17:43:30 +03:00
Denis Zharkov
bf2fc10cd6 FIR: Extract AbstractFirBasedSymbol::ensureResolved extension 2020-09-01 17:43:30 +03:00
Denis Zharkov
2529f541ba FIR: Prepare refactoring of phasedFir
- Rename PhasedFirFileResolver -> FirPhaseManager
- Move semantically significant parts to a component
2020-09-01 17:43:30 +03:00
Ilya Goncharov
7fe02238ea [Gradle, JS] Add more information on Gradle exception
^KT-41566 fixed
2020-09-01 17:26:02 +03:00
Ilya Goncharov
076045ce54 [Gradle, JS] Add test with library mixed with executable and browser/nodejs
^KT-41566 fixed
2020-09-01 17:26:02 +03:00
Ilya Goncharov
d238483054 [Gradle, JS] Add test with library mixed with executable
^KT-41566 fixed
2020-09-01 17:26:02 +03:00
Ilya Goncharov
4a1bccc1e6 [Gradle, JS] Add test on simple js binary library
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
9f04d353a0 [Gradle, JS] Fix test for IR browser distribution
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
134aa6182e [Gradle, JS] Process resources into kotlin folder
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
06a54c87a0 [Gradle, JS] Compile sync tasks
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
9729554313 [Gradle, JS] Node run task for all binaries
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
7dbde459f0 [Gradle, JS] Run task for library
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
b4baaed87a [Gradle, JS] Different distributions for different binaries
^KT-41566 fixed
2020-09-01 17:26:01 +03:00
Ilya Goncharov
8c74a844f2 [Gradle, JS]] Add custom fields for package.json
^KT-35330 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
2d8b95190e [Gradle, JS] Outputs for distribution tasks as lazy
^KT-41566 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
fe72d46fee [Gradle, JS] Add types into public package json
^KT-40753 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
39059c103a [Gradle, JS] Distribution directory as a lazy
^KT-41566 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
82ea324cc1 [Gradle, JS] DefaultDistribution
^KT-41566 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
53a23169d9 [Gradle, JS] Node js binaries executable filtering
^KT-41566 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
73dbf6b846 [Gradle, JS] Add configureLibrary
^KT-41566 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
1318517155 [Gradle, JS] Add configureLibrary
^KT-41566 fixed
2020-09-01 17:26:00 +03:00
Ilya Goncharov
c9ca05b477 [Gradle, JS] Add distribute resources tasks for all binaries
^KT-41566 fixed
2020-09-01 17:25:59 +03:00
Ilya Goncharov
cc25660d7d [Gradle, JS] Move distributions tasks into abstract subtarget class
^KT-41566 fixed
2020-09-01 17:25:59 +03:00
Roman Artemev
cae29a5d1c [IR] Clean up WrappedDescriptors API 2020-09-01 17:08:11 +03:00
Roman Artemev
c7b57c0fb3 [IR] Use only empty constructor to create WrappedDescriptor 2020-09-01 17:08:11 +03:00
Roman Artemev
fd88914cf9 [IR] Remove some descriptor usage from Common/JS/JVM backends
- replace descriptor-based builders with pure IR ones
 - fix matchers
 - fix Ir2Js
 - rewrite some inliner-helpers to pure-IR implementations
2020-09-01 17:08:11 +03:00
Dmitry Petrov
8cb8284957 EnhancedNullability annotation in IR
Fixes KT-40115 & KT-40117.

Move FlexibleNullability annotation to 'kotlin.internal.ir'.
2020-09-01 16:06:03 +03:00
Roman Artemev
0bff406a12 [JS IR] Add infra to test compilation with error
- add bunch of tests
 - fix help test
2020-09-01 14:53:08 +03:00
Roman Artemev
e592b3af1d [JS IR] Fix CallsLowering's*
- need to fix dev mode since some methods are not handled
 with intrinsic lowering
2020-09-01 14:53:08 +03:00
Roman Artemev
7a6415dc53 [JS IR] Enable IrError element's lowerings in JS 2020-09-01 14:53:08 +03:00
Roman Artemev
4dca3715fa [JS IR | IR] Implement error element lowering to support compilation with errors 2020-09-01 14:53:08 +03:00
Roman Artemev
14b5424583 [JS IR] Support translation of IrError* elements 2020-09-01 14:53:08 +03:00
Roman Artemev
1fd5c1cc65 [IR] Support IrErrorType & IrErrorDeclaration in ir mangler 2020-09-01 14:53:08 +03:00
Roman Artemev
9c36487077 [IR] Disable mangle checker for IrErrorDeclarations 2020-09-01 14:53:07 +03:00
Roman Artemev
563af709a8 [Psi2Ir] Fix generation of IrError* nodes
- Provide detailed description
 - Support syntax-incorrect statements
 - Generate an error declaration if normal generation has failed
2020-09-01 14:53:07 +03:00
Roman Artemev
a60782f3df [JS IR] Add CLI argument to setup error tolerance policy
-  Make sure dev mode is enabled if code with errors is allowed
2020-09-01 14:53:07 +03:00
Roman Artemev
8a810e2a5e [JS IR] Add runtime API to throw ISE in case of compiled code with errors 2020-09-01 14:53:07 +03:00
Roman Golyshev
b3199d14b8 FIR IDE: Use correct property-by-package index in KtFirPackageScope 2020-09-01 14:50:19 +03:00
Roman Golyshev
5180a65f0b FIR Completion: Use proper types rendering 2020-09-01 14:28:59 +03:00
Roman Golyshev
7649043479 FIR IDE: Set correct source for the function built in the air
- This enables the completion to work in the declaration itself, not
only in body
2020-09-01 10:09:46 +00:00
Roman Golyshev
90c89bddc5 FIR IDE: Add collecting scopes for declarations
- They are required to perform completion in default arguments,
return types, and other declaration parts (except for body)
2020-09-01 10:09:46 +00:00
Roman Golyshev
76eb5d46f4 FIR IDE: Add FirTowerDataContextCollector class
- This class just encapsulates the map that is used to collect scopes
2020-09-01 10:09:45 +00:00
Mikhail Zarechenskiy
9c217e3d99 Reuse revised variables during lambda analysis against type variables
#KT-41400 Fixed
2020-09-01 13:04:53 +03:00
Dmitriy Novozhilov
011bb0924a [FIR-IDE] Introduce FirIdeSessionFactory for creating ide sessions 2020-09-01 12:00:13 +03:00
Dmitriy Novozhilov
cb47e631f8 [FIR] Move extended checkers containers to :compiler:fir:entrypoint 2020-09-01 12:00:13 +03:00
Dmitriy Novozhilov
f14efedc3d [FIR] Fix broken gradle compilation 2020-09-01 12:00:13 +03:00
Dmitriy Novozhilov
c250912ee0 [FIR-TEST] Use FirAnalyzerFacade in BB and Fir2IrText tests 2020-09-01 12:00:13 +03:00
Dmitriy Novozhilov
a4e24ca3dc [FIR] Introduce FirAnalyzerFacade which hides implementation details of running FIR compiler 2020-09-01 12:00:13 +03:00
Dmitriy Novozhilov
6db8c28291 [FIR] Refactor session components initialization
From now all customization of session should perform via DSL which
  declared in FirSessionFactory. Registration or mutation session
  services from other places is prohibited
2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
2819bd3aaf [FIR] Get rid of deprecated extension point registration methods usage 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
cf224b4de9 [FIR] Add createEmptySession to FirSessionFactory for testing purposes 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
a8d23c36f5 [FIR] Introduce module :fir:entrypoint and FirSessionFactory for creating sessions 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
94d58c714a [FIR] Cleanup dependencies for fir modules 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
73e2314f2f [FIR] Get rid of dependency on intellijCore from :compiler:fir:resolve 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
18ad56f7a8 [FIR] Fix creating fake source elements in declarations resolve 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
28e6050551 [FIR] Extract java synthetic names calculation to platform specific component 2020-09-01 12:00:12 +03:00
Dmitriy Novozhilov
375140ebcc [FIR] Extract java class mapping to platform specific component 2020-09-01 12:00:11 +03:00
Dmitriy Novozhilov
a0b931792e Move annotationsForResolve.kt to :core:compiler.common 2020-09-01 12:00:11 +03:00
Dmitriy Novozhilov
07c353973d Move requireOrDescribe to :core:compiler.common 2020-09-01 12:00:11 +03:00
Dmitriy Novozhilov
f010dc533c Move Variance.convertVariance to :core:compiler.common 2020-09-01 12:00:11 +03:00
Dmitriy Novozhilov
e164c88a14 Move TypeSystemCommonBackendContext to :core:compiler.common 2020-09-01 12:00:11 +03:00
Dmitriy Novozhilov
3379d9b619 [FIR] Extract java related effective visibility calculation to platform component 2020-09-01 12:00:11 +03:00
Dmitriy Novozhilov
ed4c6a38b6 [FIR] Move deserialization files to module :compiler:fir:fir-deserialization 2020-09-01 12:00:10 +03:00
Dmitriy Novozhilov
ca031f7ace [FIR] Split ResolveUtils.kt from :resolve to separate files 2020-09-01 12:00:10 +03:00
Dmitriy Novozhilov
6ace4164ff [FIR] Split TypeUtils from :resolve to :cones and :tree modules 2020-09-01 12:00:10 +03:00
Dmitriy Novozhilov
92ffa4dea9 [FIR] Replace KotlinScopeProvider with FirScopeProvider in ClassDeserialization
This is needed to remove dependecy on :fir:resolve from serialization
  methods
2020-09-01 12:00:10 +03:00
Mikhail Glukhikh
3aa13362ca [FIR2IR] Replace NPE in setThisReceiver with more detailed exception 2020-09-01 11:40:32 +03:00
Mikhail Glukhikh
65739c50d3 FIR full pipeline test: output build status per-module 2020-09-01 11:40:32 +03:00
Pavel Kirpichenkov
2979c37001 [NI] Fix resolution status for UnstableSmartCastDiagnostic
RESOLVED_WITH_ERROR was initially added for reproducing OI behavior.
The intention was to preserve resolution into unstable smart cast and to keep failing candidate.
However, this idea was abandoned after OI behavior proved inconsistent in cases involving generics.

This commit restores RUNTIME_ERROR status of UnstableSmartCastDiagnostic.

^KT-41357 Fixed
2020-09-01 11:21:13 +03:00
Igor Chevdar
5e71068e61 [IR] Handled degenerate cases of IrStringConcatenation
It is not needed to create StringBuilder if the number of values
being concatenated is 0 or 1
2020-09-01 11:34:17 +05:00
Dmitriy Dolovov
74dce725cc [Commonizer] Tests for missed supertypes in commonized type aliases
^KT-41247
2020-09-01 13:11:33 +07:00
Dmitriy Dolovov
96736b0126 [Commonizer] Add missed supertypes in commonized type aliases
^KT-41247
2020-09-01 13:11:27 +07:00
Dmitriy Dolovov
e21d99334b [Commonizer] Lookup common descriptors that don't participate in commonization (for tests only)
This is necessary to run integration tests with fake declarations from
Kotlin/Native stdlib that are absent in stdlib-common.
2020-09-01 13:11:22 +07:00
Dmitriy Dolovov
ed78169051 [Commonizer] README: Describe the case when target is not available 2020-09-01 13:11:16 +07:00
Nikolay Krasko
56f0fb6c70 Prevent test failures because of Leaked Android SDK
Stop implicit adding additional SDK from environment variables in
GradleSpecificInitializer and AndroidSdkInitializer.
2020-08-31 21:18:26 +03:00
Steven Schäfer
78ab957bfe JVM IR: Fix mangling for suspend functions with inline class params (KT-41374) 2020-08-31 18:43:29 +02:00
Igor Yakovlev
48a3d4b8e0 [ULC] Add recursion guard to getLightClass
Fixed KT-41325
2020-08-31 18:01:37 +03:00
Pavel Kirpichenkov
873224dfbc [NI] Use new type substitutor for known type parameters
Use known type parameters substitutor after substitutor for fresh variables.
The old logic of substituions had the following order:
- replace known type parameters
- replace type parameters with type variables
- complete inference
- replace type variables with inferred types

According to the updated logic, replacement goes as follows:
- replace type parameters with type variables
- replace known type parameters; if they were variables, this will effectively remove them from inference
- complete inference
- replace remaining type variables with inferred types

Support projection substitution in new type substitutor.
It is needed for correct interaction with old type substitutor.
Old type substitutors can contain mappings constructor -> projection
which couldn't be expressed correctly with existing substitutor API in some cases.

^KT-41386 Fixed
2020-08-31 17:53:46 +03:00
Alexander Udalov
c706673de9 Minor, refactor bytecode text tests on when-over-string optimization
- Merge `duplicatingItemsSameHashCode.kt` and
  `duplicatingItemsSameHashCode2.kt` into one test enabled on both
  backends, and rename it to
  `duplicatingItemsSameHashCodeFewBranches.kt`.
- Rename `duplicatingItemsSameHashCode3.kt` to
  `duplicatingItemsSameHashCodeMoreBranches.kt`, and also enable it for
  both backends.
- Use JVM_TEMPLATES/JVM_IR_TEMPLATES to check backend-specific behavior:
    1) JVM IR does not optimize less than 2 branches by design
    2) JVM IR does not generate duplicate branches, also by design

Related to KT-36846.
2020-08-31 16:47:11 +02:00
Alexander Udalov
a639915a34 JVM IR: do not mangle property accessors of unsigned types in annotations
Before this change, we incorrectly mangled the names of annotation
methods (e.g. `getI-pVg5ArA` instead of `i`) because the isSpecial
condition was false.
2020-08-31 14:19:14 +02:00
Mikhail Glukhikh
1e360d9c91 [FIR2IR] Pass type context for type argument conversion properly 2020-08-31 14:31:58 +03:00
Jinseong Jeon
04af6846a7 FIR2IR: handle more vararg spreads for adapted callable references 2020-08-31 14:31:58 +03:00
Mikhail Glukhikh
5efabe063e [FIR] Fix JVM mapped function callable id 2020-08-31 14:31:57 +03:00
Mikhail Glukhikh
db815c96c5 [FIR] Substitute copied type parameters in fake override properties 2020-08-31 14:31:57 +03:00
Mikhail Glukhikh
dc9306367a FirClassSubstitutionScope: reorder companion functions 2020-08-31 14:31:57 +03:00
Mikhail Glukhikh
5ad453d927 [FIR] Substitute copied type parameters in fake override functions 2020-08-31 14:31:57 +03:00
Mikhail Glukhikh
458f89ef33 [FIR] Signature composer: return null signature for local declarations 2020-08-31 14:31:57 +03:00
Mikhail Glukhikh
02b6f34067 [FIR2IR] Add extension receiver parameter to delegated members 2020-08-31 14:31:57 +03:00
Mikhail Glukhikh
22c63c4e80 [FIR2IR] Add supertypes to delegated member type parameters 2020-08-31 14:31:56 +03:00
Mikhail Glukhikh
9ad55a0ee3 [FIR2IR] Don't create list under the hood in DelegatedMemberGenerator 2020-08-31 14:31:56 +03:00
Mikhail Glukhikh
5384ccf02f [FIR] Introduce & use FirDelegatedMemberScope 2020-08-31 14:31:56 +03:00
Mikhail Glukhikh
f0af930288 [FIR] Eliminate unused FirDelegatedTypeRef 2020-08-31 14:31:56 +03:00
Mikhail Glukhikh
ede910065a [FIR] Add problematic resolve test case with delegated super call 2020-08-31 14:31:56 +03:00
Mikhail Glukhikh
3f5beb77e8 [FIR2IR] Cache delegatable members properly 2020-08-31 14:31:55 +03:00
Alexander Udalov
1e712f8398 IR: remove IrElementVisitorVoidWithContext
It was only used as a superclass in IrInlineReferenceLocator and
LocalDeclarationsLowering. In both cases it's clearer and more optimal
to pass the necessary data via the visitor 'data' variable.
2020-08-31 12:47:54 +02:00
Alexander Udalov
5e48be3d11 Add a fallback flag -Xno-unified-null-checks for KT-22275
#KT-41482 Fixed
2020-08-31 12:43:28 +02:00
Ilya Kirillov
40669350f7 Wizard: navigate to wizard help page when clicking help button 2020-08-31 12:50:01 +03:00
Ilya Kirillov
fa847d758d Wizard: use compileKotlin for groovy instead of direct KotlinCompile task access
#KT-38921 fixed
2020-08-31 12:49:48 +03:00
Ilya Goncharov
e672f5f8e3 [Wizard, JS] Remove duplicating descriptions 2020-08-31 12:19:10 +03:00
Ilya Goncharov
554c67cd1d [Wizard, JS] Add descriptions to wizard options 2020-08-31 12:16:54 +03:00
Nicolay Mitropolsky
af35b6c3c8 Provide icons to Kotlin Light-elements (KT-26235) 2020-08-31 10:54:46 +03:00
Igor Chevdar
527de030fc [box-tests] Turned on some tests for K/N 2020-08-31 12:01:31 +05:00
Igor Chevdar
ab54e43b00 [IR] Commonized SAM equals/hashCode builder 2020-08-31 12:01:29 +05:00
Igor Chevdar
12ddd137bc [IR] Moved isLambda to common IR utils 2020-08-31 12:01:29 +05:00
vldf
b050ef9970 [FIR] Remove print in UnusedChecker 2020-08-30 14:18:01 +03:00
Ilya Gorbunov
9c3ff6828a Export kotlin.test packages with annotations and underlying frameworks
- Add exports for jvm package names used in kotlin.test annotations;

- Export transitively underlying test framework modules
Otherwise "This class does not have a constructor" happens when using
an aliased annotation, e.g. kotlin.test.Test aliased to org.junit.test

KT-41320
2020-08-29 03:33:38 +03:00
Andrey.Lozhkin
ef57c62576 [Gradle, Cocoapods] refactor I/O, improve Up-To-Date
all synthetic tasks are per pod
tasks receive parts of extension as inputs
2020-08-29 01:51:20 +03:00
Andrey.Lozhkin
1888462dc0 [Gradle, Cocoapods] move tasks from per target
podGen now per Family
podSetupBuild and podBuild now per sdk
2020-08-29 01:51:20 +03:00
Andrey Lozhkin
fcf5060907 [Gradle, Cocoapods] implement DSL to support Cocoapods Dependencies from Git or Web
Issue #KT-41367 Fixed
2020-08-29 01:51:20 +03:00
Steven Schäfer
b02f0f0a25 JVM IR: Fix compilation of nested inner classes 2020-08-28 20:03:19 +02:00
Steven Schäfer
02e78bcd76 JVM IR: Use package visibility for fields of captured variables 2020-08-28 20:03:19 +02:00
Roman Artemev
443269af0a [IR] Drop irProviders from stub generator 2020-08-28 18:14:05 +03:00
Roman Artemev
39808789c3 [KLIB] Fix SOE in K/N
- fixes KT-41324
2020-08-28 18:14:04 +03:00
Mikhail Zarechenskiy
23f87d413a Use initial system for completion if common one is effectively empty
Otherwise we can get unsubstituted type variables as expected types and
 then write wrong information for assertions

 #KT-41470 Fixed
2020-08-28 17:47:08 +03:00
Nick
bb18203ae6 [FIR] Various checkers performance fixes 2020-08-28 17:07:35 +03:00
Sergey Igushkin
5c88eb722d Fix transitive deps on MPP with host-specific source sets (KT-41083)
A consumer could not resolve the host-specific metadata artifact
of the transitive dependency because the transitive dependency's parent
in the platform dependencies graph did not include the dependency on it
in the variant that is chosen for host-specific source sets metadata:
the dependencies of that variant were empty.

Export the dependencies of the Kotlin/Native target in the host-specific
metadata variant as well.

Issue #KT-41083 Fixed
2020-08-28 11:09:56 +00:00
Zalim Bashorov
9097d0918c [JS BE] Support passing an array as argument of vararg in named form
#KT-38059 fixed
2020-08-28 13:14:23 +03:00
Zalim Bashorov
606232a584 [JS IR] Don't generate "import" statements for external interfaces
#KT-40964 fixed
2020-08-28 13:14:22 +03:00
Zalim Bashorov
ba846830c9 [JS IR] Support nativeGetter, nativeSetter and nativeInvoke
#KT-41081 fixed
2020-08-28 13:04:18 +03:00
Ilya Kirillov
c804319e65 FIR IDE: fix compilation on AS 2020-08-28 12:51:55 +03:00
Ilya Kirillov
36cc73602e FIR IDE: fix testdata of AbstractFirLazyResolveTest 2020-08-28 12:51:55 +03:00
Ilya Kirillov
3cd445563e FIR IDE: implement KotlinExpressionTypeProvider for FIR 2020-08-28 12:51:55 +03:00
Ilya Kirillov
fcc7db5224 FIR IDE: introduce analyseInModalWindow function 2020-08-28 12:51:23 +03:00
Ilya Kirillov
81be230541 FIR IDE: add validity assertion on analysis session access 2020-08-28 12:15:19 +03:00
Ilya Kirillov
db48884a4e FIR IDE: add check canceled check between diagnostics 2020-08-28 12:15:18 +03:00
Ilya Kirillov
95a96f32bf FIR IDE: log errors on diagnostics, not throw them 2020-08-28 12:15:17 +03:00
Ilya Kirillov
ebafd0fb51 FIR IDE: resolve ambiguity & inapplicable references 2020-08-28 12:15:16 +03:00
Ilya Kirillov
4fa2dd85b4 FIR IDE: move lazy resolve to FirLazyDeclarationResolver 2020-08-28 12:15:15 +03:00
Ilya Kirillov
8faaff00fa FIR IDE: run lazy resolve on declaration when getting phased fir 2020-08-28 12:15:14 +03:00
Ilya Kirillov
78bb1f1076 FIR IDE: fix testdata in idea-frontend-fir 2020-08-28 12:15:13 +03:00
Ilya Kirillov
30ac80a506 FIR IDE: introduce property accessor symbols 2020-08-28 12:15:13 +03:00
Ilya Kirillov
aae56cadac FIR IDE: add ModuleInfo for ide sessions as they are used for getting resolve components 2020-08-28 12:15:12 +03:00
Ilya Kirillov
bc3e98b116 FIR IDE: allow PCE between resolve phases, forbid in other cases 2020-08-28 12:15:11 +03:00
Ilya Kirillov
8363c711e6 FIR IDE: fix lazy resolve for local declarations 2020-08-28 12:15:10 +03:00
Ilya Kirillov
9d237033ad FIR IDE: minor, rename FirIdeModuleLibraryDependenciesSession to FirIdeLibrariesSession 2020-08-28 12:15:09 +03:00
Ilya Kirillov
8b782d5954 FIR IDE: fix session provider implementation as it only provides only 2 sessions 2020-08-28 12:15:07 +03:00
Ilya Kirillov
a07d3f2425 FIR IDE: minor: rename FirIdeJavaModuleBasedSession to FirIdeSourcesSession 2020-08-28 12:15:07 +03:00
Ilya Kirillov
f76b5bbf1b FIR IDE: allow KtFirPackageScope to work without providers 2020-08-28 12:15:06 +03:00
Ilya Kirillov
f4c17dadb3 FIR IDE: remove unused FirIdeModuleLibraryDependenciesSymbolProvider 2020-08-28 12:15:05 +03:00
Ilya Kirillov
a156cca02a FIR: make class FirObjectImportedCallableScope to be name aware 2020-08-28 12:15:04 +03:00
Ilya Kirillov
333213bbb9 Wizard: add descriptions for some settings 2020-08-28 11:46:55 +03:00
Ilya Kirillov
37b869ebc5 Wizard: add descriptions for settings 2020-08-28 11:46:55 +03:00
Dmitriy Novozhilov
09ed0c3e82 [FIR-TEST] Update testdata 2020-08-28 10:59:54 +03:00
Dmitriy Novozhilov
e7b5a88cbd [FIR] Remove dependency on :compiler:frontend from :compiler:fir:resolve 2020-08-28 10:59:54 +03:00
Dmitriy Novozhilov
abeb42ca20 [FIR] Don't use ProjectExtensionDescriptor in FirExtensionRegistrar 2020-08-28 10:59:53 +03:00
Dmitriy Novozhilov
f09e17a5ae [FIR] Remove unused import 2020-08-28 10:59:53 +03:00
Dmitriy Novozhilov
e405a02e8e [FIR] Fix contract serialization 2020-08-28 10:59:53 +03:00
Dmitriy Novozhilov
eaf8af919d [FIR] Use PersistentList instead of guava's ImmutableList in SupertypeResolution 2020-08-28 10:59:53 +03:00
Dmitriy Novozhilov
148e8fe76e Move FlatSignature to :compiler:resolution.common 2020-08-28 10:59:53 +03:00
Dmitriy Novozhilov
64766e125c Move common inference classes to :compiler:resolution.common 2020-08-28 10:59:53 +03:00
Dmitriy Novozhilov
068d21635e [NI] Get rid of KotlinType usages in MutableConstraintStorage.kt 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
af0df35623 [NI] Get rid of FE 1.0 types in ConstraintInjector 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
ad039a28bd [NI] Get rid of left FE 1.0 types in NewConstraintSystemImpl 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
6914aba5c2 [NI] Commonize detection of @OnlyInputTypes in NewConstraintSystemImpl 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
64f0ee21c1 Get rid of FE 1.0 classes usage in ConstraintIncorporator 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
1050f7f066 Extract PostponedResolvedAtomMarker to separate file 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
1cadabb099 Extract ResolutionCandidateApplicability to separate file 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
775df6dfc3 [NI] Get rid of FE 1.0 type usages in ResultTypeResolver 2020-08-28 10:59:52 +03:00
Dmitriy Novozhilov
aae1681b76 [NI] Get rid of ResolvedAtom usage in ConstraintSystemCompletionContext 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
11e8552861 [NI] Get rid of PostponedArgumentInputTypesResolver.Context 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
970a2581a1 [NI] Extract PostponedArgumentsAnalyzerContext from PostponedArgumentsAnalyzer 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
b15f847943 [NI] Extract common parts from KotlinConstraintSystemCompleter 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
12fbb93871 [NI] Extract FE 1.0 specific part from NewCommonSuperTypeCalculator 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
b21a0213df [NI] Get rid of FE 1.0 types in AbstractTypeApproximator 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
527c5a771d [NI] Get rid of FE 1.0 types in AbstractTypeCheckerContextForConstraintSystem 2020-08-28 10:59:51 +03:00
Dmitriy Novozhilov
686c17a234 [NI] Rename NewConstraintSystem.diagnostics to errors 2020-08-28 10:59:50 +03:00
Dmitriy Novozhilov
59b2cb6393 [NI] Split KotlinCallDiagnostics and inference errors to different hierarchies 2020-08-28 10:59:50 +03:00
Dmitriy Novozhilov
fae21d4db3 Introduce frontend independent constraint positions 2020-08-28 10:59:50 +03:00
Dmitriy Novozhilov
e5e3d7cab1 Extract FE 1.0 related parts from NewConstraintSystem 2020-08-28 10:59:50 +03:00
Dmitriy Novozhilov
be1033a4a7 [FIR] Implement ConeTypeContext.createTypeWithAlternativeForIntersectionResult 2020-08-28 10:59:50 +03:00
Dmitriy Novozhilov
f247cc3165 [NI] Properly detecting suitability of candidate for builder inference
#KT-41430 Fixed
2020-08-28 10:34:18 +03:00
Sergey Bogolepov
b2d9e5be91 [kotlinx-metadata-klib] Drop dependency on descriptors
It's unneeded since all used declarations moved to
:core:compiler.common.
2020-08-28 12:33:46 +07:00
Simon Ogorodnik
7170a23f63 [FIR] Use coroutine intrinsics in tower resolver manager
To remove SafeContinuation overhead
2020-08-28 00:12:17 +03:00
Simon Ogorodnik
7cb5c0a6d8 [FIR] Cleanup hides members condition 2020-08-28 00:12:17 +03:00
Simon Ogorodnik
bf2e17b133 [FIR] Extract invoke processing from TowerLevelHandler 2020-08-28 00:12:17 +03:00
Simon Ogorodnik
96f100381a Use proper manifest for kotlin-reflect in jps build 2020-08-28 00:12:17 +03:00
Simon Ogorodnik
34f5cfbf96 [FIR] Fix integer approximation on safe calls 2020-08-28 00:12:17 +03:00
Simon Ogorodnik
2a4e1a0b99 [FIR] Clarify testData for invokes 2020-08-28 00:12:16 +03:00
Alexander Udalov
74c6d2b951 Do not generate non-standard compareTo as primitive comparison in all backends
Previous changes related to this in the old JVM backend were in
582b1c5e66 and
0482f7e9c5, but they did not affect the
`ProperIeee754Comparisons` mode which became the default in 1.4.0. As a
result, we had a regression here.

Since the `PRIMITIVE_NUMERIC_COMPARISON_INFO` slice is used in psi2ir to
determine how to generate the comparison, this fixes the regression both
in the old JVM backend, and in all IR backends.

 #KT-41426 Fixed
2020-08-27 19:00:11 +02:00
Alexander Udalov
9d81e50128 IR: undeprecate IrUninitializedType
It's no longer a temporary hack, see the comment.
2020-08-27 18:02:04 +02:00
Dmitry Savvinov
5649cbc2e1 Wire KotlinTypeRefiner in areCallableDescriptorsEquivalent
See the issue for details

^KT-41218 Fixed
2020-08-27 18:50:42 +03:00
Dmitry Savvinov
421efaa565 Add test for overload resoultion ambiguity in HMPP
The behaviour is undesired, see the next commit for fix

^KT-41218 In Progress
2020-08-27 18:50:42 +03:00
Dmitry Savvinov
68d931969d Minor: explicitly opt-in for diagnostics messages in MultiplatformAnalysisTests 2020-08-27 18:50:42 +03:00
Dmitriy Novozhilov
9cde42e2bc [NI] Fix shouldRunCompletion for builder inference session
#KT-41308 Fixed
#KT-41363
2020-08-27 16:51:12 +03:00
Dmitriy Novozhilov
e98cbf81cf [NI] Don't always complete builder inference lambda in FULL mode
#KT-41164 Fixed
2020-08-27 16:51:11 +03:00
vldf
6a15e0410f [FIR] Fix CLI tests to prevent non-relevant errors from appearing 2020-08-27 16:07:04 +03:00
vldf
6c2ece9a6e Rename: FirSourceElement.getChildren() -> getChild() + minor fixes 2020-08-27 16:07:04 +03:00
vldf
bf363e8f1a [FIR] Update/add extended checker tests 2020-08-27 16:07:04 +03:00
Oleg Ivanov
acbb67f851 [FIR] Fix collectDataForNode backward traverse 2020-08-27 16:07:03 +03:00
vldf
f9c7cce11d [FIR] Add some helper functions for checkers 2020-08-27 16:07:03 +03:00
vldf
96f24a43be [FIR] Introduce unused variable extended checker 2020-08-27 16:07:03 +03:00
vldf
e718f60833 [FIR] Refactoring extended checkers 2020-08-27 16:07:03 +03:00
vldf
aefb7dc10f [FIR] Add checkerContext parameter to ControlFlowAnalyserCheckers 2020-08-27 16:07:03 +03:00
vldf
14eaa113e0 [FIR] Add new errors for extended checkers (around unused variable) 2020-08-27 16:07:03 +03:00
vldf
58c5d3a6ca [FIR] Fix destructuring declaration creation via light tree 2020-08-27 16:07:03 +03:00
vldf
3428a5434b [FIR] Add methods to access child/children of FirSourceElement 2020-08-27 16:07:02 +03:00
vldf
5e0dc53295 [FIR] Refactor CanBeValChecker 2020-08-27 16:07:02 +03:00
Andrei Klunnyi
5cf76aa950 KT-41425 Project can not be launched with Gradle runner
93a82060 introduced support of "delegate to Gradle" for Gradle-Kotlin.
This commit fixes an issue known as "Could not get unknown property
'sourceSets' for root project".
2020-08-27 14:50:40 +02:00
Nikolay Krasko
f57f920dc0 Mark IdeReplExecutionTest.testOnePlusOne as flaky
Was previously muted on TC.
2020-08-27 14:08:48 +03:00
Nikolay Krasko
866666f3ff Update test data for MultiModuleHighlightingTest.testLanguageVersionsViaFacets
Remove `Reference is not resolved to anything` markers
2020-08-27 14:08:48 +03:00
Nikolay Krasko
4b937f0929 Mute stable CompilerDaemonTest.testParallelDaemonStart
It was previously muted on TC.
2020-08-27 14:08:48 +03:00
Dmitry Gridin
0c0b394cc2 [formatter] fix performance issue
^KT-41314 Fixed
2020-08-27 11:04:34 +00:00
Ilya Goncharov
9818321b46 [JS, Wizard] Use react template in full stack
^KT-41417 fixed
2020-08-27 13:35:17 +03:00
Ilya Goncharov
cd0bdc190b [JS, Wizard] Use IR in gradle.properties and otherwise use as a param
^KT-41418 fixed
2020-08-27 13:34:46 +03:00
Ilya Goncharov
13bf15b403 [JS, Wizard] Set js compiler per module
^KT-41418 fixed
2020-08-27 13:34:46 +03:00
Ilya Kirillov
f824f03fa2 Wizard: fix filtering values in DropDownComponent 2020-08-27 13:34:46 +03:00
Ilya Goncharov
98f98d5856 [JS, Wizard] Add different compilers for JS wizard
^KT-41418 fixed
2020-08-27 13:34:46 +03:00
Ilya Goncharov
c797f3044e [JS, Wizard] Add react template plugin
^KT-41417 fixed
2020-08-27 13:34:45 +03:00
Ilya Goncharov
220ff6c648 [JS, Wizard] Add redux and react router
^KT-41417 fixed
2020-08-27 13:34:30 +03:00
Ilya Goncharov
d5340803bd [JS, Wizard] Add react application template
^KT-41417 fixed
2020-08-27 13:34:15 +03:00
Ilya Goncharov
01064a4e46 [JS, Wizard] Add react application template
^KT-41417 fixed
2020-08-27 13:33:50 +03:00
Ilya Goncharov
96e1b1c0e0 [JS, Wizard] Separate browser application without react
^KT-41417 fixed
2020-08-27 13:33:34 +03:00
Ilya Goncharov
491eb5e366 [JS, Wizard] Move subtarget settings in separate object
^KT-41417 fixed
2020-08-27 13:33:15 +03:00
Ilya Goncharov
94f8a78893 [JS, Wizard] Fix source set name for js wizard
^KT-41417 fixed
2020-08-27 13:30:37 +03:00
Mikhail Zarechenskiy
cba13c3c35 Take into account captured types with variables during fixation
#KT-41202 Fixed
2020-08-27 11:06:14 +03:00
Dmitry Gridin
5dbb6fdf50 [inspections] NamingConversion: add missing space in description
^KT-41395 Fixed
2020-08-27 14:58:33 +07:00
Yunir Salimzyanov
e12c35de5f Traverse all pages of muted tests on Teamcity (KTI-326)
incomplete list of remotely muted tests was causing re-muting of tests
that were not fetched
2020-08-26 19:37:11 +03:00
Mikhail Zarechenskiy
06a592c018 Fix SOE when recursive type argument is used with star projection
#KT-41043 Fixed
2020-08-26 19:23:21 +03:00
Mikhail Zarechenskiy
674e9e455f Fold lower constraints like (T!!..T) and (T..T?) into the latter one
#KT-41149 Fixed
2020-08-26 19:23:20 +03:00
Mikhail Zarechenskiy
e91b378b7d Don't perform unnecessary SAM conversions
#KT-41149 In Progress
2020-08-26 19:23:19 +03:00
Mikhail Zarechenskiy
6a7ed96be5 Consider T <: Nothing! as trivial during constraint incorporation
#KT-41149 In Progress
2020-08-26 19:23:18 +03:00
Mikhail Zarechenskiy
567e6ca9ca Fix OOM when there are several lambdas with extension function types
#KT-41335 Fixed
2020-08-26 19:23:18 +03:00
Jinseong Jeon
085e0dc1de FIR2IR: allow array expression as named argument for vararg 2020-08-26 18:01:21 +03:00
Vladimir Dolzhenko
54d3c5fb0a Pick up script language level from used stdlib in a gradle's classpath
^KT-41283 Fixed
2020-08-26 14:09:58 +00:00
Ilya Kirillov
949c67078d NJ2K: fix testdata of MultiFileTestGenerated.testNullabilityByDFa 2020-08-26 16:17:24 +03:00
Ilya Kirillov
c8ab827fa0 Wizard: fix invalid path in generated buildscript on windows 2020-08-26 16:17:24 +03:00
Nicolay Mitropolsky
c93ae64546 Uast: KotlinClassViaConstructorUSimpleReferenceExpression resolve to PsiClass (KT-41290) 2020-08-26 16:13:13 +03:00
Vladimir Dolzhenko
99924ea5e4 Fix Typo: equals() & hashCode(), toString() are written with the first uppercase letter
^KT-41390 Fixed
2020-08-26 14:59:31 +02:00
Jinseong Jeon
553ae68c96 FIR2IR: convert adapted callable reference with vararg 2020-08-26 14:26:19 +03:00
Igor Yakovlev
48034092e9 Fix SOE on library source based lightclass lookup
Fixed KT-41325
2020-08-26 12:10:09 +03:00
Jinseong Jeon
99286a6ce3 FIR2IR: introduce & use ClassId-based lookup for local class as IrParent 2020-08-26 10:08:16 +03:00
Aurimas Liutikas
777b16e0a3 Fix @Language injection when using named parameters
Start using names of arguments if they are available when fetching
the @Language injection information.

Fixes KT-35859
2020-08-25 23:02:53 +03:00
Alexander Udalov
a9ddf02556 Replace deprecated usages of max/min with maxOrNull/minOrNull 2020-08-25 20:33:59 +02:00
Nikolay Krasko
81dda96ece Mute flaky KotlinFindUsagesWithLibraryTestGenerated.KotlinLibrary 2020-08-25 21:31:11 +03:00
Nikolay Krasko
3a1158b4ef Minor: move mute KotlinFindUsagesWithLibraryTestGenerated to common 2020-08-25 21:31:11 +03:00
Nikolay Krasko
125819f9bf Mute flaky testUsingReadOnlyInterfaces test 2020-08-25 21:31:10 +03:00
Nikolay Krasko
1928390121 Prevent flaky behaviour from MakeOverriddenMemberOpenFix in tests
Several quick fix tests are flaky thanks to MakeOverrideMemberOpenFix
class. Flakiness is probably caused by `myQuickFixInfo: QuickFixInfo`
field. When there's no memory pressure, there's no resolve in dispatch
thread, but value may be invalidated because of soft reference usage
and re-evaluating might cause the test failure.

Caused by: org.jetbrains.kotlin.idea.caches.resolve.KotlinIdeaResolutionException: Kotlin resolution encountered a problem while analyzing KtNamedFunction
  at org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacadeWithDebugInfo.analyze(ResolutionFacadeWithDebugInfo.kt:44)
  at org.jetbrains.kotlin.idea.caches.resolve.ExtendedResolutionApiKt.analyze(extendedResolutionApi.kt:97)
  at org.jetbrains.kotlin.idea.caches.resolve.ExtendedResolutionApiKt.resolveToDescriptorIfAny(extendedResolutionApi.kt:39)
  at org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToDescriptorIfAny(resolutionApi.kt:60)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix.computeInfo(MakeOverriddenMemberOpenFix.kt:54)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix.access$computeInfo(MakeOverriddenMemberOpenFix.kt:38)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix$myQuickFixInfo$2.invoke(MakeOverriddenMemberOpenFix.kt:41)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix$myQuickFixInfo$2.invoke(MakeOverriddenMemberOpenFix.kt:38)
  at org.jetbrains.kotlin.idea.core.util.CachedValueHelpersKt$sam$com_intellij_psi_util_CachedValueProvider$0.compute(CachedValueHelpers.kt)
  at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:54)
  at com.intellij.util.CachedValueBase.lambda$getValueWithLock$0(CachedValueBase.java:228)
  at com.intellij.util.IdempotenceChecker.applyForRandomCheck(IdempotenceChecker.java:336)
  at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:228)
  at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
  at org.jetbrains.kotlin.idea.core.util.CachedValueHelpersKt.getValue(CachedValueHelpers.kt:25)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix.getMyQuickFixInfo(MakeOverriddenMemberOpenFix.kt)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix.getContainingDeclarationsNames(MakeOverriddenMemberOpenFix.kt:45)
  at org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix.getText(MakeOverriddenMemberOpenFix.kt:89)
  at com.intellij.codeInsight.intention.impl.IntentionActionWithTextCaching$MyIntentionAction.getText(IntentionActionWithTextCaching.java:165)
  at com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl.lambda$invokeIntention$52(CodeInsightTestFixtureImpl.java:1933)
  at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:201)
  at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
  at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:322)
  at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
  at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:132)
  at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
  at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:188)
  at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
  at java.awt.EventQueue.access$500(EventQueue.java:97)
  at java.awt.EventQueue$3.run(EventQueue.java:709)
  at java.awt.EventQueue$3.run(EventQueue.java:703)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
  at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
  at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:965)
  at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:838)
  at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:449)
  at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:733)
  at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
  at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
  at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:496)
  at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at com.intellij.util.ui.UIUtil.dispatchAllInvocationEvents(UIUtil.java:1738)
  at com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl.lambda$invokeIntention$53(CodeInsightTestFixtureImpl.java:1939)
  at com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl.withReadOnlyFile(CodeInsightTestFixtureImpl.java:1960)
  at com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl.invokeIntention(CodeInsightTestFixtureImpl.java:1929)
  at com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl.lambda$launchAction$14(CodeInsightTestFixtureImpl.java:680)
  at com.intellij.testFramework.EdtTestUtil$Companion$runInEdtAndWait$1.invoke(EdtTestUtil.kt:18)
  at com.intellij.testFramework.EdtTestUtil$Companion$runInEdtAndWait$1.invoke(EdtTestUtil.kt:13)
  at com.intellij.testFramework.EdtTestUtilKt.runInEdtAndWait(EdtTestUtil.kt:44)
  at com.intellij.testFramework.EdtTestUtil$Companion.runInEdtAndWait(EdtTestUtil.kt:18)
  at com.intellij.testFramework.EdtTestUtil.runInEdtAndWait(EdtTestUtil.kt)
  at com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl.launchAction(CodeInsightTestFixtureImpl.java:680)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$applyAction$stubComparisonFailure$1.invoke(AbstractQuickFixTest.kt:176)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$applyAction$stubComparisonFailure$1.invoke(AbstractQuickFixTest.kt:34)
  at org.jetbrains.kotlin.idea.caches.resolve.ResolveInDispatchThreadManager.runWithForceCheckForResolveInDispatchThreadInTests$idea_core(ResolveInDispatchThreadManager.kt:115)
  at org.jetbrains.kotlin.idea.caches.resolve.ResolveInDispatchThreadManagerKt.forceCheckForResolveInDispatchThreadInTests(ResolveInDispatchThreadManager.kt:40)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest.applyAction(AbstractQuickFixTest.kt:175)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest.access$applyAction(AbstractQuickFixTest.kt:34)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$doKotlinQuickFixTest$1.run(AbstractQuickFixTest.kt:125)
  at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
  at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:177)
  at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:167)
  at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:153)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest.doKotlinQuickFixTest(AbstractQuickFixTest.kt:96)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest.access$doKotlinQuickFixTest(AbstractQuickFixTest.kt:34)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$doTest$1.invoke(AbstractQuickFixTest.kt:60)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$doTest$1.invoke(AbstractQuickFixTest.kt:34)
  at org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseKt.withCustomCompilerOptions(KotlinLightCodeInsightFixtureTestCase.kt:253)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest.doTest(AbstractQuickFixTest.kt:55)
  at org.jetbrains.kotlin.test.KotlinTestUtils.lambda$testWithCustomIgnoreDirective$6(KotlinTestUtils.java:803)
  at org.jetbrains.kotlin.test.MuteWithFileKt$testWithMuteInFile$1.invoke(muteWithFile.kt:41)
  at org.jetbrains.kotlin.test.KotlinTestUtils.runTestImpl(KotlinTestUtils.java:773)
  at org.jetbrains.kotlin.test.KotlinTestUtils.runTest(KotlinTestUtils.java:716)
  at org.jetbrains.kotlin.idea.quickfix.QuickFixTestGenerated$Override.runTest(QuickFixTestGenerated.java:10025)
  at org.jetbrains.kotlin.idea.quickfix.QuickFixTestGenerated$Override.testOverridingDelegatedMethod(QuickFixTestGenerated.java:10074)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at junit.framework.TestCase.runTest(TestCase.java:176)
  at com.intellij.testFramework.UsefulTestCase.lambda$runTest$9(UsefulTestCase.java:327)
  at com.intellij.testFramework.UsefulTestCase.lambda$invokeTestRunnable$10(UsefulTestCase.java:364)
  at com.intellij.testFramework.EdtTestUtilKt.runInEdtAndWait(EdtTestUtil.kt:44)
  at com.intellij.testFramework.UsefulTestCase.invokeTestRunnable(UsefulTestCase.java:363)
  at com.intellij.testFramework.UsefulTestCase.runTest(UsefulTestCase.java:346)
  at org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseBase.lambda$runTest$0(KotlinLightCodeInsightFixtureTestCaseBase.java:92)
  at org.jetbrains.kotlin.test.KotlinTestUtils.lambda$runTestWithThrowable$4(KotlinTestUtils.java:726)
  ... 36 more
Caused by: org.jetbrains.kotlin.idea.caches.resolve.ResolveInDispatchThreadException: Resolve is not allowed under the write action for `org.jetbrains.kotlin.idea.quickfix.MakeOverriddenMemberOpenFix`!
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$applyAction$writeActionResolveHandler$1.invoke(AbstractQuickFixTest.kt:170)
  at org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixTest$applyAction$writeActionResolveHandler$1.invoke(AbstractQuickFixTest.kt:34)
  at org.jetbrains.kotlin.idea.caches.resolve.ResolveInDispatchThreadManager.assertNoResolveInDispatchThread$idea_core(ResolveInDispatchThreadManager.kt:73)
  at org.jetbrains.kotlin.idea.caches.resolve.ModuleResolutionFacadeImpl.analyze(ModuleResolutionFacadeImpl.kt:60)
  at org.jetbrains.kotlin.idea.caches.resolve.ModuleResolutionFacadeImpl.analyze(ModuleResolutionFacadeImpl.kt:56)
  at org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacadeWithDebugInfo.analyze(ResolutionFacadeWithDebugInfo.kt:45)
  ... 126 more
2020-08-25 21:31:10 +03:00
Mikhail Glukhikh
5702fb3b22 FIR: fix CCE in AttributeArrayOwner 2020-08-25 19:29:59 +03:00
Mikhail Glukhikh
962059a878 Introduce FirProperty.hasBackingField & use it in FIR2IR 2020-08-25 19:29:58 +03:00
Mikhail Glukhikh
c6417696cf FirProperty: return back 'isReferredViaField' attribute 2020-08-25 19:29:58 +03:00
Jinseong Jeon
3e9ac75cfc FIR: record use of backing field symbol to indeed add a backing field 2020-08-25 19:29:58 +03:00
Vyacheslav Gerasimov
0cc3762f9a Build: Fix kotlinx-metadata-klib publication 2020-08-25 17:18:00 +03:00
vldf
36f2f1fcf7 [FIR] Add lightTree support to extended checkers + minor refactorings 2020-08-25 17:08:57 +03:00
vldf
da702992d9 [FIR] Fix null source on destructuring declaration 2020-08-25 16:33:49 +03:00
Ilya Matveev
30d24ed943 Tests, Gradle: Fix broken test for KT-40834 2020-08-25 13:06:40 +00:00
Ilya Matveev
920f1184bd Revert "Revert "CocoaPods: Skip synthetic task on non-mac hosts""
This reverts commit 6040491373.
2020-08-25 13:06:39 +00:00
Nick
fd9bfe44f1 [FIR] Visit class annotations without the class's scope 2020-08-25 15:59:33 +03:00
vldf
3cad88a58c [FIR] Fir Helpers hotfix 2020-08-25 14:49:56 +03:00
vldF
cb627952b2 [FIR] Checkers performance improvement
[FIR] Checkers performance improvement
2020-08-25 14:20:30 +03:00
Ilya Goncharov
d86c81cb38 [JS, Gradle] Fix test on overflow, now throw exception on overflow 2020-08-25 13:44:20 +03:00
Arsen Nagdalian
8b4e8a2c0c Diagnostics: add diagnostic for reporting contract description blocks in old frontend 2020-08-25 12:58:39 +03:00
Arsen Nagdalian
80d7f6b688 Ignore the "contract" keyword in code completion 2020-08-25 12:58:39 +03:00
Arsen Nagdalian
ede1c08a9b [FIR] Add resolution of contracts that are written using the new syntax 2020-08-25 12:58:39 +03:00
Arsen Nagdalian
b8b60864fd [FIR] Add contracts tests and place them in a separate directory 2020-08-25 12:58:39 +03:00
Arsen Nagdalian
86e07cd626 Parser tests: move the contract description blocks tests to a separate folder and add a test for property accessors' contracts 2020-08-25 12:58:38 +03:00
Arsen Nagdalian
66f7250380 [FIR] Add contract description blocks support to "lightTree2FIR" conversion 2020-08-25 12:58:38 +03:00
Arsen Nagdalian
9fd104eec8 [FIR] Add contract description blocks support to RawFirBuilder 2020-08-25 12:58:38 +03:00
Arsen Nagdalian
d53f3b9ba8 [PSI] Add some useful getters to psi nodes 2020-08-25 12:58:37 +03:00
Arsen Nagdalian
a936c6331a [Parser] Add getters' and setters' contracts parsing 2020-08-25 12:58:37 +03:00
Arsen Nagdalian
6c06008b4d [FIR] Add a class representing the old syntax contract description in order to use the previous class for the new syntax 2020-08-25 12:58:37 +03:00
Arsen Nagdalian
b83aa88eff [FIR] Add function for getting ConeEffectDeclaration from FirEffectDeclaration and use it where needed 2020-08-25 12:58:35 +03:00
Arsen Nagdalian
991b18fec4 [FIR] Add a Fir node that wraps a ConeEffectDeclaration 2020-08-25 12:58:35 +03:00
Arsen Nagdalian
32a64b888e [Parser] Add parsing of function's contract either before or after type constraints 2020-08-25 12:58:34 +03:00
Arsen Nagdalian
1b57889773 Clean the code 2020-08-25 12:58:34 +03:00
Arsen Nagdalian
f781a9993b Parser tests: add tests for contract description blocks 2020-08-25 12:58:34 +03:00
Arsen Nagdalian
2e9a898f45 [Parser] Move function's contracts parsing in before type constraints parsing 2020-08-25 12:58:34 +03:00
Arsen Nagdalian
0990434840 [Parser] Modify parser so that it could parse contract description blocks of functions 2020-08-25 12:58:34 +03:00
Arsen Nagdalian
e3fe9c3314 [PSI] Add new Psi nodes representing contract effects list and each individual contract effect in the list 2020-08-25 12:58:34 +03:00
Arsen Nagdalian
4b7d34b537 Add "contract" keyword 2020-08-25 12:58:34 +03:00
Dmitriy Novozhilov
316e0e6609 [FIR] Update testdata 2020-08-25 12:07:59 +03:00
Dmitriy Novozhilov
3ccb72bb1a Shadow :core:compiler.common inside kotlinx.metadata 2020-08-25 10:41:34 +03:00
Dmitriy Novozhilov
811a2206a5 Fix usages of KotlinBuiltIns after rebase 2020-08-25 10:41:34 +03:00
Dmitriy Novozhilov
bc1b6d3588 Rename :core:descriptors.common to :core:compiler.common 2020-08-25 10:41:34 +03:00
Dmitriy Novozhilov
864cf21f03 Merge :core:type-system into :core:descriptors.common 2020-08-25 10:41:34 +03:00
Dmitriy Novozhilov
5fa80a2f8c Merge :core:deserialization:deserialization.common into :core:descriptors.common 2020-08-25 10:41:34 +03:00
Dmitriy Novozhilov
bbac270b33 Move OperatorNameConventions to :core.descriptors.common 2020-08-25 10:41:34 +03:00
Dmitriy Novozhilov
2760a187a9 Move FunctionClassKind utils to :core.descriptors.common 2020-08-25 10:41:33 +03:00
Dmitriy Novozhilov
2285d3e3cf Move Variance and AnnotationUseSiteTarget to :core.descriptors.common 2020-08-25 10:41:33 +03:00
Dmitriy Novozhilov
167f18b738 Move SourceElement and SourceFile to :deserialization.common
Remove dependency on `:core:descriptors` from `:core:deserialization:deserialization.common`
2020-08-25 10:41:33 +03:00
Dmitriy Novozhilov
a764732020 Rename KotlinBuiltInsNames to StandardNames 2020-08-25 10:41:33 +03:00
Dmitriy Novozhilov
d032fdfc44 [FIR] Cleanup dependencies in :compiler:fir:raw-fir modules 2020-08-25 10:41:33 +03:00
Dmitriy Novozhilov
b6fd6c3a84 [FIR] Remove dependency on descriptors from :compiler:fir:raw-fir.raw-fir.common module 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
71a517c686 [FIR] Rename :compiler:fir:raw-fir:fir-common to :compiler:fir:raw-fir:raw-fir.common 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
7d4349edc2 [FIR] Remove dependency on descriptors from :compiler:fir:tree module 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
95346f834b [FIR] Fix forgotten dependency to contracts of FE 1.0 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
73ace6d161 Remove dependency to descriptors from :compiler:config module 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
82a9b1492b Move RenderingUtils to :core:descriptors.common module 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
ba6b1c37d0 Move TargetPlatform to :core:descriptors.common module 2020-08-25 10:41:32 +03:00
Dmitriy Novozhilov
d6d2be8e58 Move incremental components to :core:descriptors.common module 2020-08-25 10:41:31 +03:00
Dmitriy Novozhilov
3a48265077 Move ModuleDescriptor.Capability to :core:descriptors.common module 2020-08-25 10:31:37 +03:00
Dmitriy Novozhilov
6f0cd14afa Move common classes to new :core:deserialization:deserialization.common module 2020-08-25 10:31:37 +03:00
Dmitriy Novozhilov
079a2dfe1e Move EventOccurrencesRange class to :core:descriptors.common module 2020-08-25 10:31:37 +03:00
Dmitriy Novozhilov
f7f489537b [FIR] Remove dependency on :core:descriptors from :compiler:fir:tree 2020-08-25 10:31:37 +03:00
Dmitriy Novozhilov
e92caae609 [FIR] Remove dependency on :core:descriptors from :compiler:fir:cones 2020-08-25 10:31:36 +03:00
Dmitriy Novozhilov
45cf221b97 Move util functions from KotlinBuiltIns to :core:descriptors.common module 2020-08-25 10:31:36 +03:00
Dmitriy Novozhilov
20a2ad8223 Move FunctionClassDescriptor.Kind to :core:descriptors.common module 2020-08-25 10:31:36 +03:00
Dmitriy Novozhilov
7a7fe77b8e Move static constants with builtin names to :core:descriptors.common module 2020-08-25 10:31:36 +03:00
Dmitriy Novozhilov
2e92fe9be9 [FIR2IR] Add fir2ir component for converting fir visibility to FE 1.0 2020-08-25 10:31:36 +03:00
Dmitriy Novozhilov
a02109d857 [FIR] Add FirVisibilityChecker session component
This is needed because we have different visibility rules for different
  platform visibilities (e.g. protected and package private on JVM), so
  we need ability to configure visibility checks for different platforms
2020-08-25 10:31:35 +03:00
Dmitriy Novozhilov
18ae593700 [FIR] Rename new visibilities to CamelCase
It's more convenient since they are objects now instead of
  const fields in FE 1.0
2020-08-25 10:31:35 +03:00
Dmitriy Novozhilov
43821b681c [FIR] Introduce new Visibility class which not depends on descriptors 2020-08-25 10:31:35 +03:00
Dmitriy Novozhilov
9d9f9c52c0 Extract some classes from descriptors module to :core:common
This is needed to remove dependencies from fir modules to
  `:core:descriptors` module

What was extracted:
- Modality
- ClassKind
- org.jetbrains.kotlin.name package
2020-08-25 10:31:35 +03:00
Dmitriy Novozhilov
41ba9b0a2d [FIR] Add flag to disable transformers required only for plugins 2020-08-25 10:31:34 +03:00
Mikhail Glukhikh
53ad502d2a [FIR2IR] Generate fake overrides earlier and bind them later
Before this commit, we generated fake overrides at last FIR2IR stage,
after having all functions and classes built. This could lead to a
situation when fake override was called before it was generated.
This commit fixes this situation.
2020-08-25 10:00:26 +03:00
Ilya Chernikov
ee9c597767 Build: Remove exclusion of kotlinx-coroutines-core in scripting-compiler
The previous fix was insufficient to fix gradle substitution in MPP
projects (https://github.com/gradle/gradle/issues/14017)
2020-08-24 19:13:16 +02:00
Nikolay Krasko
741f5de0f9 Clean PSI elements in KotlinExpressionMover
Fix report about leaked projects on build server:

via 'com.intellij.psi.impl.PsiManagerImpl.myProject'; Value: 'Project (name=light_temp, containerState=DISPOSE_COMPLETED, componentStore=/mnt/agent/temp/buildTmp/ideaProject_test_1285163057398451250/testRootGW1/unitTest_addPrimaryConstructorParameter/light_temp....' of class com.intellij.openapi.project.impl.ProjectImpl
      via 'com.intellij.psi.impl.source.PsiFileImpl.myManager'; Value: 'com.intellij.psi.impl.PsiManagerImpl@4ecdfe8' of class com.intellij.psi.impl.PsiManagerImpl
      via 'com.intellij.psi.impl.source.tree.CompositeElement.myWrapper'; Value: 'DummyHolder' of class com.intellij.psi.impl.source.JavaDummyHolder
      via 'com.intellij.psi.impl.source.tree.TreeElement.myParent'; Value: 'Element(DUMMY_HOLDER)' of class com.intellij.psi.impl.source.tree.FileElement
      via 'com.intellij.psi.impl.source.SubstrateRef$2.val$node'; Value: 'Element(VALUE_PARAMETER)' of class com.intellij.psi.impl.source.tree.CompositeElement
      via 'com.intellij.extapi.psi.StubBasedPsiElementBase.mySubstrateRef'; Value: 'com.intellij.psi.impl.source.SubstrateRef$2@5d02fa19' of class com.intellij.psi.impl.source.SubstrateRef$2
      via 'kotlin.Pair.first'; Value: 'VALUE_PARAMETER' of class org.jetbrains.kotlin.psi.KtParameter
      via 'org.jetbrains.kotlin.idea.codeInsight.upDownMover.KotlinExpressionMover.parametersOrArgsToMove'; Value: '(VALUE_PARAMETER, VALUE_PARAMETER)' of class kotlin.Pair
      via '?'; Value: 'org.jetbrains.kotlin.idea.codeInsight.upDownMover.KotlinExpressionMover@7a6f128e' of class org.jetbrains.kotlin.idea.codeInsight.upDownMover.KotlinExpressionMover
      via 'com.intellij.openapi.extensions.impl.ExtensionPointImpl.myExtensionsCacheAsArray'; Value: '[Lcom.intellij.codeInsight.editorActions.moveUpDown.StatementUpDownMover;@276493b6' of class [Lcom.intellij.codeInsight.editorActions.moveUpDown.StatementUpDownMover;
      via 'java.util.concurrent.ConcurrentHashMap$Node.val'; Value: 'com.intellij.statementUpDownMover' of class com.intellij.openapi.extensions.impl.InterfaceExtensionPoint
      via '?'; Value: 'com.intellij.statementUpDownMover=com.intellij.statementUpDownMover' of class java.util.concurrent.ConcurrentHashMap$Node
      via 'java.util.concurrent.ConcurrentHashMap.table'; Value: '[Ljava.util.concurrent.ConcurrentHashMap$Node;@724e0cae' of class [Ljava.util.concurrent.ConcurrentHashMap$Node;
      via 'com.intellij.openapi.extensions.impl.ExtensionsAreaImpl.extensionPoints'; Value: '{com.intellij.embeddedTokenHighlighter=com.intellij.embeddedTokenHighlighter, org.intellij.groovy.expectedTypesContributor=org.intellij.groovy.expectedTypesContributor, org.jetbrains.kotlin.resolveSco...' of class java.util.concurrent.ConcurrentHashMap
      via 'com.intellij.serviceContainer.ComponentManagerImpl.extensionArea'; Value: 'Application (containerState=ACTIVE)  (Unit test) (Internal) (Headless) (Command line)' of class com.intellij.openapi.extensions.impl.ExtensionsAreaImpl
      via '?'; Value: 'Application (containerState=ACTIVE)  (Unit test) (Internal) (Headless) (Command line)' of class com.intellij.openapi.application.impl.ApplicationImpl
       (from ApplicationManager.getApplication())
2020-08-24 19:03:03 +03:00
Nikolay Krasko
18195b3296 Rewrite SmartCompletionMultifileHandlerTest to KotlinFixtureCompletionBaseTestCase
Use light projects as an attempt to fight leaking project errors
2020-08-24 19:03:03 +03:00
Nikolay Krasko
e95c3e2905 Rewrite CompletionMultiFileHandlerTest to KotlinFixtureCompletionBaseTestCase
Use light projects as an attempt to fight leaking project errors
2020-08-24 19:03:03 +03:00
Ilya Goncharov
f92083989a [JS, Wizard] Fix build integrity 2020-08-24 19:01:38 +03:00
Nikolay Krasko
6040491373 Revert "CocoaPods: Skip synthetic task on non-mac hosts"
This reverts commit ce029822
2020-08-24 18:31:32 +03:00
Ilya Goncharov
621c87ee84 Overflowed teamcity messages should failed build
^KT-41133 fixed
2020-08-24 18:22:22 +03:00
Nick
e7b12b9bb1 [FIR] Fix false positive SUPER_NOT_AVAILABLE 2020-08-24 17:23:32 +03:00
Dmitry Petrov
a2dabe11c5 JVM KT-41150: Fix backward compatibility for inline vals in inline class
In 1.3.x, for inline class member inline vals 'getFoo-impl' method was
generated in corresponding inline class.
Since 1.4.0, getters for properties returning inline class values are
mangled (so corresponding getters are named 'getFoo-<mangling_hash>'.
However, to maintain backward compatibility with libraries compiled with
1.3.x, inliner should be able to find 'getFoo-impl' method in the
bytecode.
2020-08-24 16:17:12 +03:00
Vladimir Ilmov
27a22fc1e9 Cleanup Coroutine panel in case connection gets disposed soon after
creation.
2020-08-24 15:09:14 +02:00
Vladimir Ilmov
cb2ab4676b (CoroutineDebugger) Top node added to prevent dumpCoroutine() call
Panel gather information from the agent on each breakpoint hit.
2020-08-24 15:09:13 +02:00
Alexander Udalov
fa45650fd0 JVM IR: specialize ExpressionCodegen.visitFunctionAccess for constructors
This makes the code a bit clearer, and gets rid of some extra type
mapper invocations when generating constructor calls.
2020-08-24 14:51:52 +02:00
Ilya Kirillov
f9bd935ac6 Wizard: fix missing module templates 2020-08-24 15:48:02 +03:00
Kirill Shmakov
5a91dd0439 Update main wizard tests 2020-08-24 15:43:08 +03:00
Kirill Shmakov
147a8c357d Wizard: switch androidx.core -> android.material 2020-08-24 15:43:08 +03:00
Kirill Shmakov
57e9e9a2a1 Wizard: add android.useAndroidX property 2020-08-24 15:43:07 +03:00
Kirill Shmakov
9e88d61be4 Wizard: switch android:allowBackup
Otherwise template could leak sensitive data.
2020-08-24 15:43:06 +03:00
Kirill Shmakov
94ae839d2c Wizard: update Android Appcompat version 2020-08-24 15:43:03 +03:00
Kirill Shmakov
06f9a4e228 Wizard: update Android Gradle plugin version 2020-08-24 15:43:02 +03:00
Roman Artemev
a095909d5c [Plugin API] Provide special context in EP for link-time resolve
- requires to customize declarations from synthetic declarations
2020-08-24 15:37:39 +03:00
Steven Schäfer
ea98062241 JVM IR: Fix compilation of inline functions in anonymous objects...
...in class members. The corresponding classes end up nested in the
class initializer of the surrounding class and we need to take this into
account when creating instances of ClassCodegen.

This fixes KT-40332 on the JVM IR backend.
2020-08-24 14:10:36 +02:00
Ilya Matveev
ce02982226 CocoaPods: Skip synthetic task on non-mac hosts
This patch performs the following changes:

1. Create synthetic tasks even if synthetic projects are
not supported on the current host. This change simplifies
configuring dependencies between these tasks and custom user
tasks at the user side.

2. Disable synthetic tasks if synthetic projects are not supported
on the current host

Issue #KT-40834 Fixed
2020-08-24 12:04:50 +00:00
Alexander Udalov
b10cc6657e Fix loading of builtins resources in kotlin-reflect in Java modular mode
The main change here is that when kotlin-reflect is being run under Java
9+, we use another implementation of BuiltInsResourceLoader (see
libraries/reflect/api/src/java9) which loads .kotlin_builtins files from
the java.lang.Module instance of kotlin-stdlib, instead of the class
loader of kotlin-reflect, which may not have access to those resources.

If the application is being run in the old (classpath) mode, that Module
represents the unnamed module, which contains everything on the
classpath, and everything works as before. But if it's being run in the
modular mode, that Module instance is an encapsulated module for
kotlin-stdlib classes and resources, exactly where .kotlin_builtins
files are located.

This fixes a regression in 1.4.0. Prior to 1.4, kotlin-reflect and
kotlin-stdlib were not named modules (see KT-21266) and were loaded as
_automatic_ modules even if the application was run in the modular mode.
Apparently, they shared the same class loader in that case and looking
up .kotlin_builtins resources worked.

This change was supposed to go alongside
828cc6dbf3, but was overlooked because
adding module-info to standard libraries was postponed at that point.

Also slightly refactor Java9ModulesIntegrationTest to simplify running
compiled code, and add a smoke test on using kotlin-reflect in modular
mode.

 #KT-40842 Fixed
2020-08-24 13:30:00 +02:00
Alexander Udalov
201fa849b8 Workaround problem with log4j warnings in CLI tests
#KTI-166
2020-08-24 13:30:00 +02:00
Nick
05cfb654ba [FIR] Fix removeAtInt test 2020-08-24 13:38:43 +03:00
Nikolay Krasko
2b983b1c20 Mute flaky JavaAgainstKotlinBinariesCheckerTestGenerated.testEnumStaticImportInJava 2020-08-24 13:20:31 +03:00
Ilya Goncharov
2d8643b6ef [Gradle, JS] Add nowarn flag for kotlin2js
^KT-41340 fixed
2020-08-24 13:05:22 +03:00
Nick
aeae898b94 [FIR] Fix issues with properties' fake sources 2020-08-24 11:06:45 +03:00
Nick
61e21dadec [FIR] Add 3 type mismatch diagnostics 2020-08-24 11:06:12 +03:00
Nick
c8f8908a01 [FIR] Add NO_THIS & INSTANCE_ACCESS_BEFORE_SUPER_CALL 2020-08-24 11:06:10 +03:00
Nick
7e1c2cfd36 [FIR] Add diagnostic INAPPLICABLE_LATEINIT_MODIFIER + some builtin types 2020-08-24 11:06:06 +03:00
Nick
091e12c093 [FIR] Add diagnostic CONFLICTING_PROJECTION 2020-08-24 11:06:04 +03:00
Dmitriy Dolovov
d40bca4143 [Commonizer] Short-circuiting of type aliases
^KT-41220
2020-08-24 12:21:12 +07:00
Vyacheslav Gerasimov
8a84af8a6f Build: Fix idea-gradle test task dependency on dist 2020-08-22 14:11:34 +03:00
Mark Punzalan
a9359eb530 RangeContainsLowering: Handle unsigned ranges. 2020-08-21 21:15:27 +02:00
Mark Punzalan
ceba9f231d RangeContainsLowering: Fix bug in additional condition order for
`until` ranges.
2020-08-21 21:15:27 +02:00
Mark Punzalan
60a2f7d03f RangeContainsLowering: Handle Comparable ranges. 2020-08-21 21:15:27 +02:00
Mark Punzalan
1c1b1b4b0f Initial version of RangeContainsLowering, which optimizes calls to
contains() on ClosedRanges.
2020-08-21 21:15:27 +02:00
Jinseong Jeon
ca541337d1 FIR: skip return insertion for lambda w/ Unit return type 2020-08-21 19:16:43 +03:00
Alexander Udalov
f1ce668ede IR: minor, don't store unnecessary fields 2020-08-21 17:52:10 +02:00
Alexander Udalov
26eb51a9f9 Minor, fix generateBuiltins test 2020-08-21 17:51:23 +02:00
Nikolay Krasko
d170f46bfc Mute flaky fun usages tests 2020-08-21 18:28:21 +03:00
Nikolay Krasko
6293842d81 Mute XCoroutinesStackTraceTestGenerated flaky test 2020-08-21 18:28:21 +03:00
Nikolay Krasko
9d300f56cc Mark SubpluginsIT.testKotlinVersionDowngradeInSupbrojectKt39809 as flaky 2020-08-21 18:28:21 +03:00
Nikolay Krasko
8f785f6bb2 Mute flaky tests in ContinuationStackTraceTestGenerated 2020-08-21 18:28:21 +03:00
Nikolay Krasko
fd036c2658 Mute flaky tests in JavaAgainstKotlinBinariesCheckerTestGenerated 2020-08-21 18:28:21 +03:00
Roman Artemev
fcca2c6fa3 [JS IR] fix failing test 2020-08-21 17:44:07 +03:00
pyos
5722f889d8 FIR2IR: scan the entire interface tree for delegatable members 2020-08-21 16:50:23 +03:00
Mikhail Glukhikh
99d2fd7c4d [FIR] Handle open in interface correctly during status resolve 2020-08-21 16:50:23 +03:00
Mikhail Glukhikh
8e2c5bf4fe [FIR] Fix exposed visibility checking for enum entries 2020-08-21 16:50:22 +03:00
Mikhail Glukhikh
e15e87fded [FIR] Expand aliased type before checking for exposure 2020-08-21 16:50:22 +03:00
Denis Zharkov
cb6fbc329a FIR: Simplify FirQualifiedAccess hiearchy
Mostly, it's getting rid of FirQualifiedAccessWithoutCallee and FirModifiableQualifiedAccess
The latter was only used during FIR building to set explicit receiver
that might be done by replace call on explicit receiver

The problem with replaceExplicitReceiver is that for FirComponentCall
explicitReceiver should be not null, so it's needed to perform those tricks
at the generatot
2020-08-21 16:34:46 +03:00
Dmitriy Novozhilov
e6837a5b8c [FIR] Unify implementations of toSymbol and getSymbolByLookupTag 2020-08-21 15:28:34 +03:00
Dmitriy Novozhilov
d1f6e45b08 [FIR] Cleanup signature of getNestedClassifierScope 2020-08-21 15:27:55 +03:00
Dmitriy Novozhilov
ffdc68b68d [FIR] Get rid of AbstractFirSymbolProviderWithCache 2020-08-21 15:27:55 +03:00
Dmitriy Novozhilov
111b8c0169 [FIR] Cleanup caching symbol in ConeClassLikeLookupTagImpl
Type of `boundSymbol` replaced to OneElementWeakMap
`FirSymbolProvider.getSymbolByLookupTag` moved to extensions
2020-08-21 15:27:55 +03:00
Dmitriy Novozhilov
9032234e1d [FIR] Get rid of FirSymbolProvider.getNestedClassifierScope 2020-08-21 15:27:55 +03:00
Dmitriy Novozhilov
77f52a9ddb [FIR] Add special inline class for caches which are used in symbol providers 2020-08-21 15:27:55 +03:00
Dmitriy Novozhilov
4b6193159c [FIR] Get rid of JavaSymbolProvider.getJavaTopLevelClasses 2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
d7cfb2fb13 [FIR] Get rid of FirSymbolProvider.getClassNamesInPackage
There was one non-removable usage of those function in FirJavaElementFinder
  and three non-trivial implementation
- `FirProvider.SymbolProvider`
- `KotlinDeserializedJvmSymbolsProvider`
- `FirBuiltinSymbolProvider`

First implementation was moved to `FirProvider` and other two was
  deleted, because in FirJavaElementFinder we need lookup only in
  classes from source code, so such methods in library providers are
  useless

#KT-41048
2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
b31f80aee3 [FIR] Get rid of FirSymbolProvider.getAllCallableNamesInPackage
#KT-41048
2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
f32a0fe7ad [FIR-TEST] Unify AbstractFirLoadCompiledKotlin and BuiltInsDeserializationForFirTestCase 2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
913ea9b56d [FIR-TEST] Get rid of deprecated methods usage in AbstractFirLoadCompiledKotlin
Now complied declaration names are collected via ModuleDescriptor,
  so tests pass more correctly. Before this change tests didn't render
  compiled typealiases and properties.
Also some testdata was changed because of new order of declaration
2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
41aa90ad71 [FIR-TEST] Add flag to take memory dumps in modularized test 2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
cb0b25ea39 [FIR] Replace Deprecated with PrivateForInline in ScopeSession 2020-08-21 15:27:54 +03:00
Dmitriy Novozhilov
b4dc7955b4 [FIR] Avoid collections copying in FirSymbolProvider 2020-08-21 15:27:53 +03:00
Dmitriy Novozhilov
ce36ae64a1 [FIR] Deprecate questionable methods of FirSymbolProvider 2020-08-21 15:27:53 +03:00
Dmitriy Novozhilov
d5bb87cd1f [FIR] Replace inheritance with delegation for FirProvider and FirSymbolProvider 2020-08-21 15:27:53 +03:00
Dmitriy Novozhilov
ad9e41b828 [FIR] Mark JavaSymbolProvider.getJavaTopLevelClasses as @TestOnly 2020-08-21 15:27:53 +03:00
Dmitriy Novozhilov
1d26ce4a4e [FIR] Get rid of useless methods in FirSymbolProvider 2020-08-21 15:27:53 +03:00
Dmitriy Novozhilov
f0d05a321d [FIR-IDE] Use symbolProvider instead of firProvider in KtFirPackageScope 2020-08-21 15:27:53 +03:00
vldf
0d6b363179 [FIR] Refactoring for extended checkers 2020-08-21 15:09:05 +03:00
vldf
e2016499f3 [FIR] Fixed CFA bug 2020-08-21 15:08:37 +03:00
vldf
ac07438489 [FIR] Speed up CFA-checkers 2020-08-21 15:08:37 +03:00
vldf
638a0d3b82 [FIR] Checkers performance improvement and some refactoring 2020-08-21 15:08:36 +03:00
Kirill Shmakov
5a45cc7290 Update wizard tests 2020-08-21 13:06:56 +03:00
Denis Zharkov
cee72023fa Remove TypeSystemContext::mayBeTypeVariable optimization
It doesn't work now since anyway it's required to obtain type
constructor
At the same time, now it's not very expensive to obtain the constructor
since it's just a lookup tag
2020-08-21 12:50:33 +03:00
Denis Zharkov
9ac5dd2bce FIR: Use lookup tags for as type constructors instead of symbols
It may help to avoid redundant symbols lookups
2020-08-21 12:50:33 +03:00
Vladimir Ilmov
34b55dbeb3 (CoroutineDebugger) Disable agent for MPP projects
#KT-39412 fixed
2020-08-21 10:35:39 +02:00
Vladimir Dolzhenko
1e96088cc6 Check unique symbols in Goto*Tests 2020-08-21 10:04:36 +02:00
Dmitry Gridin
5f584691a6 [inspections] disable "Redundant inner modifier" inspection
^KT-41264 Fixed
2020-08-21 09:28:37 +07:00
Vladimir Dolzhenko
ec253862c6 Check unique symbols in Goto*Tests 2020-08-20 23:50:26 +02:00
Kirill Shmakov
62be688eb7 Wizard: add missing test dependency 2020-08-20 22:33:14 +03:00
Roman Artemev
e7f22bcfbc [JS IR] Add test for cross module export 2020-08-20 22:16:20 +03:00
Anton Bannykh
136d86e552 [JS IR] Fix cross-module import/export in case per-module splitting 2020-08-20 22:13:39 +03:00
Roman Artemev
8d61e9ba21 [KLIB] Load @JsExport annotated declarations explicitly 2020-08-20 22:13:39 +03:00
Roman Artemev
1a0e3a1d83 [KLIB] Refactor file serializer a bit
- Support explicitly exported on files and properties
2020-08-20 22:13:38 +03:00
Alexander Udalov
12e900ef3c Minor, do not capitalize words in generated Gradle options docs
To make this output correspond to the actual table at
https://github.com/JetBrains/kotlin-web-site/blob/master/pages/docs/reference/using-gradle.md
2020-08-20 20:30:55 +02:00
Alexander Udalov
0ef4b22cf3 Remove deprecated usages of ContainerUtil 2020-08-20 20:30:34 +02:00
Alexander Udalov
2428c180c2 Suppress warning on usage of old MPP in kotlin-stdlib 2020-08-20 20:30:34 +02:00
Alexander Udalov
da6d904c6e Suppress code warnings in kotlin-stdlib 2020-08-20 20:30:34 +02:00
Nikolay Krasko
5ef4f7df5a Mute more tests 2020-08-20 16:06:11 +03:00
Nikolay Krasko
44a95a4105 Stop running failed AndroidRunner tests 2020-08-20 16:06:11 +03:00
Nikolay Krasko
7f91ed6997 Support mute tests in kotlin-gradle-plugin-integration-tests (KTI-234)
#KTI-234 Fixed
2020-08-20 16:06:11 +03:00
Mikhail Glukhikh
07bddbe4d0 [FIR CLI] Don't run generation if some errors are found 2020-08-20 16:04:07 +03:00
Mikhail Glukhikh
85c1505689 [FIR2IR] Copy type parameters for trivial fake overrides 2020-08-20 16:04:02 +03:00
Alexander Udalov
bf0bb9e946 JVM IR: remove obsolete code for duplicate signature diagnostics 2020-08-20 14:58:36 +02:00
Alexander Udalov
425b192a5f Fix warnings in build-common/daemon code 2020-08-20 14:58:11 +02:00
Alexander Udalov
1d15a5547d Suppress deprecation warnings related to scripting 2020-08-20 14:58:11 +02:00
Alexander Udalov
549ee84687 Fix some compiler warnings in FIR modules 2020-08-20 14:57:54 +02:00
Mikhail Zarechenskiy
ced151f3af Add test for KT-41254
It was fixed along with #KT-41005
2020-08-20 15:45:32 +03:00
Mads Ager
a6f301e84a [JVM_IR] Rebase constructor stepping tests that are working as intended.
JVM_IR has consistent stepping behavior for secondary constructors
and init blocks. This change fixes the expectations for tests that
expect the less consistent JVM backend behavior.
2020-08-20 13:12:22 +02:00
Mads Ager
2c6b5c8847 [JVM_IR] Give temporary variable loads meaningful offsets.
Temporary variable loads in when expressions had the offsets
of the variable declaration. That leads to hacks during codegen
for line number generation.

Instead of those hacks, give the variable loads the offsets of
the context in which they occur. That avoids the codegen hacks
and fixes stepping behavior for more when expressions.
2020-08-20 13:12:22 +02:00
Sergey Igushkin
413d02621b Add a link to docs in MPP stability warning; add a flag that hides it 2020-08-20 10:44:59 +00:00
Mikhail Glukhikh
02e5f140f4 Fir2IrLazyProperty: generate overridden symbols via FirTypeScope 2020-08-20 11:47:35 +03:00
Mikhail Glukhikh
25efad2fd7 [FIR2IR] Extract generateOverriddenAccessorSymbols 2020-08-20 11:47:35 +03:00
Roman Golyshev
539d2bc01f FIR Completion: Fix completion with error type as receiver
- When type is error, the completion should not show anything; instead,
it was showing as if the explicit receiver was not there
2020-08-20 11:33:23 +03:00
Roman Golyshev
bca9754a7b FIR Completion: Move completion from available scopes to separate class 2020-08-20 11:33:23 +03:00
Denis Zharkov
7f3f0faa1a FIR: Rework overridden members processing in FirTypeScope
Now, FirTypeScope returns only direct overridden and a base scope
where a client might look for deeper overridden

It's necessary to make the API fast and simple
when only direct overridden are needed

At the same time, while this API looks a bit complicated for most of the clients
there are simple extension helpers that obtain just the direct or all overridden
2020-08-20 11:18:59 +03:00
Toshiaki Kameyama
8ce9b2d061 KT-34572 Convert to block body action improperly works with suppress annotations (#2969)
* Convert to block body: place @Suppress annotation before return expression

#KT-34572 Fixed

* Convert to block body: place annotations before return expression
2020-08-20 11:15:00 +03:00
Ilya Kirillov
9e0bb4ce8e FIR: save resolvePhase of declaration when creating it fake override copy 2020-08-20 11:07:09 +03:00
Ilya Kirillov
b1d3ab04c2 FIR [IDE]: provide correct node phase when necessary 2020-08-20 09:48:33 +03:00
Mads Ager
119302b016 [JVM_IR] Run KotlinSteppingTests with the JVM_IR backend.
Implement support for supressing failures by backend.
2020-08-20 05:48:54 +02:00
Nikolay Krasko
01f7da66c6 Mute ProjectTemplateNewWizardProjectImportTestGenerated.**.testMultiplatformApplication 2020-08-19 23:35:23 +03:00
Nikolay Krasko
9d18279ec9 Mute ReferenceResolveTestGenerated.DelegatedPropertyAccessors.InStandardLibrary.testNotNull 2020-08-19 23:01:09 +03:00
Nikolay Krasko
d87d42348b Mute flaky GotoWithMultipleLibrariesTest
Tests are flaky after e2a12602a3
2020-08-19 23:01:09 +03:00
Nikolay Krasko
179bd1cc3d Mute KotlinUastTypesTest.testEa101715 2020-08-19 23:01:09 +03:00
Nikolay Krasko
950b139804 Mute CreateFunction.Invoke.testLambdaArgument 2020-08-19 23:01:09 +03:00
Nikolay Krasko
496ede7587 Mute KotlinUastTypesTest.testEa101715 2020-08-19 23:01:08 +03:00
Nikolay Krasko
4135240cc0 Mute testFunctionBreakpointInStdlib in AS41 2020-08-19 23:01:08 +03:00
Nikolay Krasko
7982283007 Copy mutes for AS41 from 201 2020-08-19 23:01:08 +03:00
Nikolay Krasko
a3c8427cb2 Mute GradleScriptListenerTest tests 2020-08-19 23:01:08 +03:00
Nikolay Krasko
7de5368b4d Fix AbstractGradleBuildRootsLocatorTest tests 2020-08-19 23:01:08 +03:00
Nikolay Krasko
0b2fcd2c4d Remove mutes for navigation tests 2020-08-19 23:01:08 +03:00
Yunir Salimzyanov
ebe0489a74 Fix joined lines in .bunch 2020-08-19 19:51:51 +03:00
Yunir Salimzyanov
70cda1b113 Refactor and fix files previously affected by 192 patchset (KTI-315) 2020-08-19 19:40:02 +03:00
Yunir Salimzyanov
42da9e62db Cleanup 192 patchset files (KTI-315) 2020-08-19 19:40:02 +03:00
Yunir Salimzyanov
73aa21aab6 Refactor and fix files previously affected by as36 patchset (KTI-315) 2020-08-19 19:40:00 +03:00
Yunir Salimzyanov
27b2e16141 Cleanup as36 patchset files (KTI-315) 2020-08-19 19:40:00 +03:00
Ilya Chernikov
0a9089bc72 Set correct base classloader for REPL evaluation
the contributed partial fix of KT-35925 set it to the system classloader
which brought in many cases the compiler CP into the evaluation and lead
to the problems like KT-40898. This fix set it to the extension/platform
classloader, which preserves (partial) fix of the KT-35925 and do not
bring the compiler jar into the REPL evaluation classpath.

#KT-40898 fixed
2020-08-19 15:17:07 +02:00
Ilya Chernikov
f713e8ad36 Set context classloader before REPL evaluation
#KT-35925 fixed
2020-08-19 15:17:06 +02:00
Vladimir Dolzhenko
d0366d3bcb Failed test clean up
Relates to ^KT-40960
2020-08-19 15:06:53 +02:00
alexjuca
4794297640 used string template instead of concatenation 2020-08-19 13:58:58 +02:00
Kirill Shmakov
f88e492d11 Support hmpp in template
Explained in KMM-332
2020-08-19 14:46:49 +03:00
Toshiaki Kameyama
11044a3ab5 Surround with null check: fix incorrect check for 'in' expression
#KT-31749 Fixed
2020-08-19 14:37:24 +03:00
Toshiaki Kameyama
1188f4617a Change file's package to match directory: add space after package keyword if needed
#KT-39604 Fixed
2020-08-19 14:04:18 +03:00
Kirill Shmakov
1ce39222e3 Build KMM plugin for AS 4.2 2020-08-19 13:02:39 +03:00
Mikhail Zarechenskiy
6ed13ef1b6 Fix unresolved reference to catch parameter from lambda expression
#KT-41140 Fixed
2020-08-19 12:52:16 +03:00
Mikhail Zarechenskiy
f2fba8a469 Fix delegated property resolve when provideDelegate has this as argument
#KT-41135 Fixed
2020-08-19 12:52:16 +03:00
Toshiaki Kameyama
f3be3f449a Scope function conversion: do not suggest when invoked without receiver
#KT-35525 Fixed
2020-08-19 12:27:41 +03:00
Toshiaki Kameyama
8ba5548a0f "Eliminate argument of 'when'": do not suggest if 'when' is used as expression and it has no 'else' branch (#2898)
#KT-35526 Fixed
2020-08-19 12:24:58 +03:00
Toshiaki Kameyama
d965ad0a98 IfThenToSafeAccessInspection: do not report if condition is SENSELESS_COMPARISON/USELESS_IS_CHECK (#3007)
#KT-36051 Fixed
2020-08-19 12:22:10 +03:00
Toshiaki Kameyama
122bba9102 UnnecessaryVariableInspection: don't report for overriding property
#KT-39263 Fixed
2020-08-19 12:16:37 +03:00
Igor Yakovlev
c29dbee65e Cover move method refactoring with registry key (disabled by default) 2020-08-19 12:11:53 +03:00
aleksandrina-streltsova
ed67517fb9 Move: make minor refactorings and add GUI form for MoveKotlinMethodDialog 2020-08-19 12:11:53 +03:00
aleksandrina-streltsova
5515465760 Move: Support method moving 2020-08-19 12:11:53 +03:00
Alex Chmyr
a5368e443c KT-20421 fixing code generation for the case when "object" extends "class". It should look like: "object: class()". 2020-08-19 11:46:29 +03:00
Anton Yalyshev
26ca205f7e Fix a broken hyperlink to Whatsnew at the plugin change-notes 2020-08-19 11:41:13 +03:00
Ilya Kirillov
ccf285a284 FIR IDE: do not recreate analysis session for tests now 2020-08-19 11:35:42 +03:00
Ilya Kirillov
c191373a6b FIR IDE: always pass ValidityToken to KtAnalysisSessionComponent 2020-08-19 11:35:41 +03:00
Ilya Kirillov
2290d2fcc0 FIR IDE: make FirScopeRegistry belong to a KtFirScopeProvider 2020-08-19 11:35:40 +03:00
Roman Golyshev
7d58588f06 FIR IDE: Fix KtFirPropertySymbol::receiverType 2020-08-19 11:23:56 +03:00
Dmitry Petrov
8f0aecce58 JVM_IR: KT-40330 Unify field names for captured 'this' with JVM
NB some cases such as captured extension receiver for an extension
lambda are not supported yet; to be discussed, to what extent should we
actually follow JVM code shape here.
2020-08-19 11:07:41 +03:00
Dmitriy Dolovov
24bfc155af IDE perf tests for K/N: Use Gradle 6.6 2020-08-19 12:45:16 +07:00
Dmitriy Dolovov
6a95317f73 IDE perf tests for K/N: Switch to 1.4.0 2020-08-19 12:45:09 +07:00
Mikhail Glukhikh
f7cb165fb9 Introduce Fir2IrBuiltIns & move extension function type inside 2020-08-18 21:54:05 +03:00
Simon Ogorodnik
97b10b5ab3 [FIR2IR] Hack-in setting of extension function type annotation 2020-08-18 21:53:55 +03:00
Mikhail Glukhikh
b1c36feef4 Minor: regenerate FIR diagnostic tests 2020-08-18 21:53:35 +03:00
Jinseong Jeon
7e22de1e24 FIR2IR: insert coerce-to-unit expressions in statement containers 2020-08-18 21:53:08 +03:00
pyos
1b3ab53e16 FIR2IR: set superQualifierSymbol for setters too 2020-08-18 21:53:08 +03:00
Jinseong Jeon
e9659d9c8a FIR2IR: make the scope of body of do-while loop transparent 2020-08-18 21:53:07 +03:00
Jinseong Jeon
1b6c4329d2 FIR2IR: handle unbound reference with adapted arguments 2020-08-18 21:53:07 +03:00
vldf
a26eeb6ee8 [FIR] Add CLI flag for running extended checkers 2020-08-18 21:53:07 +03:00
vldf
2bf1d3fee8 [FIR] Add messages for extended checkers' warnings 2020-08-18 21:53:06 +03:00
Ilya Kirillov
08e2dd3dea NJ2K: fix implicit type cast in binary expressions
#KT-37298 fixed
2020-08-18 17:38:07 +03:00
Ilya Kirillov
d5d57f84e0 NJ2K: preserve annotations while converting class to object
#KT-38879 fixed
2020-08-18 17:38:07 +03:00
Ilya Kirillov
3d517c3656 NJ2K: fix retrieving resolutionFacade on empty context elements list 2020-08-18 17:38:07 +03:00
Ilya Kirillov
de0c216cfa NJ2K: fix NPE in JavaObjectEqualsToEqOperatorProcessing 2020-08-18 17:38:06 +03:00
Simon Ogorodnik
38477be484 [FIR] Make test fail if profiling requested, but misconfigured 2020-08-18 16:21:48 +03:00
Simon Ogorodnik
15d4333e81 [FIR] Add per-pass profiling support to modularized test 2020-08-18 16:21:48 +03:00
Simon Ogorodnik
83ded9badf [FIR] Add pass argument to beforePass of modularized test 2020-08-18 16:21:48 +03:00
Roman Artemev
716c3668d6 [IR] Properly resolve type parameters in case of property accessor
- fix KT-41006
2020-08-18 11:48:06 +03:00
Alexander Udalov
a810dbb41b IR: fix compiler warnings 2020-08-18 10:33:25 +02:00
Vladimir Dolzhenko
be53467bee Flaky and muted navigation tests clean up
Relates to #KT-40960
2020-08-18 08:23:02 +00:00
Vladimir Dolzhenko
e2a12602a3 Fixed getPsiMethodWrappers for KtLightMethodForDecompiledDeclaration
#KT-40960 Fixed
2020-08-18 08:23:01 +00:00
Vladimir Dolzhenko
ee0250bd35 Reformat file
Relates to #KT-40960
2020-08-18 08:23:00 +00:00
Vladimir Dolzhenko
5c7054a5ab Fixed src path for mock library
Relates to #KT-40960
2020-08-18 08:23:00 +00:00
Natalia Selezneva
7b80be5c9d Temporary workaround for gradle issue: wrong navigation for included plugin source code
https://github.com/gradle/gradle/issues/13783
^KT-39522
2020-08-17 23:12:51 +03:00
Alexander Udalov
7dd687cf00 IR: minor, use lazy instead of lazyVar for readonly value 2020-08-17 21:19:53 +02:00
Alexander Udalov
a21f273570 Fix compiler warnings in compiler code 2020-08-17 21:18:20 +02:00
Alexander Udalov
9b94e073af Fix warnings related to OptIn/UseExperimental 2020-08-17 21:18:19 +02:00
Alexander Udalov
256f4449ce IR: annotate obsolete API in IrPluginContext with ObsoleteDescriptorBasedAPI 2020-08-17 21:18:19 +02:00
Alexander Udalov
9961bd1fe1 IR: remove unneeded casts after making IrCall's symbol a simple function 2020-08-17 21:18:17 +02:00
Alexander Udalov
3bdbfc1e73 Output total codegen statistics after IR translation/generation 2020-08-17 19:29:58 +02:00
Alexander Udalov
c3cbcf6d7f Slightly improve performance measurements rendering
Report the input module name and size once before any measurements
instead of duplicating it in all of them. Also, render measurements in a
table to improve readability.

Before:

info: PERF: INIT: Compiler initialized in 467 ms
info: PERF: ANALYZE: 1 files (2 lines) target main-java-production in 277 ms - 7.220 loc/s
info: PERF: IR: Translation 1 files (2 lines) target main-java-production in 291 ms - 6.873 loc/s
info: PERF: GENERATE: 1 files (2 lines) target main-java-production in 513 ms - 3.899 loc/s
info: PERF: IR: Generation 1 files (2 lines) target main-java-production in 142 ms - 14.085 loc/s

After:

info: PERF: main-java-production, 1 files (2 lines)
info: PERF: INIT: Compiler initialized in 421 ms
info: PERF:         ANALYZE     342 ms       5.848 loc/s
info: PERF:  IR TRANSLATION     296 ms       6.757 loc/s
info: PERF:        GENERATE     453 ms       4.415 loc/s
info: PERF:   IR GENERATION     137 ms      14.599 loc/s
2020-08-17 19:29:57 +02:00
Simon Ogorodnik
0045b501d5 FIR IDE: Fix memory leak in thread locals 2020-08-17 20:05:52 +03:00
Ilya Kirillov
76b078b561 FIR IDE: resolve KtFirLocalVariableSymbol only to IMPLICIT_TYPES_BODY_RESOLVE 2020-08-17 20:05:52 +03:00
Ilya Kirillov
b8920114f8 FIR: set resolvePhase to BODY_RESOLVE in deserialized Kotlin declarations 2020-08-17 20:05:52 +03:00
Simon Ogorodnik
c7d6a79c25 FIR IDE: Fix completion in case of function with parameters 2020-08-17 20:05:52 +03:00
Nikolay Krasko
863de52f7a Minor: better name for file walking with excludes 2020-08-17 20:02:47 +03:00
Nikolay Krasko
c30910130e Remove minor optimization in CodeConformanceTest 2020-08-17 20:02:46 +03:00
Nikolay Krasko
01f3bdfc69 Exclude kotlin-ultimate/ide/common-cidr-native from author check 2020-08-17 20:02:46 +03:00
Nikolay Krasko
31ed803ada More excludes 2020-08-17 19:40:49 +03:00
Nikolay Krasko
713dbc225e Other repositories monitoring 2020-08-17 19:40:48 +03:00
Nikolay Krasko
fad15b6627 Rewrite testThirdPartyCopyrights test 2020-08-17 19:40:48 +03:00
Nikolay Krasko
bb0ea56d63 Extract traversing through directories to the common code 2020-08-17 19:40:48 +03:00
Nikolay Krasko
8db588c7f0 Optimize testNoBadSubstringsInProjectCode test
Don't visit ignored directories
2020-08-17 19:40:48 +03:00
Nikolay Krasko
2655d9dab3 Optimize testForgottenBunchDirectivesAndFiles test
Don't step through the ignored directories.
2020-08-17 19:40:48 +03:00
Nikolay Krasko
3eb89d6dfd Use own allow list for each repository 2020-08-17 19:40:48 +03:00
Nikolay Krasko
8445c8f4a5 Update copyright conformance excludes 2020-08-17 19:40:47 +03:00
Nikolay Krasko
04a1e572a8 Monitor new usages of kotlin-eap repository 2020-08-17 19:40:47 +03:00
Nikolay Krasko
d2bf5587d6 Monitor new usages of kotlin-dev repository 2020-08-17 19:40:47 +03:00
Nikolay Krasko
50d85b92da Remove more kotlin-dev usages 2020-08-17 19:40:47 +03:00
Nikolay Krasko
be2badc6ed Remove kotlin-dev from gradle migrate test 2020-08-17 19:40:47 +03:00
Nikolay Krasko
0c27e87eb9 Remove kotlin-dev from gradle configurator tests 2020-08-17 19:40:46 +03:00
Dmitriy Dolovov
3dc3c19c02 [Commonizer] Fix ImportAndCheckNavigation IT 2020-08-17 21:52:40 +07:00
Georgy Bronnikov
df8b819a55 JVM_IR: restore dumping for IrLowering phase 2020-08-17 15:57:12 +03:00
Ilya Goncharov
c70759673c [Gradle, JS] Update npm versions
^KT-41125 fixed
2020-08-17 15:22:30 +03:00
Steven Schäfer
6100166185 JVM IR: Fix special bridge generation with external Kotlin dependencies 2020-08-17 13:42:32 +02:00
Ilya Kirillov
730e07c52a Wizard: fix ExpectedFileTest.kt 2020-08-17 12:22:38 +03:00
Toshiaki Kameyama
35459d2ca7 "Add not-null asserted (!!) call": add '!!' to receiver of function reference
#KT-37841 Fixed
2020-08-17 12:05:45 +03:00
Ilya Kirillov
5e5e19f482 FIR IDE: temporary disable AddFunctionReturnTypeIntention 2020-08-17 11:38:05 +03:00
Ilya Kirillov
b79deafbc7 FIR IDE: fix testdata 2020-08-17 11:38:04 +03:00
Ilya Kirillov
27c045d035 FIR IDE: move all all symbol markers to markers package 2020-08-17 11:38:02 +03:00
Ilya Kirillov
052e8e5069 FIR IDE: make a symbol hierarchy a sealed one 2020-08-17 11:38:01 +03:00
Ilya Kirillov
018dd673b3 FIR IDE: simplify containing declaration provider 2020-08-17 11:38:00 +03:00
Ilya Kirillov
37ac654444 FIR IDE: rework high level API
Make analysis session to always be a receiver parameter
2020-08-17 11:37:58 +03:00
Ilya Kirillov
cadf99ca1e FIR IDE: introduce containingDeclarationProvider for symbols 2020-08-17 11:37:57 +03:00
Ilya Kirillov
b5a4e4c409 FIR IDE: introduce applicable computation & -based inspection 2020-08-17 11:37:56 +03:00
Ilya Kirillov
c8ab0766c9 FIR IDE: Implement symbol restoring for member symbols 2020-08-17 11:37:55 +03:00
Ilya Kirillov
e4995175a4 FIR IDE: fix idea-frontend-fir testdata 2020-08-17 11:37:53 +03:00
Ilya Kirillov
5f20910c79 FIR IDE: always try to find symbol origin in overridden symbols 2020-08-17 11:37:52 +03:00
Ilya Kirillov
a700d1fccb FIR IDE: resolve kt symbols only to the phase they actually need 2020-08-17 11:37:51 +03:00
Dmitriy Dolovov
75be9cf31f [Commonizer] Tests on rewriting callables names to succeed commonization
^KT-34602
2020-08-17 09:31:28 +07:00
Dmitriy Dolovov
de0b6e06cf [Commonizer] Keep parameters names hash in approximation keys for ObjC callables
^KT-34602
2020-08-17 09:31:21 +07:00
Dmitriy Dolovov
3b901a28d5 [Commonizer] More compact approximation keys
^KT-34602
2020-08-17 09:31:12 +07:00
Dmitriy Dolovov
4418dc85ca [Commonizer] Allow rewriting callables names to succeed commonization
^KT-34602
2020-08-17 09:31:03 +07:00
Dmitriy Dolovov
8904f5652b [Commonizer] Allow extended lookup for classifiers in test mode
Only for commonizer tests!

Allow to look up classifiers from the standard Kotlin packages (kotlin, kotlinx)
both in the default built-ins module and in test data sources. This is necessary
to write tests that refer to C-interop classifiers that are not available without
Kotlin/Native distribution.

^KT-34602
2020-08-17 09:30:57 +07:00
Dmitriy Dolovov
3b398ed57f [Commonizer] Small clean-up in IllegalCommonizerStateException 2020-08-17 09:30:47 +07:00
Dmitriy Dolovov
494fb39399 [Commonizer] CLI: Report duration even if it's 0ms long 2020-08-17 09:30:42 +07:00
Dmitriy Dolovov
9ef727747b [Commonizer] Use Array instead of List in AbstractListCommonizer 2020-08-17 09:30:36 +07:00
Igor Chevdar
e468a347b5 [box-tests] Tests on field init optimization
Added tests on all primitive types and a test when the field's type is an inline class
2020-08-15 12:16:33 +05:00
Steven Schäfer
0328fcaf5d JVM IR: Avoid IMPLICIT_NOTNULL checks on special bridge methods
...with dynamic type checks, except for the `@PlatformDependent`
methods, for which the JVM backend adds null checks.
2020-08-14 21:59:33 +02:00
Steven Schäfer
9026f89ba5 JVM IR: Avoid CHECKCASTs on type operators (KT-39520)
The type information coming from Java or Kotlin generics may be wrong
due to type erasure and a CHECKCAST instruction could throw an
exception.
2020-08-14 21:58:47 +02:00
Alexander Udalov
469b164555 IR: minor optimizations to IR validation 2020-08-14 21:55:37 +02:00
Alexander Udalov
7468518f35 JVM IR: minor, optimize forceSingleValueParameterBoxing
In JVM IR, both `valueParameters` and `isFromJavaOrBuiltins` take
noticeable time (1% of all compilation) because the logic for these in
IrBasedDescriptors is not trivial.
2020-08-14 21:55:37 +02:00
Alexander Udalov
35cace2540 JVM IR: collect potentialBridgeTargets in a list, then create bridges for all of them
This takes BridgeLowering time percentage from 1.3% to 1.0% of all
compiler time on a sample project, perhaps due to better data locality.
In addition, it simplifies stack traces by effectively merging all
bridge generation call sites into one, helping in future performance
investigations.
2020-08-14 21:55:37 +02:00
Alexander Udalov
9607414cf1 IR: make allOverridden return Set instead of Sequence, move to IrUtils
This doesn't hurt performance, but improves stack traces, in particular
in JVM's BridgeLowering.
2020-08-14 21:55:37 +02:00
Alexander Udalov
adcfbdec24 JVM IR: optimize special method / signature computation in BridgeLowering
First of all, put method signature caches of BridgeLowering into
JvmBackendContext. Since method hierarchies can span several files, and
a new instance of BridgeLowering is created to lower each file, keeping
them cached for the whole module makes BridgeLowering faster.

Also, do not attempt to compute special bridges if the method is
irrelevant, which can be deduced by its name. With this optimization,
the special method cache is no longer needed.

This brings BridgeLowering time from 3.8% down to 1.5% of all compiler
time on a sample project.
2020-08-14 21:55:37 +02:00
Alexander Udalov
0727e9055b JVM IR: use a simpler way to check if class is local 2020-08-14 21:55:37 +02:00
Alexander Udalov
6db5ad7310 IR: remove cast to IrStatement in IrDeclarationBase.transform
Default implementation of `IrStatement.transform` contained a cast to
`IrStatement`. Since almost all IR elements inherit from IrStatement,
this implementation was used in many subclasses. However, checkcast to
interface is slow and this place was indeed noticeable in the profiler
snapshot. Since not that many places really expected to get IrStatement
out of IrStatement.transform, introduce a new method
`transformStatement` that does this cast, and use it in all those
places. Meanwhile, most implementations will use the IrElement's
implementation of `transform` which merely invokes `accept` without
casts.
2020-08-14 21:55:37 +02:00
Alexander Udalov
fb8e39a621 IR: optimize transformation of declarations/statements lists in-place
Also, inherit IrDeclarationBase from IrElementBase to be able to use a
cast to IrElementBase, which is faster than a cast to IrElement or
IrDeclaration.
2020-08-14 21:55:36 +02:00
Alexander Udalov
4f0585950e IR: inline some transformChildren calls in IrElementTransformer{,Void}
IrElementTransformer.visitDeclaration/visitExpression are very prominent
hotspots, and it seems that HotSpot doesn't optimize the inlined Kotlin
bytecode there well enough. Reduce the bytecode in these and similar
methods by inlining calls to also/apply/transformChildrenVoid.
2020-08-14 21:55:36 +02:00
Nikolay Krasko
3a883e1236 Replace bintray bootstrap with space bootstrap repo 2020-08-14 17:31:13 +03:00
Nikolay Krasko
f484ceec80 Use GPG agent for signing in PublishedKotlinModule (KTI-314) 2020-08-14 17:31:13 +03:00
Nikolay Krasko
bbf8b12c65 Sign with GnuPG agent (KTI-314) 2020-08-14 17:31:13 +03:00
Nikolay Krasko
635ffcd53b Update maven signing for working with gpg 2 (KTI-314)
Update to maven-gpg-plugin 1.6 and add workaround for https://issues.apache.org/jira/browse/MGPG-59
2020-08-14 17:31:13 +03:00
Ilya Matveev
a121ec1e39 Update Kotlin/Native: 1.4.20-dev-16314 2020-08-14 09:41:47 +00:00
Roman Artemev
fa2c49a311 [Plugin API] Add extension point to contribute synthetic properties
- needs to fix KT_41006
2020-08-14 11:59:37 +03:00
Denis Zharkov
5ede37d6ab Report warnings on safe call + nullable extension operator
^KT-41034 In Progress
2020-08-14 11:12:34 +03:00
Roman Golyshev
852d22470e Revert "FIR Completion: Add idea-fir dependency to run completion tests"
This reverts commit 7d883f18
2020-08-13 23:12:34 +03:00
Toshiaki Kameyama
89cc5777ce Put parameters on line: don't suggest if parameters has end-of-line comments
#KT-35214 Fixed
2020-08-13 19:53:46 +03:00
Toshiaki Kameyama
efa981db36 "Create class from usage": add visibility to primary constructor if needed
#KT-29844 Fixed
2020-08-13 19:51:01 +03:00
Toshiaki Kameyama
b1e8238ea2 "Convert reference to lambda" intention: handle extension function reference with extension function call
#KT-35558 Fixed
2020-08-13 19:48:07 +03:00
Toshiaki Kameyama
9ff7539ff0 "Merge 'if's" intention: do not remove nested comments
#KT-33258 Fixed
#KT-39552 Fixed
2020-08-13 19:43:39 +03:00
Toshiaki Kameyama
f6e70cfed8 Wrap with let: fix it works correctly for invoking function type
#KT-39182 Fixed
2020-08-13 19:30:34 +03:00
Ilya Goncharov
babdeacdaf [Gradle, JS] Add resolution configuration method
^KT-41054 fixed
2020-08-13 18:04:44 +03:00
Ilya Goncharov
85f23d8c6e [Gradle, JS] Fix test with new API
^KT-41054 fixed
2020-08-13 18:04:44 +03:00
Ilya Goncharov
5eda8e95bf [Gradle, JS] Revert kotlinTargets
^KT-41054 fixed
2020-08-13 18:04:44 +03:00
Ilya Goncharov
855554ac38 [Gradle, JS] Move yarn resolutions from dependency constraints
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
fecda8548b [Gradle, JS] Override maven and ivy publishing aware context
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
58284c8b08 [Gradle, JS] Add yarn resolution gradle integration test
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
9df604cb3d [Gradle, JS] Migrate on set for npm ranges
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
1dd92f011c [Gradle, JS] Compare range lists as sets
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
50ccb522b9 [Gradle, JS] Add intersect tests
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
bd01ac52af [Gradle, JS] Add union test with fixed issue in union method
^KT-41054 fixed
2020-08-13 18:04:43 +03:00
Ilya Goncharov
7aaa1cf556 [Gradle, JS] Add invert test
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
9b8a64ef7b [Gradle, JS] Add hasIntersection test
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
814c0b73e3 [Gradle, JS] Add doc into NpmRange
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
dc7d7135f8 [Gradle, JS] Add min start, max end, min end tests
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
c25bcb4028 [Gradle, JS] Add max start test
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
42090e4839 [Gradle, JS] Add failing test
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
d4524e4050 [Gradle, JS] Small refactoring
^KT-41054 fixed
2020-08-13 18:04:42 +03:00
Ilya Goncharov
b95eb66032 [Gradle, JS] RejectAll => reject wildcard
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
d4c0d62eeb [Gradle, JS] Require version use caret
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
3ed42d394b [Gradle, JS] Support hyphenated range
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
a4de85da13 [Gradle, JS] Right wildcard range
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
f848b7cbeb [Gradle, JS] Right equals and hashCode for npm range
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
68880e6f47 [Gradle, JS] NpmRangeVisitor without nulls
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
7f3a2ac953 [Gradle, JS] Renames
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
fec8c6c0ae [Gradle, JS] Min and max are not nullable
^KT-41054 fixed
2020-08-13 18:04:41 +03:00
Ilya Goncharov
966c9dae68 [Gradle, JS] Use not inverted visitor but straightforward visitor
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
9bb49ac370 [Gradle, JS] Union of Npm Ranges
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
14fac83e2b [Gradle, JS] Intersect of NpmRange
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
90bee78dda [Gradle, JS] None range instead of none version
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
f1b8c62231 [Gradle, JS] Use rejected versions
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
d232e2ceb3 [Gradle, JS] Add ANTLR visitor for inverting of npm versions
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
768b9a0340 [Gradle, JS] Use NpmVersionConstraint
^KT-41054 fixed
2020-08-13 18:04:40 +03:00
Ilya Goncharov
bb569f36b1 [Gradle, JS] Implement reason and other methods beside version
^KT-41054 fixed
2020-08-13 18:04:39 +03:00
Ilya Goncharov
30f78847b1 [Gradle, JS] Not publish npm dependency constraints in metadata
^KT-41054 fixed
2020-08-13 18:04:39 +03:00
Ilya Goncharov
0473648b0e [Gradle, JS] Use gradle dependency constraints for yarn resolutions
^KT-41054 fixed
2020-08-13 18:04:39 +03:00
Roman Golyshev
7d883f1806 FIR Completion: Add idea-fir dependency to run completion tests
- Without this dependency, FIR plugin completion tests fail because the
fir completion contributor is not available
2020-08-13 17:29:45 +03:00
Ilmir Usmanov
31e4ddafd1 Minor. Add test with boolean parameter 2020-08-13 15:52:53 +02:00
Ilmir Usmanov
bcbb050326 Use fields for spilled variables for lambda parameters as well
In other words, do not generate p$ fields if we can use L$ fields,
which are being cleaned up.
 #KT-16222 Fixed
2020-08-13 15:52:51 +02:00
Ilya Goncharov
f5ab3a445f [Gradle, JS] Fix abstract task on default
^KT-40865 fixed
2020-08-13 15:39:02 +03:00
Yunir Salimzyanov
9ecf416a8a Parse multiple buildTypeIds for one bunch and synchronize muted tests
Cause: split Ide plugin tests in 4 parts
2020-08-13 12:57:09 +03:00
Mikhail Zarechenskiy
aafe41cf7a Do not force coercion to Unit for nullable lambda return type
#KT-41005 Fixed
2020-08-13 10:40:51 +03:00
Vyacheslav Gerasimov
d9bac4d5e4 Build: Warn about empty directories in sources 2020-08-12 21:40:04 +03:00
Vyacheslav Gerasimov
27578e6056 Build: Upgrade gradle to 6.6 2020-08-12 20:24:12 +03:00
Roman Golyshev
166b6db764 Make keyword lookup objects correctly comparable
- This is done to fix the problem with duplicated keyword items in
CodeWithMe plugin (see https://youtrack.jetbrains.com/issue/CWM-438)
2020-08-12 14:41:59 +00:00
Georgy Bronnikov
18ae665d41 IR: make IrCall take IrSimpleFunctionSymbol 2020-08-12 16:31:31 +03:00
Toshiaki Kameyama
4901cdb11f ConvertCallChainIntoSequence: support functions added in Kotlin 1.4
#KT-40448 Fixed
2020-08-12 16:28:29 +03:00
Toshiaki Kameyama
5e91ffb156 Move to class body: don't suggest on data class
#KT-40558 Fixed
2020-08-12 16:10:33 +03:00
Nick
28700ed64c [FIR] Supertype and inheritance checkers group 2020-08-12 15:38:29 +03:00
Oleg Ivanov
252eb1ad23 [FIR] Fix typo in FirDataFlowAnalyzer 2020-08-12 15:00:54 +03:00
Anton Yalyshev
e3bbc54e85 Add change-notes for 1.4 2020-08-12 14:36:47 +03:00
Oleg Ivanov
21b8679799 [FIR] Add ReturnsImplies effect analyzer 2020-08-12 11:06:07 +03:00
Oleg Ivanov
3454ae7ca4 [FIR] Add VariableStorage and flow on nodes into CFG reference 2020-08-12 11:06:07 +03:00
Oleg Ivanov
15598b62c9 [FIR] Add replaceControlFlowGraphReference function for FirFunction 2020-08-12 11:06:07 +03:00
Oleg Ivanov
7da94cc299 [FIR] Fix wrong ConstantReference for returnsNotNull in EffectExtractor 2020-08-12 11:06:07 +03:00
Anton Yalyshev
f6f3787b51 Disable FUS for Code Completion in 1.4.20 2020-08-12 10:22:29 +03:00
Andrey Uskov
20371b874a Configuration caching - register listener only once per project
To many listeners cause performance issues in Gradle.
2020-08-12 00:40:18 +03:00
Georgy Bronnikov
d2fda2a07c Fir2Ir: bug fix 2020-08-12 00:31:33 +03:00
Ilmir Usmanov
8a098545e6 Minor. Add test 2020-08-11 22:10:51 +02:00
Ilmir Usmanov
00bf07fc41 Force boxing kotlin.Result return type of suspend functions
#KT-40843 Fixed
2020-08-11 22:10:47 +02:00
Ilmir Usmanov
b06218c456 Minor. Update test data 2020-08-11 20:27:00 +02:00
Georgy Bronnikov
f21d8a4c5b JVM_IR, minor: use vals instead of objects 2020-08-11 18:44:47 +03:00
Vladimir Dolzhenko
6e016ce041 ktFile has to return script declaration from stub as well 2020-08-11 14:31:18 +00:00
Oleg Ivanov
4367d6631f [FIR] Add CallsInPlace contract analyzer 2020-08-11 16:17:01 +03:00
Oleg Ivanov
cc9c5b9e3c [FIR] Add CFG nodes, add multiple subGraphs for CFGOwner 2020-08-11 16:17:01 +03:00
Oleg Ivanov
128075e780 [FIR] Add fir source saving in resolved contract description 2020-08-11 16:17:01 +03:00
Oleg Ivanov
f467dccc68 [FIR] Rename confusing variable in CFGTraverser 2020-08-11 16:17:00 +03:00
Alexander Udalov
bcf1ee3907 Minor, fix test data for kotlinx.serialization bytecode text test 2020-08-11 15:14:06 +02:00
Steven Schäfer
53fe30eb45 JVM IR: Don't produce CHECKCASTs on null constants (KT-36650) 2020-08-11 15:13:40 +02:00
Alexander Udalov
7503f134c2 IR: use IdSignature to compare classes in FqNameEqualityChecker
This is both simpler and a lot more performant.
2020-08-11 14:41:57 +02:00
Alexander Udalov
36a1a65d98 IR: make IrBranch/IrCatch/IrSpreadElement/IrModuleFragment/IrPackageFragment classes 2020-08-11 14:41:57 +02:00
Alexander Udalov
08a35f0674 IR: make IrBody and subtypes classes 2020-08-11 14:41:57 +02:00
Alexander Udalov
4351f5235b IR: make IrExpression and subtypes classes 2020-08-11 14:41:56 +02:00
Alexander Udalov
ba7ff36274 IR: make IrDeclarationReference and subtypes classes 2020-08-11 14:41:56 +02:00
Alexander Udalov
ee904a975a IR: make IrMemberAccessExpression and subtypes classes
Merge IrMemberAccessExpressionBase into IrMemberAccessExpression, and
IrCallWithIndexedArgumentsBase into IrFunctionAccessExpression (extract
the latter into a separate file).
2020-08-11 14:41:56 +02:00
Alexander Udalov
fde7314aaf IR: do not inherit IrExpressionWithCopy from IrExpression 2020-08-11 14:41:55 +02:00
Alexander Udalov
9aa7da44e2 IR: remove IrTerminalExpressionBase, Ir{Terminal,}DeclarationReferenceBase
Implement no-op acceptChildren/transformChildren in the base class
IrExpressionBase instead. This doesn't change behavior because all other
implementations of acceptChildren/transformChildren are not affected.
2020-08-11 14:41:55 +02:00
Alexander Udalov
868018f51f IR: do not inherit IrFunctionReferenceImpl from IrCallWithIndexedArgumentsBase 2020-08-11 14:41:55 +02:00
Alexander Udalov
e3dfd5fb49 IR: push down implementations of startOffset/endOffset/type/...
Do not store these as properties in IrElementBase, IrExpressionBase and
similar classes. This helps to reduce boilerplate in implementations
(just "override val" in the constructor, instead of taking a parameter
and passing it to the superclass), and also slightly optimizes memory in
cases where the value is trivial (UNDEFINED_OFFSET, 0, etc) and thus
does not need to be stored.
2020-08-11 14:41:54 +02:00
Roman Golyshev
03f804b1c5 FIR Completion: Move completion files to idea-fir module 2020-08-11 15:38:07 +03:00
Ilmir Usmanov
d861373c6d Hack attributes for continuation of suspend function in SAM-adapter 2020-08-11 11:58:20 +02:00
Mikhail Zarechenskiy
2e131b870a Add tests for obsolete issues
#KT-38804 Obsolete
 #KT-38801 Obsolete
 #KT-38835 Obsolete
 #KT-38737 Obsolete
 #KT-38664 Obsolete
 #KT-38549 Obsolete
 #KT-38766 Obsolete
 #KT-38714 Obsolete
2020-08-11 12:34:02 +03:00
Georgy Bronnikov
7f4df19dd1 JVM_IR: reorganize throw... functions in Symbols 2020-08-11 10:54:29 +03:00
Denis Zharkov
6a16d6a246 FIR: Simplify delegating constructors call resolution 2020-08-11 10:14:02 +03:00
Denis Zharkov
8b71f5e558 FIR: Do not leave cyclic upper bounds of type parameters 2020-08-11 10:14:02 +03:00
Denis Zharkov
a5a93d00a7 FIR: Rework delegation constructor calls resolution
Make it work independently of being called for inner class (as in FE 1.0)
2020-08-11 10:14:02 +03:00
Denis Zharkov
db93b9052b FIR: Fix incorrect optimization for integer literals 2020-08-11 10:14:02 +03:00
Vyacheslav Gerasimov
ad8709b2dc Build: Remove exclusion of kotlinx-coroutines-core in scripting-common
It breaks available-at feature used in MPP
2020-08-11 00:39:04 +03:00
Vladimir Dolzhenko
8540f47c15 Fixed FindUsages case on look up implementation getter/setters via property names
#KT-40788 Fixed
#KT-24616 Fixed

back-port from kotlin-ide commit aa5580bb5a7e96b209cdaa1c82f4e485ee001ae8
2020-08-10 22:04:06 +02:00
Mikhail Zarechenskiy
e49cdf0ca2 Prohibit using suspend functions as SAM in fun interfaces
#KT-40978 Fixed
2020-08-10 22:04:16 +03:00
Mikhael Bogdanov
607f99ed3c Don't generate implicit overrides delegating to Java defaults
#KT-40920 Fixed
2020-08-10 20:03:23 +02:00
Sergey Igushkin
07aee8831e Fix stdlib-by-default with non-compiled source sets (KT-40559)
When a `variantFilter { ... }` is used in Android projects, AGP does not
creates some variants but still creates the source sets which would be
related to those variants.

For source sets that are not included into any compilation, the stdlib
module added by default was kotlin-stdlib-common, and it was added to
the `api` scope.

But AGP checks the `androidTest*Api` configurations and
if it detects any dependencies in them, it reports deprecation warnings.

However, we have plans to prohibit unused source sets at all as they
have no reasonable use cases. So the fix is not to add the stdlib by
default to source sets that participate in no compilations.

Issue #KT-40559 Fixed
2020-08-10 20:08:22 +04:00
Roman Golyshev
6e2887e083 FIR Completion: Add insertion handling for functions with lambdas
- The support is not complete
2020-08-10 18:25:34 +03:00
Roman Golyshev
b3a674abee FIR IDE: Add parameter's and type's properties required for completion 2020-08-10 18:25:34 +03:00
Roman Golyshev
67ed33367f FIR Completion: Add function insert handler
- It is a specialized copy from `KotlinFunctionInsertHandler.Normal`
2020-08-10 18:25:34 +03:00
Roman Golyshev
b547feb00d FIR Completion: Render vararg modifier in lookups 2020-08-10 18:25:33 +03:00
Roman Golyshev
582b00f5b2 FIR Completion: Add UniqueLookupElement to the lookup elements
- It is done to differentiate overloads of the same function
2020-08-10 18:25:33 +03:00
Roman Golyshev
b6ee478190 FIR Completion: Add psi element to the lookups
- May be a performance problem later
2020-08-10 18:25:33 +03:00
Roman Golyshev
53180e707e FIR Completion: Fix invalid isAbstract condition 2020-08-10 18:25:33 +03:00
Roman Golyshev
ef461260b0 FIR Completion: Add simple insertion handler to lookup elements
- The `QuotedNamesAwareInsertionHandler` is just a copy of
`BaseDeclarationInsertHandler`
2020-08-10 18:25:33 +03:00
Roman Golyshev
10598ee98e FIR Completion: Add simple lookup decorating with icon and parameters 2020-08-10 18:25:32 +03:00
Roman Golyshev
64187b40c9 FIR Completion: Prevent immediate completion in number literals
- This is copied from the original KotlinCompletionContributor
2020-08-10 18:25:32 +03:00
Alexey Trilis
d86c14243e Add @SinceKotlin to kotlinx.browser and kotlinx.dom packages
Add @DeprecatedSinceKotlin to kotlin.browser and kotlin.dom packages
2020-08-10 18:08:19 +03:00
Dmitriy Novozhilov
0e53d11dd4 Disable AllowResultInReturnType feature
#KT-40843
2020-08-10 17:57:53 +03:00
Valeriy.Vyrva
30ff886754 Improve docs for createTempDir/createTempFile
#KT-35218
2020-08-10 17:29:25 +03:00
Vladimir Ilmov
4fe6880489 Cyrillic 'c' fix in inspectionLikeProcessings.kt 2020-08-10 14:42:46 +02:00
Nick
0a2f113a24 [FIR] Fix slow string conversions in FirEffectiveVisibilityResolver 2020-08-10 13:46:15 +03:00
Alexander Dudinsky
e67518c349 Update gradle plugin version in GradleFacetImportTest
Also drop legacy tests for 1_1_2
2020-08-10 13:14:01 +03:00
Pavel Kirpichenkov
f431da2a66 Reapply "Introduce @FrontendInternals annotation""
This reverts commit 9ca4717d11.
^KT-39643 Fixed
2020-08-10 12:22:55 +03:00
Yan Zhulanow
5e8e60a399 Move back the 'KotlinStructureViewElement.isPublic' property used externally
Reasoning: Method com.gmail.blueboxware.extsee.kotlin.ExtSeeKotlinStructureViewModel.Companion.PublicElementsFilter.isVisible(com.intellij.ide.util.treeView.smartTree.TreeElement treeNode) : boolean contains an *invokevirtual* instruction referencing an unresolved method org.jetbrains.kotlin.idea.structureView.KotlinStructureViewElement.isPublic()
2020-08-10 18:18:37 +09:00
Alexander Dudinsky
aec87744f2 Run ImportAndCheckNavigation tests only vs the master version of plugin
Also error "Could not find org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable"
was fixed by adding ":native:kotlin-klib-commonizer-embeddable:install"
in dependencies for the kotlin-plugin install
2020-08-10 12:13:21 +03:00
Alexander Dudinsky
2042db598a Mute GradleNativeLibrariesInIDENamingTest.testLibrariesNaming in 192, 193
After updating version of gradle-plugin this tests started to fail on
the old version of IDE. After discussion we decided just mute it in
the old bunches
2020-08-10 12:04:51 +03:00
Sergey Igushkin
988480d649 Fix source JARs missing in Kotlin/Native targets with HMPP (KT-39051)
With HMPP, a separate implementation of `kotlinComponents` is used which
accidentally ignored the parent's logic for source artifacts.

As a simple fix, copy the parent's logic for source artifacts.

Issue #KT-39051 Fixed
2020-08-10 13:02:17 +04:00
Nataliya Valtman
a766369e72 KT-33908 Make Kotlin Gradle plugin compatible with configuration cache
#KT-33908 Fixed
2020-08-10 11:17:30 +03:00
Georgy Bronnikov
ea57b4cccb IR: add and unmute tests 2020-08-10 10:16:24 +03:00
Georgy Bronnikov
85ba170217 JVM_IR: use IrBasedDescriptors across codegen 2020-08-10 10:16:23 +03:00
Georgy Bronnikov
0b4c43083d IR: add IrBasedDescriptors 2020-08-10 10:16:23 +03:00
Georgy Bronnikov
dafcdc527d IR: propagate original declaration info via attributeOwnerId
For IrProperty, IrSimpleFunction we need to pass information about
original declaration to JVM_IR codegen. Instead of descriptors, use
the attributeOwnerId field.
2020-08-10 10:16:23 +03:00
Georgy Bronnikov
04d93dfbce IR: move containerSource from descriptor to IrFunction, IrProperty 2020-08-10 10:16:23 +03:00
Nick
4669e019d1 [FIR] Add diagnostic CONFLICTING_OVERLOADS & REDECLARATION 2020-08-10 10:09:37 +03:00
kvirolainen
36984009e9 Add samples for flatten, unzip functions 2020-08-10 03:40:13 +03:00
Elijah Verdoorn
41d5615608 Add samples for mapNotNull, find, getOrNull functions 2020-08-10 03:39:49 +03:00
Ilya Kirillov
62df2b3195 FIR IDE: run SUPER_TYPES & BODY_RESOLVE phases under global lock 2020-08-09 12:05:20 +03:00
Ilya Kirillov
7fb408ecd7 FIR IDE: enable new project wizard to FIR IDE 2020-08-09 12:05:13 +03:00
Ilya Kirillov
db7119f04d FIR IDE: fix ability to create new Kotlin files 2020-08-09 12:05:11 +03:00
Ilya Kirillov
054d196ec5 FIR IDE: temporary ignore failing tests 2020-08-09 12:05:02 +03:00
Ilya Kirillov
683ec2beff FIR IDE: make KtScopeProvider thread local 2020-08-09 12:04:53 +03:00
Ilya Kirillov
f62204fff1 FIR: move getCallableNames/getClassifierNames from scope to FirContainingNamesAwareScope 2020-08-09 12:04:52 +03:00
Ilya Kirillov
36a161080f FIR IDE: introduce KtType rendering 2020-08-09 12:04:44 +03:00
Ilya Kirillov
9f33d0147c FIR IDE: add info about nullability to KtType 2020-08-09 12:04:43 +03:00
Ilya Kirillov
16d22ae7e3 FIR IDE: correctly build FIR for qualified expressions 2020-08-09 12:04:43 +03:00
Ilya Kirillov
66f6fe18d6 FIR IDE: replace javax threadsafe annotations with custom ones
javax.annotation.concurrent may not be present for some JDKs
2020-08-09 12:04:35 +03:00
Ilya Kirillov
4595ee2cc0 FIR IDE: create read only copy of symbol builder only for completion 2020-08-09 12:04:34 +03:00
Ilya Kirillov
ccf232eaab FIR IDE: forbid analysis session to be stored in a variable 2020-08-09 12:04:34 +03:00
Ilya Kirillov
b41a5f9f34 FIR: make TypeRegistry thread safe 2020-08-09 12:04:26 +03:00
Ilya Kirillov
5f424ed1ec FIR IDE: rewrite low level API
- Cache ModuleResolveState for module till the world changes
- Resolve every file under a lock
- All creation of raw fir files and resolve of them happens in FirFileBuilder
- Lazy resolve of fir elements happens in FirElementBuilder

Caching works like the following:
- FirModuleResolveState holds PsiToFirCache & DiagnosticsCollector & FileCacheForModuleProvider
- FileCacheForModuleProvider holds a mapping from ModuleInfo to ModuleFileCache
- ModuleFileCache caches
    - KtFile -> FirFile mapping
    - ClassId -> FirClassLikeDeclaration, CallableId -> FirCallableSymbol
        which used in corresponding FirProvider
    - mapping from declaration to it's file
        which used in corresponding FirProvider
    - locks for fir file resolving
- PsiToFirCache provides mapping from KtElement to  FirElement
- DiagnosticsCollector collects diagnostics for file and caches them
2020-08-09 12:04:11 +03:00
Ilya Kirillov
1957be8757 FIR IDE: fix testdata of tests which now pass 2020-08-09 12:04:03 +03:00
Ilya Kirillov
34aa848b15 FIR: do not allow getting PSI text in RawFirBuilder in stub mode 2020-08-09 12:04:03 +03:00
Ilya Kirillov
cfc46b0cc8 FIR IDE: introduce FirIdeAllSourceDependenciesSymbolProvider
Co-authored-by: Simon Ogorodnik <simon.ogorodnik@jetbrains.com>
2020-08-09 12:03:56 +03:00
Ilya Kirillov
7d8ef5c7a2 FIR IDE: introduce KtFirConstructorDelegationReference 2020-08-09 12:03:54 +03:00
Ilya Kirillov
0870ded054 FIR IDE: introduce KtFirArrayAccessReference 2020-08-09 12:03:47 +03:00
Ilya Kirillov
22054c8507 FIR IDE: use non-fake override fir elements when finding psi for fir 2020-08-09 12:03:40 +03:00
Ilya Kirillov
d10e3f91fa FIR IDE: store FirScope strong references only in KtFirAnalysisSession 2020-08-09 12:03:33 +03:00
Ilya Kirillov
7033be588c FIR IDE: regenerate member scope test 2020-08-09 12:03:27 +03:00
Ilya Kirillov
ea3b2d8310 KT IDE: fix fully-qualified type resolving 2020-08-09 12:03:26 +03:00
Ilya Kirillov
50951fdfc3 KT IDE: use proper package symbol PSI to fix invalidated access exception 2020-08-09 12:03:14 +03:00
Ilya Kirillov
9f9ce6ba61 Fix compilation of KtFirDelegatingScope 2020-08-09 12:03:07 +03:00
Ilya Kirillov
1c195ea2bb FIR IDE: add kdoc for KtAnalysisSession 2020-08-09 12:03:07 +03:00
Ilya Kirillov
b8caefa0c4 FIR IDE: always recreate analysis session in tests to avoid breaking its contract 2020-08-09 12:03:06 +03:00
Ilya Kirillov
19efd19c6c FIR IDE: fix AbstractSymbolByFqNameTest after rebase 2020-08-09 12:03:01 +03:00
Ilya Kirillov
94b62e2ac6 FIR IDE: make context-dependent analysis session to use original cache on read-only mode 2020-08-09 12:03:00 +03:00
Ilya Kirillov
c0f5c90231 FIR IDE: separate ValidityOwner to ValidityTokenOwner & ValidityToken 2020-08-09 12:02:49 +03:00
Ilya Kirillov
6a6580dd97 FIR IDE: introduce KtConstructorSymbol.ownerClassId
Will be needed for completion
2020-08-09 12:02:48 +03:00
Ilya Kirillov
4653cdf794 FIR IDE: make KtFirDelegatingScope caching a thread safe 2020-08-09 12:02:42 +03:00
Roman Golyshev
ebf20c9706 Add multi-file tests for primitive completion
- This is required to test/debug correct completion from imports
2020-08-09 12:02:40 +03:00
Roman Golyshev
1b3a1a662f Add simple completion of class-like symbols 2020-08-09 12:02:34 +03:00
Roman Golyshev
20c627ea47 Implement collecting class-like names in KtFirStarImportingScope 2020-08-09 12:02:28 +03:00
Roman Golyshev
29ee233bb9 Remove repeating scopes collected by buildCompletionContextForFunction
- This is certainly a bug, we would have to fix it later
2020-08-09 12:02:27 +03:00
Roman Golyshev
e3778d62e3 Simplify canBeCalledWith function 2020-08-09 12:02:21 +03:00
Roman Golyshev
b90503decb Move PackageIndexHelper to KtFirStarImportingScope.kt 2020-08-09 12:02:16 +03:00
Roman Golyshev
d2fbd8e338 Remove KotlinFirCompletionProvider
- We should strive to use only high-level API for completion from now on
2020-08-09 12:02:16 +03:00
Ilya Kirillov
dee58e1d86 FIR IDE: handle importing scopes in completion in HL API
Co-authored-by: Roman Golyshev <roman.golyshev@jetbrains.com>
2020-08-09 12:02:11 +03:00
Ilya Kirillov
7aa26944d7 FIR IDE: rename utils.kt to psiUtils.kt
Co-authored-by: Roman Golyshev <roman.golyshev@jetbrains.com>
2020-08-09 12:02:00 +03:00
Ilya Kirillov
902b42ae1d FIR IDE: fix typo in completion testdata
Co-authored-by: Roman Golyshev <roman.golyshev@jetbrains.com>
2020-08-09 12:01:59 +03:00
Roman Golyshev
c3a3ab9e89 Implement the completion using high-level API only
- The indecies are not yet used

Co-authored-by: Ilya Kirillov <ilya.kirillov@jetbrains.com>
2020-08-09 12:01:59 +03:00
Roman Golyshev
a6dd84a7e4 FIR IDE: Modify KtFirAnalysisSession for completion
- This is WIP solution for having a specialized `KtFirAnalysisSession`
for the completion

Co-authored-by: Ilya Kirillov <ilya.kirillov@jetbrains.com>
2020-08-09 12:01:54 +03:00
Roman Golyshev
54946a793a Fix FirCompletionContext for safe access elements
- `towerDataContextForStatement` may contain safe access (?.) fir
elements as keys; however, `state.getCachedMapping(current)` would
never return those since they are considered as sugar fir elements

Co-authored-by: Ilya Kirillov <ilya.kirillov@jetbrains.com>
2020-08-09 12:01:49 +03:00
Roman Golyshev
a2cf01162e Fix bug with member extensions with explicit receiver
Co-authored-by: Ilya Kirillov <ilya.kirillov@jetbrains.com>
2020-08-09 12:01:48 +03:00
Roman Golyshev
df03e31b86 FIR IDE: Add KtCallableSymbol abstraction
- It should incapsulate callable symbols like functions, properties
and constructors

Co-authored-by: Ilya Kirillov <ilya.kirillov@jetbrains.com>
2020-08-09 12:01:44 +03:00
Roman Golyshev
a4a2d92c08 FIR IDE: Make KtFirReference implement KtSymbolBasedReference
Co-authored-by: Ilya Kirillov <ilya.kirillov@jetbrains.com>
2020-08-09 12:01:35 +03:00
Roman Golyshev
2eb439899e Use index to get symbols from importing scopes 2020-08-09 12:01:25 +03:00
Dmitriy Novozhilov
cefecdef25 fixup! Iterate on symbols, not on scopes 2020-08-09 12:01:23 +03:00
Roman Golyshev
e7f5594ffe Use more correct check for the constructor symbol
- add test for extension function receiver
2020-08-09 12:01:23 +03:00
Roman Golyshev
a3da1ea1a0 Iterate on symbols, not on scopes
- This way it is easier to get the correct results
2020-08-09 12:01:15 +03:00
Roman Golyshev
708c54f4d2 Refactor the collecting of callable symbols from scopes 2020-08-09 12:01:07 +03:00
Roman Golyshev
81f60bf252 Add test for smartcast 2020-08-09 12:01:07 +03:00
Roman Golyshev
ffb907150a Use information about receivers in completion
- Found few problems during resolving a single functon; disabled
assertions and marked them with TODO
- Add simple completion tests to simplify development
2020-08-09 12:01:00 +03:00
Roman Golyshev
0f5fc1fa99 Add FirSymbolProvider::getAllCallableNamesInPackage function
- Also, fix implementation of `getCallableNames` in few cases
2020-08-09 12:00:59 +03:00
Denis Zharkov
97d4918ed3 Expose local scopes to use in completion 2020-08-09 12:00:52 +03:00
Roman Golyshev
6129f4bcef Partial raw FIR building 2020-08-09 12:00:45 +03:00
Roman Golyshev
a1b621d987 Completion with FIR (prototype, work-in-progress) 2020-08-09 12:00:44 +03:00
Ilya Kirillov
2a495c1135 FIR IDE: introduce composite scopes 2020-08-09 12:00:38 +03:00
Ilya Kirillov
9092b33755 FIR IDE: Introduce module resolve state for completion 2020-08-09 12:00:31 +03:00
Ilya Kirillov
1d92fbaa7f FIR IDE: correctly set symbol origin for fake overridden ones 2020-08-09 12:00:24 +03:00
Ilya Kirillov
88548d988a FIR IDE: implement getCallableNames/getClassifierNames in more scopes 2020-08-09 12:00:18 +03:00
Ilya Kirillov
138f11ee27 FIR IDE: introduce member scope tests 2020-08-09 12:00:11 +03:00
Ilya Kirillov
f709e6acf3 FIR IDE: introduce scopes for HL API 2020-08-09 12:00:05 +03:00
Dmitriy Novozhilov
6596dc359b fixup! Completion with FIR (prototype, work-in-progress) 2020-08-09 12:00:04 +03:00
Ilya Kirillov
d62500531b FIR: add getClassifierNames for FirScope 2020-08-09 11:59:57 +03:00
Roman Golyshev
656086f90a Add FirScope::getCallableNames function 2020-08-09 11:59:50 +03:00
Ilya Kirillov
1f3add49f4 FIR IDE: move trailing comma related registry keys to ide-frontend-independent.xml 2020-08-09 11:59:49 +03:00
Ilya Kirillov
055b975699 FIR IDE: add tests which failing with exceptions inside FIR 2020-08-09 11:59:49 +03:00
Ilya Kirillov
9cf4fdfb71 FIR IDE: add reference info on reference resolve 2020-08-09 11:59:44 +03:00
Ilya Kirillov
5c6d636d02 Minor: reformat fir ide part of GenerateTests.kt 2020-08-09 11:59:38 +03:00
Ilya Kirillov
45e01a8b3d FIR IDE: precalculate DuplicatedFirSourceElementsException error message
It may be called from non-read action
2020-08-09 11:59:33 +03:00
Ilya Kirillov
964becf138 FIR IDE: allow the same entity to be accessed from different threads 2020-08-09 11:59:23 +03:00
Ilya Kirillov
4c08dfb238 Add invoke reference resolve test without errors in test data 2020-08-09 11:59:17 +03:00
Ilya Kirillov
15ecfd84b4 FIR IDE: cache KtAnalysisSession for modules 2020-08-09 11:59:15 +03:00
Ilya Kirillov
8c0197e081 FIR IDE: introduce KtAnalysisSessionProvider & helping functions for working with analysis session 2020-08-09 11:59:10 +03:00
Ilya Kirillov
acb8546583 FIR IDE: fix ReadOnlyWeakRef error message 2020-08-09 11:59:05 +03:00
Ilya Kirillov
b09358fe17 FIR IDE: rename KtFieldSymbol -> KtFirJavaFieldSymbol 2020-08-09 11:59:04 +03:00
Ilya Kirillov
f98ff2c25e FIR IDE: always pass resolve state as parameter when getting fir by psi 2020-08-09 11:59:04 +03:00
Mikhail Zarechenskiy
0c13a7f89a Fix accessibility check for experimental declarations from default scope
#KT-40919 Fixed
2020-08-07 17:49:15 +03:00
Ilmir Usmanov
b403b63f48 Ease field initialization check
Since there is already VAL_REASSIGNMENT diagnostics, we can safely only
for direct assignments.
 #KT-40893 Fixed
2020-08-07 14:22:18 +02:00
Nick
6c0abe7e48 [FIR] Fix CliTestGenerated$Jvm.testFirError 2020-08-07 13:27:29 +03:00
Pavel Kirpichenkov
9ca4717d11 Revert "Introduce @FrontendInternals annotation"
Revert due to Mobile IDE Trunk IJ TC configuration
This reverts commits:
ffc3d8bdfc
c0e713980b

^KT-39643 In Progress
2020-08-07 12:10:03 +03:00
Mads Ager
7f2efabe6a [JVM_IR]: Improve stepping for when.
Additionally, use the line number of the class for default interface
dispatch methods.
2020-08-07 09:16:01 +02:00
Dat Trieu
1009a240f2 KT-20357: Add samples for filter functions 2020-08-06 23:41:12 +03:00
Steven Schäfer
ca6e430e89 JVM IR: Handle nested classes in DelegatedPropertyOptimizer 2020-08-06 21:01:59 +02:00
Steven Schäfer
da9bff40f0 JVM IR: Don't remove stores to visible locals in DelegatedPropertyOptimizer 2020-08-06 21:01:59 +02:00
Ilya Kirillov
983c84d6a6 Wizard: fix default template compilation when using JS IR
#KT-39904 fixed
2020-08-06 21:46:50 +03:00
Alexander Udalov
e4cd7cdbcf IR: remove unused code, cleanup 2020-08-06 17:08:04 +02:00
Alexander Udalov
b30b2e0179 IR: minor, render duplicate IR node in checker 2020-08-06 17:08:04 +02:00
Alexander Udalov
8db1c3611b IR: introduce abstract class IrDeclarationBase
The main purpose of this class is to improve performance of IR visitors
and transformers. `IrElementVisitor.visitDeclaration` now takes
IrDeclarationBase as a parameter, and therefore the call to `accept`
there is now a virtual class call, instead of an interface call.
2020-08-06 17:08:04 +02:00
Alexander Udalov
771e7574f4 IR: make subtypes of IrDeclaration classes 2020-08-06 17:08:03 +02:00
Alexander Udalov
3cecf81176 IR: transform base classes of lazy IR to interfaces 2020-08-06 17:08:02 +02:00
Alexander Udalov
b02653a524 IR: remove base classes IrDeclarationBase and IrFunctionBase
They introduce a diamond class hierarchy which prevents IR element
hierarchy from being transformed to classes.
2020-08-06 16:46:26 +02:00
Alexander Udalov
9152df4702 PIR: transform base implementation classes to interfaces
Unfortunately this requires a lot of boilerplate, but is a requirement
for transforming the main IR element hierarchy interfaces
(IrDeclaration, IrClass, ...) to classes.
2020-08-06 16:46:26 +02:00
Ilya Goncharov
13766d5075 [Gradle, JS] Update test data
^KT-40884 fixed
2020-08-06 15:33:21 +03:00
Ilya Goncharov
52110a08d9 [Gradle, JS] Update versions
^KT-40884 fixed
2020-08-06 15:33:06 +03:00
Sergey Igushkin
f6356199d3 Fix typealias usage nullability and annotations lost in deserialization
Issue #KT-40824 Fixed
2020-08-06 15:46:54 +04:00
Alexander Dudinsky
4063aba677 Remade launch of NativeRunConfigurationTest against master version of gradle plugin 2020-08-06 14:06:05 +03:00
Konstantin Tskhovrebov
69ce6bd952 Add tests for setup native run gutters. 2020-08-06 14:06:04 +03:00
Sergey Igushkin
b5d4e4c44c Enable compatibility metadata variant by default in HMPP
This by default ensures that libraries published with HMPP are
compatible with non-HMPP consumers (which is the default in 1.4.0).
2020-08-06 14:08:51 +04:00
Mikhail Zarechenskiy
2eb17df962 Do not compute SamType too eagerly as it can force member resolution
Internally, during creation of `SamType` the compiler checks if a
 parameter is really can be used as a SAM, so this check involves
 lookup for abstract members, which can force additional computation of
 member scopes. This is totally fine for BE but it can be dangerous
 for light classes computation when not all scopes are processed.

 Note that this issue appeared quite recently after 16f175612e

 #KT-40869 Fixed
2020-08-06 09:20:56 +03:00
Vladimir Dolzhenko
6ec0e9546b Fix 192 compilation for UI for standalone gradle scripts
Relates to #KT-39790
2020-08-05 23:39:34 +02:00
Konstantin Tskhovrebov
66c1bd8c89 Revert "Update KMM plugin user texts."
This reverts commit 5edbc75d
2020-08-05 21:54:01 +03:00
Pavel Kirpichenkov
c0e713980b Add helpers for getting commonly used services without an opt-in
These services are LanguageVersionSettings, DataFlowValueFactory
#KT-39643 Fixed
2020-08-05 21:44:47 +03:00
Pavel Kirpichenkov
ffc3d8bdfc Introduce @FrontendInternals annotation
#KT-39643
2020-08-05 21:44:47 +03:00
Sergey Igushkin
eff5839369 "Kotlin Multiplatform Projects are an ~experimental~ Alpha feature." 2020-08-05 22:01:12 +04:00
Ilmir Usmanov
6c475e614a Minor. Update debugger tests 2020-08-05 19:47:55 +02:00
Ilmir Usmanov
68342a1f72 Initialize fake inliner variables on resume path
Otherwise, this will cause R8 to complain.
2020-08-05 19:47:55 +02:00
Ilmir Usmanov
bb5a99ec18 Do not put $completion to LVT if is dead 2020-08-05 19:47:54 +02:00
Florian Kistner
9925866293 203: Fix compilation 2020-08-05 19:36:43 +02:00
Florian Kistner
c792092410 Bump fastutil version to match 203 2020-08-05 19:36:42 +02:00
Nikita Bobko
c5398e8317 Move 'radixPrefix' from compiler modules to IDE modules
`radixPrefix` is used only in IDE now. So let's put it into IDE modules.

This commit is done in order to be able to use code dependent on
`radixPrefix` in `kotlin-ide` repo, because `kotlin-ide` depends on
1.4.0 artifacts of compiler. And `radixPrefix` isn't presented in
those artifacts
2020-08-05 20:17:17 +03:00
Sergey Igushkin
093d4b3108 Revert "Fix typealias usage nullability and annotations lost in deserialization"
This reverts commit 070848a1
2020-08-05 20:17:49 +04:00
Konstantin Tskhovrebov
5edbc75d7b Update KMM plugin user texts.
#Fixed KMM-324
2020-08-05 18:37:27 +03:00
Jinseong Jeon
b57794d96e IR util: IrExpression.isSafeToUseWithoutCopying 2020-08-05 17:07:27 +03:00
Jinseong Jeon
7ef1c74bbf FIR2IR: apply adapted reference conversion to coercion-to-unit 2020-08-05 17:07:27 +03:00
Mikhail Glukhikh
5f80bfd5d4 [FIR] Don't report UNINITIALIZED_VARIABLE on lateinit local variable 2020-08-05 16:47:51 +03:00
Natalia Selezneva
54d96a2dd7 UI for standalone gradle scripts
^KT-39790 Fixed
2020-08-05 15:22:22 +02:00
Mikhail Glukhikh
fc874e72b1 [FIR2IR] Initialize components a bit earlier to prevent lateinit errors 2020-08-05 12:11:34 +03:00
Mikhail Glukhikh
17b289fa00 [FIR] Code cleanup: get rid of FirClass.buildUseSiteMemberScope() 2020-08-05 12:11:34 +03:00
Mikhail Glukhikh
8bb5488a26 [FIR] look at intersectionOverride during override processing
This commit fixes some BB tests broken by previous commit
2020-08-05 12:11:34 +03:00
Mikhail Glukhikh
f1356a809e Fir2IrLazySimpleFunction: generate overridden symbols via FirTypeScope 2020-08-05 12:11:33 +03:00
Alexander Dudinsky
52c01abb83 Increase Xmx size after investigation OOM problem in KMM-316 2020-08-05 10:45:16 +03:00
Alexander Dudinsky
d012cd3272 Add kotlin-test-junit:install in dependencies for the kotlin-plugin install 2020-08-05 10:45:16 +03:00
Alexander Dudinsky
ea0099aa39 Fix testPlatformToCommonExpByInComposite.
In 9d362875da build started fail if mpp
or js targets not configured.
The test testPlatformToCommonExpByInComposite was fixed due it.
2020-08-05 10:45:16 +03:00
Alexander Dudinsky
05d6217f78 Changed gradle-plugin version in Gradle tests.
When 6.5.1 Gradle version was added, more tests have began to fail
because of legacy gradle-plugin versions (1.1., 1.2.) which are not
compatible with the new version of Gradle. This commit updates the used
version of the Gradle plugin to the latest stable (1.3.72) and makes it
configurable from tests.
2020-08-05 10:45:15 +03:00
Alexander Dudinsky
6652a7072c Fix testData due to KT-40551.
Starting from version 1.3.60, unnecessary dependencies with runtime
scopes have been added for modules jvmTest and jsTest. After updating
the plugin version in tests from 1.3.50 to 1.3.72 and master,
tests began to fail because of this. In order not to stop other checks
in tests, they were redone for the current behavior with unnecessary
dependencies.
After fixing bug KT-40551, the old behavior in tests will be returned.
2020-08-05 10:45:15 +03:00
Alexander Dudinsky
0298795b18 Add gradle.properties with kotlin.stdlib.default.dependency=false for tests
In the master version of plugin dependencies on stdlibs are enabled
by default. It is not expected for some tests.
Flag kotlin.stdlib.default.dependency=false fixed it.
2020-08-05 10:45:15 +03:00
Alexander Dudinsky
bc623e97ec Add Gradle version 6.5.1 for tests. 2020-08-05 10:45:15 +03:00
Alexander Dudinsky
1da05c54be Change gradle-plugin versions for tests from 1.3.50 to 1.3.72 2020-08-05 10:45:14 +03:00
Nick
f15f5bccc8 [FIR] Add more diagnostic messages 2020-08-05 10:41:06 +03:00
Victor Petukhov
f45de9d8fb NI: approximate not top-level captured types during code generation
^KT-40693 Fixed
2020-08-05 10:36:36 +03:00
Ilya Matveev
f6d7e7c52a CocoaPods: Fix setting custom framework name
The main scheme of a synthetic project generated for
pod import has the same name as the podspec generated
for the kotlin module (== Gradle project name). But
when starting an Xcode build, we specify the -scheme
argument to a framework name instead of project.name.

By default they are the same, but if a custom framework
name is specified, xcodebuild fails.

Issue #KT-40801 fixed
2020-08-05 06:46:53 +00:00
Mikhail Zarechenskiy
a45f73867a Add compatibility resolve when SAM conversion was applied partially
#KT-40646 Fixed
2020-08-05 00:03:33 +03:00
Sergey Igushkin
070848a1c1 Fix typealias usage nullability and annotations lost in deserialization
This fixes a regression introduced by the commit 4b0da0688a which made
deserializer expand typealiases but didn't take nullability and use site
annotations into account.

Issue #KT-40824 Fixed
2020-08-05 00:19:52 +04:00
Nick
ec4f04095c [FIR] Rearrange FirErrors.kt 2020-08-04 22:40:09 +03:00
Nick
207027b84c [FIR] Fix light tree's supertype FirDelegatedConstructorCall source 2020-08-04 22:37:43 +03:00
Nick
a59cedcd39 [FIR] Fix non-fake sources for constructor delegates 2020-08-04 22:37:42 +03:00
Nick
f74eb07203 [FIR] Fix incorrect diagnostic behaviour + several enum diagnostics 2020-08-04 22:28:49 +03:00
Nick
b76f757d47 [FIR] Add diagnostic for missing primary constructor 2020-08-04 22:28:49 +03:00
Nick
0f213e58db [FIR] Add diagnostic for primary constructor not called 2020-08-04 22:28:48 +03:00
Nick
bb0e1b7390 [FIR] Add diagnostic for constructor delegation cycles 2020-08-04 22:28:48 +03:00
Mikhail Glukhikh
e841b3a77b [FIR] Add diagnostic collection to KotlinToJVMBytecodeCompiler 2020-08-04 22:27:18 +03:00
Mikhail Glukhikh
9c3b8484b9 [FIR TEST] Add CLI test with should-be-error (not yet) 2020-08-04 22:27:18 +03:00
Ilmir Usmanov
824991a9dd Minor. Add tests. 2020-08-04 15:42:38 +02:00
Ilmir Usmanov
bbd4c21595 Cleanup spilled variables
#KT-16222
2020-08-04 15:42:37 +02:00
Ilmir Usmanov
999b41068b Minor. Refactor variables spilling
Split information collection and method node mutation.
2020-08-04 15:42:37 +02:00
Ilmir Usmanov
405c9743ef Do not spill dispatch receiver of suspend functions if it is not used
#KT-20571
2020-08-04 15:42:36 +02:00
Jinseong Jeon
5db7957230 FIR2IR: use type arguments from fully expanded type 2020-08-04 14:44:38 +03:00
Ilya Kirillov
606dc2f723 Fix binary compatibility problems in ImportInsertHelper & ShortenReferences 2020-08-04 12:46:13 +03:00
Victor Petukhov
af48f08f9c NI: take into account flexible types during capturing arguments from expression
^KT-40544 Fixed
2020-08-04 12:38:04 +03:00
vldf
65ebd02a39 [FIR] Fix for CanBeReplacedWithOperatorAssignment Checker 2020-08-04 11:20:42 +03:00
Mikhail Glukhikh
6f3df6faf4 [FIR] Regenerate extended checker tests 2020-08-04 09:35:36 +03:00
Mikhail Glukhikh
181a8bb79e [FIR TEST] Mute failing BB test with Byte/Short.and usage 2020-08-04 08:59:16 +03:00
Jinseong Jeon
47c47be3d3 FIR serializer: serialize annotations on FirTypeRef, not ConeKotlinType 2020-08-04 08:59:16 +03:00
Ivan Kylchik
0a28e5e031 Add argument unwrapping for case when argument is named 2020-08-04 08:59:15 +03:00
Mikhail Glukhikh
2e2099afae [FIR] Introduce NOT_AN_ANNOTATION_CLASS diagnostic 2020-08-04 08:59:15 +03:00
Mikhail Glukhikh
8fd087a964 [FIR] Don't report duplicated UNRESOLVED_REFERENCE on annotation entries 2020-08-04 08:59:15 +03:00
Mikhail Glukhikh
a6e811a67a [FIR] Add status to Java annotation constructor (fix after rebase) 2020-08-04 08:59:15 +03:00
Mikhail Glukhikh
8379b3794a [FIR2IR] Return fallback mode for annotation resolved placeholder 2020-08-04 08:59:15 +03:00
Dmitriy Novozhilov
b63257345b [FIR] Map Class to KClass in java annotations 2020-08-04 08:59:15 +03:00
Mikhail Glukhikh
282a295d43 [FIR] Enable arrayOf transformer in completion (inside annotations) 2020-08-04 08:59:14 +03:00
Dmitriy Novozhilov
721b9b4d8c [FIR] Resolve annotations as calls 2020-08-04 08:59:14 +03:00
Dmitriy Novozhilov
bc1fa8ed7f [FIR] Add constructor for java annotations 2020-08-04 08:59:14 +03:00
Dmitriy Novozhilov
644e9843f9 [FIR] Add initialization of calleeReference for FirAnnotationCall 2020-08-04 08:59:14 +03:00
Dmitriy Novozhilov
614291b2cc [FIR] Make FirAnnotationCall resolvable 2020-08-04 08:59:14 +03:00
Dmitriy Novozhilov
ffd30566be [FIR] Add FirErrorResolvedQualifier for qualifiers with resolve diagnostic 2020-08-04 08:59:14 +03:00
Dmitry Gridin
a5e9401a0a [configuration] change updater number to 1.4.* and 1.5.*
#KT-40639 Fixed
2020-08-04 11:13:30 +07:00
Julian Kotrba
88f508446a Make repeat example more expressive
This commit adds the zero-based index of current iteration from the passed HOF "action" of the repeat function to its associated code sample.

KT-20357
2020-08-04 00:48:06 +03:00
Ilya Gorbunov
a5178bb826 Minor: fix toJavaDuration docs 2020-08-04 00:34:15 +03:00
Ilya Gorbunov
99eb7f391b Fix doc wording around covariance/invariance 2020-08-04 00:33:05 +03:00
Roman Artemev
4f73e08704 [KLIB] Make fake override resolver garbage free as much as possible
- reduce memory pollution during FO resolve
2020-08-03 19:22:07 +03:00
Roman Artemev
876ee265f2 [KLIB] Fix memory leak in fake override resolver 2020-08-03 19:22:07 +03:00
Roman Artemev
e189cb1895 [KLIB] Fix memory leak in linker through haveSeen set 2020-08-03 19:22:06 +03:00
Roman Artemev
19b5fda750 [KLIB] Do not duplicate origin mapping per file 2020-08-03 19:22:06 +03:00
Roman Artemev
c253042948 [KLIB] Reduce amount of descriptors loaded during desc-idSig resolution 2020-08-03 19:22:06 +03:00
Roman Artemev
851c287105 [KLIB] Use SoftReference to hold proto memory
- fix metadata memory leak for KT-40345
2020-08-03 19:22:06 +03:00
Roman Artemev
add0ad6733 [KLIB] Change KLIB IO API
- Use ReadBuffer instead of native java buffer
 - Use Weak buffers for File IO
 - fix klib memory leak for KT-40345
2020-08-03 19:22:06 +03:00
Jinseong Jeon
0e54f98b79 FIR: support adapted callable reference with vararg 2020-08-03 16:37:36 +03:00
Mikhail Glukhikh
4332e95b8a [FIR] Don't transform setter parameter type if it's given explicitly 2020-08-03 16:37:30 +03:00
vldf
8813ebd950 [FIR] Add RedundantSetterParameterType Checker 2020-08-03 16:37:24 +03:00
vldf
a6c9d869fb [FIR] Move RedundantCallOfConversionMethod to extended checkers 2020-08-03 16:31:49 +03:00
vldf
3349739d1e [FIR] Fixes for RedundantReturnUnitType checker 2020-08-03 11:42:19 +03:00
vladislavf7@gmail.com
2384afdd93 [FIR] refactoring for running extended checkers 2020-08-03 11:42:19 +03:00
vldf
cfc09048c6 [FIR] Add RedundantCallOfConversionMethod checker 2020-08-03 10:41:19 +03:00
Mikhail Glukhikh
39d4b79324 [FIR TEST] Fix FE 1.0 / FIR test data for nested / local type alias case 2020-08-02 18:19:47 +03:00
Mikhail Glukhikh
7724d060ff [FIR] Don't compare SYNTAX diagnostics in light tree diagnostic test 2020-08-02 18:19:47 +03:00
Mikhail Glukhikh
4e4fe9f719 [FIR] Support some kinds of fake sources in light builder 2020-08-02 18:19:47 +03:00
Mikhail Glukhikh
951aa8185e [FIR] Avoid duplicate diagnostics on expression.typeRef 2020-08-02 18:19:47 +03:00
Mikhail Glukhikh
dc46d51d9a [FIR TEST] Update diagnostic spec test data 2020-08-02 18:19:47 +03:00
Mikhail Glukhikh
6eab6f2f87 [FIR TEST] Replace OTHER_ERROR with UNRESOLVED_REFERENCE in test data 2020-08-02 18:19:47 +03:00
Nick
c55cdf1935 [FIR] Fix missing ErrorTypeRef for QA and clean DiagnosticCollector 2020-08-02 18:19:46 +03:00
Nick
7086b0cbf3 [FIR] Don't report duplicated errors in component calls typeRefs 2020-08-02 18:19:46 +03:00
Nick
4ceae8dc5e [FIR] Don't report duplicated errors in function calls typeRefs 2020-08-02 18:19:46 +03:00
Nick
6f85a07290 [FIR] Don't report duplicated errors in property declarations 2020-08-02 18:19:46 +03:00
Nick
889324e972 [FIR] Ignore failing test, improve DiagnosticKind, fix UPPER_BOUND 2020-08-02 18:19:45 +03:00
Mikhail Glukhikh
9335e09149 [FIR] Don't report duplicated errors in implicit properties / parameters 2020-08-02 18:19:45 +03:00
Mikhail Glukhikh
ceaffb1e8b [FIR] Don't report duplicated errors in implicit primary constructors 2020-08-02 18:19:45 +03:00
Mikhail Glukhikh
749346b73b [FIR] Don't report duplicated errors on default accessor error type refs 2020-08-02 18:19:45 +03:00
Mikhail Glukhikh
e0d25876b0 [FIR] Don't report simple diagnostics on fake sources 2020-08-02 18:19:44 +03:00
Mikhail Glukhikh
551bdd267d [FIR] Introduce WRONG_NUMBER_OF_TYPE_ARGUMENTS diagnostic 2020-08-02 18:19:44 +03:00
Mikhail Glukhikh
0804c6a0f3 [FIR] Introduce TYPE_ARGUMENTS_NOT_ALLOWED & some other type errors
This commit introduces several different things, in particular:
- check type arguments in expressions
- new TypeArgumentList node to deal with diagnostic source
- ConeDiagnostic was moved to fir:cones
- ConeIntermediateDiagnostic to use in inference (?) without reporting
- detailed diagnostics on error type
2020-08-02 18:19:44 +03:00
Jinseong Jeon
c744dfba9c FIR: distinguish anonymous object as enum entry when scoping
so that `this` reference with the enum entry name as label can be
resolved
2020-08-02 18:06:15 +03:00
Jinseong Jeon
52631b7abd FIR2IR: make local storage track scopes, including anonymous init 2020-08-02 18:05:09 +03:00
Nick
26e3a111d6 [FIR] Add diagnostics for object related problems 2020-07-31 19:34:55 +03:00
Nick
694d3cad4e [FIR] Exposed visibility checker: optimize checks for local visibility 2020-07-31 19:28:10 +03:00
Nick
60462bea1c FirEffectiveVisibilityResolver: search parent in containingDeclarations
When determining effective visibility of 'something',
we use containing declarations from the context to find 'something'
parent, to avoid calling getClassSymbolByFqName for all cases.
2020-07-31 19:28:04 +03:00
Nick
7145caca40 [FIR] Refactor effective visibility calculation
Before this commit, we had effective visibility as a part of FIR status,
so it was integrated into the full pipeline. In this commit,
we introduced "effective visibility as a service" which is now used
only by exposed visibility checker. This allows us to make the thing
universal for all FIR nodes, including nodes for Java / deserialized.
2020-07-31 19:27:58 +03:00
Steven Schäfer
b15e32936e JVM IR: Optimize delegated properties (KT-36814) 2020-07-31 19:00:27 +03:00
vldf
8724efbe8a [FIR] Add empty range checker 2020-07-31 16:28:37 +03:00
vldf
b10defdbab [FIR] Add redundant single string expression template checker 2020-07-31 16:28:37 +03:00
vldf
95e0ba3d5c [FIR] Add ArrayEqualityOpCanBeReplacedWithEquals checker 2020-07-31 16:28:37 +03:00
Ilmir Usmanov
4d21a496fe Minor. Update tests 2020-07-31 14:33:52 +02:00
Dmitry Petrov
e11c90f26c JVM_IR: KT-40293 Box return type for DefaultImpls methods if required 2020-07-31 14:48:12 +03:00
Ilya Chernikov
034d5a948c Add JvmDefault to the new EP method for compatibility with older impls 2020-07-31 12:07:10 +02:00
Ilmir Usmanov
fa8c6deb18 Support restricted suspend lambdas in JVM_IR
#KT-40135 Fixed
2020-07-30 20:40:37 +02:00
Ilmir Usmanov
2c205410fa Check whether the field is indeed being initialized
in checkFieldInExactlyOnceLambdaInitialization
 #KT-40691 Fixed
2020-07-30 19:04:54 +02:00
Nikolay Krasko
d8b76f5b26 Register additional repository id 2020-07-30 19:33:58 +03:00
Vladimir Ilmov
7eca13569b (CoroutineDebugger) Enable agent for versions 1.3.8.*
Gradle artifact name gets changed from 'kotlinx-coroutines-core' to
'kotlinx-coroutines-core-jvm'. So it should support both.
2020-07-30 17:54:35 +02:00
Toshiaki Kameyama
c91858d470 Convert member to extension: do not suggest for delegated properties
#KT-35128 Fixed
2020-07-30 17:32:31 +03:00
Dmitry Petrov
46fccae7d1 PSI2IR: KT-40499 Fix delegated property desugaring
No type arguments were provided for property reference inside delegated
property accessors.
2020-07-30 13:18:36 +03:00
Jinseong Jeon
bff36e0199 FIR2IR: convert annotations on FirTypeRef 2020-07-30 11:25:36 +03:00
Georgy Bronnikov
4ca98041cd IR: update test data 2020-07-30 11:24:08 +03:00
Georgy Bronnikov
a27d63f58f JVM_IR: flexible nullability as annotation
We carry information about flexible nullability of IrType as an
annotation, so there is no need to look at its underlying KotlinType.
2020-07-30 11:24:07 +03:00
Georgy Bronnikov
a2e9521ad5 Make DescriptorlessExternalPackageFragmentSymbol public 2020-07-30 11:24:07 +03:00
Georgy Bronnikov
c2ead0303b IR: remove more descriptor usage 2020-07-30 11:24:07 +03:00
Alexander Gorshenev
9a717e9ecf Don't copy default value parameters for fake overrides 2020-07-29 22:15:10 +03:00
Mark Punzalan
2cfd776092 ForLoopsLowering: Assume step == 1 for *Range (e.g., IntRange) and
handle accordingly (e.g., do not read `step` property).
2020-07-29 20:44:51 +02:00
Dmitry Petrov
09e47fff7b Fix KotlinGradleIT.testCustomCompilerFile
Referencing org.jetbrains.annotations.{Nullable, NotNull} classes in
static initializer causes ClassNotFoundError in testCustomCompilerFile.
2020-07-29 20:33:17 +03:00
Dmitry Petrov
dae358c792 JVM: KT-40664 disable optimization for 'ULong in range of UInt' case 2020-07-29 20:33:17 +03:00
Dmitry Petrov
f2493d0950 JVM: KT-40665 more exact check for intrinsified range 'contains' 2020-07-29 20:33:17 +03:00
Roman Artemev
0559e192ee [JS IR] Support external delegation in case of JS in psi2ir
- fix FE delegation resolver
 - fix critical KT-40650
2020-07-29 19:57:05 +03:00
Nicolay Mitropolsky
c254651ed3 Uast: handling annotations on the property receiver (KT-40539) 2020-07-29 19:42:22 +03:00
Yaroslav Chernyshev
325ad56dcd Populate Kotlin source set roots with KotlinSourceRootTypes
By default Kotlin source root is populated with JavaSourceRootType and
changed during import only if real source folder exists.
Now Kotlin source roots has valid source type right after creation

#KT-37106 Fixed
2020-07-29 19:24:44 +03:00
Ilmir Usmanov
fec845365a Minor. No longer ignore obsolete PRE_RELEASE_CLASS diagnostic
in coroutine tests.
2020-07-29 17:52:01 +02:00
Simon Ogorodnik
ebfcd7e074 J2K: Improve presentation of conversions 2020-07-29 17:56:03 +03:00
Simon Ogorodnik
5c745facf4 J2K: Improve error message in case of incorrect detach 2020-07-29 17:56:02 +03:00
Simon Ogorodnik
dc963e4ff6 Improve J2K progress reporting 2020-07-29 17:56:02 +03:00
Simon Ogorodnik
8bcf1000f6 J2K: Fix java 9 try-with-resources 2020-07-29 17:56:02 +03:00
Simon Ogorodnik
c5005f8695 J2K: Speed-up add imports 2020-07-29 17:56:01 +03:00
Simon Ogorodnik
cd0c644654 J2K: Fix incorrect early detaching of elements in for conversion 2020-07-29 17:56:00 +03:00
Simon Ogorodnik
8c2dd876b5 J2K: Fix incorrect argument remapping when introducing defaults 2020-07-29 17:56:00 +03:00
Simon Ogorodnik
cd7ac55091 J2K: Show converted/total file counts 2020-07-29 17:55:59 +03:00
Simon Ogorodnik
468af0bb85 J2K: Fix type parameters in LHS of callable reference 2020-07-29 17:50:10 +03:00
Leonid Startsev
96d0b1c47a Update serialization runtime and fix test data
Revert "Mute/ignore 'PROVIDED_RUNTIME_TOO_LOW' in tests"
2020-07-29 14:20:33 +03:00
Nikolay Krasko
a6a22d1cde Revert "Populate Kotlin source set roots with KotlinSourceRootTypes"
This reverts commit e2634190
2020-07-29 12:05:42 +03:00
Yaroslav Chernyshev
e263419088 Populate Kotlin source set roots with KotlinSourceRootTypes
By default Kotlin source root is populated with JavaSourceRootType and
changed during import only if real source folder exists.
Now Kotlin source roots has valid source type right after creation

#KT-37106 Fixed
2020-07-29 10:26:42 +03:00
Ilmir Usmanov
4fb5f8603a Keep $continuation in LVT
in case of suspend functions and `this` is case of lambdas, since they
are used in async stack trace generation.
Update tests.
 #KT-40661 Open
2020-07-29 00:01:12 +02:00
Ilmir Usmanov
db40808186 Minor. Remove unused SourceFrames 2020-07-29 00:01:11 +02:00
Ilmir Usmanov
70e91bd5db Shrink and split LVT records of variables according to their liveness
Otherwise, debugger will show uninitialized values of dead variables
after resume.
 #KT-16222
 #KT-28016 Fixed
 #KT-20571 Fixed
2020-07-29 00:01:10 +02:00
Ilmir Usmanov
e5995f0c12 Update R8
Because old version throws assertion error if parameter's LVT record
does no span the whole function.
2020-07-29 00:01:10 +02:00
Ilmir Usmanov
60875f96b4 Do not take LVT into account when calculating liveness of variables 2020-07-29 00:01:09 +02:00
Alexander Udalov
687d13a320 IR: cleanup expression implementations
Remove unused constructors with descriptors, minimize usages of
secondary constructors and make some properties non-lateinit, fix some
inspections.
2020-07-28 20:05:58 +02:00
Alexander Udalov
e36d3ba4f6 IR: remove IrNoArgumentsCallableReferenceBase
To simplify transformation of IR element hierarchy to classes.
2020-07-28 20:05:57 +02:00
Dmitriy Novozhilov
f270cd8d6e [FIR] Update testdata due to lack of callee reference in FirResolvedQualifier 2020-07-28 20:47:07 +03:00
Dmitriy Novozhilov
f283f2db43 [FIR] Improve diagnostic reporting & don't use error symbol for candidate if possible
Also introduce few new diagnostics:
- NONE_APPLICABLE more many inapplicable candidates
- HIDDEN for visible candidates
2020-07-28 20:46:56 +03:00
anastasiia.spaseeva
5c0528b61e [Spec tests] Add tests for primary constructors declaration 2020-07-28 20:26:33 +03:00
anastasiia.spaseeva
0488dc985f [Spec tests] Add tests for intersection and OR 2020-07-28 20:26:32 +03:00
anastasiia.spaseeva
46774fb6d6 [Spec tests] Add call without an explicit receiver tests for top-level non-extension functions 2020-07-28 20:26:32 +03:00
anastasiia.spaseeva
bef59055cd [Spec tests] Fix test cases structure 2020-07-28 20:26:31 +03:00
anastasiia.spaseeva
4ad3847224 [Spec tests] Add tests for subtyping rules for simple classifier type 2020-07-28 20:26:30 +03:00
anastasiia.spaseeva
1801344c76 [Spec tests] Add tests for inner-and-nested-type-contexts section 2020-07-28 20:26:29 +03:00
anastasiia.spaseeva
d5ddb26180 [Spec tests] Add overload resolution tests for plus assign operator call 2020-07-28 20:26:28 +03:00
anastasiia.spaseeva
1d83c59e80 [Spec tests] Actualize test for callable reference section 2020-07-28 20:26:27 +03:00
anastasiia.spaseeva
4db209648d [Spec tests] Update spec version 2020-07-28 20:26:26 +03:00
anastasiia.spaseeva
3f862830f2 [Spec tests] Add tests for resolving callable references and some co-tests 2020-07-28 20:26:24 +03:00
anastasiia.spaseeva
cfbfec77a5 [Spec tests] Add tests for Algorithm of MSC selection 2020-07-28 20:26:23 +03:00
anastasiia.spaseeva
73850e97d7 [Spec tests] Add test for Coercion to Unit error diagnostics absence 2020-07-28 20:26:22 +03:00
anastasiia.spaseeva
26ac87d9be [Spec tests] Update spec testData 2020-07-28 20:26:21 +03:00
Alexander Udalov
f240d51d2c IR: do not inherit IrFakeOverride* from IrFunction/IrProperty
This will help to reduce boilerplate after making the latter classes.

Without this change, IrFunctionCommonImpl would not be able to be a
class because it would introduce a diamond class hierarchy, and thus
that would require copying all its contents to IrFunctionImpl and
IrFakeOverrideFunctionImpl.
2020-07-28 19:05:12 +02:00
Alexander Udalov
4892737cc9 Use IrFactory in kotlin-serialization-compiler 2020-07-28 19:04:44 +02:00
Alexander Udalov
0909894a96 PIR: make most implementations and carriers internal 2020-07-28 19:04:44 +02:00
Alexander Udalov
cce55f1609 IR: add module ir.tree.impl, move main IR implementation there 2020-07-28 19:04:44 +02:00
Alexander Udalov
77247deb23 IR: add module ir.tree.persistent, copy PIR implementation there
Use PersistentIrFactory in JS IR compiler entry points.
2020-07-28 19:04:43 +02:00
Alexander Udalov
9aed92d2dd Partially revert "Persistent IR implementation"
This partially reverts commit f437da8ee5.
Changes related to carriers and others are still there. They will be
moved out to a separate module in a subsequent commit.
2020-07-28 19:04:43 +02:00
Dmitry Petrov
980b91d082 JVM: generate 'Deprecated' on method as runtime-visible annotation
We generate @java.lang.Deprecated annotation on methods of $DefaultImpls
classes in compatibility mode. This annotation has RUNTIME retention and
should be visible.

Also, get rid of representing annotations as Class'es (yes we know that
these annotations are in compiler CLASSPATH, but we should not rely on
such classes and associated information).
2020-07-28 18:19:20 +03:00
Dmitry Petrov
4fdccb3b35 JVM_IR: don't generate repeated ElementType values in @Target 2020-07-28 18:19:20 +03:00
Ilya Goncharov
c065210b56 [Gradle, JS] Reuse task requirements
^KT-39825 fixed
2020-07-28 18:17:05 +03:00
Ilya Goncharov
9a3ae4f4fa [Gradle, JS] Common webpack configuration
^KT-39825 fixed
2020-07-28 18:16:51 +03:00
vldf
a2b26c00a1 Uncommented ControlFlowAnalysisBenchmark 2020-07-28 17:10:02 +03:00
vldf
fca0b7fedd [FIR] Add CFA benchmark 2020-07-28 14:30:40 +03:00
vldf
d7b3a86f5e [FIR] Add "can be val" extended checker 2020-07-28 14:17:38 +03:00
Jinseong Jeon
da6e96f4f1 FIR2IR: don't declare dispatch receiver for local functions 2020-07-28 13:43:10 +03:00
Jinseong Jeon
5a3367e09c FIR: initial support of suspend conversion for function reference 2020-07-28 13:37:05 +03:00
Alexander Udalov
b9243aad24 Minor, fix test data in bytecodeListing/specialBridges 2020-07-28 12:12:39 +02:00
Alexander Udalov
df324d5a08 IR: pull up common accept/transform implementations to interfaces
To avoid duplicating them among the main, persisting, lazy, and
fir2ir-lazy implementations.

Also reformat a bit, and avoid storing descriptor in a field in some
places.
2020-07-28 12:05:24 +02:00
Alexander Udalov
12d2a02d22 JS IR: drop JsIrDeclarationBuilder
Move buildValueParameter back to JsIrBuilder, and use common IR builders
directly where buildFunction was called.
2020-07-28 12:05:24 +02:00
Alexander Udalov
0d605a6b7f IR: create IrBlockBody via IrFactory 2020-07-28 12:05:24 +02:00
Alexander Udalov
9ad4a754ce IR: create IrExpressionBody via IrFactory 2020-07-28 12:05:24 +02:00
Alexander Udalov
d1dc938a5d IR: use IrFactory in IR builders 2020-07-28 12:05:24 +02:00
Alexander Udalov
898dd20a9e IR: use IrFactory in misc utils 2020-07-28 12:05:23 +02:00
Alexander Udalov
f359f36ed9 IR: add IrFactory to IrDeclaration, use in deep copy 2020-07-28 12:05:23 +02:00
Alexander Udalov
305288aa82 IR: use IrFactory in psi2ir 2020-07-28 12:05:23 +02:00
Alexander Udalov
8c41ba8ee4 IR: use IrFactory in fir2ir 2020-07-28 12:05:23 +02:00
Alexander Udalov
9356f87f28 IR: use IrFactory in linker 2020-07-28 12:05:23 +02:00
Alexander Udalov
db4cbe7103 IR: use IrFactory in SymbolTable 2020-07-28 12:05:23 +02:00
Alexander Udalov
c6a127e87e IR: introduce IrFactory
This is needed to refactor IrPersistingElementBase-based implementations
into another module, to use it in JS IR.
2020-07-28 12:05:23 +02:00
Kirill Shmakov
96968cd9c9 Fix build after rebasing 2020-07-28 12:55:38 +03:00
Kirill Shmakov
96160cbb55 Adapt AS wizard to changes in main wizard 2020-07-28 12:26:19 +03:00
Kirill Shmakov
5c8833f608 Wizard: improve mobile app template 2020-07-28 12:26:19 +03:00
Ilya Kirillov
63fa6674a3 Wizard: temporary add ios shortcut target
Temporary as it will not be needed when HMPP wizard will be ready
2020-07-28 12:26:19 +03:00
Ilya Kirillov
f330cd3697 Wizard: relocate AndroidManifest.xml for MPP module 2020-07-28 12:26:19 +03:00
Ilya Kirillov
b3d48cda8c Wizard: add common tests for iOS/Android template 2020-07-28 12:26:19 +03:00
Ilya Kirillov
5ffcaf6508 Wizard: add shared code for iOS/Android template
fix android
2020-07-28 12:26:19 +03:00
Ilya Kirillov
66c756ad0f Wizard: add ability for wizard to generate expected/actual declarations in MPP module 2020-07-28 12:26:18 +03:00
Ilya Kirillov
7d1036ee7e Wizard: use property for storing module dependency 2020-07-28 12:26:18 +03:00
Ilya Kirillov
dbc43b66bf Wizard: introduce ModuleConfiguratorProperty 2020-07-28 12:26:18 +03:00
Ilya Kirillov
74d6919c7c Wizard: wrap property into PluginProperty for plugin properties 2020-07-28 12:26:18 +03:00
Ilya Kirillov
3c3ba361e8 Wizard: specify path for plugin entities in one place 2020-07-28 12:26:18 +03:00
Ilya Kirillov
c05c72387e Wizard: fix node js templates 2020-07-28 12:26:18 +03:00
aleksandrina-streltsova
63e2d771b3 Get rid of reflection in new project wizard core: manually specify properties in plugins 2020-07-28 12:26:17 +03:00
Ilya Kirillov
cc35529b9a Wizard: get rid of reflection: specify plugin path by hand 2020-07-28 12:23:57 +03:00
Ilya Kirillov
3ed11c0491 Wizard: get rid of reflection: force plugins to specify settings & tasks directly 2020-07-28 12:23:57 +03:00
vldf
eadd3f00f2 [FIR] Add CanBeReplacedWithOperatorAssignmentChecker 2020-07-28 10:13:28 +03:00
Kevin Bierhoff
fa8c6e7fb6 Uast: KT-40578: resolve Kotlin property writes to setters (#3597)
* KT-40578: resolve Kotlin property writes to setters

* limit to non-constructor properties

* Uast: `KotlinIDERenderLogTest.testConstructors` fix

Co-authored-by: Nicolay Mitropolsky <nicolay.mitropolsky@jetbrains.com>
2020-07-28 10:03:22 +03:00
Sergey Bogolepov
5851a7dea0 [kotlinx-metadata-klib] Proper support for nullable enum entry fields 2020-07-28 11:59:17 +07:00
Sergey Rostov
45f0328f21 scripting: preload scripting support plugins 2020-07-27 19:44:03 +00:00
Sergey Rostov
b5e04378ed scripting, ucache: don't init caches at start up
init it in async instead. all usages will be updated thanks to
highlighting/reindexing that is called after cache is constructed.

#KT-40242 Fixed
2020-07-27 19:44:03 +00:00
Dmitry Petrov
43fcb2330e JVM_IR: fix source file name for mutlifile class facades 2020-07-27 19:13:37 +03:00
Dmitry Petrov
89a0b3e944 Check class source in bytecode listing tests 2020-07-27 19:13:37 +03:00
Dmitriy Dolovov
b47946cbba Report interop functions with non-stable parameter names
^KT-34602
2020-07-27 23:11:36 +07:00
Dmitriy Dolovov
3d9093583f Metadata: 'non-stable parameter names' flag for callables
^KT-34602
2020-07-27 23:11:30 +07:00
Ilya Goncharov
8cace2bab4 [Gradle, JS] Add tests on kotlin/js module with js files 2020-07-27 19:00:12 +03:00
Ilya Goncharov
0b88f457e8 [Gradle, JS] Use .meta.js as source of "name" and "main" fields
^KT-40342 fixed
2020-07-27 19:00:12 +03:00
Victor Petukhov
cca64b8fab NI: use the inferred type to check of nullable array for vararg
^KT-40555 Fixed
2020-07-27 18:24:31 +03:00
Steven Schäfer
9d63412b3e JVM IR: Produce correct generic signatures for special bridge methods 2020-07-27 17:02:24 +02:00
Steven Schäfer
c16b548dff JVM IR: Don't produce annotations on builtin stub, toArray, and bridge methods 2020-07-27 17:02:24 +02:00
Andrei Klunnyi
f661b7604b KT-40557 Scratch: .kt files are treated as Kotlin scratches, opening fails
https://ea.jetbrains.com/browser/ea_problems/224367
2020-07-27 15:36:02 +02:00
Andrei Klunnyi
0e46a980f6 EA- 235760 // additional logging
https://ea.jetbrains.com/browser/ea_problems/235760
2020-07-27 15:36:00 +02:00
Andrei Klunnyi
c27453632e EA-235769 // StringIndexOutOfBoundsException
https://ea.jetbrains.com/browser/ea_problems/235769
2020-07-27 15:35:59 +02:00
Andrei Klunnyi
4afa50e081 EA-235759 // NPE fix
https://ea.jetbrains.com/browser/ea_problems/235759
2020-07-27 15:35:58 +02:00
Andrei Klunnyi
29281fd0bf EA-235761 // NPE fix
https://ea.jetbrains.com/browser/ea_problems/235761
2020-07-27 15:35:57 +02:00
Andrei Klunnyi
e63951c38c EA-235765 // NPE at refactoring suggestion
Fixed exception:
java.lang.NullPointerException: null cannot be cast to non-null type
org.jetbrains.kotlin.descriptors.CallableDescriptor

More info: https://ea.jetbrains.com/browser/ea_problems/235765
2020-07-27 15:35:55 +02:00
Dmitry Gridin
e8fd69fde1 [formatter] fix infinite recursion
Already exists in the new repo: original-hash e7ea6926a8a414ab6082299d99239ad167ab75a2

#KT-40636 Fixed
2020-07-27 19:56:19 +07:00
Ryan Nett
b1173317c5 Change scripting Severity enums to order from DEBUG to FATAL.
#KT-39502 fixed
2020-07-27 14:29:30 +02:00
Konstantin Tskhovrebov
59f6c0c273 Add flag for avoid double MPP gradle module resolve. 2020-07-27 15:11:48 +03:00
Ilya Goncharov
5444ffaf4b [Gradle, JS] Deprecate produceExecutable
^KT-40568 fixed
2020-07-27 14:44:47 +03:00
Ilya Goncharov
d9c269ed6b [Gradle, JS] Disable binaries.executable by default in wizard
^KT-40461 fixed
2020-07-27 14:35:45 +03:00
Natalia Selezneva
8d1f9df802 Do not show warning when multiple Gradle Definitions are loaded
This will happen when there are multiple gradle project linked to one IDEA project
andthey have different gradle versions
2020-07-27 13:08:01 +03:00
Ilya Matveev
a62f65940d Gradle, CocoaPods: Use synthetic dir as a working dir for pod gen
'Pod gen' creates an empty folder named 'Pods' in a directory where it
is executed. Earlier, 'pod gen' was executed in a project root
directory, so this `Pods` folder was created in a VCS-controlled
place. This patch fixes this issue by running 'pod gen' in a directory
where the synthetic project is located.
2020-07-27 10:02:07 +00:00
Ilya Matveev
7c3eda31fa Gradle, CocoaPods: Fix non-compilable dummy header
Issue #KT-39999 fixed
2020-07-27 10:02:07 +00:00
Ilya Matveev
85908713b1 Gradle, CocoaPods: Support pods with dashes in names
See https://github.com/JetBrains/kotlin-native/issues/2884
2020-07-27 10:02:06 +00:00
Zalim Bashorov
635869f15a Rewrite className helper to fix tests on android
Since android tests preprocess test data and
(at least) replace package for files and fix package usages
it's preferred to use fqnames explicitly
instead of assembly them from parts, as it was before.
2020-07-25 15:28:36 +03:00
Mikhail Glukhikh
0ded1d7006 FirBasedSignatureComposer: generate better error messages 2020-07-24 19:47:28 +03:00
Mikhail Glukhikh
40256aa43d Fir2IrLazyClass: generate enum values() / valueOf() properly 2020-07-24 19:47:28 +03:00
Mikhail Glukhikh
8bae0f2d0c [FIR2IR] Handle local visibility around signature composer properly 2020-07-24 19:47:27 +03:00
Mikhail Glukhikh
828524bde4 [FIR2IR] Fix conversion of default vararg arguments for annotations 2020-07-24 19:47:27 +03:00
Mikhail Glukhikh
240baa64a5 Fir2IrConverter: initialize call generator earlier to avoid lateinit err 2020-07-24 19:47:26 +03:00
Mikhail Glukhikh
2b52988f1b [FIR TEST] Add failing BB test with Deprecated annotation 2020-07-24 19:47:19 +03:00
Denis Zharkov
df1719c64c Fix incorrect mixed named/positioned arguments in project code
^KT-40404 Fixed
2020-07-24 13:36:52 +03:00
Denis Zharkov
dc6efa5a61 Fix incorrect handling of mixed named/positional arguments
^KT-40404 Fixed
2020-07-24 13:36:52 +03:00
Mikhail Bogdanov
d083297366 Support additional flags in MPP tests. Add diagnostic tests for defaults 2020-07-24 12:10:04 +02:00
Mikhail Bogdanov
125c72cb8d New default checks for mixed hierarchies
Old and new schemes
2020-07-24 12:10:04 +02:00
Denis Zharkov
de02b31ad7 FIR: Use phasedFir in resolve
^KT-40376 Fixed
2020-07-24 12:32:29 +03:00
Yaroslav Chernyshev
0de29e641d Fixed bug with pureKotlinSourceFolders for common modules 2020-07-24 12:22:00 +03:00
Yaroslav Chernyshev
142bd2e009 Filtering pureKotlinSourceFolders for existing package directories 2020-07-24 12:21:59 +03:00
Yaroslav Chernyshev
e6670d439f Small renaming classifier -> disambiguationClassifier 2020-07-24 12:21:58 +03:00
Yaroslav Chernyshev
96d9dad429 Fixed tests for pureKotlinSourceFolders by extending created facets 2020-07-24 12:21:57 +03:00
Yaroslav Chernyshev
f490085142 Support pureKotlinSourceFolders for MPP projects
#KT-34271 Fixed
#KT-32963 Fixed
2020-07-24 12:21:57 +03:00
nataliya.valtman
fde8a34c32 KT-40058 NPE from mpp gradle plugin on kotlinx.benchmarks 2020-07-24 10:46:45 +03:00
Ivan Kylchik
bc41681a2e Fix gradle import error after introducing new gradle task in benchmarks 2020-07-23 21:18:32 +03:00
Vyacheslav Gerasimov
96ac6e612d Build: Replace androidIdeTest task with kaptIdeTest
We dont run android ide tests anymore
2020-07-23 19:18:18 +03:00
Vyacheslav Gerasimov
803d24cd42 Build: Remove pluginTests task and deduplicate kapt test task 2020-07-23 19:18:17 +03:00
Vyacheslav Gerasimov
ee642e69b0 Build: Introduce mainIdeTests task 2020-07-23 19:18:17 +03:00
Dmitry Petrov
e2a4ca10d6 JVM_IR: fix inner class attributes for private class in interface 2020-07-23 19:13:28 +03:00
Dmitry Petrov
0741781462 Compare inner class access flags in bytecode listing tests 2020-07-23 19:13:28 +03:00
Natalia Selezneva
8d894929ae Minor: unify logging in scripting 2020-07-23 16:31:32 +03:00
Natalia Selezneva
8a6cdcba29 Do not hold a lock during loading script templates from dependencies
^KT-40383 Fixed
2020-07-23 16:24:13 +03:00
Natalia Selezneva
493c287bb0 Minor: fix notification text when script configuration is missing after request 2020-07-23 16:20:57 +03:00
Ivan Kylchik
265873becd Comment out runBenchmark tasks due to gradle import error 2020-07-23 15:20:35 +03:00
Roman Golyshev
be06c51aa7 KT-40363 Handle non-octal int literals in for-loop conversions
- See EA-210233
- ^KT-40363 Fixed
2020-07-23 11:24:48 +00:00
Roman Golyshev
cba671a3ef KT-40359 Catch NumberFormatException during literal conversion
- Instead of failing J2K conversion completely, insert TODO expression
to the resulting code (it is better to have a converted code with TODO
than to have nothing at all)
- See EA-210233 for similar exceptions
- ^KT-40359 Fixed
2020-07-23 11:24:48 +00:00
Roman Golyshev
cc0a787735 Add null-checking to KotlinIdeaResolutionException constructors
- NPE here leads to loosing the actual exception
- EA-235059 Fixed
2020-07-23 11:24:47 +00:00
Nicolay Mitropolsky
f7031e65ba Uast: don't throw exception if can't get a receiver parameter for annotation (KT-40494) 2020-07-23 10:33:44 +03:00
Jinseong Jeon
7872b21914 FIR: handle object invoke via type alias 2020-07-23 09:34:42 +03:00
Svyatoslav Kuzmich
4a803e9d2f [JS IR] Support object declaration export
Fixes KT-39117 and KT-39367
2020-07-23 08:21:59 +03:00
Svyatoslav Kuzmich
4027dae594 [JS] Add js/js.translator/testData/package-lock.json 2020-07-23 08:21:57 +03:00
Natalia Selezneva
be371c9294 Remove optimization in KotlinScriptDependenciesClassFinder
Scope can contains only classes for one script,
but allScriptDependenciesScope contains classes for all scripts
2020-07-23 00:00:51 +03:00
Natalia Selezneva
be8374a1a8 Minor: fix comments 2020-07-23 00:00:50 +03:00
Natalia Selezneva
e708e3f1c5 Do not suggest to load gradle.kts configurations after project reopening
For projects with distributionType=WRAPPED
Workaround for KT-40394

The original problem is that GradleInstallationManager.resolveGradleVersion returns null is case of distributionType=WRAPPED

^KT-40394 Fixed
2020-07-23 00:00:50 +03:00
Natalia Selezneva
300e9581de Fix UI for Kotlin Scripting page
Show 15 items in the list by default
Show hint at the top
Fixed for 201+

^KT-40097 Fixed
2020-07-22 23:49:47 +03:00
Natalia Selezneva
dd20b9062a Completion for script inside module should provide classes from related module
^KT-35825 Fixed
2020-07-22 23:49:47 +03:00
Alexander Udalov
65d3ae6253 JS IR: move declaration creation from IrBuilder to JsIrDeclarationBuilder
This is a temporary class until IrDeclarationFactory is there.
2020-07-22 22:40:08 +02:00
Alexander Udalov
d3a34a8898 Psi2Ir: somewhat simplify Psi2IrTranslator API
Inline some methods only used once, deduplicate usages, rearrange
parameters, etc.
2020-07-22 22:38:21 +02:00
Alexander Udalov
241f82c70f IR: avoid storing unnecessary fields in IrPropertyImpl 2020-07-22 22:38:21 +02:00
Alexander Udalov
3f06f8a6ba IR: avoid storing unnecessary fields in IrFunctionImpl 2020-07-22 22:38:20 +02:00
Alexander Udalov
517c3e1020 IR: introduce IrFakeOverrideFunction, IrFakeOverrideProperty
Use them instead of the implementations. This will allow to refactor
creation to a factory and allow to use other implementations in the
future.
2020-07-22 22:38:20 +02:00
Alexander Udalov
ca5eb40fa5 IR: minor, avoid usages of IrBlockBodyImpl/IrExpressionBodyImpl 2020-07-22 22:38:20 +02:00
Mark Punzalan
174576af61 ForLoopsLowering: Handle Sequence<*>.withIndex(). 2020-07-22 22:32:29 +02:00
Mark Punzalan
132960a695 ForLoopsLowering: Eliminate use of @ObsoleteDescriptorBasedAPI. 2020-07-22 22:32:29 +02:00
Mark Punzalan
b1ce21bc55 ForLoopsLowering: Reduce unnecessary temporary variables for the
"checked step" (check for a positive step arg) and "negated step"
(negate the step arg when the nested step is negative).
2020-07-22 22:32:29 +02:00
Mark Punzalan
291d62f653 ForLoopsLowering: Move handlers to sub-package and separate files. 2020-07-22 22:32:29 +02:00
Ivan Kylchik
44d283eb07 Fix FIR benchmark memory leak 2020-07-22 20:18:26 +03:00
Ivan Kylchik
be4dbf2dcd Create gradle scripts to run and analyze benchmark results 2020-07-22 20:18:25 +03:00
Ivan Kylchik
29d0e3dbb5 Reuse createSession function for FIR in benchmark 2020-07-22 20:18:24 +03:00
Dmitry Petrov
1272162a7f JVM_IR: generate "safe" names for functions in init blocks 2020-07-22 19:49:48 +03:00
Yaroslav Chernyshev
bb8f857809 [Gradle, Import] Added externalSystemId into facet for mpp projects
#KT-39803 Fixed
2020-07-22 19:44:09 +03:00
Ilya Goncharov
e5b0498eb6 Fix tests for Gradle kts and groovy dsl
^KT-40527 fixed
2020-07-22 14:04:57 +03:00
Ilya Goncharov
ae0bedd2ac [Gradle, JS] Different module kind for browser and nodejs
^KT-40527 fixed
2020-07-22 14:04:29 +03:00
Ilya Goncharov
38ec3ffb4a [Gradle, JS] Statically calculated module configurator id
^KT-40527 fixed
2020-07-22 14:04:15 +03:00
Ilya Goncharov
bf1b85343f [Gradle, JS] Remove copyright from template of node.js
^KT-40527 fixed
2020-07-22 14:03:40 +03:00
Ilya Goncharov
2d60d2c0e6 [Gradle, JS] Divide allowSinglePlatform
^KT-40527 fixed
2020-07-22 14:02:02 +03:00
Ilya Goncharov
af367b01ec [Gradle, JS] Add test on node js single platform project
^KT-40527 fixed
2020-07-22 14:01:50 +03:00
Ilya Goncharov
cb60b9e59c [Gradle, JS] singleplatformJs -> singlePlatformJsBrowser
^KT-40527 fixed
2020-07-22 14:01:20 +03:00
Ilya Goncharov
01ec8b5262 [Gradle, JS] Fix typo and add node js module configurator
^KT-40527 fixed
2020-07-22 13:59:46 +03:00
Ilya Goncharov
0d606e1346 [Gradle, JS] Fix id and text in simple js module configurators
^KT-40527 fixed
2020-07-22 13:59:33 +03:00
Ilya Goncharov
4c5cd44e75 [Gradle, JS] Localize Module Type
^KT-40527 fixed
2020-07-22 13:59:15 +03:00
Ilya Goncharov
29e37ee15f [Gradle, JS] Fix test for js single platform
^KT-40527 fixed
2020-07-22 13:58:47 +03:00
Ilya Goncharov
a866e51402 [Gradle, JS] NodeJs template files
^KT-40527 fixed
2020-07-22 13:58:32 +03:00
Ilya Goncharov
95f6669275 [Gradle, JS] Add NodeJs template plugin
^KT-40527 fixed
2020-07-22 13:58:19 +03:00
Ilya Goncharov
6866fdc3e1 [Gradle, JS] Add NodeJs template project
^KT-40527 fixed
2020-07-22 13:57:44 +03:00
Ilya Goncharov
4de31da0f3 [Gradle, JS] Fix typo
^KT-40527 fixed
2020-07-22 13:57:07 +03:00
Ilya Goncharov
e8dfc4dcd0 [Gradle, JS] JsSinglePlatform -> BrowserJsSinglePlatform
^KT-40527 fixed
2020-07-22 13:56:53 +03:00
Ilya Goncharov
b4334a3a3b [Gradle, JS] Fix formatting in Gradle Kotlin/JS wizard
^KT-40149 fixed
2020-07-22 13:23:03 +03:00
Jinseong Jeon
e1abaa9b51 FIR: special visibility handling for monitor{Enter|Exit} 2020-07-22 12:16:32 +03:00
Jinseong Jeon
85f692ab40 FIR2IR: use DescriptorWithContainerSource if container source is available
The use of DescriptorWithContainerSource is the key to trigger the
proper generation of stub facade class as parent.
2020-07-22 12:16:32 +03:00
Alexander Gorshenev
c076d81f0c [IR FAKE OVERRIDES] Properly account for outer class type parameters 2020-07-22 12:02:51 +03:00
Pavel Kirpichenkov
1ef17c6f3a Drop isErrorTypeAllowed flag from type system context
The flag was used exclusively during calculation of common super type.
This change relies on assumption, that common super type is
NOT calculated in IR type system context.
2020-07-22 11:41:42 +03:00
Pavel Kirpichenkov
710659324c [NI] Fix common supertype of types with error supertypes
Enable check for error supertypes during CST calculation in classic type system context.
Cyclic upper bound + known type parameters of superclasses may create non-error types
with error supertypes. Such types don't have common constructors with other normal types
and cause assertion errors during intersection.

^KT-36951 Fixed
2020-07-22 11:41:42 +03:00
Ilya Gorbunov
95cc35f22e Package builtins with jvm reflect into IDEA plugin only
Leave builtins with common reflect for stand-alone compiler.
2020-07-22 11:08:14 +03:00
Stanislav Erokhin
0c094b1719 Serialize jvm reflect into builtIns
Basically this is revert of 427e34fe5a commit
This was done due to the KT-39728.
Also we do pick every file separately, because builtIn serializer
unable to filter expects
2020-07-22 11:08:14 +03:00
Stanislav Erokhin
67090e1afb Move KTypeProjection to separate file 2020-07-22 11:08:14 +03:00
Zalim Bashorov
ee26fd4959 [KJS FE] Change severity of NON_EXPORTABLE_TYPE from error to warning
The change is required to avoid breaking examples using kotlin-wrappers
until we find an acceptable solution for them.

#KT-39873 Fixed
2020-07-22 10:51:41 +03:00
Denis Zharkov
41bd013796 Fix incorrect usages of @NotNull type parameters in project sources
^KT-36770 In progress
2020-07-22 10:16:14 +03:00
Denis Zharkov
037ff2fa52 Fix incorrect handling of @NotNull type parameters
^KT-36770 In progress
^KT-40114 Relates
^KT-28785 Relates
2020-07-22 10:16:14 +03:00
Denis Zharkov
f1c68a9080 Introduce JavaTypeEnhancement component
It's necessary to allow using language version settings in type enancement
2020-07-22 10:16:14 +03:00
Denis Zharkov
240311d9c7 Minor. Reformat JavaNullabilityChecker 2020-07-22 10:16:14 +03:00
Dmitry Petrov
d93885e71c Add tests for deprecated properties 2020-07-21 22:25:44 +03:00
Dmitry Petrov
e84339a0d3 JVM_IR: fields for deprecated enum entries have ACC_DEPRECATED flag
'Deprecated' annotation can't be applied to field itself.
2020-07-21 22:25:44 +03:00
Roman Artemev
edab3e3ba9 [PLUGIN API] Add referenceTypeAlias API to IrPluginContext
- attempt to fix KT-40193
2020-07-21 18:38:33 +03:00
Roman Artemev
c4b4912a71 Revert "[PLUGIN API] Make referenceClass resolve type aliases too" 2020-07-21 18:38:32 +03:00
Anton Bannykh
cb15570d75 [JS IR BE] Fix validation errors (duplicate nodes and incorrect parent) 2020-07-21 18:25:17 +03:00
Vyacheslav Gerasimov
d36d62e226 Add info about -Pteamcity to readme and make warning less annoying 2020-07-21 18:05:21 +03:00
Vyacheslav Gerasimov
a4457ba7ac Build: Setup dependency on dist for :compiler:fir:analysis-tests:test 2020-07-21 17:24:59 +03:00
Vyacheslav Gerasimov
58ee95c8a3 Build: Add root IDE test tasks to split tests in 3 parts 2020-07-21 17:24:59 +03:00
Vyacheslav Gerasimov
036c359993 Build: Make local profile warning more visible 2020-07-21 17:24:58 +03:00
Vyacheslav Gerasimov
d9fbaadb2e Build: Upgrade Gradle Enterprise plugin to 3.3.4 2020-07-21 17:24:58 +03:00
Roman Artemev
d7a0dbfae8 [PLUGIN API] Make referenceClass resolve type aliases too
- fix KT-40193
2020-07-21 15:36:31 +03:00
Leonid Startsev
a0154b9851 Add JarUtil.getJarAttribute to proguard rules
This method is used by serialization plugin to read runtime JAR
manifest.

Maven serialization plugin seems to use proguarded compiler
distribution,
so to use this method, it should be kept.

Size increased for about 2kb.
2020-07-21 15:10:08 +03:00
Leonid Startsev
e3f42721e9 Mute/ignore 'PROVIDED_RUNTIME_TOO_LOW' in tests 2020-07-21 15:10:08 +03:00
Leonid Startsev
df5f38fec8 Implement reading kx.serialization runtime metadata from jar manifest
That allows to check whether current compiler plugin can work with
a given runtime version. Implementation-Version can help to detect whether
runtime version is too low, and Require-Kotlin-Version detects whether
runtime version is too high.

Corresponding diagnostic for Require-Kotlin included.
Implement minimal runtime version check for kotlinx.serialization
plugin.

 #KT-40036 Fixed

Cache result from getVersionsForCurrentModule in BindingTrace.
Hide check in the IDE, because caching in trace does not work there.
2020-07-21 15:10:08 +03:00
Leonid Startsev
7db0bf8195 Add new serialization runtime packages
encoding and descriptors. Rename ContextSerializer to Contextual.
Unify getClassFrom*Package functions.
2020-07-21 15:02:06 +03:00
Ivan Kylchik
8b9fb6a6cd [FIR] Remove FirOperatorCall node from fir tree 2020-07-21 13:54:19 +03:00
Ivan Kylchik
3c01a39846 [FIR] Update test data after introducing new fir nodes 2020-07-21 13:54:17 +03:00
Ivan Kylchik
d77d733244 [FIR] Complement fir rendering with newly created nodes 2020-07-21 13:54:17 +03:00
Ivan Kylchik
9a119a6757 [FIR] Replace all necessary usages of operator call with new ones
#KT-38333 Fixed
2020-07-21 13:54:16 +03:00
Ivan Kylchik
def47bdd9d [FIR] Add new equalityOperatorCall node in control flow graph 2020-07-21 13:54:15 +03:00
Ivan Kylchik
d23e9940ec [FIR] Change fir builder to use newly created nodes 2020-07-21 13:54:15 +03:00
Ivan Kylchik
708c8b8ef3 [FIR] Create additional nodes to replace operator call in some places
1. FirAssignmentOperatorStatement - represent assignment operations
such as =, +=, -=, /=, %=
2. FirEqualityOperatorCall - represent boolean operations such as ==,
!=, ===, !==

#KT-38333 In Progress
2020-07-21 13:54:14 +03:00
Roman Artemev
8c4930da2e [KLIB] Drop API which is no longer used 2020-07-21 13:15:35 +03:00
Roman Artemev
bb20e4759b [KLIB] Use queue to track classes required fake override resolve
- Avoid module visiting to prevent lazy bodies loading
2020-07-21 13:15:35 +03:00
vladislavf7@gmail.com
2b0639d4ad [FIR] Cleanup and refactoring for checkers 2020-07-21 12:13:10 +03:00
vladislavf7@gmail.com
fb946a6a3f [FIR] Move extended checkers list 2020-07-21 12:13:10 +03:00
vladislavf7@gmail.com
751ed60e42 [FIR] Fix redundant visibility modifier checker 2020-07-21 12:13:10 +03:00
vladislavf7@gmail.com
a8ff5d17dc [FIR] Fix redundant modality modifier checker
Fixed function FirDeclaration.hasBody() and some others improvement
2020-07-21 12:13:10 +03:00
vladislavf7@gmail.com
a988234bbf [FIR] Fix redundant explicit type checker 2020-07-21 12:13:09 +03:00
Pavel Punegov
eecb43d4c9 Ignore test in Native backend 2020-07-21 11:26:57 +03:00
Ilya Gorbunov
bace1b8055 Increase stdlib-js mocha test timeouts to 10s
Some tests often do not fit into the default timeout when running tests
in parallel on CI.
2020-07-21 05:43:38 +03:00
Steven Schäfer
d62a6a2631 JVM IR: Do not create accessors for enum entry constructors 2020-07-20 22:37:49 +02:00
Alexander Udalov
71730696b2 JVM IR: rename JvmDeclarationFactory -> JvmCachedDeclarations 2020-07-20 22:26:11 +02:00
Alexander Udalov
c7f9dc1c40 IR: rename DeclarationFactory to InnerClassesSupport, move out of context
Methods of the common interface DeclarationFactory were only used in
lowerings in InnerClassesLowering, which were used in JVM and JS, not
Native. Therefore, it makes sense to have this as a separate interface
and pass its implementation to these lowerings directly, instead of
declaring it in the common context (which is not going to be implemented
in Native).
2020-07-20 22:26:11 +02:00
Alexander Udalov
cf884fb048 IR: remove JVM-specific methods from DeclarationFactory 2020-07-20 22:26:11 +02:00
Alexander Udalov
6907decd99 Report file name on exception from ASM in BinaryJavaClass
This is useful to diagnose cases like KT-40339
2020-07-20 22:25:55 +02:00
Matthew Gharrity
221d49a995 Set wantsDiagnostics() in AbstractFilteringTrace
report() already delegates to the parentTrace, so
wantsDiagnostics() should delegate to it as well.
2020-07-20 21:12:25 +03:00
Dmitry Petrov
2e31f95554 Update testData 2020-07-20 20:04:32 +03:00
Dmitry Petrov
2b9606becf JVM_IR: field for suspend main parameter is synthetic 2020-07-20 20:04:31 +03:00
Dmitry Petrov
7be9b18ff4 JVM: field for suspend main parameter is synthetic 2020-07-20 20:04:31 +03:00
Dmitry Petrov
6bc44a366a JVM_IR: fields for suspend lambda parameters are synthetic 2020-07-20 20:04:31 +03:00
Dmitry Petrov
bae6037f00 JVM: fields for suspend lambda parameters are synthetic 2020-07-20 20:04:31 +03:00
Dmitry Petrov
fa75518bd7 JVM_IR: don't skip nullability annotations on private fields
Unfortunately, some annotation processors rely on those annotations.
2020-07-20 20:04:31 +03:00
Dmitry Petrov
d30c67db14 JVM: don't skip nullability annotations on private fields
Unfortunately, some annotation processors rely on those annotations.
2020-07-20 20:04:30 +03:00
Victor Petukhov
b0ac046b05 NI: decrease fixation priority for variables which have only incorporated from upper bound constraints
^KT-40045 Fixed
^KT-39633 Fixed
2020-07-20 19:20:18 +03:00
Ilya Goncharov
081248f859 [Gradle, JS] Extract properties provider in KotlinJsTarget 2020-07-20 17:44:12 +03:00
Ilya Goncharov
4917643583 [Gradle, JS] Check if not both compiler 2020-07-20 17:40:52 +03:00
Ilya Goncharov
61b5a738da [Gradle, JS] Rename flag for legacy
^KT-40320 fixed
2020-07-20 16:51:37 +03:00
Ilya Goncharov
e776444459 [Gradle, JS] binaries executable for legacy by default
^KT-40320 fixed
2020-07-20 16:51:22 +03:00
Ilya Goncharov
f7beea10a5 [Gradle, JS] Common configure should be last otherwise user settings can
be overwrote

^KT-40320 fixed
2020-07-20 16:51:08 +03:00
Jim Sproch
814bd48148 Keep members of com.google.common dependencies intact
It is a workaround for KTI-298
#KT-40354 In progress
2020-07-20 15:05:16 +03:00
Dmitriy Novozhilov
236dfe60f1 [FIR] Correctly build scopes for resolve of different parts of constructors
#KT-40409 Fixed
2020-07-20 14:38:17 +03:00
Dmitriy Novozhilov
94ff457e43 [FIR] Handle erroneous situation with type projection in supertype 2020-07-20 14:38:17 +03:00
Dmitriy Novozhilov
c94d583e2e [FIR] Add substitution for inner classes to supertype resolve
KT-38992 Fixed
2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
cf555ef2b6 [FIR] Move FirNestedClassifierScopeWithSubstitution to separate file 2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
07e12f98b5 [FIR] Substitute supertypes in nested classifier scope
KT-38992
2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
cedd1c133e [FIR] Match type in super<type> access with actual supertypes of class 2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
1ce4eca3a6 [FIR] Infer type arguments for captured parameters of inner classes
KT-38992
2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
1c622a5a3f [FIR] Add transformConversionTypeRef to FirTypeOperatorCall 2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
1b78950ebb [FIR] Don't transform property initializers in type resolve 2020-07-20 14:38:16 +03:00
Dmitriy Novozhilov
9e94189852 [FIR] Add transformTypeParameters to FirTypeParameterRefsOwner 2020-07-20 14:38:15 +03:00
Mikhail Zarechenskiy
4083111dab Fix SAM conversion when lambda is the last expression of another lambda
#KT-39691 Fixed
2020-07-20 14:30:40 +03:00
Mikhail Zarechenskiy
a15d3c76b6 Fix references to sam adapted functions, also fix lookup location
#KT-31025 Fixed
2020-07-20 14:30:40 +03:00
Mikhail Zarechenskiy
0c79de1a98 Prohibit adapted reference resolve against reflective types
There are design questions about reflection for adapted references,
 so the current proposal is to prohibit reflection on them and support
 it properly later

 #KT-40406 Fixed
2020-07-20 14:30:39 +03:00
Vladimir Ilmov
d8de37f665 (CoroutineDebugger) using WeakReference as lastObservedFrame
relates to #KT-40073
2020-07-20 11:44:51 +02:00
Vladimir Ilmov
bcf1954860 (CoroutineDebugger) added support for DebugCoroutineInfoImpl in kotlinx-coroutines-core:1.3.8
relates to #KT-40073
2020-07-20 11:44:51 +02:00
Vladimir Ilmov
b43b238030 (CoroutineDebugger) embed agent into gradle JavaExec task
#KT-40417 fixed
2020-07-20 11:44:32 +02:00
Vladimir Ilmov
217428212f (CoroutineDebugger) Refactoring of retrieving BaseContinuationImpl chains 2020-07-20 11:43:23 +02:00
Vladimir Ilmov
14766a3e1a (CoroutineDebugger) lv 'task' added to tests in EventLoopImplBase kotlinx-coroutines-core:1.3.7 2020-07-20 11:38:01 +02:00
Vladimir Ilmov
e49f3b567b (CoroutineDebugger) minimum supported version kotlinx-coroutines-core.1.3.8
Workaround for starting agent on windows removed, version upgraded in tests
 #KT-40073 fixed
2020-07-20 11:38:00 +02:00
Denis Zharkov
cd896ae6c8 FIR: Implement FE 1.0 semantics for super unqualified calls
See original logic at org.jetbrains.kotlin.types.expressions.unqualifiedSuper.UnqualifiedSuperKt#resolveUnqualifiedSuperFromExpressionContext

^KT-39070 Fixed
^KT-39599 Related
2020-07-20 12:24:51 +03:00
Denis Zharkov
dfc75f3447 FIR: Support fake elements for light tree 2020-07-20 12:24:27 +03:00
Denis Zharkov
fea1fb0fc3 FIR: Rename FirSourceElement::withKind to fakeElement
And reinforce its contract
2020-07-20 12:24:27 +03:00
Denis Zharkov
376d3385d0 FIR: Handle super-receiver case in a special way
Before this change, it was resolved independently of containg call
But in fact, the type of `super` depends on the name of the callee
(see KT-39599 and KT-39070)
2020-07-20 12:24:27 +03:00
Jinseong Jeon
628b8b56b7 FIR2IR: convert annotations on type aliases 2020-07-20 09:40:52 +03:00
Jinseong Jeon
4e14f9500f FIR: account for vararg when creating KFunction type for callable reference 2020-07-20 09:39:34 +03:00
Mikhail Zarechenskiy
e5e50eabe9 Update testdata after 41a0cfe002 2020-07-20 07:04:59 +03:00
Yan Zhulanow
b351556b1f Fix testJarsWithDependenciesWithinClasses() compilation after unsuccessful cherry-pick 2020-07-20 06:10:36 +09:00
Anton Yalyshev
64aaeb52f5 Add change notes for 1.4-M1,2,3,RC builds #KT-40311 Fixed 2020-07-19 11:56:06 +03:00
Jim Sproch
a4a398239b Fallback to fileEntry provided by irFile 2020-07-18 11:16:09 +03:00
Georgy Bronnikov
c901e82a55 IR: add IrSimpleFunction.isInfix 2020-07-18 11:03:33 +03:00
Ivan Gavrilovic
8e4bc06b3c Create a valid jar in KaptIncrementalWithIsolatingApt test 2020-07-18 05:06:16 +09:00
Ivan Gavrilovic
77ba9a1bbb KT-34604: Fix race condition in KAPT
KAPT was relying on clearing JarFileFactory to make sure
annotation processing does not hold onto annotation processing
classpath once done. Once KAPT switched to using Gradle workers, multiple
KAPT runs were sharing the same class loader ie. the same version
of JarFileFactory. Clearing the cache resulted in race condition,
as some runs were unable to load processors from jars.

This commit fixes this problem by avoiding the use of ServiceLoader
which was causing the issue. Jars would be added to the cache, but
they would never be removed. That's why JarFileFactory had to be
clearned manually. By loading the processor names manually (simply
exploring the classpath), no file handles leak.

Fixes https://youtrack.jetbrains.com/issue/KT-34604
Test: verified against the test project from the bug
2020-07-18 05:06:15 +09:00
Ivan Gavrilovic
111a2ece72 KAPT: Fix error reporting
When incremental analysis is unable to run, handle
failure gracefully. More info will be provided by
compiler diagnostics.

Fixes KT-36302
2020-07-18 05:06:15 +09:00
Ivan Gavrilovic
11251a93ac KAPT: Fix serialization of class structure data
When serializing ClasspathEntryData, ids assigned to types were
incorrect, resulting in corrupt data when deserializing files. This
happened if there were dependencies between classes.

Fixes KT-39876
Test: ClasspathAnalyzerTest
2020-07-18 05:06:15 +09:00
Jim Sproch
ccbb2eaba9 Make linker visible to compiler plugins 2020-07-17 21:18:07 +03:00
Toshiaki Kameyama
80e4e7939d "Create abstract function" quick fix: don't suggest it if super classes are not writable
#KT-40215 Fixed
2020-07-17 19:35:02 +03:00
Vladimir Ilmov
0c832e30bf (CoroutineDebugger) Memory leak fixed on IDEA quit: 'org.jetbrains.kotlin.idea.debugger.coroutine.view.XCoroutineView
#KT-40386 fixed
2020-07-17 18:01:30 +02:00
Dmitriy Dolovov
6de848a15c [Commonizer] Introduce success marker file in Gradle task
The success marker file is written to the disk only upon successful
commonization. If something goes wrong, this file is not written to
the disk. So the subsequent call of 'runCommonizer' task will be
considered not up-to-date.

^KT-40120
2020-07-17 22:09:08 +07:00
Dmitriy Dolovov
178b5db8de [Commonizer] More precise up-to-date checks in Gradle task
Don't annotate the whole 'distributionDir' with @InputDirectory.
The contents of the distribution directory may grow over time due to
compilation cache and new commonized libraries.

Don't annotate 'baseDestinationDir' with @InputDirectory. The base
destination directory may contain numerous subdirectories with the
libraries produced for different combinations of commonized targets.
This means that the contents of the base directory will grow over time.

Use more precise directory up-to-dateness checks:
* Annotate the directory with the original common libraries
  (i.e. 'stdlib') as @InputDirectory.
* Annotate the directory with the original platform libraries
  (all targets altogether) as @InputDirectory.
* For each combination of commonized targets mark the list of the
  directories with resulting libraries as @OutputDirectories.

^KT-40120
2020-07-17 22:09:08 +07:00
Sergey Igushkin
d3f9f4f3e8 Fix stdlib-by-default failures when configuration has been resolved
Issue #KT-38221
2020-07-17 18:36:08 +04:00
Ilya Kirillov
dccac34282 J2K: do not run runUndoTransparentAction outside EDT
#KT-39739 fixed
2020-07-17 16:02:46 +03:00
Ilya Kirillov
d16f246375 Wizard: do not add stdlib for gradle based projects
#KT-40407 fixed
2020-07-17 16:02:44 +03:00
Ilya Kirillov
d2113766e1 Wizard: do not add NPM dependencies for Kotlin/JS wrappers
Those dependencies are included now into corresponding libraries

#KT-40377 fixed
2020-07-17 16:02:42 +03:00
Ilya Kirillov
9f5dd59d75 Wizard: do not add test task for JS when no test framework is chosen
#KT-40378 fixed
2020-07-17 16:02:40 +03:00
Ilya Kirillov
0208fad057 Wizard: do not allow to choose Frontend Application template & JS Library at the same time
#KT-40371 fixed
2020-07-17 16:02:39 +03:00
Ilya Kirillov
fdc06b2c1c Wizard: fix Android SDK path on Windows
#KT-40232 fixed
2020-07-17 16:02:38 +03:00
Pavel Kirpichenkov
a153e7fe30 Changes after review
#KT-37219
2020-07-17 15:27:37 +03:00
Mikhail Zarechenskiy
10bd3a11b8 Improve message about compatibility warning a bit
Relates to #KT-40111
2020-07-17 14:27:20 +03:00
Mikhail Zarechenskiy
fcf7a55ccc Fix delegated property resolve on number literals and proper types
There is no need to update type of delegate expression if it's already
 resolved correctly (doesn't include non-proper types). In almost all
 cases it was fine except number literals as there we didn't box
 expression in backend and got problems at bytecode verification stage

 #KT-40057 Fixed
2020-07-17 14:27:20 +03:00
Yunir Salimzyanov
e5bca3ce29 Enable execution of muted on database tests marked as FLAKY (KTI-288)
It became possible to do, because all the muted flaky tests are now
synchronized with TeamCity and muted there too
2020-07-17 14:01:23 +03:00
Alexander Dudinsky
27e7116f60 Added the gradle plugin SNAPSHOT version support for some tests.
`ImportAndCheckNavigation` and `GradleMultiplatformHighlightingTest` now
use the SNAPSHOT version of the gradle plugin also.
2020-07-17 13:55:25 +03:00
Mikhail Glukhikh
80022cccd9 [FIR] Introduce & use processOverriddenPropertiesWithDepth 2020-07-17 12:46:02 +03:00
Jinseong Jeon
13ef97e51e FIR2IR: set proper visibility of backing fields with @JvmField 2020-07-17 12:42:11 +03:00
Jinseong Jeon
f3475fd098 FIR2IR: store and convert annotations on enum entry 2020-07-17 09:48:45 +03:00
Vladimir Dolzhenko
a1ffc0b25a Handle standalone gradle scripts before (build|settnings|init).gradle.kts
#KT-39916 Fixed
2020-07-17 05:36:02 +00:00
Mikhail Zarechenskiy
a6e58edfb9 Update test data, unmute test
Now behavior is the same as in OI for these cases.
 The behavior was changed in 100a6f70ca
2020-07-17 07:47:15 +03:00
Abduqodiri Qurbonzoda
a05681001f Mark with @DeprecatedSinceKotlin #KT-22423 and #KT-28753 2020-07-17 02:39:20 +03:00
Ilya Gorbunov
87cb6372a0 Specify DeprecatedSinceKotlin for recently deprecated min/max funs
#KT-38854
2020-07-16 22:58:25 +03:00
Ilya Gorbunov
a9f4479557 Add stdlib-gen DSL support for DeprecatedSinceKotlin annotation 2020-07-16 22:58:25 +03:00
Vladimir Dolzhenko
5eb0242941 Add missed application component PluginStartupComponent for AS40
Relates to #KTI-299
2020-07-16 21:01:26 +02:00
Shagen Ogandzhanian
fa1e3169df Update dukat dependency to 0.5.7 2020-07-16 18:19:36 +02:00
Mikhail Glukhikh
026a6ffab2 FirUpperBoundViolatedChecker: code cleanup 2020-07-16 19:09:33 +03:00
Nick
1ea5678932 [FIR] UPPER_BOUND_VIOLATED optimizations 2020-07-16 19:04:29 +03:00
Nick
41a0cfe002 [FIR] Add diagnostic UPPER_BOUND_VIOLATED 2020-07-16 19:04:22 +03:00
Toshiaki Kameyama
b9a220c624 AddSuspendModifierFix: suggest in inline lambda
#KT-38139 Fixed
2020-07-16 18:49:29 +03:00
Vyacheslav Karpukhin
982f429d6b Moved the IdeaDefaultIdeTargetPlatformKindProvider declaration from jps.xml back to jvm-common.xml 2020-07-16 16:38:56 +02:00
Igor Chevdar
3c4f0d3c9e [box-tests] Added test 2020-07-16 19:23:03 +05:00
Igor Chevdar
8bbbee8ffd [IR] Supported IrFunctionExpression in ClosureAnnotator
It may be encountered during local classes extraction from inline lambdas
2020-07-16 19:23:02 +05:00
Alexander Udalov
c9fdef8233 IR: use buildField where possible 2020-07-16 16:09:31 +02:00
Alexander Udalov
2d723f1c51 IR: use buildClass where possible 2020-07-16 16:09:31 +02:00
Alexander Udalov
5b1193407a IR: use buildConstructor where possible 2020-07-16 16:09:31 +02:00
Alexander Udalov
6aa09f61d4 IR: use buildFun where possible 2020-07-16 16:09:30 +02:00
Alexander Udalov
39e38c7049 IR: introduce buildVariable, use where possible 2020-07-16 16:09:30 +02:00
Alexander Udalov
c3560e5854 IR: use buildTypeParameter, minor cleanup 2020-07-16 16:09:30 +02:00
Alexander Udalov
4b5464c6cc IR: introduce buildReceiverParameter, use where possible 2020-07-16 16:09:30 +02:00
Alexander Udalov
b36a6114aa IR: use buildValueParameter where possible 2020-07-16 16:09:29 +02:00
Vladimir Ilmov
378d0a757a DebuggerClassNameProvider refactoring 2020-07-16 16:05:01 +02:00
Alexander Dudinsky
f6a16c5203 Move some tests from common mute database to platforms specific 2020-07-16 15:43:01 +03:00
Victor Petukhov
e754585e38 NI: add fallback strategy to get lexical scope to checking coroutine call legality
^KT-40247 Fixed
^KT-40337 Fixed
2020-07-16 15:33:27 +03:00
Vladimir Dolzhenko
5951e7500a Register KOTLIN_BUNDLED via application component in 193
#KTI-299 Fixed
2020-07-16 12:32:52 +00:00
Vladimir Dolzhenko
345528d8f5 Use public api to register KOTLIN_BUNDLED macros
Relates to #KT-39968
2020-07-16 12:32:51 +00:00
vladislavf7@gmail.com
ab2128f55d [FIR] extended checkers infrastructure refactoring
Removed strange way to enable Extended Checkers and add new way to do it
2020-07-16 15:11:32 +03:00
vladislavf7@gmail.com
38543ce2a3 [FIR] add way to configure session in Diagnostic Tests 2020-07-16 15:11:32 +03:00
Svyatoslav Kuzmich
609f0ca9bc [JS IR] .d.ts generation for module systems
Support .d.ts generation for UMD, AMD, CommonJS module kinds in
addition to existing "plain" module kind.
2020-07-16 14:02:06 +03:00
nataliya.valtman
ee23e39b3c KT-37720 replace FileSystemLocation with File for TransformAction 2020-07-16 13:39:55 +03:00
Yunir Salimzyanov
63ba883a77 Refactoring of muteWithDatabase
- remove unused function RunNotifier.withMuteFailureListener
- inline some functions (isIgnoredInDatabaseWithLog, etc.)
- change declaration of mutedMessage
- change naming of AutoMute related functions
- extract to separate function isPresentedInDatabaseWithoutFailMarker
2020-07-16 13:16:41 +03:00
Roman Golyshev
fb9b3f96de KT-40301 Add more diagnostics for 'Module is not contained in resolver'
- See [EA-214260](https://ea.jetbrains.com/browser/ea_problems/214260)
2020-07-16 10:14:22 +00:00
Roman Golyshev
8fd16f4a39 Add contract to checkWithAttachment
- This way it is more convenient to use with null checks
2020-07-16 10:14:21 +00:00
Ilya Muradyan
0ff45f1cc4 Merge pull request #3544 from JetBrains/rr/ileasile/scopes-resolver-option
Add dependency scopes option for scripting (Ivy and Maven) resolvers
2020-07-16 13:03:01 +03:00
Vyacheslav Gerasimov
628efcb189 Build: Add kotlin.build.dependencies.iu.enabled property
Alias for intellijUltimateEnabled
2020-07-16 13:00:25 +03:00
Vyacheslav Gerasimov
996e529944 Build: Allow intellijUltimateEnabled without kotlin-ultimate directory
This allows to build against idea ultimate locally
2020-07-16 13:00:24 +03:00
Vyacheslav Gerasimov
34c1316ae0 Build: Enable local build cache with org.gradle.caching=true 2020-07-16 13:00:24 +03:00
Vyacheslav Gerasimov
2e7cb2b829 Build: Enable parallel builds with org.gradle.parallel=true 2020-07-16 13:00:24 +03:00
Jinseong Jeon
50f1f8f0eb FIR: consider more functional types during SAM resolution 2020-07-16 12:56:18 +03:00
Jinseong Jeon
d66c6c7e1e FIR serializer: transform KSuspendFunction types too 2020-07-16 12:56:18 +03:00
Ivan Kylchik
85e822e283 [FIR] Support smartcast after reference equality check
#KT-39000 Fixed
2020-07-16 12:43:55 +03:00
vladislavf7@gmail.com
63f7e95c89 [FIR] Add RedundantExplicitTypeChecker 2020-07-16 12:39:13 +03:00
Yunir Salimzyanov
3c798502c8 Synchronize muted TeamCity tests with database for .bunch configurations 2020-07-16 11:04:59 +03:00
Jinseong Jeon
c7a37eb6b2 FIR deserializer: load annotations on extension receiver parameters 2020-07-16 10:42:51 +03:00
Dmitriy Dolovov
02f08b16d6 [Commonizer] Ignore CallableDescriptor.hasSynthesizedParameterNames attribute 2020-07-16 14:26:37 +07:00
Mikhail Zarechenskiy
100a6f70ca Relax rules about inferring to Nothing for special calls
#KT-37388 Fixed
 #KT-38427 Fixed
 #KT-39953 Fixed
 #KT-38899 Fixed
2020-07-16 09:56:46 +03:00
Anton Bannykh
e45cd02b01 KLIB: add EmptyPackageFragment's to fix ModuleDescritor.getSubPackagesOf 2020-07-15 20:42:23 +03:00
Abduqodiri Qurbonzoda
d2c9fc41f1 Replace @LowPriorityInOverloadResolution with @DeprecatedSinceKotlin #KT-37101 2020-07-15 20:36:57 +03:00
Abduqodiri Qurbonzoda
4ac1b7748a Advance bootstrap to 1.4.20-dev-2133 2020-07-15 20:36:56 +03:00
Roman Artemev
cd9f59325e [KLIB] Fix deserialization of anonymous classes
In case of initializing property or function with anonymous object the
object is being exposed outside its field/function's scope and
accessible on previous level. In this case in `declarations only` mode
we have unbound symbols. Fix is to force body/initializer loading in
such cases.

Make sure it is deserialized in `declarations'only` mode too.

 - Fix KT-40216
 - Add test
2020-07-15 18:23:29 +03:00
Roman Artemev
d31de6c8de [Psi2IR] Improve assertion message 2020-07-15 18:23:28 +03:00
Alexander Dudinsky
d89083cd8c Fixup the tests vs master-gradle-plugin
Defined 4.0 and 1.3.0 as default versions of Gradle and plugin for PluginTargetVersions
Use `{{kotlin_plugin_repositories}}` template in testData of ImportTests
Update "mute" databases for new tests

Add `kotlin.stdlib.default.dependency=false` to some testData
2020-07-15 17:10:36 +03:00
Andrey Uskov
005314ce06 Support running import tests on bootstrap version of gradle plugin 2020-07-15 17:09:36 +03:00
Victor Petukhov
b0c96a61ec Don't try to infer postponed variables on lambdas without BuilderInference annotation
^KT-39618 Fixed
2020-07-15 16:19:43 +03:00
nataliya.valtman
9e737156dd KT-37720 Replace ArtifactTransform with TransformAction 2020-07-15 15:57:54 +03:00
Andrei Klunnyi
b9585dabd4 KT-32368 Rework Inline hints settings // fix QuickFixTestGenerated$AutoImports.testKt17525 2020-07-15 13:25:00 +02:00
Andrei Klunnyi
1639cadbb7 KT-32368 Rework Inline hints settings // remove non-existent ReturnHintLinePainter 2020-07-15 13:00:16 +02:00
Jinseong Jeon
30b91b128a FIR: adjust type of integer operator call as property initializer 2020-07-15 13:56:40 +03:00
Mikhail Glukhikh
ddd26de139 FirTypeIntersectionScope: extract 'createIntersectionOverride' 2020-07-15 13:36:31 +03:00
Mikhail Glukhikh
9934f7d56e [FIR TEST] Add test for KT-40327 2020-07-15 13:36:31 +03:00
Mikhail Glukhikh
92d40c27e2 FirBasedSignatureComposer: build signature even for private classes
FIR2IR assumes that we can build signature for any non-local class.
Later we can drop this assumption.
2020-07-15 13:36:31 +03:00
Mikhail Glukhikh
07b0ffef84 [FIR] Introduce & use remapArgumentsWithVararg 2020-07-15 13:36:30 +03:00
Jinseong Jeon
5c4f978073 FIR: transform arrayOf call with empty arguments 2020-07-15 13:36:30 +03:00
Jinseong Jeon
db9d42c153 IrConstTransformer: handle vararg with spread elements properly 2020-07-15 13:36:30 +03:00
Jinseong Jeon
5600eefea5 FIR: add support for varargs in annotation calls 2020-07-15 13:36:30 +03:00
Jinseong Jeon
4e6bd33eca FIR: create argument mapping for annotation call in general 2020-07-15 13:36:30 +03:00
Jinseong Jeon
1a861b2df9 FIR2IR: don't create synthetic class for enum entry w/o members 2020-07-15 13:36:30 +03:00
Juan Chen
2ea3579281 [FIR] add support for generic cases of delegation by implementation
Add type parameters for generic delegated members and type
substitution when implementing instantiated super interfaces.
2020-07-15 13:36:29 +03:00
Mikhail Glukhikh
93632d2a18 FIR declaration transformer: unwrap synthetic property accessor properly 2020-07-15 13:36:29 +03:00
Mikhail Glukhikh
031f03a903 Introduce FirDeclarationOrigin.INTERSECTION_OVERRIDE 2020-07-15 13:36:29 +03:00
Mikhail Glukhikh
9107944b05 FirSyntheticProperty: take returnTypeRef directly from delegate 2020-07-15 13:36:29 +03:00
Mikhail Glukhikh
e2678149cb FirClassSubstitutionScope: fix overridden symbols traversing 2020-07-15 13:36:29 +03:00
Mikhail Glukhikh
10a1d5c03b FirTypeIntersectionScope: add intersection overrides caching 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
c1d223dbde FirTypeIntersectionScope: enhance support of inherited default parameters 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
c46fac3464 FirTypeIntersectionScope: support inherited default parameters 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
7a2ea49399 FirTypeIntersectionScope: introduce "intersection" fake overrides 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
5a422b5ef6 FirTypeIntersectionScope: optimize/cleanup processOverriddenFunctions 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
1bbed6c4ed [FIR2IR] Use FIR-specific methods to search for overridden functions 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
59cc9d4bc6 [FIR] Introduce FirTypeScope.processOverriddenFunctionWithDepth 2020-07-15 13:36:28 +03:00
Mikhail Glukhikh
8a29021aad [FIR2IR] Make data class synthetic members public API 2020-07-15 13:36:27 +03:00
Mikhail Glukhikh
521901f09a [FIR2IR] Cache type parameters for existing IR classes properly
Before this commit, we just recreated class header
for external IR class found by signature. However, it's not required,
because super-types, type parameters, etc. are already initialized.
So now we just read type parameters and build cache for them.
2020-07-15 13:36:27 +03:00
Victor Petukhov
d2f5fbdd08 Fix failing on AS test with inserting -Xinline-classes to build script 2020-07-15 13:35:16 +03:00
Kirill Shmakov
c8b3e622f1 Fix typo in field name 2020-07-15 10:52:42 +03:00
vladislavf7@gmail.com
d96772444e [FIR] Fix redundant visibility checker 2020-07-15 09:42:30 +03:00
Dmitry Savvinov
9b8128aaa8 Coerce commonTest to common in HMPP
Otherwise, Android import won't add dependency from androidTest to
commoonTest. See KT-38744 for details

^KT-38744 Fixed
2020-07-15 11:18:34 +07:00
Ilya Muradyan
1ac9b4c38f Add dependency scopes option for scripting resolvers 2020-07-14 23:42:00 +03:00
Vyacheslav Gerasimov
742b98bed6 Build: Fix stdlib-js-ir commonMainSources task dependency on version 2020-07-14 20:29:11 +03:00
vladislavf7@gmail.com
fb5fb44993 [FIR] Add RedundantModalityModifierChecker 2020-07-14 19:56:41 +03:00
Vyacheslav Gerasimov
e7c88a4349 Build: Add KotlinVersionCurrentValue to runtime classpath normalization
To avoid cache misses between local and remote build
2020-07-14 17:51:45 +03:00
Vyacheslav Gerasimov
e215d94b7b Build: Fix JavaExec task configuration
Setting some properties is not allowed in doFirst anymore in Gradle 6.5
2020-07-14 17:51:45 +03:00
Victor Petukhov
bf23b39d76 Add using -Xinline-classes by default in IDE intentions
^KT-34209 Fixed
2020-07-14 17:43:44 +03:00
Pavel Kirpichenkov
79d7babb57 Add test checking file annotations resolution
#KT-37219 Fixed
2020-07-14 17:07:42 +03:00
Nikolay Krasko
36a46482c5 Unmute IdeReplCompletionTestGenerated.testDefinedExtension in 202
Lost this line from 16c5ba0988
 during the mute-platform.csv.202 creation.
2020-07-14 17:05:30 +03:00
Natalia Selezneva
5954fe528b gradle.kts: do not return ErrorScriptDefinition into GradleBuildRootManager
In this case script definition is saved into script info,
but only real script definitions should be cached
In case of null script configurations will be reloaded into cache when scriptdefinitions will be ready

^KT-39910 Fixed
2020-07-14 15:30:21 +03:00
Natalia Selezneva
3e3f8aeb93 Mark importing as complete in case of some unexpected behavior
For example in case when script contains some errors gradleHome might be null
Then build root should be marked as updated
Also notification should be updated
2020-07-14 15:30:20 +03:00
Ilya Goncharov
2c67ab924f [Gradle, JS] this globalObject in webpack
^KT-40159 fixed
2020-07-14 14:42:26 +03:00
Andrei Klunnyi
93a82060d4 KT-39788 MPP, Gradle runner: Run does not add resource directory to classpath // gradle runner support
Before this commit "delegate to Gradle" option was not taken into
consideration. Was it MPP or SPP, KotlinRunConfiguration was always
executed by platform runner (as a default one). The reason behind this
was that there was no dedicated class (extension point) responsible for
Gradle-Kotlin pair. Now its KotlinGradleAppEnvProvider.
2020-07-14 11:24:59 +00:00
Andrei Klunnyi
681c2e9492 KT-39788 MPP, Gradle runner: Run does not add resource directory to classpath // classpath fix
The reason of resource directory absence was that it couldn't be loaded
from the project configuration file. Just after the import it remained
in the memory and runner couldn' get it. KotlinOutputPathsDataService as
a pair to KotlinOutputPaths is what was missing. Details are provided
below.
------------------------------------------------------------------------
On a disk configuration represents a binary file containing serialized
graph of external project structure. It contains nodes belonging to both
IDEA and its plugins.

To deserialize a node IDEA tries to load its class using a chain of
class-loaders: its own and those provided by actual set of plugins.
The nuance is how to get plugins' ones. The approach is the following.
There is an association between a node's payload and a service which is
supposed to consume it see KotlinOutputPathsDataService#getTargetDataKey
and DataNode#getKey). Plugin services are guaranteed to be loaded by
plugin class loader.
No association - service - no plugin, node was just skipped.
------------------------------------------------------------------------
2020-07-14 11:24:58 +00:00
Ilya Muradyan
07b566dd02 Add @JvmDefault for getPossibleSyntheticNestedClassNames 2020-07-14 14:17:58 +03:00
Zalim Bashorov
340512e27a [KJS] Throw exception on recursive types provided to typeOf and provide proper support later within KT-40173
#KT-38140 fixed
2020-07-14 14:14:13 +03:00
Zalim Bashorov
c552933459 [Test infra] Take into account transitive compatible targets while checking compatibility. 2020-07-14 14:14:12 +03:00
Zalim Bashorov
ca37c6bfe6 [KJS FE] Allow using typeOf with non-reified type parameters
#KT-38771 fixed
2020-07-14 14:14:11 +03:00
Ilya Goncharov
9d362875da [Gradle, JS] Fail build in case when mpp or js targets not configured
^KT-40210 fixed
^KT-40300 fixed
2020-07-14 13:59:00 +03:00
Sergey Igushkin
62aed1b53a Add kotlin.stdlib.default.dependency=false to avoid stdlib default dep 2020-07-14 14:47:40 +04:00
Sergey Igushkin
ad9d011ed0 Fix stdlib default dependencies with Android
* In Android test-related source sets, add an implementation dependency,
  not an api one, because adding dependencies to the api configurations
  leads to warnings from AGP

* Add the default stdlib dependency only to the Android main source set,
  as duplicating it elsewhere leads to issue with publishing the project
  with the `maven` plugin (duplicate conf2ScopeMappings)
2020-07-14 14:47:16 +04:00
Sergey Igushkin
d83d3304a5 KT-38221: Stdlib by default; KT-40225 Single dependency on kotlin-test
* Add a DSL property `kotlin.coreLibrariesVersion` that is used as the
  default version for all org.jetbrains.kotlin dependencies instead of
  the plugin version used previously – the pluging version is the
  default now.

* Support omitting the `kotlin-stdlib-*` dependencies in all kinds of
  projects. For the JVM source sets, choose the stdlib module by
  checking the jvmTarget in the compilations – if all compilations
  target 8+ then use `kotlin-stdlib-jdk8`.

* Support adding a single dependency on the fake module
  `kotlin-test-multiplatform` that is later expanded into the
  appropriate dependencies on `kotlin-test-*` modules. For JVM source
  sets, detect the test framework by inspecting the test tasks.

* (minor) Fix _executionSource not updated in KotlinJvmTestRun

* (minor) Lazily query `kotlinUsageContext`'s dependency-related
  properties to avoid freezing the configurations

Issue #KT-38221 Fixed
Issue #KT-40225 Fixed
2020-07-14 14:47:13 +04:00
Ilya Goncharov
49c8d99f61 [Gradle, JS] Resolution of compilation's configurations inside NPM conf
^KT-40201 fixed
2020-07-14 13:13:45 +03:00
Ilya Goncharov
40311dbe05 [Gradle, JS] Fix test on public package json with dependencies
^KT-40201 fixed
2020-07-14 13:13:35 +03:00
Ilya Goncharov
c5f89ebc0d [Gradle, JS] Add dev dependencies into public package json
^KT-40201 fixed
2020-07-14 13:13:18 +03:00
Mikhail Zarechenskiy
bb23556ead Don't perform Unit-conversion for functional types with type variables
#KT-40269 Fixed
2020-07-14 13:05:28 +03:00
Mikhail Zarechenskiy
09b44b3189 Fix rewrite at slice exception for callable references inside flatMap
#KT-40254 Fixed
2020-07-14 13:05:28 +03:00
Andrei Klunnyi
1e4c554bcd KT-32368 Rework Inline hints settings // compatibility with earlier IDEA versions 2020-07-14 10:03:51 +00:00
Andrei Klunnyi
604e270a73 KT-32368 Rework Inline hints settings // preview text 2020-07-14 10:03:50 +00:00
Andrei Klunnyi
7a69cf587e KT-32368 Rework Inline hints settings // HintType cleanup 2020-07-14 10:03:50 +00:00
Andrei Klunnyi
d6692a8062 KT-32368 Rework Inline hints settings // flattern parameter name hints menu 2020-07-14 10:03:49 +00:00
Andrei Klunnyi
be0cde1d70 KT-32368 Rework Inline hints settings // remove suspending call hints
Suspending call hints were removed according to KT-30928 and KT-39271.
2020-07-14 10:03:48 +00:00
Andrei Klunnyi
49d4f55c87 KT-32368 Rework Inline hints settings // special case for lambda hints
Lambda hints are placed at the end of a line in such a way that user
can't move the caret behind it. Unfortunately, hint provision
infrastructure doesn't take this detail into account.
As a workaround, KotlinLambdasHintsProvider now returns an empty result
(sink) to the outer infrastructure and accesses editor's inlay model
itself.
2020-07-14 10:03:48 +00:00
Andrei Klunnyi
d1722e3975 KT-32368 Rework Inline hints settings // migrate tests for types
KotlinReferencesTypeHintsProvider which in now responsible for
type hints is not compatible with the existing
InlayTypeHintsTest. Because of that tests were migrated to the new
infrastructure.
2020-07-14 10:03:47 +00:00
Andrei Klunnyi
36f3431559 KT-32368 Rework Inline hints settings // migrate tests for suspending calls
KotlinSuspendingCallHintsProvider which in now responsible for
suspending call hints is not compatible with the existing
SuspendingCallHintsTest. Because of that tests were migrated to the new
infrastructure.
2020-07-14 10:03:47 +00:00
Andrei Klunnyi
b0dece756a KT-32368 Rework Inline hints settings // migrate tests for lambdas
KotlinLambdasHintsProvider which in now responsible for lambda related
hints is not compatible with the existing LambdaReturnValueHintsTest.
Because of that tests were migrated to the new infrastructure.
2020-07-14 10:03:46 +00:00
Andrei Klunnyi
5fe1eaea17 KT-32368 Rework Inline hints settings // remove outdated KotlinCodeHintsPass
Some time ago platform couldn't place hints at the end of a line.
This is how KotlinCodeHintsPass appeared. Class was responsible for
lambda related hints. Now that platform evolved functionality was moved
to KotlinLambdasHintsProvider.
2020-07-14 10:03:45 +00:00
Andrei Klunnyi
533507de25 KT-32368 Rework Inline hints settings // split KotlinInlayParameterHintsProvider
Platform supports 2 interfaces for inlay hints providers:
- InlayParameterHintsProvider [1]
- InlayHintsProvider [2]

KotlinInlayParameterHintsProvider as an implementation of (1) and a
source of "Inlay Hints" menu has the following limitations:
- Platform treats component as a source of "Parameter hints" submenu
that cannot be split. Once can only add or remove its nested checkboxes.
- Only a single instance of (1) can be defined.

To have a separate menu items for "Inlay Hints" existing
KotlinInlayParameterHintsProvider was split. New providers
implementing (2) were extracted from it:
- KotlinReferencesTypeHintsProvider
- KotlinSuspendingCallHintsProvider
- KotlinLambdasHintsProvider

TODO: HintType move as a separate commit
2020-07-14 10:03:45 +00:00
Sergey Igushkin
5ec93fd74c Fixup for the fix of KT-39809
In the original fix for KT-39809, the Kapt plugin was not given a proper
empty implementation stub: it was added to `Kapt3GradleSubplugin`, while
originally the Kapt subplugin's META-INF/services entry pointed to
`Kapt3KotlinGradleSubplugin`.

This commit makes the correct class implement the legacy interface.

Issue #KT-39809 Fixed
2020-07-14 13:09:26 +04:00
Sergey Igushkin
4c273e1fc5 Fix resolving dependency on self in HMPP (KT-39037)
Apply a workaround for grade/gradle#13680

Issue #KT-39037 Fixed
2020-07-14 13:09:24 +04:00
Sergey Igushkin
aebca19fd7 Fix resolving an MPP dependency in custom configurations (KT-32239)
In the `KotlinPlatformType` disambiguation rule, don't prefer `common`
when there's a `jvm` or an `androidJvm` variant, as this would conflict
with disambiguation rules created by the other plugins, such as Gradle's
`java` which will choose `org.gradle.usage=java-api` and lead to
ambiguity.

Issue #KT-32239 Fixed
2020-07-14 13:09:22 +04:00
Mikhail Zarechenskiy
8158ba2be3 Add tests for obsolete issues
#KT-32183 Obsolete
 #KT-31474 Obsolete
 #KT-31853 Obsolete
2020-07-14 11:23:57 +03:00
Ilya Matveev
19dc3f071c Gradle, native: Enable assertions for in process compiler execution
Issue #KT-39764 fixed
2020-07-14 08:18:00 +00:00
vladislavf7@gmail.com
275ce16faa [FIR] add RedundantReturnUnitTypeChecker 2020-07-14 10:05:28 +03:00
Dmitry Savvinov
5c88b1e80a Allow depending on Native stdlib even if platforms do not match under HMPP
^KT-40102
2020-07-14 12:49:59 +07:00
Dmitry Savvinov
21026001db Add logging into ideaModelDependencies 2020-07-14 12:49:59 +07:00
Ilya Gorbunov
010e530ac4 Make common KClass extend common KClassifier
It already does that in all platforms.
Add KClass common API test.
2020-07-13 23:20:52 +03:00
Florian Kistner
1878ae8222 Don't apply copyright notice to Kotlin Ultimate
* Previous attempt apparently no longer effective
* Cover a few additional strangling files
2020-07-13 19:42:04 +02:00
Florian Kistner
ce39b75cc8 Don't apply copyright notice to Kotlin Ultimate
* Previous attempt apparently no longer effective
2020-07-13 19:37:38 +02:00
Ilya Goncharov
bbb3032e1c [Gradle, JS] Rename package-candidate.json to pre-package.json
^KT-39515 fixed
2020-07-13 19:32:29 +03:00
Ilya Goncharov
6a0315fe7a [Gradle, JS] force write package json in all cases
^KT-39515 fixed
2020-07-13 19:32:29 +03:00
Ilya Goncharov
b4a774e821 [Gradle, JS] Use package.json candidate
^KT-39515 fixed
2020-07-13 19:32:29 +03:00
Ilya Goncharov
8586d5e206 [Gradle, JS] Small refactoring of yarn imported
^KT-39515 fixed
2020-07-13 19:32:28 +03:00
Konstantin Tskhovrebov
cfd91023be Add native targets check to "isAllowCommonizer" method.
#KT-40164 Fixed.
2020-07-13 19:31:08 +03:00
Ilya Goncharov
797449f7e4 [Gradle, JS] Add TC client on TC output handler for browser run task
^KT-40178 fixed
2020-07-13 19:25:04 +03:00
Nikolay Krasko
943d012875 Fix comparison for SdkAndMockLibraryProjectDescriptor
There's no known problems connected with this change, but wrong
comparison might cause tests flakiness.

`allowKotlinPackage` and `classpath` fields were not included.
2020-07-13 17:58:04 +03:00
Nikolay Krasko
0db7806dec Use test classpath for annotations.jar search
Got unstable behaviour in 202 test because of setting
idea.home.path during the compiler execution.
2020-07-13 17:58:03 +03:00
Yaroslav Chernyshev
07e3dd9ec7 [Gradle, Cocoapods] Fixed bug in scheme name for pods 2020-07-13 16:37:37 +03:00
Nick
67e58ff152 [FIR] Fix redundant calls to firEffectiveVisibility() 2020-07-13 16:30:47 +03:00
Alexander Udalov
5340cf5567 Add property kotlin.build.useIR to enable JVM IR in Kotlin build
Right now this is only supposed to be turned on locally (`./gradlew
-Pkotlin.build.useIR=true ...`), to be able to quickly try how JVM
IR-compiled Kotlin compiler works.
2020-07-13 14:38:22 +02:00
Alexander Udalov
9c36c74357 Build: do not pass JVM compiler arguments to common KotlinCompile 2020-07-13 14:38:22 +02:00
Kristoffer Andersen
8d79a6ae03 [JVM IR] Copy inline class constructor annotations 2020-07-13 11:50:34 +03:00
Mikhail Zarechenskiy
678b76cab1 Fix presence of Deprecated hidden annotation for reference arguments
#KT-40234 Fixed
2020-07-13 11:23:28 +03:00
Ilya Matveev
c2e0cd60d7 Gradle tests: Temporary disable NativePlatformLibsIT for Windows
This test causes a build timeouts on CI which cannot be reproduced
locally. So we disable them to not block the testing process until
a proper fix is found.
2020-07-13 07:48:35 +00:00
Dmitry Savvinov
3ef760604b Force expansion to have the same nullability as abbreviation
Note that classifier.underlyingType is always non-nullable, but
abbreviation might be nullable, so we should keep them consistent

^KT-40199 Fixed
2020-07-13 11:50:10 +07:00
Dmitry Savvinov
8890ae10d4 Add test on signatures with nullable abbreviated types
Currently test fails, see KT-40199
2020-07-13 11:50:10 +07:00
Natalia Selezneva
e0bc54cd82 gradle.kts: update notification messages after proofreading 2020-07-12 22:37:45 +03:00
Mikhail Glukhikh
8005df42fb [FIR] Make redundant visibility modifier a warning 2020-07-11 10:45:33 +03:00
Mikhail Glukhikh
5276903bea Fix code style: DeclarationCheckersDiagnosticComponent 2020-07-11 10:45:33 +03:00
Mikhail Glukhikh
aee49c3fde [FIR TEST] Add forgotten txt-file for redundant visibility checker test 2020-07-11 10:45:32 +03:00
vladislavf7@gmail.com
be684c784f [FIR] Introduce extended checkers for inspection-like diagnostics 2020-07-11 10:45:32 +03:00
vladislavf7@gmail.com
4643d483a0 [FIR] Introduce RedundantVisibilityModifierChecker 2020-07-11 10:45:10 +03:00
Ilya Muradyan
510ac66ce1 Fix tests generation after upgrading Gradle to 6.5 2020-07-10 22:07:10 +03:00
Ilya Gorbunov
dd47962ad0 Extract current Kotlin version value into a separate class
In order to selectively ignore it during classpath normalization,
and do not recompile all the dependencies when just the version value
changes.
2020-07-10 19:12:07 +03:00
Nikolay Krasko
cb513b9a70 202: Fix KotlinUastReferencesTest 2020-07-10 19:09:27 +03:00
Ilya Gorbunov
20683d62a6 Postpone introducing common StringBuilder.capacity() function
Its support complicates JS StringBuilder implementation with no actual
performance improvements. Benefits of having capacity() function
in common code are also not completely clear.

Relates to KT-33069
#KT-40168
2020-07-10 18:49:39 +03:00
Steven Schäfer
097e0fb46c JVM IR: Mangle delegated properties with inline class type (KT-40125) 2020-07-10 17:06:44 +02:00
Sergey Rostov
e48d2b9b83 ScriptTemplatesClassRootsIndex: inc version and minor fixes
Content was changed, so we should force reindex.

Minor changes:
- There is no need to save a string, we can just save nothing
 by using the Unit value (see UnitKey.save and UnitKey.read)
- Unit can be shared between all indexes, so we can extract UnitKey object
- It would be good to extract abstract class FileListIndex:
  - for better readability: separate the logic of the specific index from the common FileListIndex implementation
  - someone can use it also
- mapOf (Unit to null) will create singletonMap itself and more readable
- ScriptTemplatesClassRootsIndex.KEY perhaps better to call NAME
2020-07-10 18:01:38 +03:00
Sergey Rostov
1f52c0e0d4 gradle.kts: improve service initializtion
- prevent analyzing .gradle.kts files until all services are loaded
- remove services caches where it is not required
- replace cached services with cache only during vfs events batch processing
- prevent services loading in actions updating
2020-07-10 17:47:10 +03:00
Georgy Bronnikov
a97d718de8 IR: remove a KotlinType use from Ir.kt 2020-07-10 17:35:30 +03:00
Georgy Bronnikov
aab95f93f2 JVM_IR: invoke method descriptor for default lambdas 2020-07-10 17:35:29 +03:00
Alexander Udalov
e8c3c70369 IR: make IrDeclarationWithVisibility.visibility mutable
It was mutable anyway in many subclasses. This is needed in order to
avoid depending on concrete IR implementations in the JVM IR backend
where it's necessary to be able to change visibility.
2020-07-10 16:17:06 +02:00
Alexander Udalov
96f0a8e8e5 IR: minor, inline OverridableMember 2020-07-10 16:17:06 +02:00
Alexander Udalov
e674226a3b IR: do not use Ir*Impl elements where it's not necessary 2020-07-10 16:17:06 +02:00
Alexander Udalov
dbad81473e IR: make IrMetadataSourceOwner.metadata mutable
To avoid casting to specific Ir*Impl elements at call sites.

Also inherit from IrMetadataSourceOwner only where it's needed: class,
file, function, property. Previously this field was always null and took
some space for things like value parameters, type parameters, etc.
2020-07-10 16:17:05 +02:00
simon.ogorodnik
689887c94d [FIR] Fail test if no modules analyzed successfully 2020-07-10 16:25:22 +03:00
Victor Petukhov
cdb122c698 Add skipped ignore directive in test for b08c7eff38 2020-07-10 14:52:51 +03:00
Mikhail Zarechenskiy
0c8b847ae6 Introduce compiler key to disable compatibility resolution mechanism
Enable it if one was using new inferene before 1.4

 #KT-40128 Fixed
 #KT-40112 Fixed
 #KT-40113 Fixed
2020-07-10 14:23:45 +03:00
Mikhail Glukhikh
c1fd891916 [FIR IDE] Fix compilation in asKtSymbolOrigin 2020-07-10 13:02:31 +03:00
Ilya Goncharov
644c5a941b [Gradle, JS] Add task on webpack-compile sync
^KT-40087 fixed

[Gradle, JS] Use runCompileSync only for run

^KT-40087 fixed

[Gradle, JS] Rename type on mode

^KT-40087 fixed

[Gradle, JS] Use explicit names in lambda

^KT-40087 fixed
2020-07-10 12:32:07 +03:00
Anton Bannykh
939f0d0344 [IR] minor: make StageController an open class
This should make creating a new "do nothing" controller more straightforward.
2020-07-10 11:30:42 +03:00
Anton Bannykh
abc6ecaa1c [JS IR BE] support SAM conversions in DCE-driven mode 2020-07-10 11:30:42 +03:00
Anton Bannykh
8fcd73e3cb [JS IR BE] move exceptionState initialization from constructor to coroutine entryState
This fixes the DCE-driven mode. Before this fix the suspend lambda constructor was modified
by the `invoke` body lowering. Which is wrong, becuase the corresponding class was created
by the CallableReferenceLoiwering much earlier.
2020-07-10 11:30:41 +03:00
Anton Bannykh
916a5f367c [IR] simplify Carriers (remove type parameters) 2020-07-10 11:30:41 +03:00
Anton Bannykh
adf5ee394e [JS IR BE] remove unnecesary code from DCE 2020-07-10 11:30:41 +03:00
Victor Petukhov
514ac7dc8f NI: introduce simple calls storage (which aren't gone through type inference) in coroutine inference session to further substitute postponed variable
^KT-40151 Fixed
2020-07-10 11:11:48 +03:00
Kirill Shmakov
3acb4e54d5 Update AS version 2020-07-10 11:06:33 +03:00
Vladimir Ilmov
3e69250f72 (CoroutineDebugger) Restored frame variables isn't shown for 2020.1.
#KT-40172 fixed
2020-07-10 09:57:38 +02:00
Mikhail Glukhikh
fbbf4e06ba [FIR] Support imported callable from object properly #KT-35730 Fixed 2020-07-10 10:25:39 +03:00
Mikhail Glukhikh
6b964cb61d [FIR2IR] Drop explicit receiver double-conversion for objects 2020-07-10 08:56:58 +03:00
Ilya Gorbunov
2f3e1dcbc6 Add EXACTLY_ONCE contract to suspendCoroutine* functions
Update line numbers in the affected test.
2020-07-10 01:05:16 +03:00
Ilya Gorbunov
1a32fdf6d7 Add EXACTLY_ONCE contract to functions that call their lambda parameter once
KT-35972
2020-07-10 01:05:16 +03:00
Ilya Gorbunov
c85432b2f9 Fix typo in kotlinx.dom docs 2020-07-10 01:05:16 +03:00
Ivan Kylchik
c44fd235ce [FIR] Remove isEnumEntry field from FirJavaField
This field isn't used anymore because java enum entry is represented by
FirEnumEntry
2020-07-09 23:49:55 +03:00
Ivan Kylchik
dcae6f1415 [FIR] Support when exhaustiveness for java enum
The problem appear because for java enum its entries was represented by
FirJavaField. To fix this FirEnumEntry was used

#KT-39621 Fixed
2020-07-09 23:49:54 +03:00
Ivan Kylchik
307871a050 [FIR] Unmute fir spec tests
#KT-38397 Fixed
#KT-38334 Fixed
2020-07-09 23:49:39 +03:00
Alexander Udalov
0baa1c8723 IR: remove deprecated constructor of IrClassImpl 2020-07-09 18:51:04 +02:00
Alexander Udalov
e6993e1b88 IR: remove deprecated constructor of IrConstructorImpl 2020-07-09 18:51:04 +02:00
Alexander Udalov
ef94716af5 IR: remove deprecated constructor of IrFieldImpl 2020-07-09 18:51:04 +02:00
Alexander Udalov
7f9ef5e11d IR: remove deprecated constructors of IrFunctionImpl 2020-07-09 18:51:04 +02:00
Alexander Udalov
551f1f85a9 IR: remove secondary constructor of IrModuleFragmentImpl 2020-07-09 18:51:03 +02:00
Alexander Udalov
19ec8646b8 IR: remove convenience factory for IrTypeAliasImpl 2020-07-09 18:51:03 +02:00
Alexander Udalov
fd83596c91 IR: remove deprecated constructor of IrTypeParameterImpl 2020-07-09 18:51:03 +02:00
Alexander Udalov
0691595ed2 IR: remove deprecated constructor of IrValueParameterImpl 2020-07-09 18:51:03 +02:00
Alexander Udalov
bba597cdff IR: remove deprecated constructors of IrVariableImpl 2020-07-09 18:51:02 +02:00
Alexander Udalov
d8a2b92098 IR: remove deprecated constructors of IrPropertyImpl 2020-07-09 18:51:02 +02:00
Vyacheslav Gerasimov
501fea1202 Fix TCServiceMessagesClient compilation against Gradle 6.5
Method `isRoot` doesn't exist anymore in TestDescriptorInternal
2020-07-09 19:31:21 +03:00
Vyacheslav Gerasimov
697bb04d46 Build: Setup jvmTarget 1.6 for several common modules
Some modules depending on them target jvm 1.6 and can't depend on
jvm 1.8 module in Gradle 6.5.
2020-07-09 19:31:20 +03:00
Vyacheslav Gerasimov
b5ee0e8222 Build: Remove jvmTarget 1.6 for several modules depending on 1.8 modules
Module targeting jvm 1.6 can't depend on jvm 8 one. In Gradle 6.5 this
behaviour is enforced by configuration error.
2020-07-09 19:31:20 +03:00
Vyacheslav Gerasimov
1fea01754d Build: Remove jvmTarget = "1.6" for kotlinx-metadata-klib
kotlinx-metadata-klib can't have jvmTarget 1.6 because it embeds module
:compiler:serialization which is compiled with jvmTarget 1.8. It is
enforced by configuration error in Gradle 6.5
2020-07-09 19:31:20 +03:00
Vyacheslav Gerasimov
508036742c Build: Upgrade Gradle to 6.5.1 2020-07-09 19:31:20 +03:00
Ilya Kirillov
39601f99ab Wizard: update ktor version
#KT-40037 fixed
2020-07-09 18:27:43 +03:00
Ilya Kirillov
44334fca11 Wizard: consider RC version as a EAP one
#KT-39871 fixed
2020-07-09 18:27:41 +03:00
Ilya Kirillov
9fde2ac269 Wizard: add kotlinx repo for projects using kotlinx-html
#KT-40004 fixed
2020-07-09 18:27:39 +03:00
Florian Kistner
346df07adc 203: Fix compilation for 203 2020-07-09 15:27:45 +02:00
Florian Kistner
4c4af9971e 203: Bump intellijSdk version for 203 2020-07-09 15:27:45 +02:00
Florian Kistner
202a55cb39 Bump intellijSdk version for 203 2020-07-09 15:27:45 +02:00
Dmitry Gridin
1c4d7c5772 Regenerate test data 2020-07-09 18:37:37 +07:00
Yan Zhulanow
81869b282b Mute failing QuickFixTestGenerated/KotlinSteppingTestGenerated 2020-07-09 19:23:16 +09:00
Ilya Muradyan
2487f9369c Fix REPL completion for import directives 2020-07-09 13:19:04 +03:00
Dmitriy Dolovov
16aee6c8d6 [Commonizer] Lookup descriptors that doesn't participate in commonization
^KT-40119
2020-07-09 16:44:33 +07:00
Dmitriy Dolovov
3af937ea9a [Commonizer] Remove isDefinitelyNotNullType from CirSimpleType 2020-07-09 16:44:32 +07:00
Nikolay Krasko
4d21455e72 Mute testImportAliasMultiDeclarations because of wrong behaviour in headless
Caused by: java.lang.AssertionError: Editor must be showing on the screen
	at com.intellij.ui.popup.AbstractPopup.showInBestPositionFor(AbstractPopup.java:546)
	at com.intellij.codeInsight.navigation.actions.GotoDeclarationOnlyHandler2.gotoDeclaration$intellij_platform_lang_impl(GotoDeclarationOnlyHandler2.kt:74)
	at com.intellij.codeInsight.navigation.actions.GotoDeclarationOrUsageHandler2.invoke(GotoDeclarationOrUsageHandler2.kt:63)
	at com.intellij.codeInsight.actions.CodeInsightAction.lambda$actionPerformedImpl$0(CodeInsightAction.java:57)
	at com.intellij.codeInsight.actions.CodeInsightAction.lambda$actionPerformedImpl$1(CodeInsightAction.java:63)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:177)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:158)
	at com.intellij.codeInsight.actions.CodeInsightAction.actionPerformedImpl(CodeInsightAction.java:54)
	at org.jetbrains.kotlin.idea.navigation.AbstractGotoActionTest.doTest(AbstractGotoActionTest.kt:27)
	at org.jetbrains.kotlin.test.KotlinTestUtils.lambda$testWithCustomIgnoreDirective$6(KotlinTestUtils.java:804)
	at org.jetbrains.kotlin.test.MuteWithFileKt$testWithMuteInFile$1.invoke(muteWithFile.kt:41)
	at org.jetbrains.kotlin.test.KotlinTestUtils.runTestImpl(KotlinTestUtils.java:774)
	at org.jetbrains.kotlin.test.KotlinTestUtils.runTest(KotlinTestUtils.java:716)
	at org.jetbrains.kotlin.idea.navigation.GotoDeclarationTestGenerated.runTest(GotoDeclarationTestGenerated.java:24)
	at org.jetbrains.kotlin.idea.navigation.GotoDeclarationTestGenerated.testImportAliasMultiDeclarations(GotoDeclarationTestGenerated.java:38)
2020-07-09 12:43:11 +03:00
Nikolay Krasko
593fd646b1 Add mute-platform.csv.202 2020-07-09 12:43:10 +03:00
Roman Artemev
ca44242f37 [IR] Fix synthetic declarations generator to make it produce correct type
- Fix KT-40126
 - Add test
2020-07-09 11:47:07 +03:00
Igor Chevdar
d8f5b50cd8 [native-gradle-plugin] Respected changed cache format 2020-07-09 12:33:59 +05:00
Igor Chevdar
79af726872 [native-gradle-plugin] Fixed problem with rebuilding caches 2020-07-09 12:33:59 +05:00
Anton Yalyshev
bc979a33f7 Enable FUS for Code Completion in 1.4.0 2020-07-09 10:20:18 +03:00
Dmitriy Dolovov
d3e858645f [Commonizer] Remove CirTypeSignature from CirType 2020-07-09 10:08:13 +07:00
Dmitriy Dolovov
4ab5bfef22 [Commonizer] Preserve order of supertypes in commonized class 2020-07-09 10:08:06 +07:00
Dmitriy Dolovov
5e383e9d71 [Commonizer] Narrow CirClassifierId subtype cast in AnnotationsCommonizer 2020-07-09 10:07:59 +07:00
Dmitriy Dolovov
7a283c64cb [Commonizer] Minor. Reorder type params for CirNode 2020-07-09 10:07:52 +07:00
Andrey Uskov
c37f339d8c Send use-ir and jvmDefaults compiler arguments from IDE
Relates to KT-39924 and KT-39977
2020-07-08 20:39:44 +03:00
Andrey Uskov
550c53c2ac Report jvm-default compiler arguments from Gradle
#KT-39977 Fixed
2020-07-08 20:39:33 +03:00
Andrey Uskov
e3a5df1aaa Report use-ir flag from Gradle
#KT-39924 Fixed
2020-07-08 20:39:14 +03:00
Leonid Startsev
340deb01dd Add 'Incorrect Transient' diagnostic
when users write @Transient, they get @kotlin.jvm.Transient, because it's always in auto-import.
This annotation does not work with @Serializable classes; @kotlinx.serialization.Transient should be used instead.

Add quickfix for 'incorrect transient' diagnostic:
'Import kotlinx.serialization.Transient'
2020-07-08 20:17:11 +03:00
Leonid Startsev
6ef597a4ee Split ContextualSerialization annotation in two 2020-07-08 20:15:56 +03:00
Natalia Selezneva
3d91c410e7 *.gradle.kts: include project sources in script dependencies sources scope
^KT-39523 Fixed
2020-07-08 18:30:02 +03:00
Natalia Selezneva
93d7015139 Remove old roots from KotlinScriptDependenciesCLassFinder
Otherwise it may produce an exception that some invalid roots are returned by ScriptClassRootsCache
2020-07-08 18:30:01 +03:00
Natalia Selezneva
8bb3c0796d Add original errors into the IllegalStateException from import of build script models
This exception is needed to finish gradle import and avoid importing other models into IDE
In most cases this exception is repoted together with Gradle exception from import,
but as soon as it it visible in UI we add some clarification which errors are happened
2020-07-08 18:28:08 +03:00
Jinseong Jeon
3afc37438e FIR: handle getClassCall with integer literals 2020-07-08 18:23:27 +03:00
Vladimir Ilmov
7f472ba24e Switch to isApplicableAsync instead of isApplicable in ToStringRenderer
#KT-39717 fixed
2020-07-08 16:15:46 +02:00
Ilya Goncharov
3d9353f7f5 [Gradle, JS] Add test on dependencies clash
^KT-40093 fixed
2020-07-08 16:10:46 +03:00
Ilya Goncharov
2e2a5a0156 [Gradle, JS] Update version in package.json with file dependency
^KT-40093 fixed
2020-07-08 16:10:39 +03:00
Mikhail Zarechenskiy
2bb9838a80 Add test for obsolete issue
The problem was fixed in d51bb2c053

 #KT-37692 Obsolete
2020-07-08 15:30:20 +03:00
Yunir Salimzyanov
78a4563baf Update versions of database files to correctly sync muted tests
Cause: bunch files were updated to 201
2020-07-08 14:57:07 +03:00
Lilia
53b2fe9fd8 Add changelog for 1.4-M3 & 1.3.72 plugins update 2020-07-08 13:26:51 +02:00
Toshiaki Kameyama
d2deff4864 Add "Replace with 'equals(..., ignoreCase = true)'" inspection
#KT-40016 Fixed
2020-07-08 12:38:30 +02:00
Dmitriy Novozhilov
a5bfa3ae63 [FIR-TEST] Update broken testdata 2020-07-08 12:13:33 +03:00
Dmitriy Novozhilov
86791f1fef [FIR] Fix parsing fun modifier for interfaces in light-tree2fir 2020-07-08 12:13:32 +03:00
Dmitriy Novozhilov
58af8d68a1 [FIR] Check for isFun flag in SAM resolution 2020-07-08 12:13:32 +03:00
Dmitriy Novozhilov
d1cb776e29 [FIR] Assume all java interfaces are fun interfaces 2020-07-08 12:13:32 +03:00
Dmitriy Novozhilov
a3a79e4295 [FIR] Update testdata due to incorrect SAM detection 2020-07-08 12:13:32 +03:00
Dmitriy Novozhilov
29849b1330 [FIR] Resolve rhs of += in dependent context 2020-07-08 12:13:31 +03:00
Vladimir Dolzhenko
943b59b5d8 Do not provide idea.platform.prefix in run configurations for IJ Ultimate 201+ 2020-07-08 10:26:18 +02:00
Alexander Dudinsky
38535c4fe1 New type of task - TestAggregation task
You can configure smoke test suites and get critical test results faster
This doesn't replace rr/* builds, but complements them for a faster round trip.

Also test tasks and patterns were added for KMM team.
 #KMM-265
2020-07-08 11:23:03 +03:00
Sergey Rostov
ebc4910834 ScriptTemplatesClassRootsIndex: inc version and minor fixes
Content was changed, so we should force reindex.
2020-07-08 11:03:25 +03:00
10902 changed files with 329500 additions and 107251 deletions

5
.bunch
View File

@@ -2,7 +2,6 @@
202
203_202
193
192_193
as36_192_193
as40_193
as41
as41
as42_202

3
.gitignore vendored
View File

@@ -59,3 +59,6 @@ node_modules/
.rpt2_cache/
libraries/tools/kotlin-test-js-runner/lib/
local.properties
buildSrcTmp/
distTmp/
outTmp/

View File

@@ -10,7 +10,10 @@
<w>kapt</w>
<w>kotlinc</w>
<w>mutators</w>
<w>parcelable</w>
<w>parceler</w>
<w>parcelers</w>
<w>parcelize</w>
<w>repl</w>
<w>testdata</w>
<w>uast</w>

20
.idea/runConfigurations/Test__KMM.xml generated Normal file
View File

@@ -0,0 +1,20 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Test: KMM" type="GradleRunConfiguration" factoryName="Gradle">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="kmmTest" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<method v="2" />
</configuration>
</component>

View File

@@ -1,3 +1,3 @@
<component name="DependencyValidationManager">
<scope name="Apply copyright" pattern="!file[*]:*//testData//*&amp;&amp;!file[*]:testData//*&amp;&amp;!file[*]:*.gradle.kts&amp;&amp;!file[*]:*.gradle&amp;&amp;!file[kotlin.kotlin-ultimate]:*/&amp;&amp;!file[kotlin.kotlin-ultimate.*]:*/&amp;&amp;!file[kotlin.libraries]:stdlib/api//*" />
<scope name="Apply copyright" pattern="!file[*]:*//testData//*&amp;&amp;!file[*]:testData//*&amp;&amp;!file[*]:*.gradle.kts&amp;&amp;!file[*]:*.gradle&amp;&amp;!file[group:kotlin-ultimate]:*/&amp;&amp;!file[kotlin.libraries]:stdlib/api//*" />
</component>

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,16 @@ Welcome to [Kotlin](https://kotlinlang.org/)! Some handy links:
* [Public Slack channel](https://slack.kotlinlang.org/)
* [TeamCity CI build](https://teamcity.jetbrains.com/project.html?tab=projectOverview&projectId=Kotlin)
## Kotlin Multiplatform capabilities
Support for multiplatform programming is one of Kotlins key benefits. It reduces time spent writing and maintaining the same code for [different platforms](https://kotlinlang.org/docs/reference/mpp-supported-platforms.html) while retaining the flexibility and benefits of native programming.
* [Kotlin Multiplatform Mobile](https://kotlinlang.org/lp/mobile/) for sharing code between Android and iOS
* [Getting Started with Kotlin Multiplatform Mobile Guide](https://kotlinlang.org/docs/mobile/create-first-app.html)
* [Kotlin Multiplatform Benefits](https://kotlinlang.org/docs/reference/multiplatform.html)
* [Share code on all platforms](https://kotlinlang.org/docs/reference/mpp-share-on-platforms.html#share-code-on-all-platforms)
* [Share code on similar platforms](https://kotlinlang.org/docs/reference/mpp-share-on-platforms.html#share-code-on-similar-platforms)
## Editing Kotlin
* [Kotlin IntelliJ IDEA Plugin](https://kotlinlang.org/docs/tutorials/getting-started.html)
@@ -86,6 +96,8 @@ command line parameters on the first run:
- `compilerTest` - build and run all compiler tests
- `ideaPluginTest` - build and run all IDEA plugin tests
To reproduce TeamCity build use `-Pteamcity=true` flag. Local builds don't run proguard and have jar compression disabled by default.
**OPTIONAL:** Some artifacts, mainly Maven plugin ones, are built separately with Maven.
Refer to [libraries/ReadMe.md](libraries/ReadMe.md) for details.

View File

@@ -8,10 +8,8 @@ buildscript {
val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true
if (cacheRedirectorEnabled) {
maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlinx")
maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev")
} else {
maven("https://dl.bintray.com/kotlin/kotlinx")
maven("https://dl.bintray.com/kotlin/kotlin-dev")
}
}
dependencies {
@@ -30,16 +28,15 @@ repositories {
val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true
if (cacheRedirectorEnabled) {
maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlinx")
maven("https://cache-redirector.jetbrains.com/dl.bintray.com/kotlin/kotlin-dev")
} else {
} else {
maven("https://dl.bintray.com/kotlin/kotlinx")
maven("https://dl.bintray.com/kotlin/kotlin-dev")
}
}
dependencies {
compile(kotlinStdlib())
compile(project(":compiler:frontend"))
compile(projectTests(":compiler:tests-common"))
compile(project(":compiler:cli"))
compile(intellijCoreDep()) { includeJars("intellij-core") }
compile(jpsStandalone()) { includeJars("jps-model") }
@@ -73,6 +70,7 @@ benchmark {
param("size", 1000)
include("CommonCallsBenchmark")
include("ControlFlowAnalysisBenchmark")
//include("InferenceBaselineCallsBenchmark")
}
@@ -95,3 +93,52 @@ benchmark {
register("main")
}
}
tasks.named("classes") {
doLast {
tasks.named("mainBenchmarkJar", Zip::class.java) {
isZip64 = true
archiveName = "benchmarks.jar"
}
listOf("mainBenchmark", "mainFirBenchmark", "mainNiBenchmark").forEach {
tasks.named(it, JavaExec::class.java) {
systemProperty("idea.home.path", intellijRootDir().canonicalPath)
}
}
}
}
tasks.register<JavaExec>("runBenchmark") {
// jmhArgs example: -PjmhArgs='CommonCalls -p size=500 -p isIR=true -p useNI=true -f 1'
val jmhArgs = if (project.hasProperty("jmhArgs")) project.property("jmhArgs").toString() else ""
val resultFilePath = "$buildDir/benchmarks/jmh-result.json"
val ideaHome = intellijRootDir().canonicalPath
val benchmarkJarPath = "$buildDir/benchmarks/main/jars/benchmarks.jar"
args = mutableListOf("-Didea.home.path=$ideaHome", benchmarkJarPath, "-rf", "json", "-rff", resultFilePath) + jmhArgs.split("\\s".toRegex())
main = "-jar"
doLast {
if (project.kotlinBuildProperties.isTeamcityBuild) {
val jsonArray = com.google.gson.JsonParser.parseString(File(resultFilePath).readText()).asJsonArray
jsonArray.forEach {
val benchmark = it.asJsonObject
// remove unnecessary name parts from string like this "org.jetbrains.kotlin.benchmarks.CommonCallsBenchmark.benchmark"
val name = benchmark["benchmark"].asString.removeSuffix(".benchmark").let {
val indexOfLastDot = it.indexOfLast { it == '.' }
it.removeRange(0..indexOfLastDot)
}
val params = benchmark["params"].asJsonObject
val isIR = if (params.has("isIR")) params["isIR"].asString else "false"
val useNI = if (params.has("useNI")) params["useNI"].asString else "false"
val size = params["size"].asString
val score = "%.3f".format(benchmark["primaryMetric"].asJsonObject["score"].asString.toFloat())
val irPostfix = if (isIR.toBoolean()) " isIR=true" else ""
val niPostfix = if (useNI.toBoolean() && !isIR.toBoolean()) " isNI=true" else ""
println("""##teamcity[buildStatisticValue key='$name size=$size${irPostfix}$niPostfix' value='$score']""")
}
}
}
}

View File

@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.benchmarks
import com.intellij.openapi.Disposable
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.CharsetToolkit
import com.intellij.psi.PsiElementFinder
@@ -13,7 +12,6 @@ import com.intellij.psi.PsiFileFactory
import com.intellij.psi.impl.PsiFileFactoryImpl
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.testFramework.LightVirtualFile
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
@@ -26,21 +24,15 @@ import org.jetbrains.kotlin.context.withModule
import org.jetbrains.kotlin.context.withProject
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.java.FirJavaModuleBasedSession
import org.jetbrains.kotlin.fir.java.FirLibrarySession
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.createSession
import org.jetbrains.kotlin.fir.java.FirJavaElementFinder
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.storage.ExceptionTracker
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.StorageManager
@@ -111,9 +103,7 @@ abstract class AbstractSimpleFileBenchmark {
)
if (isIR) {
Extensions.getArea(env.project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(env.project).unregisterExtension(JavaElementFinder::class.java)
}
file = createFile(
@@ -170,43 +160,10 @@ abstract class AbstractSimpleFileBenchmark {
totalTransformer.process(listOf(firFile))
bh.consume(firFile.hashCode())
env.project.extensionArea
.getExtensionPoint<PsiElementFinder>(PsiElementFinder.EP.name)
.unregisterExtension(FirJavaElementFinder::class.java)
}
protected abstract fun buildText(): String
}
fun createSession(
environment: KotlinCoreEnvironment,
sourceScope: GlobalSearchScope,
librariesScope: GlobalSearchScope = GlobalSearchScope.notScope(sourceScope)
): FirSession {
val moduleInfo = FirTestModuleInfo()
val project = environment.project
val provider = FirProjectSessionProvider(project)
return FirJavaModuleBasedSession.create(moduleInfo, provider, sourceScope).also {
createSessionForDependencies(provider, moduleInfo, librariesScope, environment)
}
}
private fun createSessionForDependencies(
provider: FirProjectSessionProvider,
moduleInfo: FirTestModuleInfo,
librariesScope: GlobalSearchScope,
environment: KotlinCoreEnvironment
) {
val dependenciesInfo = FirTestModuleInfo()
moduleInfo.dependencies.add(dependenciesInfo)
FirLibrarySession.create(
dependenciesInfo, provider, librariesScope, environment.project,
environment.createPackagePartProvider(librariesScope)
)
}
class FirTestModuleInfo(
override val name: Name = Name.identifier("TestModule"),
val dependencies: MutableList<ModuleInfo> = mutableListOf(),
override val platform: TargetPlatform = JvmPlatforms.unspecifiedJvmPlatform,
override val analyzerServices: PlatformDependentAnalyzerServices = JvmPlatformAnalyzerServices
) : ModuleInfo {
override fun dependencies(): List<ModuleInfo> = dependencies
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.benchmarks
import org.openjdk.jmh.annotations.*
import org.openjdk.jmh.infra.Blackhole
import java.util.concurrent.TimeUnit
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
open class ControlFlowAnalysisBenchmark : AbstractSimpleFileBenchmark() {
@Param("1000")
private var size: Int = 0
@Benchmark
fun benchmark(bh: Blackhole) {
analyzeGreenFile(bh)
}
override fun buildText() =
buildString {
appendLine("fun test() {")
for (i in 0 until size) {
appendLine("for (i$i in 0..10) { ")
}
for (i in 0 until size) {
appendLine("}")
}
appendLine("}")
}
}

View File

@@ -7,6 +7,7 @@ plugins {
dependencies {
compileOnly(project(":core:util.runtime"))
compileOnly(project(":compiler:backend.common.jvm"))
compileOnly(project(":compiler:util"))
compileOnly(project(":compiler:cli-common"))
compileOnly(project(":compiler:frontend.java"))

View File

@@ -75,7 +75,7 @@ open class IncrementalJsCache(
override fun markDirty(removedAndCompiledSources: Collection<File>) {
removedAndCompiledSources.forEach { sourceFile ->
// The common prefix of all FQN parents has to be the file package
sourceToClassesMap[sourceFile].map { it.parentOrNull()?.asString() ?: "" }.minBy { it.length }?.let {
sourceToClassesMap[sourceFile].map { it.parentOrNull()?.asString() ?: "" }.minByOrNull { it.length }?.let {
packageMetadata.remove(it)
}
}

View File

@@ -168,6 +168,8 @@ open class IncrementalJvmCache(
constantsMap.process(kotlinClass, changesCollector)
inlineFunctionsMap.process(kotlinClass, changesCollector)
}
KotlinClassHeader.Kind.UNKNOWN, KotlinClassHeader.Kind.SYNTHETIC_CLASS -> {
}
}
}

View File

@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.incremental
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.load.java.JavaVisibilities
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.metadata.java.JavaClassProtoBuf
@@ -41,7 +41,7 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
childSerializer: DescriptorSerializer
) {
super.serializeClass(descriptor, proto, versionRequirementTable, childSerializer)
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
if (descriptor.visibility == JavaDescriptorVisibilities.PACKAGE_VISIBILITY) {
proto.setExtension(JavaClassProtoBuf.isPackagePrivateClass, true)
}
}
@@ -50,7 +50,7 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
proto: ProtoBuf.Constructor.Builder,
childSerializer: DescriptorSerializer) {
super.serializeConstructor(descriptor, proto, childSerializer)
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
if (descriptor.visibility == JavaDescriptorVisibilities.PACKAGE_VISIBILITY) {
proto.setExtension(JavaClassProtoBuf.isPackagePrivateConstructor, true)
}
}
@@ -62,7 +62,7 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
childSerializer: DescriptorSerializer
) {
super.serializeFunction(descriptor, proto, versionRequirementTable, childSerializer)
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
if (descriptor.visibility == JavaDescriptorVisibilities.PACKAGE_VISIBILITY) {
proto.setExtension(JavaClassProtoBuf.isPackagePrivateMethod, true)
}
@@ -78,7 +78,7 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri
childSerializer: DescriptorSerializer
) {
super.serializeProperty(descriptor, proto, versionRequirementTable, childSerializer)
if (descriptor.visibility == JavaVisibilities.PACKAGE_VISIBILITY) {
if (descriptor.visibility == JavaDescriptorVisibilities.PACKAGE_VISIBILITY) {
proto.setExtension(JavaClassProtoBuf.isPackagePrivateField, true)
}

View File

@@ -23,12 +23,12 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import java.io.File
class LocalFileKotlinClass private constructor(
private val file: File,
private val fileContents: ByteArray,
className: ClassId,
classVersion: Int,
classHeader: KotlinClassHeader,
innerClasses: InnerClassesInfo
private val file: File,
private val fileContents: ByteArray,
className: ClassId,
classVersion: Int,
classHeader: KotlinClassHeader,
innerClasses: InnerClassesInfo
) : FileBasedKotlinClass(className, classVersion, classHeader, innerClasses) {
companion object {

View File

@@ -80,7 +80,7 @@ open class LookupStorage(
for (lookupSymbol in lookups.keySet().sorted()) {
val key = LookupSymbolKey(lookupSymbol.name, lookupSymbol.scope)
val paths = lookups[lookupSymbol]!!
val paths = lookups[lookupSymbol]
val fileIds = paths.mapTo(TreeSet()) { pathToId[it]!! }
fileIds.addAll(lookupMap[key] ?: emptySet())
lookupMap[key] = fileIds

View File

@@ -14,6 +14,8 @@
* limitations under the License.
*/
@file:Suppress("UNUSED_PARAMETER")
package org.jetbrains.kotlin.incremental
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf

View File

@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.incremental
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.incremental.ProtoCompareGenerated.ProtoBufClassKind
import org.jetbrains.kotlin.incremental.ProtoCompareGenerated.ProtoBufPackageKind
import org.jetbrains.kotlin.incremental.storage.ProtoMapValue
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.protobuf.MessageLite
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
import org.jetbrains.kotlin.serialization.deserialization.descriptorVisibility
import java.util.*
data class Difference(
@@ -49,8 +50,8 @@ fun ProtoMapValue.toProtoData(packageFqName: FqName): ProtoData =
}
internal val MessageLite.isPrivate: Boolean
get() = Visibilities.isPrivate(
ProtoEnumFlags.visibility(
get() = DescriptorVisibilities.isPrivate(
ProtoEnumFlags.descriptorVisibility(
when (this) {
is ProtoBuf.Constructor -> Flags.VISIBILITY.get(flags)
is ProtoBuf.Function -> Flags.VISIBILITY.get(flags)
@@ -346,4 +347,4 @@ val ProtoBuf.Class.typeTableOrNull: ProtoBuf.TypeTable?
get() = if (hasTypeTable()) typeTable else null
val ProtoBuf.Package.typeTableOrNull: ProtoBuf.TypeTable?
get() = if (hasTypeTable()) typeTable else null
get() = if (hasTypeTable()) typeTable else null

View File

@@ -17258,6 +17258,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
boolean hasFlags();
@@ -17268,6 +17269,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
int getFlags();
@@ -17463,6 +17465,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
public boolean hasFlags() {
@@ -17475,6 +17478,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
public int getFlags() {
@@ -17894,6 +17898,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
public boolean hasFlags() {
@@ -17906,6 +17911,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
public int getFlags() {
@@ -17918,6 +17924,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
public Builder setFlags(int value) {
@@ -17933,6 +17940,7 @@ public final class DebugProtoBuf {
*hasAnnotations
*Visibility
*isSecondary
*hasNonStableParameterNames
* </pre>
*/
public Builder clearFlags() {
@@ -18307,6 +18315,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
boolean hasFlags();
@@ -18325,6 +18334,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
int getFlags();
@@ -18723,6 +18733,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
public boolean hasFlags() {
@@ -18743,6 +18754,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
public int getFlags() {
@@ -19639,6 +19651,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
public boolean hasFlags() {
@@ -19659,6 +19672,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
public int getFlags() {
@@ -19679,6 +19693,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
public Builder setFlags(int value) {
@@ -19702,6 +19717,7 @@ public final class DebugProtoBuf {
*isExternal
*isSuspend
*isExpect
*hasNonStableParameterNames
* </pre>
*/
public Builder clearFlags() {

View File

@@ -4656,7 +4656,8 @@ public final class DebugJvmProtoBuf {
* <code>extend .org.jetbrains.kotlin.metadata.Class { ... }</code>
*
* <pre>
* isFunctionBodyInInterface: 0 if actual body generated in DefaultImpl, 1 - otherwise (in interface default method)
* first bit: isFunctionBodyInInterface: 0 if actual body generated in DefaultImpl, 1 - otherwise (in interface default method)
* second bit: is all-compatibility mode or not, 1 - yes, 0 - no
* </pre>
*/
public static final

View File

@@ -7,7 +7,7 @@ import proguard.gradle.ProGuardTask
buildscript {
val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true
kotlinBootstrapFrom(BootstrapOption.BintrayBootstrap(kotlinBuildProperties.kotlinBootstrapVersion!!, cacheRedirectorEnabled))
kotlinBootstrapFrom(BootstrapOption.SpaceBootstrap(kotlinBuildProperties.kotlinBootstrapVersion!!, cacheRedirectorEnabled))
repositories {
bootstrapKotlinRepo?.let(::maven)
@@ -27,9 +27,10 @@ buildscript {
dependencies {
bootstrapCompilerClasspath(kotlin("compiler-embeddable", bootstrapKotlinVersion))
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.17")
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.20")
classpath(kotlin("gradle-plugin", bootstrapKotlinVersion))
classpath("org.jetbrains.dokka:dokka-gradle-plugin:0.9.17")
classpath("org.jfrog.buildinfo:build-info-extractor-gradle:4.17.2")
}
}
@@ -177,8 +178,8 @@ extra["versions.org.springframework"] = "4.2.0.RELEASE"
extra["versions.jflex"] = "1.7.0"
extra["versions.markdown"] = "0.1.25"
extra["versions.trove4j"] = "1.0.20181211"
extra["versions.completion-ranking-kotlin"] = "0.1.2"
extra["versions.r8"] = "1.5.70"
extra["versions.completion-ranking-kotlin"] = "0.1.3"
extra["versions.r8"] = "2.0.88"
val immutablesVersion = "0.3.1"
extra["versions.kotlinx-collections-immutable"] = immutablesVersion
extra["versions.kotlinx-collections-immutable-jvm"] = immutablesVersion
@@ -187,12 +188,13 @@ extra["versions.kotlinx-collections-immutable-jvm"] = immutablesVersion
extra["versions.ktor-network"] = "1.0.1"
if (!project.hasProperty("versions.kotlin-native")) {
extra["versions.kotlin-native"] = "1.4-M3-dev-15627"
extra["versions.kotlin-native"] = "1.4.20-dev-16314"
}
val intellijUltimateEnabled by extra(project.kotlinBuildProperties.intellijUltimateEnabled)
val effectSystemEnabled by extra(project.getBooleanProperty("kotlin.compiler.effectSystemEnabled") ?: false)
val newInferenceEnabled by extra(project.getBooleanProperty("kotlin.compiler.newInferenceEnabled") ?: false)
val useJvmIrBackend by extra(project.getBooleanProperty("kotlin.build.useIR") ?: false)
val intellijSeparateSdks = project.getBooleanProperty("intellijSeparateSdks") ?: false
@@ -220,6 +222,8 @@ extra["compilerModules"] = arrayOf(
":compiler:config",
":compiler:config.jvm",
":compiler:container",
":compiler:resolution.common",
":compiler:resolution.common.jvm",
":compiler:resolution",
":compiler:serialization",
":compiler:psi",
@@ -228,6 +232,8 @@ extra["compilerModules"] = arrayOf(
":compiler:frontend.java",
":compiler:cli-common",
":compiler:ir.tree",
":compiler:ir.tree.impl",
":compiler:ir.tree.persistent",
":compiler:ir.psi2ir",
":compiler:ir.backend.common",
":compiler:backend.jvm",
@@ -262,17 +268,22 @@ extra["compilerModules"] = arrayOf(
":kotlin-build-common",
":core:metadata",
":core:metadata.jvm",
":core:deserialization.common",
":core:deserialization.common.jvm",
":core:compiler.common",
":core:compiler.common.jvm",
":compiler:backend.common.jvm",
":core:descriptors",
":core:descriptors.jvm",
":core:descriptors.runtime",
":core:deserialization",
":core:util.runtime",
":core:type-system",
":compiler:fir:cones",
":compiler:fir:resolve",
":compiler:fir:fir-serialization",
":compiler:fir:fir-deserialization",
":compiler:fir:tree",
":compiler:fir:raw-fir:fir-common",
":compiler:fir:raw-fir:raw-fir.common",
":compiler:fir:raw-fir:psi2fir",
":compiler:fir:raw-fir:light-tree2fir",
":compiler:fir:fir2ir",
@@ -280,11 +291,11 @@ extra["compilerModules"] = arrayOf(
":compiler:fir:java",
":compiler:fir:jvm",
":compiler:fir:checkers",
":compiler:fir:entrypoint",
":compiler:fir:analysis-tests"
)
extra["compilerModulesForJps"] = listOf(
":core:type-system",
":kotlin-build-common",
":kotlin-util-io",
":kotlin-util-klib",
@@ -293,6 +304,8 @@ extra["compilerModulesForJps"] = listOf(
":kotlin-compiler-runner",
":daemon-common",
":daemon-common-new",
":core:compiler.common",
":core:compiler.common.jvm",
":core:descriptors",
":core:descriptors.jvm",
":idea:idea-jps-common",
@@ -328,7 +341,8 @@ val gradlePluginProjects = listOf(
":kotlin-allopen",
":kotlin-annotation-processing-gradle",
":kotlin-noarg",
":kotlin-sam-with-receiver"
":kotlin-sam-with-receiver",
":kotlin-parcelize-compiler"
)
apply {
@@ -352,7 +366,7 @@ fun Task.listConfigurationContents(configName: String) {
}
val defaultJvmTarget = "1.8"
val defaultJavaHome = jdkPath(defaultJvmTarget)
val defaultJavaHome = jdkPath(if (Platform[203].orHigher()) "11" else defaultJvmTarget)
val ignoreTestFailures by extra(project.kotlinBuildProperties.ignoreTestFailures)
allprojects {
@@ -405,9 +419,6 @@ allprojects {
val commonCompilerArgs = listOfNotNull(
"-Xopt-in=kotlin.RequiresOptIn",
"-Xread-deserialized-contracts",
"-Xjvm-default=compatibility",
"-Xno-optimized-callable-references",
"-Xno-kotlin-nothing-value-exception",
"-progressive".takeIf { hasProperty("test.progressive.mode") }
)
@@ -419,9 +430,20 @@ allprojects {
}
}
val jvmCompilerArgs = listOf(
"-Xjvm-default=compatibility",
"-Xno-optimized-callable-references",
"-Xno-kotlin-nothing-value-exception",
"-Xnormalize-constructor-calls=enable"
)
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile> {
kotlinOptions {
freeCompilerArgs = commonCompilerArgs + listOf("-Xnormalize-constructor-calls=enable")
freeCompilerArgs = commonCompilerArgs + jvmCompilerArgs
if (useJvmIrBackend) {
useIR = true
}
}
}
@@ -451,6 +473,7 @@ allprojects {
ignore("META-INF/MANIFEST.MF")
ignore("META-INF/compiler.version")
ignore("META-INF/plugin.xml")
ignore("kotlin/KotlinVersionCurrentValue.class")
}
}
@@ -500,6 +523,23 @@ allprojects {
}
apply(from = "$rootDir/gradle/cacheRedirector.gradle.kts")
apply(from = "$rootDir/gradle/testRetry.gradle.kts")
}
}
gradle.buildFinished {
val taskGraph = gradle?.taskGraph
if (taskGraph != null) {
taskGraph.allTasks
.filterIsInstance<SourceTask>()
.filter { it.didWork }
.forEach {
it.source.visit {
if (file.isDirectory && file.listFiles()?.isEmpty() == true) {
logger.warn("Empty source directories may cause build cache misses: " + file.absolutePath)
}
}
}
}
}
@@ -507,9 +547,12 @@ gradle.taskGraph.whenReady {
fun Boolean.toOnOff(): String = if (this) "on" else "off"
val profile = if (isTeamcityBuild) "CI" else "Local"
logger.warn("$profile build profile is active (proguard is ${kotlinBuildProperties.proguard.toOnOff()}" +
", jar compression is ${kotlinBuildProperties.jarCompression.toOnOff()})." +
" Use -Pteamcity=<true|false> to reproduce CI/local build")
val proguardMessage = "proguard is ${kotlinBuildProperties.proguard.toOnOff()}"
val jarCompressionMessage = "jar compression is ${kotlinBuildProperties.jarCompression.toOnOff()}"
val profileMessage = "$profile build profile is active ($proguardMessage, $jarCompressionMessage). " +
"Use -Pteamcity=<true|false> to reproduce CI/local build"
logger.warn("\n\n$profileMessage")
allTasks.filterIsInstance<org.gradle.jvm.tasks.Jar>().forEach { task ->
task.entryCompression = if (kotlinBuildProperties.jarCompression)
@@ -670,9 +713,12 @@ tasks {
dependsOn("scriptingTest")
dependsOn(":kotlin-build-common:test")
dependsOn(":compiler:incremental-compilation-impl:test")
dependsOn(":compiler:incremental-compilation-impl:testJvmICWithJdk11")
dependsOn(":core:descriptors.runtime:test")
dependsOn("jvmCompilerIntegrationTest")
dependsOn(":plugins:parcelize:parcelize-compiler:test")
}
register("toolsTest") {
@@ -708,16 +754,9 @@ tasks {
dependsOn(":jps-plugin:test")
}
register("idea-plugin-main-tests") {
dependsOn("dist")
dependsOn(":idea:test")
}
register("idea-plugin-additional-tests") {
dependsOn("dist")
dependsOn(
":idea:idea-gradle:test",
":idea:idea-gradle-native:test",
":idea:idea-maven:test",
":j2k:test",
":nj2k:test",
@@ -740,17 +779,6 @@ tasks {
}
}
register("idea-plugin-tests") {
dependsOn("dist")
dependsOn(
"idea-plugin-main-tests",
"idea-plugin-additional-tests"
)
if (Ide.IJ()) {
dependsOn("idea-new-project-wizard-tests")
}
}
register("idea-plugin-performance-tests") {
dependsOn("dist")
dependsOn(
@@ -758,19 +786,38 @@ tasks {
)
}
register("idea-fir-plugin-performance-tests") {
dependsOn("dist")
dependsOn(
":idea:idea-fir-performance-tests:ideaFirPerformanceTest"
)
}
register("android-ide-tests") {
dependsOn("dist")
dependsOn(
":plugins:android-extensions-ide:test",
":idea:idea-android:test",
":kotlin-annotation-processing:test"
":kotlin-annotation-processing:test",
":plugins:parcelize:parcelize-ide:test"
)
}
register("plugins-tests") {
dependsOn("dist")
register("ideaPluginTest") {
dependsOn(
"mainIdeTests",
"gradleIdeTest",
"kaptIdeTest",
"miscIdeTests"
)
}
register("mainIdeTests") {
dependsOn(":idea:test")
}
register("miscIdeTests") {
dependsOn(
":kotlin-annotation-processing:test",
":kotlin-allopen-compiler-plugin:test",
":kotlin-noarg-compiler-plugin:test",
":kotlin-sam-with-receiver-compiler-plugin:test",
@@ -778,53 +825,40 @@ tasks {
":kotlin-annotation-processing-gradle:test",
":kotlinx-serialization-compiler-plugin:test",
":kotlinx-serialization-ide-plugin:test",
":idea:jvm-debugger:jvm-debugger-test:test"
)
}
register("ideaPluginTest") {
dependsOn(
"idea-plugin-tests",
":idea:jvm-debugger:jvm-debugger-test:test",
"idea-plugin-additional-tests",
"jps-tests",
"plugins-tests",
"android-ide-tests",
":generators:test"
)
if (Ide.IJ()) {
dependsOn("idea-new-project-wizard-tests")
}
}
register("publishIdeArtifacts") {
idePluginDependency {
dependsOn(
":prepare:ide-plugin-dependencies:android-extensions-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-tests-for-ide:publish",
":prepare:ide-plugin-dependencies:incremental-compilation-impl-tests-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-build-common-tests-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-compiler-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-dist-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-gradle-statistics-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlinx-serialization-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:noarg-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:sam-with-receiver-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:compiler-components-for-jps:publish",
":kotlin-script-runtime:publish",
":kotlin-script-util:publish",
":kotlin-scripting-common:publish",
":kotlin-scripting-jvm:publish",
":kotlin-scripting-compiler:publish",
":kotlin-scripting-compiler-impl:publish",
":kotlin-android-extensions-runtime:publish",
":kotlin-stdlib-common:publish",
":kotlin-stdlib:publish",
":kotlin-stdlib-jdk7:publish",
":kotlin-stdlib-jdk8:publish",
":kotlin-reflect:publish",
":kotlin-main-kts:publish",
":kotlin-stdlib-js:publish",
":kotlin-test:kotlin-test-js:publish"
)
}
register("kaptIdeTest") {
dependsOn(":kotlin-annotation-processing:test")
}
register("gradleIdeTest") {
dependsOn(
":idea:idea-gradle:test",
":idea:idea-gradle-native:test"
)
}
register("kmmTest", AggregateTest::class) {
dependsOn(
":idea:idea-gradle:test",
":idea:test",
":compiler:test",
":js:js.tests:test"
)
if (Ide.IJ193.orHigher())
dependsOn(":kotlin-gradle-plugin-integration-tests:test")
if (Ide.AS40.orHigher())
dependsOn(":kotlin-ultimate:ide:android-studio-native:test")
testPatternFile = file("tests/mpp/kmm-patterns.csv")
}
register("test") {
@@ -844,6 +878,41 @@ tasks {
}
}
}
register("publishIdeArtifacts") {
idePluginDependency {
dependsOn(
":prepare:ide-plugin-dependencies:android-extensions-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-tests-for-ide:publish",
":prepare:ide-plugin-dependencies:incremental-compilation-impl-tests-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-build-common-tests-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-compiler-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-dist-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlin-gradle-statistics-for-ide:publish",
":prepare:ide-plugin-dependencies:kotlinx-serialization-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:noarg-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:sam-with-receiver-compiler-plugin-for-ide:publish",
":prepare:ide-plugin-dependencies:compiler-components-for-jps:publish",
":prepare:ide-plugin-dependencies:parcelize-compiler-plugin-for-ide:publish",
":kotlin-script-runtime:publish",
":kotlin-script-util:publish",
":kotlin-scripting-common:publish",
":kotlin-scripting-jvm:publish",
":kotlin-scripting-compiler:publish",
":kotlin-scripting-compiler-impl:publish",
":kotlin-android-extensions-runtime:publish",
":kotlin-stdlib-common:publish",
":kotlin-stdlib:publish",
":kotlin-stdlib-jdk7:publish",
":kotlin-stdlib-jdk8:publish",
":kotlin-reflect:publish",
":kotlin-main-kts:publish",
":kotlin-stdlib-js:publish",
":kotlin-test:kotlin-test-js:publish"
)
}
}
}
fun CopySpec.setExecutablePermissions() {
@@ -907,7 +976,7 @@ val zipPlugin by task<Zip> {
setExecutablePermissions()
doLast {
logger.lifecycle("Plugin artifacts packed to $archiveFile")
logger.lifecycle("Plugin artifacts packed to ${archiveFile.get()}")
}
}

View File

@@ -5,7 +5,7 @@ buildscript {
val cacheRedirectorEnabled = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true
extra["defaultSnapshotVersion"] = kotlinBuildProperties.defaultSnapshotVersion
kotlinBootstrapFrom(BootstrapOption.BintrayBootstrap(kotlinBuildProperties.kotlinBootstrapVersion!!, cacheRedirectorEnabled))
kotlinBootstrapFrom(BootstrapOption.SpaceBootstrap(kotlinBuildProperties.kotlinBootstrapVersion!!, cacheRedirectorEnabled))
repositories {
if (cacheRedirectorEnabled) {
@@ -22,7 +22,7 @@ buildscript {
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.17")
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.20")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${project.bootstrapKotlinVersion}")
classpath("org.jetbrains.kotlin:kotlin-sam-with-receiver:${project.bootstrapKotlinVersion}")
}
@@ -97,7 +97,7 @@ repositories {
dependencies {
implementation(kotlin("stdlib", embeddedKotlinVersion))
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${project.bootstrapKotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.17")
implementation("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.20")
implementation("com.gradle.publish:plugin-publish-plugin:0.11.0")
implementation("net.rubygrapefruit:native-platform:${property("versions.native-platform")}")
@@ -110,6 +110,8 @@ dependencies {
implementation("org.jetbrains.intellij.deps:asm-all:8.0.1")
implementation("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.5")
implementation("org.gradle:test-retry-gradle-plugin:1.1.9")
}
samWithReceiver {

View File

@@ -1,16 +1,15 @@
@file:Suppress("PropertyName", "HasPlatformType", "UnstableApiUsage")
import org.gradle.internal.os.OperatingSystem
import org.jetbrains.kotlin.gradle.tasks.internal.CleanableStore
import java.io.Closeable
import java.io.OutputStreamWriter
import java.net.URI
import java.text.SimpleDateFormat
import java.util.*
import javax.xml.stream.XMLOutputFactory
import org.jetbrains.kotlin.gradle.tasks.internal.CleanableStore
import java.time.Duration
import java.time.Instant
import java.util.*
import javax.xml.stream.XMLOutputFactory
plugins {
base
@@ -180,6 +179,7 @@ val mergeSources by tasks.creating(Jar::class.java) {
dependsOn(sources)
isPreserveFileTimestamps = false
isReproducibleFileOrder = true
isZip64 = true
if (!kotlinBuildProperties.isTeamcityBuild) {
from(provider { sources.map(::zipTree) })
}
@@ -255,9 +255,8 @@ fun buildIvyRepositoryTask(
inputs.files(configuration)
outputs.upToDateWhen {
configuration.resolvedConfiguration.resolvedArtifacts.single()
.moduleDirectory()
.exists()
val repoMarker = configuration.resolvedConfiguration.resolvedArtifacts.single().moduleDirectory().resolve(".marker")
repoMarker.exists()
}
doFirst {
@@ -266,8 +265,9 @@ fun buildIvyRepositoryTask(
artifact.storeDirectory().cleanStore()
if (moduleDirectory.exists()) {
logger.info("Path ${moduleDirectory.absolutePath} already exists, skipping unpacking.")
val repoMarker = File(moduleDirectory, ".marker")
if (repoMarker.exists()) {
logger.info("Path ${repoMarker.absolutePath} already exists, skipping unpacking.")
return@doFirst
}
@@ -326,6 +326,8 @@ fun buildIvyRepositoryTask(
)
}
}
repoMarker.createNewFile()
}
}
}

View File

@@ -20,7 +20,7 @@ buildscript {
}
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.17")
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:0.0.20")
}
}
@@ -46,12 +46,12 @@ if (target_AppCode_Clion) {
} else if (target_AndroidStudio) {
logger.info("Including modules for AS (mobile plugin) in buildSrc/settings.gradle")
include ":prepare-deps:cocoa-common-binaries"
include ":prepare-deps:appcode-binaries"
include ":prepare-deps:lldb-framework"
include ":prepare-deps:lldb-frontend"
project(":prepare-deps:cocoa-common-binaries").projectDir =
file("${buildProperties.propertiesProvider.rootProjectDir}/kotlin-ultimate/buildSrc/prepare-deps/cocoa-common-binaries")
project(":prepare-deps:appcode-binaries").projectDir =
file("${buildProperties.propertiesProvider.rootProjectDir}/kotlin-ultimate/buildSrc/prepare-deps/appcode-binaries")
project(":prepare-deps:lldb-framework").projectDir =
file("${buildProperties.propertiesProvider.rootProjectDir}/kotlin-ultimate/buildSrc/prepare-deps/lldb-framework")
project(":prepare-deps:lldb-frontend").projectDir =
@@ -69,4 +69,4 @@ if (target_AppCode_Clion) {
} else {
logger.info("Not including extra modules in buildSrc/settings.gradle")
}
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
import org.gradle.api.GradleException
import org.gradle.api.tasks.*
import org.gradle.api.tasks.testing.Test
import java.io.File
// You can see "How To" via link: https://jetbrains.quip.com/xQ2WAUy9bZmy/How-to-use-AggregateTest-task
open class AggregateTest : Test() { // Inherit from Test to see test results in IDEA Test viewer
private var patterns: MutableMap<String, MutableList<String>> = mutableMapOf()
@InputFile
lateinit var testPatternFile: File
init {
// Set empty FileCollection to avoid NPE when initializing a base 'Test' class
classpath = project.objects.fileCollection()
testClassesDirs = project.objects.fileCollection()
project.gradle.taskGraph.whenReady {
if (allTasks.filterIsInstance<AggregateTest>().isNotEmpty()) {
initPatterns()
allTasks.filterIsInstance<Test>().forEach { testTask -> subTaskConfigure(testTask) }
if (!project.gradle.startParameter.taskNames.all { project.tasks.findByPath(it) is AggregateTest }) {
logger.warn("Please, don't use AggregateTest and non-AggregateTest test tasks together. You can get incorrect results.")
}
}
}
}
private fun initPatterns() {
if (!testPatternFile.exists())
throw GradleException("File with test patterns is not found")
testPatternFile
.readLines()
.asSequence()
.filter { it.isNotEmpty() }
.forEach { line ->
// patternType is exclude or include value
val (pattern, patternType) = line.split(',').map { it.trim() }
patterns.getOrPut(patternType) { mutableListOf() }.add(pattern)
}
}
private fun subTaskConfigure(testTask: Test) {
testTask.outputs.upToDateWhen { false }
testTask.ignoreFailures = true
testTask.filter {
isFailOnNoMatchingTests = false
patterns["include"]?.let {
it.forEach { pattern ->
includeTestsMatching(pattern)
}
}
patterns["exclude"]?.let {
it.forEach { pattern ->
excludeTestsMatching(pattern)
}
}
}
}
@Override
@TaskAction
override fun executeTests() {
// Do nothing
}
}

View File

@@ -56,7 +56,7 @@ var Project.javaHome: String?
fun Project.generator(fqName: String, sourceSet: SourceSet? = null) = smartJavaExec {
classpath = (sourceSet ?: testSourceSet).runtimeClasspath
main = fqName
mainClass.set(fqName)
workingDir = rootDir
systemProperty("line.separator", "\n")
}

View File

@@ -26,7 +26,7 @@ fun CompatibilityPredicate.or(other: CompatibilityPredicate): CompatibilityPredi
}
enum class Platform : CompatibilityPredicate {
P183, P191, P192, P193, P201, P202;
P183, P191, P192, P193, P201, P202, P203;
val version: Int = name.drop(1).toInt()
@@ -48,11 +48,13 @@ enum class Ide(val platform: Platform) : CompatibilityPredicate {
IJ193(Platform.P193),
IJ201(Platform.P201),
IJ202(Platform.P202),
IJ203(Platform.P203),
AS35(Platform.P183),
AS36(Platform.P192),
AS40(Platform.P193),
AS41(Platform.P201);
AS41(Platform.P201),
AS42(Platform.P202);
val kind = Kind.values().first { it.shortName == name.take(2) }
val version = name.dropWhile { !it.isDigit() }.toInt()

View File

@@ -23,6 +23,10 @@ fun JavaExec.passClasspathInJar() {
dependsOn(classpath)
inputs.files(classpath)
inputs.property("main", main)
archiveFileName.set("$main.${this@passClasspathInJar.name}.classpath.container.jar")
destinationDirectory.set(temporaryDir)
doFirst {
val classPathString = classpath.joinToString(" ") { project.file(it).toURI().toString() }
manifest {
@@ -34,16 +38,11 @@ fun JavaExec.passClasspathInJar() {
)
}
}
archiveName = "$main.${this@passClasspathInJar.name}.classpath.container.$extension"
destinationDir = temporaryDir
}
dependsOn(jarTask)
doFirst {
main = "-jar"
classpath = project.files()
args = listOf(jarTask.outputs.files.singleFile.path) + args.orEmpty()
}
main = "-jar"
classpath = project.files()
args = listOf(jarTask.outputs.files.singleFile.path) + args.orEmpty()
}

View File

@@ -1,3 +1,8 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("unused")
// usages in build scripts are not tracked properly
@@ -97,9 +102,11 @@ fun Project.kotlinStdlib(suffix: String? = null, classifier: String? = null): An
dependencies.project(listOfNotNull(":kotlin-stdlib", suffix).joinToString("-"), classifier)
}
fun Project.kotlinBuiltins(): Any =
fun Project.kotlinBuiltins(): Any = kotlinBuiltins(forJvm = false)
fun Project.kotlinBuiltins(forJvm: Boolean): Any =
if (kotlinBuildProperties.useBootstrapStdlib) "org.jetbrains.kotlin:builtins:$bootstrapKotlinVersion"
else dependencies.project(":core:builtins")
else dependencies.project(":core:builtins", configuration = "runtimeElementsJvm".takeIf { forJvm })
fun DependencyHandler.projectTests(name: String): ProjectDependency = project(name, configuration = "tests-jar")
fun DependencyHandler.projectRuntimeJar(name: String): ProjectDependency = project(name, configuration = "runtimeJar")

View File

@@ -80,6 +80,8 @@ fun Project.androidDxJar() = "org.jetbrains.kotlin:android-dx:${rootProject.extr
fun Project.jpsBuildTest() = "com.jetbrains.intellij.idea:jps-build-test:${rootProject.extra["versions.intellijSdk"]}"
fun Project.kotlinxCollectionsImmutable() = "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:${rootProject.extra["versions.kotlinx-collections-immutable"]}"
/**
* Runtime version of annotations that are already in Kotlin stdlib (historically Kotlin has older version of this one).
*
@@ -165,7 +167,7 @@ fun Project.runIdeTask(name: String, ideaPluginDir: File, ideaSandboxDir: File,
classpath = mainSourceSet.runtimeClasspath
main = "com.intellij.idea.Main"
mainClass.set("com.intellij.idea.Main")
workingDir = File(intellijRootDir(), "bin")
@@ -178,13 +180,14 @@ fun Project.runIdeTask(name: String, ideaPluginDir: File, ideaSandboxDir: File,
"-Didea.system.path=$ideaSandboxDir",
"-Didea.config.path=$ideaSandboxConfigDir",
"-Didea.tooling.debug=true",
"-Dfus.internal.test.mode=true",
"-Dapple.laf.useScreenMenuBar=true",
"-Dapple.awt.graphics.UseQuartz=true",
"-Dsun.io.useCanonCaches=false",
"-Dplugin.path=${ideaPluginDir.absolutePath}"
)
if (Platform[201].orHigher()) {
if (Platform[201].orHigher() && !isIntellijUltimateSdkAvailable()) {
jvmArgs("-Didea.platform.prefix=Idea")
}

View File

@@ -52,6 +52,7 @@ open class PublishedKotlinModule : Plugin<Project> {
configure<SigningExtension> {
isRequired = signingRequired
sign(configurations["archives"])
useGpgCmd()
}
tasks.named<Sign>("signArchives").configure {

View File

@@ -31,6 +31,47 @@ import java.lang.Character.isUpperCase
import java.nio.file.Files
import java.nio.file.Path
fun Task.dependsOnKotlinPluginInstall() {
dependsOn(
":kotlin-allopen:install",
":kotlin-noarg:install",
":kotlin-sam-with-receiver:install",
":kotlin-android-extensions:install",
":kotlin-parcelize-compiler:install",
":kotlin-build-common:install",
":kotlin-compiler-embeddable:install",
":native:kotlin-native-utils:install",
":kotlin-util-klib:install",
":kotlin-util-io:install",
":kotlin-compiler-runner:install",
":kotlin-daemon-embeddable:install",
":kotlin-daemon-client:install",
":kotlin-gradle-plugin-api:install",
":kotlin-gradle-plugin:install",
":kotlin-gradle-plugin-model:install",
":kotlin-reflect:install",
":kotlin-annotation-processing-gradle:install",
":kotlin-test:kotlin-test-common:install",
":kotlin-test:kotlin-test-annotations-common:install",
":kotlin-test:kotlin-test-jvm:install",
":kotlin-test:kotlin-test-js:install",
":kotlin-test:kotlin-test-junit:install",
":kotlin-gradle-subplugin-example:install",
":kotlin-stdlib-common:install",
":kotlin-stdlib:install",
":kotlin-stdlib-jdk8:install",
":kotlin-stdlib-js:install",
":examples:annotation-processor-example:install",
":kotlin-script-runtime:install",
":kotlin-scripting-common:install",
":kotlin-scripting-jvm:install",
":kotlin-scripting-compiler-embeddable:install",
":kotlin-scripting-compiler-impl-embeddable:install",
":kotlin-test-js-runner:install",
":native:kotlin-klib-commonizer-embeddable:install"
)
}
fun Project.projectTest(
taskName: String = "test",
parallel: Boolean = false,

View File

@@ -6,25 +6,23 @@ plugins {
}
dependencies {
compile(project(":compiler:util"))
compile(project(":compiler:cli"))
compile(project(":compiler:frontend"))
compile(project(":compiler:backend"))
compile(kotlinStdlib())
compile(project(":kotlin-reflect"))
compile(projectTests(":compiler:tests-common"))
compile(commonDep("junit:junit"))
Platform[193].orLower {
compileOnly(intellijDep()) { includeJars("openapi") }
}
testCompile(project(":compiler:incremental-compilation-impl"))
testCompile(project(":core:descriptors"))
testCompile(project(":core:descriptors.jvm"))
testCompile(project(":compiler:util"))
testCompile(project(":compiler:cli"))
testCompile(project(":compiler:frontend"))
testCompile(project(":compiler:backend"))
testCompile(project(":compiler:incremental-compilation-impl"))
testCompile(project(":compiler:frontend.java"))
testCompile(kotlinStdlib())
testCompile(project(":kotlin-reflect"))
testCompile(projectTests(":compiler:tests-common"))
testCompile(commonDep("junit:junit"))
testCompile(projectTests(":jps-plugin"))
testCompile(commonDep("junit:junit"))
Platform[193].orLower {
testCompile(intellijDep()) { includeJars("openapi", rootProject = rootProject) }
}
@@ -44,7 +42,7 @@ dependencies {
}
sourceSets {
"main" { projectDefault() }
"main" { }
"test" { projectDefault() }
}

View File

@@ -25,7 +25,7 @@ import org.junit.runners.AllTests;
import java.io.File;
@RunWith(AllTests.class)
//@RunWith(AllTests.class)
public class AndroidRunner {
private static PathManager pathManager;

View File

@@ -65,7 +65,7 @@ object CodegenUtil {
if (copy)
copyFunctions(
declaration, traitMember, declaration.containingDeclaration, traitMember.modality,
Visibilities.PUBLIC, CallableMemberDescriptor.Kind.DECLARATION, true
DescriptorVisibilities.PUBLIC, CallableMemberDescriptor.Kind.DECLARATION, true
)
else mapMembers(declaration, traitMember)
)
@@ -74,13 +74,13 @@ object CodegenUtil {
}
fun copyFunctions(
inheritedMember: CallableMemberDescriptor,
traitMember: CallableMemberDescriptor,
newOwner: DeclarationDescriptor,
modality: Modality,
visibility: Visibility,
kind: CallableMemberDescriptor.Kind,
copyOverrides: Boolean
inheritedMember: CallableMemberDescriptor,
traitMember: CallableMemberDescriptor,
newOwner: DeclarationDescriptor,
modality: Modality,
visibility: DescriptorVisibility,
kind: CallableMemberDescriptor.Kind,
copyOverrides: Boolean
): Map<FunctionDescriptor, FunctionDescriptor> =
mapMembers(inheritedMember.copy(newOwner, modality, visibility, kind, copyOverrides), traitMember)

View File

@@ -0,0 +1,15 @@
plugins {
kotlin("jvm")
id("jps-compatible")
}
dependencies {
api(project(":core:compiler.common.jvm"))
api(project(":compiler:config.jvm"))
api(intellijCoreDep()) { includeJars("asm-all", "guava", rootProject = rootProject) }
}
sourceSets {
"main" { projectDefault() }
"test" {}
}

View File

@@ -0,0 +1,450 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.codegen;
import com.google.common.collect.ImmutableMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.PrimitiveType;
import org.jetbrains.kotlin.descriptors.Visibilities;
import org.jetbrains.kotlin.descriptors.Visibility;
import org.jetbrains.kotlin.descriptors.java.JavaVisibilities;
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
import org.jetbrains.kotlin.name.ClassId;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType;
import org.jetbrains.org.objectweb.asm.AnnotationVisitor;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
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 java.util.Map;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class AsmUtil {
private static final int NO_FLAG_LOCAL = 0;
public static final int NO_FLAG_PACKAGE_PRIVATE = 0;
@NotNull
private static final Map<Visibility, Integer> visibilityToAccessFlag = ImmutableMap.<Visibility, Integer>builder()
.put(Visibilities.Private.INSTANCE, ACC_PRIVATE)
.put(Visibilities.PrivateToThis.INSTANCE, ACC_PRIVATE)
.put(Visibilities.Protected.INSTANCE, ACC_PROTECTED)
.put(JavaVisibilities.ProtectedStaticVisibility.INSTANCE, ACC_PROTECTED)
.put(JavaVisibilities.ProtectedAndPackage.INSTANCE, ACC_PROTECTED)
.put(Visibilities.Public.INSTANCE, ACC_PUBLIC)
.put(Visibilities.Internal.INSTANCE, ACC_PUBLIC)
.put(Visibilities.Local.INSTANCE, NO_FLAG_LOCAL)
.put(JavaVisibilities.PackageVisibility.INSTANCE, NO_FLAG_PACKAGE_PRIVATE)
.build();
public static final String CAPTURED_PREFIX = "$";
public static final String THIS = "this";
public static final String THIS_IN_DEFAULT_IMPLS = "$this";
public static final String LABELED_THIS_FIELD = THIS + "_";
public static final String CAPTURED_LABELED_THIS_FIELD = CAPTURED_PREFIX + LABELED_THIS_FIELD;
public static final String INLINE_DECLARATION_SITE_THIS = "this_";
public static final String LABELED_THIS_PARAMETER = CAPTURED_PREFIX + THIS + "$";
public static final String CAPTURED_THIS_FIELD = "this$0";
public static final String RECEIVER_PARAMETER_NAME = "$receiver";
/*
This is basically an old convention. Starting from Kotlin 1.3, it was replaced with `$this_<label>`.
Note that it is still used for inlined callable references and anonymous callable extension receivers
even in 1.3.
*/
public static final String CAPTURED_RECEIVER_FIELD = "receiver$0";
// For non-inlined callable references ('kotlin.jvm.internal.CallableReference' has a 'receiver' field)
public static final String BOUND_REFERENCE_RECEIVER = "receiver";
public static final String LOCAL_FUNCTION_VARIABLE_PREFIX = "$fun$";
private static final ImmutableMap<Integer, JvmPrimitiveType> primitiveTypeByAsmSort;
private static final ImmutableMap<Type, Type> primitiveTypeByBoxedType;
static {
ImmutableMap.Builder<Integer, JvmPrimitiveType> typeBySortBuilder = ImmutableMap.builder();
ImmutableMap.Builder<Type, Type> typeByWrapperBuilder = ImmutableMap.builder();
for (JvmPrimitiveType primitiveType : JvmPrimitiveType.values()) {
Type asmType = Type.getType(primitiveType.getDesc());
typeBySortBuilder.put(asmType.getSort(), primitiveType);
typeByWrapperBuilder.put(asmTypeByFqNameWithoutInnerClasses(primitiveType.getWrapperFqName()), asmType);
}
primitiveTypeByAsmSort = typeBySortBuilder.build();
primitiveTypeByBoxedType = typeByWrapperBuilder.build();
}
private AsmUtil() {
}
@NotNull
public static String getCapturedFieldName(@NotNull String originalName) {
return CAPTURED_PREFIX + originalName;
}
@NotNull
public static String getLabeledThisName(@NotNull String callableName, @NotNull String prefix, @NotNull String defaultName) {
if (!Name.isValidIdentifier(callableName)) {
return defaultName;
}
return prefix + CommonVariableAsmNameManglingUtils.mangleNameIfNeeded(callableName);
}
@NotNull
public static Type boxType(@NotNull Type type) {
Type boxedType = boxPrimitiveType(type);
return boxedType != null ? boxedType : type;
}
@Nullable
public static Type boxPrimitiveType(@NotNull Type type) {
JvmPrimitiveType jvmPrimitiveType = primitiveTypeByAsmSort.get(type.getSort());
return jvmPrimitiveType != null ? asmTypeByFqNameWithoutInnerClasses(jvmPrimitiveType.getWrapperFqName()) : null;
}
@NotNull
public static Type unboxType(@NotNull Type boxedType) {
Type primitiveType = unboxPrimitiveTypeOrNull(boxedType);
if (primitiveType == null) {
throw new UnsupportedOperationException("Unboxing: " + boxedType);
}
return primitiveType;
}
@Nullable
public static Type unboxPrimitiveTypeOrNull(@NotNull Type boxedType) {
return primitiveTypeByBoxedType.get(boxedType);
}
public static boolean isBoxedPrimitiveType(@NotNull Type boxedType) {
return primitiveTypeByBoxedType.get(boxedType) != null;
}
@NotNull
public static Type unboxUnlessPrimitive(@NotNull Type boxedOrPrimitiveType) {
if (isPrimitive(boxedOrPrimitiveType)) return boxedOrPrimitiveType;
return unboxType(boxedOrPrimitiveType);
}
public static boolean isBoxedTypeOf(@NotNull Type boxedType, @NotNull Type unboxedType) {
return unboxPrimitiveTypeOrNull(boxedType) == unboxedType;
}
public static boolean isIntPrimitive(Type type) {
return type == Type.INT_TYPE || type == Type.SHORT_TYPE || type == Type.BYTE_TYPE || type == Type.CHAR_TYPE;
}
public static boolean isIntOrLongPrimitive(Type type) {
return isIntPrimitive(type) || type == Type.LONG_TYPE;
}
public static boolean isPrimitive(Type type) {
return type.getSort() != Type.OBJECT && type.getSort() != Type.ARRAY;
}
@NotNull
public static Type correctElementType(@NotNull Type type) {
String internalName = type.getInternalName();
assert internalName.charAt(0) == '[';
return Type.getType(internalName.substring(1));
}
@NotNull
public static Type getArrayType(@NotNull Type componentType) {
return Type.getType("[" + componentType.getDescriptor());
}
@Nullable
public static PrimitiveType asmPrimitiveTypeToLangPrimitiveType(Type type) {
JvmPrimitiveType jvmPrimitiveType = primitiveTypeByAsmSort.get(type.getSort());
return jvmPrimitiveType != null ? jvmPrimitiveType.getPrimitiveType() : null;
}
@NotNull
public static Method method(@NotNull String name, @NotNull Type returnType, @NotNull Type... parameterTypes) {
return new Method(name, Type.getMethodDescriptor(returnType, parameterTypes));
}
public static Type stringValueOfType(Type type) {
int sort = type.getSort();
return sort == Type.OBJECT || sort == Type.ARRAY
? OBJECT_TYPE
: sort == Type.BYTE || sort == Type.SHORT ? Type.INT_TYPE : type;
}
public static void genThrow(@NotNull InstructionAdapter v, @NotNull String exception, @Nullable String message) {
v.anew(Type.getObjectType(exception));
v.dup();
if (message != null) {
v.aconst(message);
v.invokespecial(exception, "<init>", "(Ljava/lang/String;)V", false);
}
else {
v.invokespecial(exception, "<init>", "()V", false);
}
v.athrow();
}
public static void genStringBuilderConstructor(InstructionAdapter v) {
v.visitTypeInsn(NEW, "java/lang/StringBuilder");
v.dup();
v.invokespecial("java/lang/StringBuilder", "<init>", "()V", false);
}
public static void genInvertBoolean(InstructionAdapter v) {
v.iconst(1);
v.xor(Type.INT_TYPE);
}
public static void numConst(int value, Type type, InstructionAdapter v) {
if (type == Type.FLOAT_TYPE) {
v.fconst(value);
}
else if (type == Type.DOUBLE_TYPE) {
v.dconst(value);
}
else if (type == Type.LONG_TYPE) {
v.lconst(value);
}
else if (type == Type.CHAR_TYPE || type == Type.BYTE_TYPE || type == Type.SHORT_TYPE || type == Type.INT_TYPE) {
v.iconst(value);
}
else {
throw new IllegalArgumentException("Primitive numeric type expected, got: " + type);
}
}
public static void swap(InstructionAdapter v, Type stackTop, Type afterTop) {
if (stackTop.getSize() == 1) {
if (afterTop.getSize() == 1) {
v.swap();
}
else {
v.dupX2();
v.pop();
}
}
else {
if (afterTop.getSize() == 1) {
v.dup2X1();
}
else {
v.dup2X2();
}
v.pop2();
}
}
public static void pushDefaultValueOnStack(@NotNull Type type, @NotNull InstructionAdapter v) {
v.visitInsn(defaultValueOpcode(type));
}
public static int defaultValueOpcode(@NotNull Type type) {
if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
return ACONST_NULL;
}
if (type.getSort() == Type.FLOAT) {
return FCONST_0;
}
if (type.getSort() == Type.DOUBLE) {
return DCONST_0;
}
if (type.getSort() == Type.LONG) {
return LCONST_0;
}
return ICONST_0;
}
public static Type comparisonOperandType(Type left, Type right) {
if (left == Type.DOUBLE_TYPE || right == Type.DOUBLE_TYPE) return Type.DOUBLE_TYPE;
if (left == Type.FLOAT_TYPE || right == Type.FLOAT_TYPE) return Type.FLOAT_TYPE;
if (left == Type.LONG_TYPE || right == Type.LONG_TYPE) return Type.LONG_TYPE;
if (left == Type.CHAR_TYPE || right == Type.CHAR_TYPE) return Type.CHAR_TYPE;
return Type.INT_TYPE;
}
@NotNull
public static Type numberFunctionOperandType(@NotNull Type expectedType) {
if (expectedType == Type.SHORT_TYPE || expectedType == Type.BYTE_TYPE || expectedType == Type.CHAR_TYPE) {
return Type.INT_TYPE;
}
return expectedType;
}
public static void pop(@NotNull MethodVisitor v, @NotNull Type type) {
if (type.getSize() == 2) {
v.visitInsn(Opcodes.POP2);
}
else {
v.visitInsn(Opcodes.POP);
}
}
public static void pop2(@NotNull MethodVisitor v, @NotNull Type topOfStack, @NotNull Type afterTop) {
if (topOfStack.getSize() == 1 && afterTop.getSize() == 1) {
v.visitInsn(POP2);
} else {
pop(v, topOfStack);
pop(v, afterTop);
}
}
public static void pop2(@NotNull MethodVisitor v, @NotNull Type type) {
if (type.getSize() == 2) {
v.visitInsn(Opcodes.POP2);
v.visitInsn(Opcodes.POP2);
}
else {
v.visitInsn(Opcodes.POP2);
}
}
public static void dup(@NotNull InstructionAdapter v, @NotNull Type type) {
dup(v, type.getSize());
}
private static void dup(@NotNull InstructionAdapter v, int size) {
if (size == 2) {
v.dup2();
}
else if (size == 1) {
v.dup();
}
else {
throw new UnsupportedOperationException();
}
}
public static void dupx(@NotNull InstructionAdapter v, @NotNull Type type) {
dupx(v, type.getSize());
}
private static void dupx(@NotNull InstructionAdapter v, int size) {
if (size == 2) {
v.dup2X2();
}
else if (size == 1) {
v.dupX1();
}
else {
throw new UnsupportedOperationException();
}
}
// Duplicate the element afterTop and push it on the top of the stack.
public static void dupSecond(@NotNull InstructionAdapter v, @NotNull Type topOfStack, @NotNull Type afterTop) {
if (afterTop.getSize() == 0) {
return;
}
if (topOfStack.getSize() == 0) {
dup(v, afterTop);
} else if (topOfStack.getSize() == 1 && afterTop.getSize() == 1) {
v.dup2();
v.pop();
} else {
swap(v, topOfStack, afterTop);
if (topOfStack.getSize() == 1 && afterTop.getSize() == 2) {
v.dup2X1();
} else if (topOfStack.getSize() == 2 && afterTop.getSize() == 1) {
v.dupX2();
} else /* top = 2, after top = 2 */ {
v.dup2X2();
}
}
}
public static void dup(@NotNull InstructionAdapter v, @NotNull Type topOfStack, @NotNull Type afterTop) {
if (topOfStack.getSize() == 0 && afterTop.getSize() == 0) {
return;
}
if (topOfStack.getSize() == 0) {
dup(v, afterTop);
}
else if (afterTop.getSize() == 0) {
dup(v, topOfStack);
}
else if (afterTop.getSize() == 1) {
if (topOfStack.getSize() == 1) {
dup(v, 2);
}
else {
v.dup2X1();
v.pop2();
v.dupX2();
v.dupX2();
v.pop();
v.dup2X1();
}
}
else {
//Note: it's possible to write dup3 and dup4
throw new UnsupportedOperationException("Don't know how generate dup3/dup4 for: " + topOfStack + " and " + afterTop);
}
}
public static void writeAnnotationData(
@NotNull AnnotationVisitor av, @NotNull String[] data, @NotNull String[] strings
) {
AnnotationVisitor dataVisitor = av.visitArray(JvmAnnotationNames.METADATA_DATA_FIELD_NAME);
for (String string : data) {
dataVisitor.visit(null, string);
}
dataVisitor.visitEnd();
AnnotationVisitor stringsVisitor = av.visitArray(JvmAnnotationNames.METADATA_STRINGS_FIELD_NAME);
for (String string : strings) {
stringsVisitor.visit(null, string);
}
stringsVisitor.visitEnd();
}
@NotNull
public static Type asmTypeByFqNameWithoutInnerClasses(@NotNull FqName fqName) {
return Type.getObjectType(internalNameByFqNameWithoutInnerClasses(fqName));
}
@NotNull
public static Type asmTypeByClassId(@NotNull ClassId classId) {
return Type.getObjectType(classId.asString().replace('.', '$'));
}
@NotNull
public static String internalNameByFqNameWithoutInnerClasses(@NotNull FqName fqName) {
return JvmClassName.byFqNameWithoutInnerClasses(fqName).getInternalName();
}
public static void wrapJavaClassIntoKClass(@NotNull InstructionAdapter v) {
v.invokestatic(REFLECTION, "getOrCreateKotlinClass", Type.getMethodDescriptor(K_CLASS_TYPE, getType(Class.class)), false);
}
public static void wrapJavaClassesIntoKClasses(@NotNull InstructionAdapter v) {
v.invokestatic(REFLECTION, "getOrCreateKotlinClasses", Type.getMethodDescriptor(K_CLASS_ARRAY_TYPE, getType(Class[].class)), false);
}
@Nullable
public static Integer getVisibilityAccessFlag(Visibility visibility) {
return visibilityToAccessFlag.get(visibility);
}
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:JvmName("CommonVariableAsmNameManglingUtils")
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.resolve.jvm.checkers.isValidDalvikCharacter
fun mangleNameIfNeeded(name: String): String {
if (name.all { it.isValidCharacter() }) {
return name
}
return buildString {
for (c in name) {
if (c.isValidCharacter()) {
append(c)
} else {
val hexString = Integer.toHexString(c.toInt())
assert(hexString.length <= 4)
append("_u").append(hexString)
}
}
}
}
private fun Char.isValidCharacter(): Boolean {
return this != '$' && this != '-' && isValidDalvikCharacter(this)
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -10,7 +10,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.builtins.PrimitiveType;
import org.jetbrains.org.objectweb.asm.Type;
import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
public class AsmTypes {
private static final Map<Class<?>, Type> TYPES_MAP = new HashMap<>();

View File

@@ -0,0 +1,22 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:JvmName("DalvikIdentifierUtils")
package org.jetbrains.kotlin.resolve.jvm.checkers
fun isValidDalvikIdentifier(identifier: String): Boolean = identifier.all { isValidDalvikCharacter(it) }
// https://source.android.com/devices/tech/dalvik/dex-format.html#string-syntax
fun isValidDalvikCharacter(c: Char): Boolean = when (c) {
in 'A'..'Z' -> true
in 'a'..'z' -> true
in '0'..'9' -> true
'$', '-', '_' -> true
in '\u00a1' .. '\u1fff' -> true
in '\u2010' .. '\u2027' -> true
in '\u2030' .. '\ud7ff' -> true
in '\ue000' .. '\uffef' -> true
else -> false
}

View File

@@ -0,0 +1,138 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.types
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.codegen.signature.AsmTypeFactory
import org.jetbrains.kotlin.load.kotlin.JvmDescriptorTypeWriter
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
import org.jetbrains.kotlin.load.kotlin.mapBuiltInType
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
import org.jetbrains.kotlin.types.model.*
import org.jetbrains.org.objectweb.asm.Type
interface TypeMappingContext<Writer : JvmDescriptorTypeWriter<Type>> {
val typeContext: TypeSystemCommonBackendContextForTypeMapping
fun getClassInternalName(typeConstructor: TypeConstructorMarker): String
fun Writer.writeGenericType(type: SimpleTypeMarker, asmType: Type, mode: TypeMappingMode)
}
object AbstractTypeMapper {
fun <Writer : JvmDescriptorTypeWriter<Type>> mapClass(context: TypeMappingContext<Writer>, typeConstructor: TypeConstructorMarker): Type {
return with(context.typeContext) {
when {
typeConstructor.isClassTypeConstructor() -> {
mapType(context, typeConstructor.defaultType(), TypeMappingMode.CLASS_DECLARATION)
}
typeConstructor.isTypeParameter() -> {
mapType(context, typeConstructor.defaultType())
}
else -> error("Unknown type constructor: $typeConstructor")
}
}
}
fun <Writer : JvmDescriptorTypeWriter<Type>> mapType(
context: TypeMappingContext<Writer>,
type: KotlinTypeMarker,
mode: TypeMappingMode = TypeMappingMode.DEFAULT,
sw: Writer? = null
): Type = context.typeContext.mapType(context, type, mode, sw)
@OptIn(ExperimentalStdlibApi::class)
private fun <Writer : JvmDescriptorTypeWriter<Type>> TypeSystemCommonBackendContextForTypeMapping.mapType(
context: TypeMappingContext<Writer>,
type: KotlinTypeMarker,
mode: TypeMappingMode = TypeMappingMode.DEFAULT,
sw: Writer? = null
): Type {
if (type !is SimpleTypeMarker) {
error("Unexpected type: $type (original Kotlin type=$type of ${type.let { it::class }})")
}
if (type.isSuspendFunction()) {
val argumentsCount = type.argumentsCount()
val argumentsList = type.asArgumentList()
@Suppress("RemoveExplicitTypeArguments") // Workaround for KT-42175
val arguments = buildList<KotlinTypeMarker> {
for (i in 0 until (argumentsCount - 1)) {
this += argumentsList[i].adjustedType()
}
this += continuationTypeConstructor().typeWithArguments(argumentsList[argumentsCount - 1].adjustedType())
this += nullableAnyType()
}
val runtimeFunctionType = functionNTypeConstructor(arguments.size - 1).typeWithArguments(arguments)
return mapType(context, runtimeFunctionType, mode, sw)
}
mapBuiltInType(type, AsmTypeFactory, mode)?.let { builtInType ->
return boxTypeIfNeeded(builtInType, mode.needPrimitiveBoxing).also { asmType ->
with(context) { sw?.writeGenericType(type, asmType, mode) }
}
}
val typeConstructor = type.typeConstructor()
when {
type.isArrayOrNullableArray() -> {
val typeArgument = type.asArgumentList()[0]
val (variance, memberType) = when {
typeArgument.isStarProjection() -> Variance.OUT_VARIANCE to nullableAnyType()
else -> typeArgument.getVariance().toVariance() to typeArgument.getType()
}
require(memberType is SimpleTypeMarker)
val arrayElementType: Type
sw?.writeArrayType()
if (variance == Variance.IN_VARIANCE) {
arrayElementType = AsmTypes.OBJECT_TYPE
sw?.writeClass(arrayElementType)
} else {
arrayElementType = mapType(context, memberType, mode.toGenericArgumentMode(variance, ofArray = true), sw)
}
sw?.writeArrayEnd()
return AsmUtil.getArrayType(arrayElementType)
}
typeConstructor.isClassTypeConstructor() -> {
if (typeConstructor.isInlineClass() && !mode.needInlineClassWrapping) {
val expandedType = computeExpandedTypeForInlineClass(type)
require(expandedType is SimpleTypeMarker?)
if (expandedType != null) {
return mapType(context, expandedType, mode.wrapInlineClassesMode(), sw)
}
}
val asmType = if (mode.isForAnnotationParameter && type.isKClass())
AsmTypes.JAVA_CLASS_TYPE
else
Type.getObjectType(context.getClassInternalName(typeConstructor))
with(context) { sw?.writeGenericType(type, asmType, mode) }
return asmType
}
typeConstructor.isTypeParameter() -> {
val typeParameter = typeConstructor as TypeParameterMarker
return mapType(context, typeParameter.representativeUpperBound(), mode, null).also { asmType ->
sw?.writeTypeVariable(typeParameter.getName(), asmType)
}
}
else -> throw UnsupportedOperationException("Unknown type $type")
}
}
private fun boxTypeIfNeeded(possiblyPrimitiveType: Type, needBoxedType: Boolean): Type =
if (needBoxedType) AsmUtil.boxType(possiblyPrimitiveType) else possiblyPrimitiveType
private fun TypeVariance.toVariance(): Variance = when (this) {
TypeVariance.IN -> Variance.IN_VARIANCE
TypeVariance.OUT -> Variance.OUT_VARIANCE
TypeVariance.INV -> Variance.INVARIANT
}
}

View File

@@ -10,6 +10,7 @@ dependencies {
compile(project(":compiler:frontend"))
compile(project(":compiler:frontend.java"))
compile(project(":compiler:serialization"))
api(project(":compiler:backend.common.jvm"))
compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", "guava", rootProject = rootProject) }
compileOnly(intellijDep()) { includeJars("trove4j", rootProject = rootProject) }
}

View File

@@ -27,7 +27,7 @@ class AccessorForCompanionObjectInstanceFieldDescriptor(
null, null, emptyList(), emptyList(),
companionObjectDescriptor.defaultType,
Modality.FINAL,
Visibilities.LOCAL
DescriptorVisibilities.LOCAL
)
}
@@ -41,4 +41,4 @@ class AccessorForCompanionObjectInstanceFieldDescriptor(
): FunctionDescriptorImpl {
throw UnsupportedOperationException("Accessor for companion object $companionObjectDescriptor should not be substituted")
}
}
}

View File

@@ -42,11 +42,11 @@ class AccessorForConstructorDescriptor(
override fun substitute(substitutor: TypeSubstitutor) = super.substitute(substitutor) as ClassConstructorDescriptor
override fun copy(
newOwner: DeclarationDescriptor,
modality: Modality,
visibility: Visibility,
kind: CallableMemberDescriptor.Kind,
copyOverrides: Boolean
newOwner: DeclarationDescriptor,
modality: Modality,
visibility: DescriptorVisibility,
kind: CallableMemberDescriptor.Kind,
copyOverrides: Boolean
): AccessorForConstructorDescriptor {
throw UnsupportedOperationException()
}
@@ -61,7 +61,7 @@ class AccessorForConstructorDescriptor(
copyValueParameters(calleeDescriptor),
calleeDescriptor.returnType,
Modality.FINAL,
Visibilities.LOCAL
DescriptorVisibilities.LOCAL
)
}
}

View File

@@ -43,7 +43,7 @@ class AccessorForFunctionDescriptor(
copyValueParameters(calleeDescriptor),
calleeDescriptor.returnType,
Modality.FINAL,
Visibilities.LOCAL
DescriptorVisibilities.LOCAL
)
isSuspend = calleeDescriptor.isSuspend

View File

@@ -43,7 +43,7 @@ open class AccessorForPropertyDescriptor private constructor(
null,
Annotations.EMPTY,
Modality.FINAL,
Visibilities.LOCAL,
DescriptorVisibilities.LOCAL,
calleeDescriptor.isVar,
Name.identifier("access$$accessorSuffix"),
CallableMemberDescriptor.Kind.DECLARATION,
@@ -111,7 +111,7 @@ open class AccessorForPropertyDescriptor private constructor(
property,
Annotations.EMPTY,
Modality.FINAL,
Visibilities.LOCAL,
DescriptorVisibilities.LOCAL,
false,
false,
false,
@@ -136,7 +136,7 @@ open class AccessorForPropertyDescriptor private constructor(
property,
Annotations.EMPTY,
Modality.FINAL,
Visibilities.LOCAL,
DescriptorVisibilities.LOCAL,
false,
false,
false,

View File

@@ -120,7 +120,7 @@ public abstract class AnnotationCodegen {
@Nullable Type returnType,
@Nullable KotlinType typeForTypeAnnotations,
@Nullable DeclarationDescriptorWithVisibility parameterContainer,
@NotNull List<Class<?>> additionalAnnotations
@NotNull List<String> additionalVisibleAnnotations
) {
if (annotated == null) return;
@@ -142,7 +142,7 @@ public abstract class AnnotationCodegen {
&& !applicableTargets.contains(KotlinTarget.CLASS)
&& !applicableTargets.contains(KotlinTarget.ANNOTATION_CLASS)) {
ClassDescriptor classDescriptor = (ClassDescriptor) annotated;
if (classDescriptor.getVisibility() == Visibilities.LOCAL) {
if (classDescriptor.getVisibility() == DescriptorVisibilities.LOCAL) {
assert applicableTargets.contains(KotlinTarget.EXPRESSION) :
"Inconsistent target list for object literal annotation: " + applicableTargets + " on " + annotated;
continue;
@@ -155,9 +155,9 @@ public abstract class AnnotationCodegen {
}
}
for (Class<?> annotation : additionalAnnotations) {
String descriptor = generateAnnotationIfNotPresent(annotationDescriptorsAlreadyPresent, annotation);
annotationDescriptorsAlreadyPresent.add(descriptor);
for (String annotation : additionalVisibleAnnotations) {
generateAnnotationIfNotPresent(annotationDescriptorsAlreadyPresent, annotation, true);
annotationDescriptorsAlreadyPresent.add(annotation);
}
generateAdditionalAnnotations(annotated, returnType, annotationDescriptorsAlreadyPresent, parameterContainer);
@@ -221,7 +221,7 @@ public abstract class AnnotationCodegen {
private static boolean isInvisibleFromTheOutside(@Nullable DeclarationDescriptor descriptor) {
if (isAccessor(descriptor)) return true;
if (descriptor instanceof MemberDescriptor) {
return AsmUtil.getVisibilityAccessFlag((MemberDescriptor) descriptor) == Opcodes.ACC_PRIVATE;
return DescriptorAsmUtil.getVisibilityAccessFlag((MemberDescriptor) descriptor) == Opcodes.ACC_PRIVATE;
}
return false;
}
@@ -248,17 +248,17 @@ public abstract class AnnotationCodegen {
if (!TypeUtils.isNullableType(flexibleType.getLowerBound()) && TypeUtils.isNullableType(flexibleType.getUpperBound())) {
AnnotationDescriptor notNull = type.getAnnotations().findAnnotation(JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION);
if (notNull != null) {
generateAnnotationIfNotPresent(annotationDescriptorsAlreadyPresent, NotNull.class);
generateAnnotationIfNotPresent(annotationDescriptorsAlreadyPresent, Type.getType(NotNull.class).getDescriptor(), false);
}
return;
}
}
boolean isNullableType = TypeUtils.isNullableType(type);
Class<?> annotationClass = isNullableType ? Nullable.class : NotNull.class;
generateAnnotationIfNotPresent(annotationDescriptorsAlreadyPresent, annotationClass);
generateAnnotationIfNotPresent(
annotationDescriptorsAlreadyPresent,
TypeUtils.isNullableType(type) ? Type.getType(Nullable.class).getDescriptor() : Type.getType(NotNull.class).getDescriptor(),
false
);
}
private static final Map<JvmTarget, Map<KotlinTarget, ElementType>> annotationTargetMaps = new EnumMap<>(JvmTarget.class);
@@ -338,13 +338,14 @@ public abstract class AnnotationCodegen {
visitor.visitEnd();
}
@NotNull
private String generateAnnotationIfNotPresent(Set<String> annotationDescriptorsAlreadyPresent, Class<?> annotationClass) {
String descriptor = Type.getType(annotationClass).getDescriptor();
if (!annotationDescriptorsAlreadyPresent.contains(descriptor)) {
visitAnnotation(descriptor, false).visitEnd();
private void generateAnnotationIfNotPresent(
Set<String> annotationDescriptorsAlreadyPresent,
String annotationDescriptor,
boolean visible
) {
if (!annotationDescriptorsAlreadyPresent.contains(annotationDescriptor)) {
visitAnnotation(annotationDescriptor, visible).visitEnd();
}
return descriptor;
}
private static boolean isBareTypeParameterWithNullableUpperBound(@NotNull KotlinType type) {

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.Type
@@ -42,7 +43,7 @@ interface Callable {
}
}
fun afterReceiverGeneration(v: InstructionAdapter, frameMap: FrameMap) {
fun afterReceiverGeneration(v: InstructionAdapter, frameMap: FrameMap, state: GenerationState) {
}
}

View File

@@ -38,6 +38,7 @@ import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedS
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.CLASS_MEMBER_DELEGATION_TO_DEFAULT_IMPL;
import static org.jetbrains.kotlin.util.DeclarationUtilKt.findImplementationFromInterface;
import static org.jetbrains.kotlin.util.DeclarationUtilKt.findInterfaceImplementation;
public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject> {
@@ -236,9 +237,12 @@ public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject
@NotNull GenerationState state,
boolean isErasedInlineClass
) {
CallableMemberDescriptor actualImplementation =
interfaceFun.getKind().isReal() ? interfaceFun : findImplementationFromInterface(interfaceFun);
assert actualImplementation != null : "Can't find actual implementation for " + interfaceFun;
// Skip Java 8 default methods
if (CodegenUtilKt.isDefinitelyNotDefaultImplsMethod(interfaceFun) ||
JvmAnnotationUtilKt.checkIsImplementationCompiledToJvmDefault(interfaceFun, state.getJvmDefaultMode())) {
if (CodegenUtilKt.isDefinitelyNotDefaultImplsMethod(actualImplementation) ||
JvmAnnotationUtilKt.isCallableMemberCompiledToJvmDefault(actualImplementation, state.getJvmDefaultMode())) {
return;
}

View File

@@ -50,8 +50,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.CAPTURED_THIS_FIELD;
import static org.jetbrains.kotlin.codegen.CallableReferenceUtilKt.*;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.*;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConst;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.CLOSURE;
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.METHOD_FOR_FUNCTION;
@@ -139,7 +140,7 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
this.asmType = typeMapper.mapClass(classDescriptor);
visibilityFlag = AsmUtil.getVisibilityAccessFlagForClass(classDescriptor);
visibilityFlag = DescriptorAsmUtil.getVisibilityAccessFlagForClass(classDescriptor);
}
@Override
@@ -589,4 +590,8 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
MemberScope scope = functionClass.getDefaultType().getMemberScope();
return scope.getContributedFunctions(OperatorNameConventions.INVOKE, NoLookupLocation.FROM_BACKEND).iterator().next();
}
public boolean isCallableReference() {
return functionReferenceTarget != null;
}
}

View File

@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMapper
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION
@@ -52,13 +52,13 @@ import java.util.*
* Kotlin's read-only collections. This is required on JVM because Kotlin's read-only collections are mapped to mutable JDK collections
*/
class CollectionStubMethodGenerator(
private val typeMapper: KotlinTypeMapper,
private val descriptor: ClassDescriptor
private val typeMapper: KotlinTypeMapper,
private val descriptor: ClassDescriptor
) {
private data class TasksToGenerate(
val methodStubsToGenerate: Set<JvmMethodGenericSignature>,
val syntheticStubsToGenerate: Set<JvmMethodGenericSignature>,
val bridgesToGenerate: Set<FunctionDescriptor>
val methodStubsToGenerate: Set<JvmMethodGenericSignature>,
val syntheticStubsToGenerate: Set<JvmMethodGenericSignature>,
val bridgesToGenerate: Set<FunctionDescriptor>
)
companion object {
@@ -70,9 +70,9 @@ class CollectionStubMethodGenerator(
val superCollectionClasses = findRelevantSuperCollectionClasses()
if (superCollectionClasses.isEmpty()) return NO_TASKS
val existingMethodsInSuperclasses = descriptor.getAllSuperclassesWithoutAny().flatMap {
val tasksFromSuperClass = CollectionStubMethodGenerator(typeMapper, it).computeTasksToGenerate()
(tasksFromSuperClass.methodStubsToGenerate + tasksFromSuperClass.syntheticStubsToGenerate).map { it.asmMethod }
val existingMethodsInSuperclasses = descriptor.getAllSuperclassesWithoutAny().flatMap { superClass ->
val tasksFromSuperClass = CollectionStubMethodGenerator(typeMapper, superClass).computeTasksToGenerate()
(tasksFromSuperClass.methodStubsToGenerate + tasksFromSuperClass.syntheticStubsToGenerate).map { stub -> stub.asmMethod }
}
val methodStubsToGenerate = LinkedHashSet<JvmMethodGenericSignature>()
@@ -126,43 +126,42 @@ class CollectionStubMethodGenerator(
val genericSignatureInfo = overriddenMethod.getSpecialSignatureInfo()
val specialGenericSignature =
genericSignatureInfo?.replaceValueParametersIn(overriddenMethodSignature.genericsSignature)
genericSignatureInfo?.replaceValueParametersIn(overriddenMethodSignature.genericsSignature)
?: overriddenMethodSignature.genericsSignature
val (asmMethod, valueParameters) =
// if current method has special generic signature,
// like `Collection.remove(E): Boolean` in Kotlin, use original signature to obtain `remove(Object)`
if (genericSignatureInfo?.isObjectReplacedWithTypeParameter ?: false)
Pair(originalSignature.asmMethod, originalSignature.valueParameters)
else
Pair(overriddenMethodSignature.asmMethod, overriddenMethodSignature.valueParameters)
// if current method has special generic signature,
// like `Collection.remove(E): Boolean` in Kotlin, use original signature to obtain `remove(Object)`
if (genericSignatureInfo?.isObjectReplacedWithTypeParameter == true)
Pair(originalSignature.asmMethod, originalSignature.valueParameters)
else
Pair(overriddenMethodSignature.asmMethod, overriddenMethodSignature.valueParameters)
JvmMethodGenericSignature(
asmMethod,
valueParameters,
specialGenericSignature
asmMethod,
valueParameters,
specialGenericSignature
)
}
else {
} else {
method.signature()
}
if (commonSignature.asmMethod !in existingMethodsInSuperclasses &&
// If original method already defined in a superclass we mustn't care about specialized version
// The same way we do not generate specialized version in a common case like:
// open class A<T> : MutableList<T> {
// fun add(x: T) = true
// }
// class B : A<String>() // No 'B.add(String)Z'
originalSignature.asmMethod !in existingMethodsInSuperclasses) {
// If original method already defined in a superclass we mustn't care about specialized version
// The same way we do not generate specialized version in a common case like:
// open class A<T> : MutableList<T> {
// fun add(x: T) = true
// }
// class B : A<String>() // No 'B.add(String)Z'
originalSignature.asmMethod !in existingMethodsInSuperclasses
) {
methodStubsToGenerate.add(commonSignature)
if (originalSignature.asmMethod != commonSignature.asmMethod) {
syntheticStubsToGenerate.add(originalSignature)
}
}
}
else {
} else {
// If the fake override is non-abstract, its implementation is already present in the class or inherited from one of its
// super classes, but is not related to the MutableCollection hierarchy. So maybe it uses more specific return types
// and we may need to generate some bridges
@@ -192,13 +191,13 @@ class CollectionStubMethodGenerator(
private fun isDefaultInJdk(method: FunctionDescriptor) =
method.modality != Modality.ABSTRACT &&
method.original.overriddenTreeUniqueAsSequence(useOriginal = true).all {
it.kind == FAKE_OVERRIDE || KotlinBuiltIns.isBuiltIn(it)
}
method.original.overriddenTreeUniqueAsSequence(useOriginal = true).all {
it.kind == FAKE_OVERRIDE || KotlinBuiltIns.isBuiltIn(it)
}
private data class CollectionClassPair(
val readOnlyClass: TypeConstructor,
val mutableClass: TypeConstructor
val readOnlyClass: TypeConstructor,
val mutableClass: TypeConstructor
)
private fun findRelevantSuperCollectionClasses(): Collection<CollectionClassPair> {
@@ -206,14 +205,14 @@ class CollectionStubMethodGenerator(
val collectionClasses = with(descriptor.builtIns) {
listOf(
collection to mutableCollection,
set to mutableSet,
list to mutableList,
map to mutableMap,
mapEntry to mutableMapEntry,
iterable to mutableIterable,
iterator to mutableIterator,
listIterator to mutableListIterator
collection to mutableCollection,
set to mutableSet,
list to mutableList,
map to mutableMap,
mapEntry to mutableMapEntry,
iterable to mutableIterable,
iterator to mutableIterator,
listIterator to mutableListIterator
).map { (readOnly, mutable) ->
pair(readOnly.typeConstructor, mutable.typeConstructor)
}
@@ -234,15 +233,16 @@ class CollectionStubMethodGenerator(
}
private fun findFakeOverridesForMethodsFromMutableCollection(
klass: ClassDescriptor,
mutableCollectionTypeConstructor: TypeConstructor
klass: ClassDescriptor,
mutableCollectionTypeConstructor: TypeConstructor
): List<FunctionDescriptor> {
val result = ArrayList<FunctionDescriptor>()
generateOverridesInAClass(klass, object : NonReportingOverrideStrategy() {
override fun addFakeOverride(fakeOverride: CallableMemberDescriptor) {
if (fakeOverride !is FunctionDescriptor) return
val foundOverriddenFromDirectSuperClass = fakeOverride.findOverriddenFromDirectSuperClass(mutableCollectionTypeConstructor) ?: return
val foundOverriddenFromDirectSuperClass =
fakeOverride.findOverriddenFromDirectSuperClass(mutableCollectionTypeConstructor) ?: return
if (foundOverriddenFromDirectSuperClass.kind == DECLARATION) {
// For regular classes there should no be fake overrides having return types incompatible with return types of their
// overridden, while here it's possible to create declaration like `fun remove(e: E): ImmutableCollection<E>`
@@ -254,23 +254,29 @@ class CollectionStubMethodGenerator(
// `fun iterator(): CharIterator` defined in read-only collection
// The problem is that 'CharIterator' is not a subtype of 'MutableIterator' while from Java's point of view it is,
// so we must hack our subtyping a little bit
val newDescriptor =
if (READ_ONLY_ARE_EQUAL_TO_MUTABLE_TYPE_CHECKER.isSubtypeOf(
fakeOverride.returnType!!, foundOverriddenFromDirectSuperClass.returnType!!))
fakeOverride
else
foundOverriddenFromDirectSuperClass.copy(
fakeOverride.containingDeclaration,
foundOverriddenFromDirectSuperClass.modality,
foundOverriddenFromDirectSuperClass.visibility,
fakeOverride.kind, false)
val newDescriptor =
if (READ_ONLY_ARE_EQUAL_TO_MUTABLE_TYPE_CHECKER.isSubtypeOf(
fakeOverride.returnType!!,
foundOverriddenFromDirectSuperClass.returnType!!
)
)
fakeOverride
else
foundOverriddenFromDirectSuperClass.copy(
fakeOverride.containingDeclaration,
foundOverriddenFromDirectSuperClass.modality,
foundOverriddenFromDirectSuperClass.visibility,
fakeOverride.kind, false
)
newDescriptor.overriddenDescriptors =
fakeOverride.overriddenDescriptors.filter {
superDescriptor ->
// filter out incompatible descriptors, e.g. `fun remove(e: E): ImmutableCollection<E>` for `fun remove(e: E): Boolean`
READ_ONLY_ARE_EQUAL_TO_MUTABLE_TYPE_CHECKER.isSubtypeOf(newDescriptor.returnType!!, superDescriptor.returnType!!)
}
fakeOverride.overriddenDescriptors.filter { superDescriptor ->
// filter out incompatible descriptors, e.g. `fun remove(e: E): ImmutableCollection<E>` for `fun remove(e: E): Boolean`
READ_ONLY_ARE_EQUAL_TO_MUTABLE_TYPE_CHECKER.isSubtypeOf(
newDescriptor.returnType!!,
superDescriptor.returnType!!
)
}
result.add(newDescriptor)
}
@@ -298,11 +304,11 @@ class CollectionStubMethodGenerator(
private fun generateOverridesInAClass(classDescriptor: ClassDescriptor, strategy: OverridingStrategy) {
@Suppress("UNCHECKED_CAST")
val membersFromSupertypesByName =
classDescriptor.typeConstructor.supertypes.flatMapTo(linkedSetOf()) { type ->
DescriptorUtils.getAllDescriptors(type.memberScope).filter {
it is PropertyDescriptor || it is SimpleFunctionDescriptor
} as List<CallableMemberDescriptor>
}.groupBy { it.name }
classDescriptor.typeConstructor.supertypes.flatMapTo(linkedSetOf()) { type ->
DescriptorUtils.getAllDescriptors(type.memberScope).filter {
it is PropertyDescriptor || it is SimpleFunctionDescriptor
} as List<CallableMemberDescriptor>
}.groupBy { it.name }
for ((name, fromSupertypes) in membersFromSupertypesByName) {
OverridingUtil.DEFAULT.generateOverridesInFunctionGroup(name, fromSupertypes, emptyList(), classDescriptor, strategy)
@@ -321,7 +327,7 @@ class CollectionStubMethodGenerator(
)
child.modality = Modality.FINAL
child.visibility = Visibilities.PUBLIC
child.visibility = DescriptorVisibilities.PUBLIC
val typeParameters = descriptor.typeConstructor.parameters
val newTypeParameters = ArrayList<TypeParameterDescriptor>(typeParameters.size)
DescriptorSubstitutor.substituteTypeParameters(typeParameters, TypeSubstitution.EMPTY, child, newTypeParameters)
@@ -330,15 +336,16 @@ class CollectionStubMethodGenerator(
}
private fun FunctionDescriptor.findOverriddenFromDirectSuperClass(typeConstructor: TypeConstructor): FunctionDescriptor? =
this.overriddenDescriptors.firstOrNull {
(it.containingDeclaration as? ClassDescriptor)?.typeConstructor == typeConstructor
}
this.overriddenDescriptors.firstOrNull {
(it.containingDeclaration as? ClassDescriptor)?.typeConstructor == typeConstructor
}
private fun newType(classDescriptor: ClassDescriptor, typeArguments: List<TypeProjection>): KotlinType {
return KotlinTypeFactory.simpleNotNullType(Annotations.EMPTY, classDescriptor, typeArguments)
}
private fun FunctionDescriptor.signature(): JvmMethodGenericSignature = typeMapper.mapSignatureWithGeneric(this, OwnerKind.IMPLEMENTATION)
private fun FunctionDescriptor.signature(): JvmMethodGenericSignature =
typeMapper.mapSignatureWithGeneric(this, OwnerKind.IMPLEMENTATION)
private fun generateMethodStub(v: ClassBuilder, signature: JvmMethodGenericSignature, synthetic: Boolean) {
assert(descriptor.kind != ClassKind.INTERFACE) { "No stubs should be generated for interface ${descriptor.fqNameUnsafe}" }
@@ -349,9 +356,10 @@ class CollectionStubMethodGenerator(
val mv = v.newMethod(CollectionStub, access, asmMethod.name, asmMethod.descriptor, genericSignature, null)
mv.visitCode()
AsmUtil.genThrow(
InstructionAdapter(mv),
"java/lang/UnsupportedOperationException",
"Operation is not supported for read-only collection")
InstructionAdapter(mv),
"java/lang/UnsupportedOperationException",
"Operation is not supported for read-only collection"
)
FunctionCodegen.endVisit(mv, "built-in stub for $signature")
}
}
@@ -360,7 +368,7 @@ private val READ_ONLY_ARE_EQUAL_TO_MUTABLE_TYPE_CHECKER = KotlinTypeCheckerImpl.
val firstClass = x.declarationDescriptor as? ClassDescriptor ?: return@withAxioms x == y
val secondClass = y.declarationDescriptor as? ClassDescriptor ?: return@withAxioms x == y
val j2k = JavaToKotlinClassMap
val j2k = JavaToKotlinClassMapper
val firstReadOnly = if (j2k.isMutable(firstClass)) j2k.convertMutableToReadOnly(firstClass) else firstClass
val secondReadOnly = if (j2k.isMutable(secondClass)) j2k.convertMutableToReadOnly(secondClass) else secondClass
firstReadOnly.typeConstructor == secondReadOnly.typeConstructor

View File

@@ -298,7 +298,7 @@ public class ConstructorCodegen {
int k = 1;
for (FieldInfo info : argsFromClosure) {
k = AsmUtil.genAssignInstanceFieldFromParam(info, k, iv);
k = DescriptorAsmUtil.genAssignInstanceFieldFromParam(info, k, iv);
}
}
}

View File

@@ -127,8 +127,8 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) {
substituteCount: Int
) {
val typeMapper = state.typeMapper
val isStatic = AsmUtil.isStaticMethod(contextKind, functionDescriptor)
val baseMethodFlags = AsmUtil.getCommonCallableFlags(functionDescriptor, state) and Opcodes.ACC_VARARGS.inv()
val isStatic = DescriptorAsmUtil.isStaticMethod(contextKind, functionDescriptor)
val baseMethodFlags = DescriptorAsmUtil.getCommonCallableFlags(functionDescriptor, state) and Opcodes.ACC_VARARGS.inv()
val remainingParameters = getRemainingParameters(functionDescriptor.original, substituteCount)
val remainingParametersDeclarations =
remainingParameters.map { DescriptorToSourceUtils.descriptorToDeclaration(it) as? KtParameter }
@@ -268,7 +268,7 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) {
if (CodegenBinding.canHaveOuter(state.bindingContext, classDescriptor)) return false
if (Visibilities.isPrivate(constructorDescriptor.visibility)) return false
if (DescriptorVisibilities.isPrivate(constructorDescriptor.visibility)) return false
if (constructorDescriptor.valueParameters.isEmpty()) return false
if (classOrObject is KtClass && hasSecondaryConstructorsWithNoParameters(classOrObject)) return false

View File

@@ -0,0 +1,897 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.codegen;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.ArrayUtil;
import kotlin.Unit;
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.binding.CodegenBinding;
import org.jetbrains.kotlin.codegen.context.CodegenContext;
import org.jetbrains.kotlin.codegen.intrinsics.HashCode;
import org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.config.JvmDefaultMode;
import org.jetbrains.kotlin.config.JvmTarget;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.config.LanguageVersionSettings;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil;
import org.jetbrains.kotlin.metadata.jvm.serialization.JvmStringTable;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.protobuf.MessageLite;
import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver;
import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt;
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver;
import org.jetbrains.kotlin.resolve.inline.InlineUtil;
import org.jetbrains.kotlin.resolve.jvm.AsmTypes;
import org.jetbrains.kotlin.resolve.jvm.InlineClassManglingRulesKt;
import org.jetbrains.kotlin.resolve.jvm.RuntimeAssertionInfo;
import org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt;
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin;
import org.jetbrains.kotlin.serialization.DescriptorSerializer;
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor;
import org.jetbrains.kotlin.types.KotlinType;
import org.jetbrains.kotlin.types.SimpleType;
import org.jetbrains.org.objectweb.asm.*;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isBoolean;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveClass;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.CodegenUtilKt.isToArrayFromCollection;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode;
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineWithReified;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
import static org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt.hasJvmSyntheticAnnotation;
import static org.jetbrains.kotlin.types.TypeUtils.isNullableType;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class DescriptorAsmUtil {
private DescriptorAsmUtil() {
}
@NotNull
public static String getNameForCapturedReceiverField(
@NotNull CallableDescriptor descriptor,
@NotNull BindingContext bindingContext,
@NotNull LanguageVersionSettings languageVersionSettings
) {
return getLabeledThisNameForReceiver(
descriptor, bindingContext, languageVersionSettings, LABELED_THIS_FIELD, CAPTURED_RECEIVER_FIELD);
}
@NotNull
public static String getNameForReceiverParameter(
@NotNull CallableDescriptor descriptor,
@NotNull BindingContext bindingContext,
@NotNull LanguageVersionSettings languageVersionSettings
) {
return getLabeledThisNameForReceiver(
descriptor, bindingContext, languageVersionSettings, LABELED_THIS_PARAMETER, RECEIVER_PARAMETER_NAME);
}
@NotNull
private static String getLabeledThisNameForReceiver(
@NotNull CallableDescriptor descriptor,
@NotNull BindingContext bindingContext,
@NotNull LanguageVersionSettings languageVersionSettings,
@NotNull String prefix,
@NotNull String defaultName
) {
if (!languageVersionSettings.supportsFeature(LanguageFeature.NewCapturedReceiverFieldNamingConvention)) {
return defaultName;
}
Name callableName = null;
if (descriptor instanceof FunctionDescriptor) {
String labelName = bindingContext.get(CodegenBinding.CALL_LABEL_FOR_LAMBDA_ARGUMENT, (FunctionDescriptor) descriptor);
if (labelName != null) {
return getLabeledThisName(labelName, prefix, defaultName);
}
if (descriptor instanceof VariableAccessorDescriptor) {
VariableAccessorDescriptor accessor = (VariableAccessorDescriptor) descriptor;
callableName = accessor.getCorrespondingVariable().getName();
}
}
if (callableName == null) {
callableName = descriptor.getName();
}
if (callableName.isSpecial()) {
return defaultName;
}
return getLabeledThisName(callableName.asString(), prefix, defaultName);
}
@NotNull
public static Type boxType(@NotNull Type type, @NotNull KotlinType kotlinType, @NotNull KotlinTypeMapper typeMapper) {
if (InlineClassesUtilsKt.isInlineClassType(kotlinType)) {
return typeMapper.mapTypeAsDeclaration(kotlinType);
}
Type boxedPrimitiveType = boxPrimitiveType(type);
return boxedPrimitiveType != null ? boxedPrimitiveType : type;
}
public static boolean isPrimitiveNumberClassDescriptor(DeclarationDescriptor descriptor) {
if (!(descriptor instanceof ClassDescriptor)) {
return false;
}
return isPrimitiveClass((ClassDescriptor) descriptor) && !isBoolean((ClassDescriptor) descriptor);
}
public static boolean isAbstractMethod(FunctionDescriptor functionDescriptor, OwnerKind kind, JvmDefaultMode jvmDefaultMode) {
return (functionDescriptor.getModality() == Modality.ABSTRACT ||
(isJvmInterface(functionDescriptor.getContainingDeclaration()) && !JvmAnnotationUtilKt
.isCompiledToJvmDefault(functionDescriptor, jvmDefaultMode)))
&& !isStaticMethod(kind, functionDescriptor);
}
public static boolean isStaticMethod(OwnerKind kind, CallableMemberDescriptor functionDescriptor) {
return isStaticKind(kind) ||
KotlinTypeMapper.isStaticAccessor(functionDescriptor) ||
CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(functionDescriptor);
}
public static boolean isStaticKind(OwnerKind kind) {
return kind == OwnerKind.PACKAGE || kind == OwnerKind.DEFAULT_IMPLS || kind == OwnerKind.ERASED_INLINE_CLASS;
}
public static int getMethodAsmFlags(FunctionDescriptor functionDescriptor, OwnerKind kind, GenerationState state) {
return getMethodAsmFlags(functionDescriptor, kind, state.getDeprecationProvider(), state.getJvmDefaultMode());
}
public static int getMethodAsmFlags(
FunctionDescriptor functionDescriptor,
OwnerKind kind,
DeprecationResolver deprecationResolver,
JvmDefaultMode jvmDefaultMode
) {
int flags = getCommonCallableFlags(functionDescriptor, kind, deprecationResolver);
for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.METHOD_FLAGS) {
flags |= flagAnnotation.getJvmFlag(functionDescriptor.getOriginal());
}
if (functionDescriptor.getOriginal().isExternal()) {
flags |= Opcodes.ACC_NATIVE;
}
if (CodegenUtilKt.isJvmStaticInCompanionObject(functionDescriptor)) {
// Native method will be a member of the class, the companion object method will be delegated to it
flags &= ~Opcodes.ACC_NATIVE;
}
if (functionDescriptor.getModality() == Modality.FINAL && !(functionDescriptor instanceof ConstructorDescriptor)) {
DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration();
if (!(containingDeclaration instanceof ClassDescriptor) ||
((ClassDescriptor) containingDeclaration).getKind() != ClassKind.INTERFACE) {
flags |= ACC_FINAL;
}
}
if (isStaticMethod(kind, functionDescriptor)) {
flags |= ACC_STATIC;
}
if (isAbstractMethod(functionDescriptor, kind, jvmDefaultMode)) {
flags |= ACC_ABSTRACT;
}
if (KotlinTypeMapper.isAccessor(functionDescriptor) ||
hasJvmSyntheticAnnotation(functionDescriptor) ||
isInlineClassWrapperConstructor(functionDescriptor, kind) ||
InlineClassDescriptorResolver.isSynthesizedBoxMethod(functionDescriptor) ||
InlineClassDescriptorResolver.isSynthesizedUnboxMethod(functionDescriptor)
) {
flags |= ACC_SYNTHETIC;
}
return flags;
}
private static boolean isInlineClassWrapperConstructor(@NotNull FunctionDescriptor functionDescriptor, @Nullable OwnerKind kind) {
if (!(functionDescriptor instanceof ConstructorDescriptor)) return false;
ClassDescriptor classDescriptor = ((ConstructorDescriptor) functionDescriptor).getConstructedClass();
return classDescriptor.isInline() && kind == OwnerKind.IMPLEMENTATION;
}
public static int getCommonCallableFlags(FunctionDescriptor functionDescriptor, @NotNull GenerationState state) {
return getCommonCallableFlags(functionDescriptor, null, state.getDeprecationProvider());
}
private static int getCommonCallableFlags(
FunctionDescriptor functionDescriptor,
@Nullable OwnerKind kind,
@NotNull DeprecationResolver deprecationResolver
) {
int flags = getVisibilityAccessFlag(functionDescriptor, kind);
flags |= getVarargsFlag(functionDescriptor);
flags |= getDeprecatedAccessFlag(functionDescriptor);
if (deprecationResolver.isDeprecatedHidden(functionDescriptor) ||
isInlineWithReified(functionDescriptor) ||
functionDescriptor.isSuspend() && functionDescriptor.getVisibility().equals(DescriptorVisibilities.PRIVATE)) {
flags |= ACC_SYNTHETIC;
}
return flags;
}
public static int getVisibilityAccessFlag(@NotNull MemberDescriptor descriptor) {
return getVisibilityAccessFlag(descriptor, null);
}
private static int getVisibilityAccessFlag(@NotNull MemberDescriptor descriptor, @Nullable OwnerKind kind) {
Integer specialCase = specialCaseVisibility(descriptor, kind);
if (specialCase != null) {
return specialCase;
}
DescriptorVisibility visibility = descriptor.getVisibility();
Integer defaultMapping = getVisibilityAccessFlag(visibility);
if (defaultMapping == null) {
throw new IllegalStateException(visibility + " is not a valid visibility in backend for " + DescriptorRenderer.DEBUG_TEXT.render(descriptor));
}
return defaultMapping;
}
@Nullable
public static Integer getVisibilityAccessFlag(DescriptorVisibility visibility) {
return AsmUtil.getVisibilityAccessFlag(visibility.getDelegate());
}
/*
Use this method to get visibility flag for class to define it in byte code (v.defineClass method).
For other cases use getVisibilityAccessFlag(MemberDescriptor descriptor)
Classes in byte code should be public or package private
*/
public static int getVisibilityAccessFlagForClass(@NotNull ClassDescriptor descriptor) {
if (descriptor instanceof SyntheticClassDescriptorForLambda) {
return getVisibilityAccessFlagForAnonymous(descriptor);
}
if (descriptor.getKind() == ClassKind.ENUM_ENTRY) {
return NO_FLAG_PACKAGE_PRIVATE;
}
if (descriptor.getVisibility() == DescriptorVisibilities.PUBLIC ||
descriptor.getVisibility() == DescriptorVisibilities.PROTECTED ||
// TODO: should be package private, but for now Kotlin's reflection can't access members of such classes
descriptor.getVisibility() == DescriptorVisibilities.LOCAL ||
descriptor.getVisibility() == DescriptorVisibilities.INTERNAL) {
return ACC_PUBLIC;
}
return NO_FLAG_PACKAGE_PRIVATE;
}
private static int getVisibilityAccessFlagForAnonymous(@NotNull ClassDescriptor descriptor) {
return InlineUtil.isInlineOrContainingInline(descriptor.getContainingDeclaration()) ? ACC_PUBLIC : NO_FLAG_PACKAGE_PRIVATE;
}
public static int getSyntheticAccessFlagForLambdaClass(@NotNull ClassDescriptor descriptor) {
return descriptor instanceof SyntheticClassDescriptorForLambda &&
((SyntheticClassDescriptorForLambda) descriptor).isCallableReference() ? ACC_SYNTHETIC : 0;
}
public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) {
int visibility =
innerClass instanceof SyntheticClassDescriptorForLambda
? getVisibilityAccessFlagForAnonymous(innerClass)
: innerClass.getVisibility() == DescriptorVisibilities.LOCAL
? ACC_PUBLIC
: getVisibilityAccessFlag(innerClass);
return visibility |
getSyntheticAccessFlagForLambdaClass(innerClass) |
innerAccessFlagsForModalityAndKind(innerClass) |
(innerClass.isInner() ? 0 : ACC_STATIC);
}
private static int innerAccessFlagsForModalityAndKind(@NotNull ClassDescriptor innerClass) {
switch (innerClass.getKind()) {
case INTERFACE:
return ACC_ABSTRACT | ACC_INTERFACE;
case ENUM_CLASS:
return ACC_FINAL | ACC_ENUM;
case ANNOTATION_CLASS:
return ACC_ABSTRACT | ACC_ANNOTATION | ACC_INTERFACE;
default:
Modality modality = innerClass.getModality();
if (modality == Modality.FINAL) {
return ACC_FINAL;
}
else if (modality == Modality.ABSTRACT || modality == Modality.SEALED) {
return ACC_ABSTRACT;
}
}
return 0;
}
public static int getDeprecatedAccessFlag(@NotNull MemberDescriptor descriptor) {
if (descriptor instanceof PropertyAccessorDescriptor) {
return KotlinBuiltIns.isDeprecated(descriptor)
? ACC_DEPRECATED
: getDeprecatedAccessFlag(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty());
}
else if (KotlinBuiltIns.isDeprecated(descriptor)) {
return ACC_DEPRECATED;
}
return 0;
}
private static int getVarargsFlag(FunctionDescriptor functionDescriptor) {
if (!functionDescriptor.getValueParameters().isEmpty()
&& functionDescriptor.getValueParameters().get(functionDescriptor.getValueParameters().size() - 1)
.getVarargElementType() != null) {
return ACC_VARARGS;
}
return 0;
}
@Nullable
private static Integer specialCaseVisibility(@NotNull MemberDescriptor memberDescriptor, @Nullable OwnerKind kind) {
DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration();
DescriptorVisibility memberVisibility = memberDescriptor.getVisibility();
if (JvmCodegenUtil.isNonIntrinsicPrivateCompanionObjectInInterface(memberDescriptor)) {
return ACC_PUBLIC;
}
if (memberDescriptor instanceof FunctionDescriptor &&
isInlineClassWrapperConstructor((FunctionDescriptor) memberDescriptor, kind)) {
return ACC_PRIVATE;
}
if (kind != OwnerKind.ERASED_INLINE_CLASS &&
memberDescriptor instanceof ConstructorDescriptor &&
!(memberDescriptor instanceof AccessorForConstructorDescriptor) &&
InlineClassManglingRulesKt.shouldHideConstructorDueToInlineClassTypeValueParameters((ConstructorDescriptor) memberDescriptor)
) {
return ACC_PRIVATE;
}
if (isInlineOnlyPrivateInBytecode(memberDescriptor)) {
return ACC_PRIVATE;
}
if (memberVisibility == DescriptorVisibilities.LOCAL && memberDescriptor instanceof CallableMemberDescriptor) {
return ACC_PUBLIC;
}
if (isEnumEntry(memberDescriptor)) {
return NO_FLAG_PACKAGE_PRIVATE;
}
if (isToArrayFromCollection(memberDescriptor)) {
return ACC_PUBLIC;
}
if (memberDescriptor instanceof ConstructorDescriptor && isAnonymousObject(memberDescriptor.getContainingDeclaration())) {
return getVisibilityAccessFlagForAnonymous((ClassDescriptor) memberDescriptor.getContainingDeclaration());
}
if (memberDescriptor instanceof SyntheticJavaPropertyDescriptor) {
return getVisibilityAccessFlag(((SyntheticJavaPropertyDescriptor) memberDescriptor).getGetMethod());
}
if (memberDescriptor instanceof PropertyAccessorDescriptor) {
PropertyDescriptor property = ((PropertyAccessorDescriptor) memberDescriptor).getCorrespondingProperty();
if (property instanceof SyntheticJavaPropertyDescriptor) {
FunctionDescriptor method = memberDescriptor == property.getGetter()
? ((SyntheticJavaPropertyDescriptor) property).getGetMethod()
: ((SyntheticJavaPropertyDescriptor) property).getSetMethod();
assert method != null : "No get/set method in SyntheticJavaPropertyDescriptor: " + property;
return getVisibilityAccessFlag(method);
}
}
if (memberDescriptor instanceof CallableDescriptor && memberVisibility == DescriptorVisibilities.PROTECTED) {
for (CallableDescriptor overridden : DescriptorUtils.getAllOverriddenDescriptors((CallableDescriptor) memberDescriptor)) {
if (isJvmInterface(overridden.getContainingDeclaration())) {
return ACC_PUBLIC;
}
}
}
if (!DescriptorVisibilities.isPrivate(memberVisibility)) {
return null;
}
if (memberDescriptor instanceof FunctionDescriptor && ((FunctionDescriptor) memberDescriptor).isSuspend()) {
return NO_FLAG_PACKAGE_PRIVATE;
}
if (memberDescriptor instanceof AccessorForCompanionObjectInstanceFieldDescriptor) {
return NO_FLAG_PACKAGE_PRIVATE;
}
if (memberDescriptor instanceof ConstructorDescriptor && isEnumEntry(containingDeclaration)) {
return NO_FLAG_PACKAGE_PRIVATE;
}
return null;
}
public static void genClosureFields(
@NotNull CalculatedClosure closure,
ClassBuilder v,
KotlinTypeMapper typeMapper,
@NotNull LanguageVersionSettings languageVersionSettings
) {
List<Pair<String, Type>> allFields = new ArrayList<>();
ClassifierDescriptor captureThis = closure.getCapturedOuterClassDescriptor();
if (captureThis != null) {
allFields.add(Pair.create(CAPTURED_THIS_FIELD, typeMapper.mapType(captureThis)));
}
KotlinType captureReceiverType = closure.getCapturedReceiverFromOuterContext();
if (captureReceiverType != null && !CallableReferenceUtilKt.isForCallableReference(closure)) {
String fieldName = closure.getCapturedReceiverFieldName(typeMapper.getBindingContext(), languageVersionSettings);
allFields.add(Pair.create(fieldName, typeMapper.mapType(captureReceiverType)));
}
allFields.addAll(closure.getRecordedFields());
genClosureFields(allFields, v);
}
public static void genClosureFields(List<Pair<String, Type>> allFields, ClassBuilder builder) {
int access = NO_FLAG_PACKAGE_PRIVATE | ACC_SYNTHETIC | ACC_FINAL;
for (Pair<String, Type> field : allFields) {
builder.newField(JvmDeclarationOrigin.NO_ORIGIN, access, field.first, field.second.getDescriptor(), null, null);
}
}
public static int genAssignInstanceFieldFromParam(FieldInfo info, int index, InstructionAdapter iv) {
return genAssignInstanceFieldFromParam(info, index, iv, 0, false);
}
public static int genAssignInstanceFieldFromParam(
FieldInfo info,
int index,
InstructionAdapter iv,
int ownerIndex,
boolean cast
) {
assert !info.isStatic();
Type fieldType = info.getFieldType();
KotlinType fieldKotlinType = info.getFieldKotlinType();
KotlinType nullableAny;
if (fieldKotlinType != null) {
nullableAny = fieldKotlinType.getConstructor().getBuiltIns().getNullableAnyType();
} else {
nullableAny = null;
}
iv.load(ownerIndex, info.getOwnerType());//this
if (cast) {
iv.load(index, AsmTypes.OBJECT_TYPE); //param
StackValue.coerce(AsmTypes.OBJECT_TYPE, nullableAny, fieldType, fieldKotlinType, iv);
} else {
iv.load(index, fieldType); //param
}
iv.visitFieldInsn(PUTFIELD, info.getOwnerInternalName(), info.getFieldName(), fieldType.getDescriptor());
index += fieldType.getSize();
return index;
}
public static void genInvokeAppendMethod(
@NotNull StringConcatGenerator generator,
@NotNull Type type,
@Nullable KotlinType kotlinType,
@Nullable KotlinTypeMapper typeMapper,
@NotNull StackValue stackValue
) {
CallableMethod specializedToString = getSpecializedToStringCallableMethodOrNull(kotlinType, typeMapper);
if (specializedToString != null) {
stackValue.put(type, kotlinType, generator.getMv());
specializedToString.genInvokeInstruction(generator.getMv());
generator.invokeAppend(AsmTypes.JAVA_STRING_TYPE);
}
else if (kotlinType != null && InlineClassesUtilsKt.isInlineClassType(kotlinType)) {
SimpleType nullableAnyType = kotlinType.getConstructor().getBuiltIns().getNullableAnyType();
stackValue.put(type, kotlinType, generator.getMv());
StackValue.coerce(type, kotlinType, OBJECT_TYPE, nullableAnyType, generator.getMv());
generator.invokeAppend(OBJECT_TYPE);
}
else {
generator.putValueOrProcessConstant(stackValue, type, kotlinType);
}
}
public static StackValue genToString(
@NotNull StackValue receiver,
@NotNull Type receiverType,
@Nullable KotlinType receiverKotlinType,
@Nullable KotlinTypeMapper typeMapper
) {
return StackValue.operation(JAVA_STRING_TYPE, v -> {
CallableMethod specializedToString = getSpecializedToStringCallableMethodOrNull(receiverKotlinType, typeMapper);
if (specializedToString != null) {
receiver.put(receiverType, receiverKotlinType, v);
specializedToString.genInvokeInstruction(v);
return null;
}
Type type;
KotlinType kotlinType;
if (receiverKotlinType != null && InlineClassesUtilsKt.isInlineClassType(receiverKotlinType)) {
type = OBJECT_TYPE;
kotlinType = receiverKotlinType.getConstructor().getBuiltIns().getNullableAnyType();
}
else {
type = stringValueOfType(receiverType);
kotlinType = null;
}
receiver.put(type, kotlinType, v);
v.invokestatic("java/lang/String", "valueOf", "(" + type.getDescriptor() + ")Ljava/lang/String;", false);
return null;
});
}
@Nullable
private static CallableMethod getSpecializedToStringCallableMethodOrNull(
@Nullable KotlinType receiverKotlinType,
@Nullable KotlinTypeMapper typeMapper
) {
if (typeMapper == null) return null;
if (receiverKotlinType == null) return null;
if (!InlineClassesUtilsKt.isInlineClassType(receiverKotlinType)) return null;
if (receiverKotlinType.isMarkedNullable()) return null;
DeclarationDescriptor receiverTypeDescriptor = receiverKotlinType.getConstructor().getDeclarationDescriptor();
assert receiverTypeDescriptor instanceof ClassDescriptor && ((ClassDescriptor) receiverTypeDescriptor).isInline() :
"Inline class type expected: " + receiverKotlinType;
ClassDescriptor receiverClassDescriptor = (ClassDescriptor) receiverTypeDescriptor;
FunctionDescriptor toStringDescriptor = receiverClassDescriptor.getUnsubstitutedMemberScope()
.getContributedFunctions(Name.identifier("toString"), NoLookupLocation.FROM_BACKEND)
.stream()
.filter(
f -> f.getValueParameters().size() == 0
&& KotlinBuiltIns.isString(f.getReturnType())
&& f.getDispatchReceiverParameter() != null
&& f.getExtensionReceiverParameter() == null
)
.findFirst()
.orElseThrow(() -> new AssertionError("'toString' not found in member scope of " + receiverClassDescriptor));
return typeMapper.mapToCallableMethod(toStringDescriptor, false, OwnerKind.ERASED_INLINE_CLASS);
}
public static void genHashCode(MethodVisitor mv, InstructionAdapter iv, Type type, JvmTarget jvmTarget) {
if (type.getSort() == Type.ARRAY) {
Type elementType = correctElementType(type);
if (elementType.getSort() == Type.OBJECT || elementType.getSort() == Type.ARRAY) {
iv.invokestatic("java/util/Arrays", "hashCode", "([Ljava/lang/Object;)I", false);
}
else {
iv.invokestatic("java/util/Arrays", "hashCode", "(" + type.getDescriptor() + ")I", false);
}
}
else if (type.getSort() == Type.OBJECT) {
iv.invokevirtual("java/lang/Object", "hashCode", "()I", false);
}
else if (type.getSort() == Type.BOOLEAN) {
Label end = new Label();
iv.dup();
iv.ifeq(end);
iv.pop();
iv.iconst(1);
iv.mark(end);
}
else {
if (JvmTarget.JVM_1_6 == jvmTarget) {
if (type.getSort() == Type.LONG) {
genLongHashCode(mv, iv);
}
else if (type.getSort() == Type.DOUBLE) {
iv.invokestatic("java/lang/Double", "doubleToLongBits", "(D)J", false);
genLongHashCode(mv, iv);
}
else if (type.getSort() == Type.FLOAT) {
iv.invokestatic("java/lang/Float", "floatToIntBits", "(F)I", false);
}
else { // byte short char int
// do nothing
}
} else {
HashCode.Companion.invokeHashCode(iv, type);
}
}
}
private static void genLongHashCode(MethodVisitor mv, InstructionAdapter iv) {
iv.dup2();
iv.iconst(32);
iv.ushr(Type.LONG_TYPE);
iv.xor(Type.LONG_TYPE);
mv.visitInsn(L2I);
}
@NotNull
public static StackValue genEqualsForExpressionsOnStack(
@NotNull IElementType opToken,
@NotNull StackValue left,
@NotNull StackValue right
) {
Type leftType = left.type;
Type rightType = right.type;
if (isPrimitive(leftType) && leftType == rightType) {
return StackValue.cmp(opToken, leftType, left, right);
}
return StackValue.operation(Type.BOOLEAN_TYPE, v -> {
left.put(AsmTypes.OBJECT_TYPE, left.kotlinType, v);
right.put(AsmTypes.OBJECT_TYPE, right.kotlinType, v);
return genAreEqualCall(v, opToken);
});
}
@NotNull
public static BranchedValue genTotalOrderEqualsForExpressionOnStack(
@NotNull StackValue left,
@NotNull StackValue right,
@NotNull Type asmType
) {
return new BranchedValue(left, right, asmType, Opcodes.IFEQ) {
@Override
public void condJump(@NotNull Label jumpLabel, @NotNull InstructionAdapter iv, boolean jumpIfFalse) {
if (asmType.getSort() == Type.FLOAT) {
left.put(asmType, kotlinType, iv);
right.put(asmType, kotlinType, iv);
iv.invokestatic("java/lang/Float", "compare", "(FF)I", false);
iv.visitJumpInsn(patchOpcode(jumpIfFalse ? Opcodes.IFNE : Opcodes.IFEQ, iv), jumpLabel);
} else if (asmType.getSort() == Type.DOUBLE) {
left.put(asmType, kotlinType, iv);
right.put(asmType, kotlinType, iv);
iv.invokestatic("java/lang/Double", "compare", "(DD)I", false);
iv.visitJumpInsn(patchOpcode(jumpIfFalse ? Opcodes.IFNE : Opcodes.IFEQ, iv), jumpLabel);
} else {
StackValue value = genEqualsForExpressionsOnStack(KtTokens.EQEQ, left, right);
BranchedValue.Companion.condJump(value, jumpLabel, jumpIfFalse, iv);
}
}
};
}
@NotNull
public static StackValue genEqualsBoxedOnStack(@NotNull IElementType opToken) {
return StackValue.operation(Type.BOOLEAN_TYPE, v -> genAreEqualCall(v, opToken));
}
public static void genAreEqualCall(InstructionAdapter v) {
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "areEqual", "(Ljava/lang/Object;Ljava/lang/Object;)Z", false);
}
@NotNull
private static Unit genAreEqualCall(InstructionAdapter v, @NotNull IElementType opToken) {
genAreEqualCall(v);
if (opToken == KtTokens.EXCLEQ || opToken == KtTokens.EXCLEQEQEQ) {
genInvertBoolean(v);
}
return Unit.INSTANCE;
}
public static void genIEEE754EqualForNullableTypesCall(InstructionAdapter v, Type left, Type right) {
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "areEqual", "(" + left.getDescriptor() + right.getDescriptor() + ")Z", false);
}
public static void genIncrement(Type baseType, int myDelta, InstructionAdapter v) {
Type operationType = numberFunctionOperandType(baseType);
numConst(myDelta, operationType, v);
v.add(operationType);
StackValue.coerce(operationType, baseType, v);
}
static void genNotNullAssertionsForParameters(
@NotNull InstructionAdapter v,
@NotNull GenerationState state,
@NotNull FunctionDescriptor descriptor,
@NotNull FrameMap frameMap
) {
if (state.isParamAssertionsDisabled()) return;
// currently when resuming a suspend function we pass default values instead of real arguments (i.e. nulls for references)
if (descriptor.isSuspend()) return;
if (getVisibilityAccessFlag(descriptor) == ACC_PRIVATE) {
// Private method is not accessible from other classes, no assertions needed,
// unless we have a private operator function, in which we should generate a parameter assertion for an extension receiver.
// HACK: this provides "fail fast" behavior for operator functions.
// Such functions can be invoked in operator conventions desugaring,
// which is currently done on ad hoc basis in ExpressionCodegen.
if (state.isReceiverAssertionsDisabled()) return;
if (descriptor.isOperator()) {
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
if (receiverParameter != null) {
String name = getNameForReceiverParameter(descriptor, state.getBindingContext(), state.getLanguageVersionSettings());
genParamAssertion(v, state, frameMap, receiverParameter, name, descriptor);
}
}
return;
}
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
if (receiverParameter != null) {
String name = getNameForReceiverParameter(descriptor, state.getBindingContext(), state.getLanguageVersionSettings());
genParamAssertion(v, state, frameMap, receiverParameter, name, descriptor);
}
for (ValueParameterDescriptor parameter : descriptor.getValueParameters()) {
genParamAssertion(v, state, frameMap, parameter, parameter.getName().asString(), descriptor);
}
}
private static void genParamAssertion(
@NotNull InstructionAdapter v,
@NotNull GenerationState state,
@NotNull FrameMap frameMap,
@NotNull ParameterDescriptor parameter,
@NotNull String name,
@NotNull FunctionDescriptor containingDeclaration
) {
KotlinType type = parameter.getType();
if (isNullableType(type) || InlineClassesUtilsKt.isNullableUnderlyingType(type)) return;
Type asmType = state.getTypeMapper().mapType(type);
if (asmType.getSort() == Type.OBJECT || asmType.getSort() == Type.ARRAY) {
StackValue value;
if (JvmCodegenUtil.isDeclarationOfBigArityFunctionInvoke(containingDeclaration) ||
JvmCodegenUtil.isDeclarationOfBigArityCreateCoroutineMethod(containingDeclaration)) {
int index = getIndexOfParameterInVarargInvokeArray(parameter);
value = StackValue.arrayElement(
OBJECT_TYPE, null, StackValue.local(1, getArrayType(OBJECT_TYPE)), StackValue.constant(index)
);
}
else {
int index = frameMap.getIndex(parameter);
value = StackValue.local(index, asmType);
}
value.put(asmType, v);
v.visitLdcInsn(name);
String methodName = state.getUnifiedNullChecks() ? "checkNotNullParameter" : "checkParameterIsNotNull";
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, methodName, "(Ljava/lang/Object;Ljava/lang/String;)V", false);
}
}
@NotNull
public static StackValue genNotNullAssertions(
@NotNull GenerationState state,
@NotNull StackValue stackValue,
@Nullable RuntimeAssertionInfo runtimeAssertionInfo
) {
if (state.isCallAssertionsDisabled()) return stackValue;
if (runtimeAssertionInfo == null || !runtimeAssertionInfo.getNeedNotNullAssertion()) return stackValue;
return new StackValue(stackValue.type, stackValue.kotlinType) {
@Override
public void putSelector(@NotNull Type type, @Nullable KotlinType kotlinType, @NotNull InstructionAdapter v) {
Type innerType = stackValue.type;
KotlinType innerKotlinType = stackValue.kotlinType;
stackValue.put(innerType, innerKotlinType, v);
if (innerType.getSort() == Type.OBJECT || innerType.getSort() == Type.ARRAY) {
v.dup();
v.visitLdcInsn(runtimeAssertionInfo.getMessage());
String methodName = state.getUnifiedNullChecks() ? "checkNotNullExpressionValue" : "checkExpressionValueIsNotNull";
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, methodName, "(Ljava/lang/Object;Ljava/lang/String;)V", false);
}
StackValue.coerce(innerType, innerKotlinType, type, kotlinType, v);
}
};
}
private static int getIndexOfParameterInVarargInvokeArray(@NotNull ParameterDescriptor parameter) {
if (parameter instanceof ReceiverParameterDescriptor) return 0;
DeclarationDescriptor container = parameter.getContainingDeclaration();
assert parameter instanceof ValueParameterDescriptor : "Non-extension-receiver parameter must be a value parameter: " + parameter;
int extensionShift = ((CallableDescriptor) container).getExtensionReceiverParameter() == null ? 0 : 1;
return extensionShift + ((ValueParameterDescriptor) parameter).getIndex();
}
// At the beginning of the vararg invoke of a function with big arity N, generates an assert that the vararg parameter has N elements
public static void generateVarargInvokeArityAssert(InstructionAdapter v, int functionArity) {
Label start = new Label();
v.load(1, getArrayType(OBJECT_TYPE));
v.arraylength();
v.iconst(functionArity);
v.ificmpeq(start);
v.visitLdcInsn("Vararg argument must contain " + functionArity + " elements.");
v.invokestatic(IntrinsicMethods.INTRINSICS_CLASS_NAME, "throwIllegalArgument", "(Ljava/lang/String;)V", false);
v.visitLabel(start);
}
public static boolean isInstancePropertyWithStaticBackingField(@NotNull PropertyDescriptor propertyDescriptor) {
return propertyDescriptor.getKind() != CallableMemberDescriptor.Kind.FAKE_OVERRIDE &&
isObject(propertyDescriptor.getContainingDeclaration());
}
public static int getVisibilityForBackingField(@NotNull PropertyDescriptor propertyDescriptor, boolean isDelegate) {
boolean isExtensionProperty = propertyDescriptor.getExtensionReceiverParameter() != null;
if (isDelegate || isExtensionProperty) {
return ACC_PRIVATE;
}
else {
return propertyDescriptor.isLateInit() || isConstOrHasJvmFieldAnnotation(propertyDescriptor)
? getVisibilityAccessFlag(descriptorForVisibility(propertyDescriptor))
: ACC_PRIVATE;
}
}
private static MemberDescriptor descriptorForVisibility(@NotNull PropertyDescriptor propertyDescriptor) {
if (!propertyDescriptor.isVar()) {
return propertyDescriptor;
}
else {
return propertyDescriptor.getSetter() != null ? propertyDescriptor.getSetter() : propertyDescriptor;
}
}
public static boolean isPropertyWithBackingFieldCopyInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) {
DeclarationDescriptor propertyContainer = propertyDescriptor.getContainingDeclaration();
return propertyDescriptor.isConst()
&& isCompanionObject(propertyContainer) && isJvmInterface(propertyContainer.getContainingDeclaration())
&& getVisibilityForBackingField(propertyDescriptor, false) == ACC_PUBLIC;
}
public static void writeAnnotationData(
@NotNull AnnotationVisitor av,
@NotNull DescriptorSerializer serializer,
@NotNull MessageLite message
) {
writeAnnotationData(av, message, (JvmStringTable) serializer.getStringTable());
}
public static void writeAnnotationData(
@NotNull AnnotationVisitor av, @NotNull MessageLite message, @NotNull JvmStringTable stringTable
) {
AsmUtil.writeAnnotationData(av, JvmProtoBufUtil.writeData(message, stringTable), ArrayUtil.toStringArray(stringTable.getStrings()));
}
public static void putJavaLangClassInstance(
@NotNull InstructionAdapter v,
@NotNull Type type,
@Nullable KotlinType kotlinType,
@NotNull KotlinTypeMapper typeMapper
) {
if (kotlinType != null && InlineClassesUtilsKt.isInlineClassType(kotlinType)) {
v.aconst(boxType(type, kotlinType, typeMapper));
}
else if (isPrimitive(type)) {
v.getstatic(AsmUtil.boxType(type).getInternalName(), "TYPE", "Ljava/lang/Class;");
}
else {
v.aconst(type);
}
}
public static int getReceiverIndex(@NotNull CodegenContext context, @NotNull CallableMemberDescriptor descriptor) {
OwnerKind kind = context.getContextKind();
//Trait always should have this descriptor
return kind != OwnerKind.DEFAULT_IMPLS && isStaticMethod(kind, descriptor) ? 0 : 1;
}
}

View File

@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.codegen.AsmUtil.genTotalOrderEqualsForExpressionOnStack
import org.jetbrains.kotlin.codegen.DescriptorAsmUtil.genTotalOrderEqualsForExpressionOnStack
import org.jetbrains.kotlin.codegen.context.ClassContext
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper

View File

@@ -51,9 +51,9 @@ import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor;
import org.jetbrains.kotlin.diagnostics.Errors;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
import org.jetbrains.kotlin.load.kotlin.DescriptorBasedTypeSignatureMappingKt;
import org.jetbrains.kotlin.load.kotlin.MethodSignatureMappingKt;
import org.jetbrains.kotlin.load.kotlin.TypeSignatureMappingKt;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt;
@@ -97,8 +97,11 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isInt;
import static org.jetbrains.kotlin.codegen.AsmUtil.boxType;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.CodegenUtilKt.*;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.boxType;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.*;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.*;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.*;
import static org.jetbrains.kotlin.codegen.inline.InlineCodegenUtilsKt.*;
@@ -173,7 +176,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
return null;
}
static class BlockStackElement {
public static class BlockStackElement {
}
static class LoopBlockStackElement extends BlockStackElement {
@@ -312,6 +315,8 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
stackValue = suspendFunctionTypeWrapperIfNeeded(selector, stackValue);
stackValue = coerceAndBoxInlineClassIfNeeded(selector, stackValue);
RuntimeAssertionInfo runtimeAssertionInfo = null;
if (selector instanceof KtExpression) {
KtExpression expression = (KtExpression) selector;
@@ -360,6 +365,53 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
return stackValue;
}
private StackValue coerceAndBoxInlineClassIfNeeded(KtElement selector, StackValue stackValue) {
ResolvedCall<? extends CallableDescriptor> resolvedCall = CallUtilKt.getResolvedCall(selector, bindingContext);
if (resolvedCall == null) return stackValue;
CallableDescriptor descriptor = resolvedCall.getResultingDescriptor();
if (!(descriptor instanceof FunctionDescriptor)) return stackValue;
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
if (!functionDescriptor.isSuspend()) return stackValue;
KotlinType unboxedInlineClass = CoroutineCodegenUtilKt
.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(functionDescriptor, typeMapper);
StackValue stackValueToWrap = stackValue;
KotlinType originalKotlinType;
if (unboxedInlineClass != null) {
originalKotlinType = unboxedInlineClass;
} else {
originalKotlinType = stackValueToWrap.kotlinType;
}
Type originalType;
if (unboxedInlineClass != null) {
originalType = typeMapper.mapType(unboxedInlineClass);
} else {
originalType = stackValueToWrap.type;
}
stackValue = new StackValue(originalType, originalKotlinType) {
@Override
public void putSelector(
@NotNull Type type, @Nullable KotlinType kotlinType, @NotNull InstructionAdapter v
) {
if (((originalKotlinType != null && InlineClassesUtilsKt.isInlineClassType(originalKotlinType)) ||
(kotlinType != null && InlineClassesUtilsKt.isInlineClassType(kotlinType)))
) {
stackValueToWrap.put(v);
// Suspend functions always return Ljava/lang/Object;, so, before inline-class boxing/unboxing we need to generate CHECKCAST
StackValue.coerce(OBJECT_TYPE, originalType, v);
// Box/unbox inline class
StackValue.coerce(originalType, originalKotlinType, type, kotlinType, v);
} else {
// No inline class -> usual coerce is enough
stackValueToWrap.put(type, kotlinType, v);
}
}
};
return stackValue;
}
public StackValue gen(KtElement expr) {
StackValue tempVar = tempVariables.get(expr);
return tempVar != null ? tempVar : genQualified(StackValue.none(), expr);
@@ -873,28 +925,27 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
}
else {
return StackValue.operation(type, v -> {
genStringBuilderConstructor(v);
invokeAppendForEntries(v, entries);
v.invokevirtual("java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false);
StringConcatGenerator generator = StringConcatGenerator.Companion.create(state, v);
generator.genStringBuilderConstructorIfNeded();
invokeAppendForEntries(generator, entries);
generator.genToString();
return Unit.INSTANCE;
});
}
}
private void invokeAppendForEntries(InstructionAdapter v, List<StringTemplateEntry> entries) {
private void invokeAppendForEntries(StringConcatGenerator generator, List<StringTemplateEntry> entries) {
for (StringTemplateEntry entry : entries) {
if (entry instanceof StringTemplateEntry.Expression) {
invokeAppend(v, ((StringTemplateEntry.Expression) entry).expression);
invokeAppend(generator, ((StringTemplateEntry.Expression) entry).expression);
}
else {
String value = ((StringTemplateEntry.Constant) entry).value;
if (value.length() == 1) {
v.iconst(value.charAt(0));
genInvokeAppendMethod(v, Type.CHAR_TYPE, null);
generator.putValueOrProcessConstant(StackValue.constant(value.charAt(0), Type.CHAR_TYPE, null));
}
else {
v.aconst(value);
genInvokeAppendMethod(v, JAVA_STRING_TYPE, null);
generator.addStringConstant(value);
}
}
}
@@ -1476,7 +1527,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
assert !functionIndex.isEmpty();
String localVariableName = AsmUtil.LOCAL_FUNCTION_VARIABLE_PREFIX
+ VariableAsmNameManglingUtils.mangleNameIfNeeded(functionDescriptor.getName().asString())
+ CommonVariableAsmNameManglingUtils.mangleNameIfNeeded(functionDescriptor.getName().asString())
+ "$" + functionIndex;
v.visitLocalVariable(localVariableName, type.getDescriptor(), null, scopeStart, blockEnd, index);
@@ -1654,12 +1705,32 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
Type returnType;
KotlinType returnKotlinType;
if (isNonLocalReturn) {
returnType = nonLocalReturn.returnType.getType();
returnKotlinType = nonLocalReturn.returnType.getKotlinType();
// This is inline lambda. Find inline-site and check, whether it is suspend functions returning unboxed inline class
CodegenContext<?> inlineSiteContext = this.context.getFirstCrossInlineOrNonInlineContext();
KotlinType originalInlineClass = null;
if (inlineSiteContext instanceof MethodContext) {
originalInlineClass = CoroutineCodegenUtilKt
.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(
((MethodContext) inlineSiteContext).getFunctionDescriptor(), typeMapper);
}
if (originalInlineClass != null) {
returnType = typeMapper.mapType(originalInlineClass);
returnKotlinType = originalInlineClass;
} else {
returnType = nonLocalReturn.returnType.getType();
returnKotlinType = nonLocalReturn.returnType.getKotlinType();
}
}
else {
returnType = this.returnType;
returnKotlinType = typeMapper.getReturnValueType(this.context.getFunctionDescriptor());
KotlinType originalInlineClass = CoroutineCodegenUtilKt
.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(context.getFunctionDescriptor(), typeMapper);
if (originalInlineClass != null) {
returnType = typeMapper.mapType(originalInlineClass);
returnKotlinType = originalInlineClass;
} else {
returnType = this.returnType;
returnKotlinType = this.context.getFunctionDescriptor().getReturnType();
}
}
StackValue valueToReturn = returnedExpression != null ? gen(returnedExpression) : StackValue.none();
@@ -1714,7 +1785,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
return new NonLocalReturnInfo(
new JvmKotlinType(
typeMapper.mapReturnType(containingFunction),
typeMapper.getReturnValueType(containingFunction)
containingFunction.getReturnType()
),
FIRST_FUN_LABEL
);
@@ -1744,18 +1815,27 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
FunctionDescriptor originalSuspendLambdaDescriptor = getOriginalSuspendLambdaDescriptorFromContext(context);
boolean isVoidCoroutineLambda =
originalSuspendLambdaDescriptor != null && TypeSignatureMappingKt.hasVoidReturnType(originalSuspendLambdaDescriptor);
originalSuspendLambdaDescriptor != null && DescriptorBasedTypeSignatureMappingKt
.hasVoidReturnType(originalSuspendLambdaDescriptor);
KotlinType originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass =
CoroutineCodegenUtilKt.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(
context.getFunctionDescriptor(), typeMapper);
// If generating body for named block-bodied function or Unit-typed coroutine lambda, generate it as sequence of statements
Type typeForExpression =
isBlockedNamedFunction || isVoidCoroutineLambda
? Type.VOID_TYPE
: returnType;
: originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass != null
? typeMapper.mapType(originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass)
: returnType;
KotlinType kotlinTypeForExpression =
isBlockedNamedFunction || isVoidCoroutineLambda
? null
: typeMapper.getReturnValueType(context.getFunctionDescriptor());
: originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass != null
? originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass
: context.getFunctionDescriptor().getReturnType();
gen(expr, typeForExpression, kotlinTypeForExpression);
@@ -2174,14 +2254,14 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration();
boolean isBackingFieldMovedFromCompanion = JvmAbi.isPropertyWithBackingFieldInOuterClass(propertyDescriptor);
boolean isBackingFieldMovedFromCompanion = DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(propertyDescriptor);
AccessorKind fieldAccessorKind;
if (skipLateinitAssertion) {
fieldAccessorKind = AccessorKind.LATEINIT_INTRINSIC;
}
else if (isBackingFieldMovedFromCompanion &&
(forceField ||
(Visibilities.isPrivate(propertyDescriptor.getVisibility()) &&
(DescriptorVisibilities.isPrivate(propertyDescriptor.getVisibility()) &&
isDefaultAccessor(propertyDescriptor.getGetter()) && isDefaultAccessor(propertyDescriptor.getSetter())))) {
fieldAccessorKind = JvmCodegenUtil.isDebuggerContext(context) ? AccessorKind.NORMAL : AccessorKind.IN_CLASS_COMPANION;
}
@@ -2194,7 +2274,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
fieldAccessorKind = AccessorKind.NORMAL;
}
boolean isStaticBackingField = DescriptorUtils.isStaticDeclaration(propertyDescriptor) ||
AsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor);
DescriptorAsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor);
boolean isSuper = superCallTarget != null;
boolean isExtensionProperty = propertyDescriptor.getExtensionReceiverParameter() != null;
@@ -2207,7 +2287,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
CodegenContext<?> backingFieldContext = getBackingFieldContext(fieldAccessorKind, containingDeclaration);
boolean isPrivateProperty =
fieldAccessorKind != AccessorKind.NORMAL &&
(AsmUtil.getVisibilityForBackingField(propertyDescriptor, isDelegatedProperty) & ACC_PRIVATE) != 0;
(DescriptorAsmUtil.getVisibilityForBackingField(propertyDescriptor, isDelegatedProperty) & ACC_PRIVATE) != 0;
DeclarationDescriptor ownerDescriptor;
boolean skipPropertyAccessors;
@@ -2224,8 +2304,9 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
if (!skipPropertyAccessors) {
if (isBackingFieldMovedFromCompanion && context.getContextDescriptor() instanceof AccessorForPropertyBackingField) {
propertyDescriptor = (PropertyDescriptor) backingFieldContext.getParentContext()
.getAccessor(propertyDescriptor, AccessorKind.IN_CLASS_COMPANION, delegateType, superCallTarget);
CodegenContext<?> parentContext = backingFieldContext.getParentContext();
propertyDescriptor =
parentContext.getAccessor(propertyDescriptor, AccessorKind.IN_CLASS_COMPANION, delegateType, superCallTarget);
}
else {
propertyDescriptor =
@@ -2253,7 +2334,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
skipPropertyAccessors = forceField;
if (JvmCodegenUtil.isDebuggerContext(context)
&& Visibilities.isPrivate(propertyDescriptor.getVisibility())
&& DescriptorVisibilities.isPrivate(propertyDescriptor.getVisibility())
&& bindingContext.get(BACKING_FIELD_REQUIRED, propertyDescriptor) == Boolean.TRUE
) {
skipPropertyAccessors = true;
@@ -2612,7 +2693,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
SuspensionPointKind suspensionPointKind =
CoroutineCodegenUtilKt.isSuspensionPoint(resolvedCall, this, state.getLanguageVersionSettings());
boolean maybeSuspensionPoint = suspensionPointKind != SuspensionPointKind.NEVER;
boolean maybeSuspensionPoint = suspensionPointKind != SuspensionPointKind.NEVER && !insideCallableReference();
boolean isConstructor = resolvedCall.getResultingDescriptor() instanceof ConstructorDescriptor;
if (!(callableMethod instanceof IntrinsicWithSpecialReceiver)) {
putReceiverAndInlineMarkerIfNeeded(callableMethod, resolvedCall, receiver, maybeSuspensionPoint, isConstructor);
@@ -2656,11 +2737,23 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
callGenerator.genCall(callableMethod, resolvedCall, defaultMaskWasGenerated, this);
if (maybeSuspensionPoint) {
// The order is important! Do not reorder!
// CoroutineTransformerMethodVisitor expects the marker exactly in this order.
addReturnsUnitMarkerIfNecessary(v, resolvedCall);
addSuspendMarker(v, false, suspensionPointKind == SuspensionPointKind.NOT_INLINE);
addUnboxInlineClassMarkersIfNeeded(v, resolvedCall.getResultingDescriptor(), typeMapper);
addInlineMarker(v, false);
}
// If a suspend function returns unboxed inline class, we should check for COROUTINE_SUSPENDED and only then box the inline class.
if (insideCallableReference() && resolvedCall.getResultingDescriptor() instanceof FunctionDescriptor) {
KotlinType unboxedInlineClass = CoroutineCodegenUtilKt.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(
(FunctionDescriptor) resolvedCall.getResultingDescriptor(), typeMapper);
if (unboxedInlineClass != null) {
CoroutineCodegenUtilKt.generateCoroutineSuspendedCheck(v, state.getLanguageVersionSettings());
}
}
KotlinType returnType = resolvedCall.getResultingDescriptor().getReturnType();
if (returnType != null && KotlinBuiltIns.isNothing(returnType)) {
if (state.getUseKotlinNothingValueException()) {
@@ -2674,6 +2767,10 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
}
}
private boolean insideCallableReference() {
return (parentCodegen instanceof ClosureCodegen) && ((ClosureCodegen) parentCodegen).isCallableReference();
}
private void putReceiverAndInlineMarkerIfNeeded(
@NotNull Callable callableMethod,
@NotNull ResolvedCall<?> resolvedCall,
@@ -2742,7 +2839,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
myFrameMap.leaveTemp(firstReceiverType);
}
callableMethod.afterReceiverGeneration(v, myFrameMap);
callableMethod.afterReceiverGeneration(v, myFrameMap, state);
}
}
@@ -2835,7 +2932,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
TypeApproximator approximator = new TypeApproximator(state.getModule().getBuiltIns());
KotlinType approximatedType =
CapturedTypeConstructorKt.isCaptured(type) ?
TypeUtils.contains(type, (containedType) -> CapturedTypeConstructorKt.isCaptured(containedType)) ?
(KotlinType) approximator.approximateToSuperType(
type, TypeApproximatorConfiguration.InternalTypesApproximation.INSTANCE
) : null;
@@ -2936,7 +3033,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
return null;
}
int accessFlag = AsmUtil.getVisibilityAccessFlag(companionObjectDescriptor);
int accessFlag = DescriptorAsmUtil.getVisibilityAccessFlag(companionObjectDescriptor);
CodegenContext context = contextBeforeInline.getFirstCrossInlineOrNonInlineContext();
boolean isInlineMethodContext = context.isInlineMethodContext();
@@ -3906,7 +4003,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
Type rightType = right754Type.isNullable ? AsmUtil.boxType(right754Type.type) : right754Type.type;
gen(right, rightType);
AsmUtil.genIEEE754EqualForNullableTypesCall(v, leftType, rightType);
DescriptorAsmUtil.genIEEE754EqualForNullableTypesCall(v, leftType, rightType);
if (opToken == KtTokens.EXCLEQ) {
genInvertBoolean(v);
@@ -4103,15 +4200,14 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
TypeAndNullability right754Type = calcTypeForIeee754ArithmeticIfNeeded(right, getRightOperandType(primitiveNumericComparisonInfo));
boolean isSame754ArithmeticTypes = left754Type != null && right754Type != null && left754Type.type.equals(right754Type.type);
boolean properIeee754Comparisons = shouldUseProperIeee754Comparisons();
boolean isStandardCompareTo = primitiveNumericComparisonInfo != null;
if (properIeee754Comparisons && left754Type != null && right754Type != null) {
if (properIeee754Comparisons && isStandardCompareTo && left754Type != null && right754Type != null) {
type = comparisonOperandType(left754Type.type, right754Type.type);
//type = comparisonOperandType(leftType, rightType);
leftValue = gen(left);
rightValue = gen(right);
}
else if (!properIeee754Comparisons &&
state.getIntrinsics().getIntrinsic((FunctionDescriptor) resolvedCall.getResultingDescriptor()) instanceof CompareTo &&
else if (!properIeee754Comparisons && isStandardCompareTo &&
((isPrimitive(leftType) && isPrimitive(rightType)) || isSame754ArithmeticTypes)) {
type = isSame754ArithmeticTypes ? left754Type.type : comparisonOperandType(leftType, rightType);
leftValue = gen(left);
@@ -4204,7 +4300,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
}
}
public void invokeAppend(InstructionAdapter v, KtExpression expr) {
public void invokeAppend(StringConcatGenerator generator, KtExpression expr) {
expr = KtPsiUtil.safeDeparenthesize(expr);
ConstantValue<?> compileTimeConstant = getPrimitiveOrStringCompileTimeConstant(expr);
@@ -4218,28 +4314,29 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
Type leftType = expressionType(left);
if (leftType.equals(JAVA_STRING_TYPE)) {
invokeAppend(v, left);
invokeAppend(v, right);
invokeAppend(generator, left);
invokeAppend(generator, right);
return;
}
}
}
else if (expr instanceof KtStringTemplateExpression) {
List<StringTemplateEntry> entries = preprocessStringTemplate((KtStringTemplateExpression) expr);
invokeAppendForEntries(v, entries);
invokeAppendForEntries(generator, entries);
return;
}
}
Type exprType = expressionType(expr);
KotlinType exprKotlinType = kotlinType(expr);
StackValue value;
if (compileTimeConstant != null) {
StackValue.constant(compileTimeConstant.getValue(), exprType, exprKotlinType).put(exprType, exprKotlinType, v);
value = StackValue.constant(compileTimeConstant.getValue(), exprType, exprKotlinType);
} else {
gen(expr, exprType, exprKotlinType);
value = gen(expr);
}
genInvokeAppendMethod(v, exprType, exprKotlinType, typeMapper);
genInvokeAppendMethod(generator, exprType, exprKotlinType, typeMapper, value);
}
@Nullable
@@ -5051,7 +5148,9 @@ The "returned" value of try expression with no finally is either the last expres
return Unit.INSTANCE;
}
CodegenUtilKt.generateAsCast(v, rightKotlinType, boxedRightType, safeAs, state.getLanguageVersionSettings());
CodegenUtilKt.generateAsCast(
v, rightKotlinType, boxedRightType, safeAs, state.getLanguageVersionSettings(), state.getUnifiedNullChecks()
);
return Unit.INSTANCE;
});

View File

@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.codegen;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.CompanionObjectMapping;
import org.jetbrains.kotlin.builtins.CompanionObjectMappingUtilsKt;
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.load.java.JvmAbi;
@@ -24,7 +25,7 @@ public class FieldInfo {
throw new UnsupportedOperationException("Can't create singleton field for class: " + classDescriptor);
}
if (isNonCompanionObject(classDescriptor) || CompanionObjectMapping.INSTANCE.isMappedIntrinsicCompanionObject(classDescriptor)) {
if (isNonCompanionObject(classDescriptor) || CompanionObjectMappingUtilsKt.isMappedIntrinsicCompanionObject(CompanionObjectMapping.INSTANCE, classDescriptor)) {
return createSingletonViaInstance(classDescriptor, typeMapper, JvmAbi.INSTANCE_FIELD);
}

View File

@@ -67,13 +67,15 @@ import java.io.StringWriter;
import java.util.*;
import java.util.stream.Collectors;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.CAPTURED_THIS_FIELD;
import static org.jetbrains.kotlin.codegen.AsmUtil.boxType;
import static org.jetbrains.kotlin.codegen.CodegenUtilKt.generateBridgeForMainFunctionIfNecessary;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.*;
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.METHOD_FOR_FUNCTION;
import static org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.isAccessor;
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION;
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION;
import static org.jetbrains.kotlin.descriptors.ModalityKt.isOverridable;
import static org.jetbrains.kotlin.descriptors.ModalityUtilsKt.isOverridable;
import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.getSourceFromDescriptor;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode;
@@ -83,6 +85,8 @@ import static org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils.*;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
public class FunctionCodegen {
private static final String JAVA_LANG_DEPRECATED = Type.getType(Deprecated.class).getDescriptor();
public final GenerationState state;
private final KotlinTypeMapper typeMapper;
private final BindingContext bindingContext;
@@ -221,7 +225,7 @@ public class FunctionCodegen {
InlineClassDescriptorResolver.isSpecializedEqualsMethod(functionDescriptor);
generateMethodAnnotationsIfRequired(
functionDescriptor, asmMethod, jvmSignature, mv,
isCompatibilityStubInDefaultImpls ? Collections.singletonList(Deprecated.class) : Collections.emptyList(),
isCompatibilityStubInDefaultImpls ? Collections.singletonList(JAVA_LANG_DEPRECATED) : Collections.emptyList(),
skipNullabilityAnnotations
);
GenerateJava8ParameterNamesKt.generateParameterNames(functionDescriptor, mv, jvmSignature, state, (flags & ACC_SYNTHETIC) != 0);
@@ -285,7 +289,7 @@ public class FunctionCodegen {
@NotNull Method asmMethod,
@NotNull JvmMethodGenericSignature jvmSignature,
@NotNull MethodVisitor mv,
@NotNull List<Class<?>> additionalNoArgAnnotations,
@NotNull List<String> additionalVisibleAnnotations,
boolean skipNullabilityAnnotations
) {
FunctionDescriptor annotationsOwner;
@@ -302,7 +306,7 @@ public class FunctionCodegen {
}
AnnotationCodegen.forMethod(mv, memberCodegen, state, skipNullabilityAnnotations)
.genAnnotations(annotationsOwner, asmMethod.getReturnType(), functionDescriptor.getReturnType(), null, additionalNoArgAnnotations);
.genAnnotations(annotationsOwner, asmMethod.getReturnType(), functionDescriptor.getReturnType(), null, additionalVisibleAnnotations);
generateParameterAnnotations(
annotationsOwner, mv, jvmSignature,
@@ -607,7 +611,7 @@ public class FunctionCodegen {
else if (isCompatibilityStubInDefaultImpls(functionDescriptor, context, jvmDefaultMode)) {
FunctionDescriptor compatibility = ((DefaultImplsClassContext) context.getParentContext()).getInterfaceContext()
.getAccessorForJvmDefaultCompatibility(functionDescriptor);
int flags = AsmUtil.getMethodAsmFlags(functionDescriptor, OwnerKind.DEFAULT_IMPLS, context.getState());
int flags = DescriptorAsmUtil.getMethodAsmFlags(functionDescriptor, OwnerKind.DEFAULT_IMPLS, context.getState());
assert (flags & Opcodes.ACC_ABSTRACT) == 0 : "Interface method with body should be non-abstract" + functionDescriptor;
CallableMethod method = typeMapper.mapToCallableMethod(compatibility, false);
@@ -759,7 +763,7 @@ public class FunctionCodegen {
generateLocalVariablesForParameters(mv,
jvmMethodSignature, functionDescriptor,
thisType, methodBegin, methodEnd, functionDescriptor.getValueParameters(),
AsmUtil.isStaticMethod(ownerKind, functionDescriptor), state
DescriptorAsmUtil.isStaticMethod(ownerKind, functionDescriptor), state
);
}
@@ -807,7 +811,7 @@ public class FunctionCodegen {
: nameForDestructuredParameter;
break;
case RECEIVER:
parameterName = AsmUtil.getNameForReceiverParameter(
parameterName = DescriptorAsmUtil.getNameForReceiverParameter(
functionDescriptor, typeMapper.getBindingContext(), state.getLanguageVersionSettings());
break;
case OUTER:
@@ -1058,7 +1062,7 @@ public class FunctionCodegen {
// or all return types are supertypes of inline class (and can't be inline classes).
for (DescriptorBasedFunctionHandleForJvm handle : bridge.getOriginalFunctions()) {
return state.getTypeMapper().getReturnValueType(handle.getDescriptor());
return handle.getDescriptor().getReturnType();
}
if (state.getClassBuilderMode().mightBeIncorrectCode) {
@@ -1150,7 +1154,7 @@ public class FunctionCodegen {
// $default methods are never private to be accessible from other class files (e.g. inner) without the need of synthetic accessors
// $default methods are never protected to be accessible from subclass nested classes
int visibilityFlag =
Visibilities.isPrivate(functionDescriptor.getVisibility()) || isInlineOnlyPrivateInBytecode(functionDescriptor)
DescriptorVisibilities.isPrivate(functionDescriptor.getVisibility()) || isInlineOnlyPrivateInBytecode(functionDescriptor)
? AsmUtil.NO_FLAG_PACKAGE_PRIVATE : Opcodes.ACC_PUBLIC;
int flags = visibilityFlag | getDeprecatedAccessFlag(functionDescriptor) | ACC_SYNTHETIC;
if (!(functionDescriptor instanceof ConstructorDescriptor &&
@@ -1409,7 +1413,7 @@ public class FunctionCodegen {
if (isVarargInvoke) {
assert argTypes.length == 1 && argTypes[0].equals(AsmUtil.getArrayType(OBJECT_TYPE)) :
"Vararg invoke must have one parameter of type [Ljava/lang/Object;: " + bridge;
AsmUtil.generateVarargInvokeArityAssert(iv, originalArgTypes.length);
DescriptorAsmUtil.generateVarargInvokeArityAssert(iv, originalArgTypes.length);
}
else {
assert argTypes.length == originalArgTypes.length :
@@ -1455,7 +1459,7 @@ public class FunctionCodegen {
}
}
KotlinType returnValueType = state.getTypeMapper().getReturnValueType(descriptor);
KotlinType returnValueType = descriptor.getReturnType();
StackValue.coerce(delegateTo.getReturnType(), returnValueType, bridge.getReturnType(), bridgeReturnType, iv);
iv.areturn(bridge.getReturnType());
@@ -1614,7 +1618,7 @@ public class FunctionCodegen {
}
//noinspection ConstantConditions
StackValue stackValue = AsmUtil.genNotNullAssertions(
StackValue stackValue = DescriptorAsmUtil.genNotNullAssertions(
state,
StackValue.onStack(delegateToMethod.getReturnType(), delegatedTo.getReturnType()),
RuntimeAssertionInfo.create(
@@ -1675,7 +1679,8 @@ public class FunctionCodegen {
assert isInterface(containingDeclaration) : "'processInterfaceMethod' method should be called only for interfaces, but: " +
containingDeclaration;
if (JvmAnnotationUtilKt.isCompiledToJvmDefault(memberDescriptor, mode)) {
// Fake overrides in interfaces should be expanded to implementation to make proper default check
if (JvmAnnotationUtilKt.checkIsImplementationCompiledToJvmDefault(memberDescriptor, mode)) {
return (kind != OwnerKind.DEFAULT_IMPLS && !isSynthetic) ||
(kind == OwnerKind.DEFAULT_IMPLS &&
(isSynthetic || //TODO: move synthetic method generation into interface
@@ -1683,7 +1688,7 @@ public class FunctionCodegen {
} else {
switch (kind) {
case DEFAULT_IMPLS: return true;
case IMPLEMENTATION: return !Visibilities.isPrivate(memberDescriptor.getVisibility()) && !isDefault && !isSynthetic;
case IMPLEMENTATION: return !DescriptorVisibilities.isPrivate(memberDescriptor.getVisibility()) && !isDefault && !isSynthetic;
default: return false;
}
}

View File

@@ -11,6 +11,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.FunctionsFromAnyGenerator;
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext;
import org.jetbrains.kotlin.codegen.context.MethodContext;
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings;
import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
@@ -29,10 +30,12 @@ import org.jetbrains.org.objectweb.asm.Label;
import org.jetbrains.org.objectweb.asm.MethodVisitor;
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.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.*;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.JAVA_STRING_TYPE;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -78,7 +81,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
MethodContext context = fieldOwnerContext.intoFunction(function);
JvmDeclarationOrigin methodOrigin = JvmDeclarationOriginKt.OtherOrigin(function);
String toStringMethodName = mapFunctionName(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), toStringMethodName, getToStringDesc(), null, null);
String toStringMethodDesc = getToStringDesc();
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), toStringMethodName, toStringMethodDesc, null, null);
if (!isInErasedInlineClass && classDescriptor.isInline()) {
FunctionCodegen.generateMethodInsideInlineClassWrapper(methodOrigin, function, classDescriptor, mv, typeMapper);
@@ -97,18 +101,19 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
InstructionAdapter iv = new InstructionAdapter(mv);
mv.visitCode();
genStringBuilderConstructor(iv);
StringConcatGenerator generator = StringConcatGenerator.Companion.create(generationState, iv);
generator.genStringBuilderConstructorIfNeded();
boolean first = true;
for (PropertyDescriptor propertyDescriptor : properties) {
if (first) {
iv.aconst(classDescriptor.getName() + "(" + propertyDescriptor.getName().asString() + "=");
generator.addStringConstant(classDescriptor.getName() + "(" + propertyDescriptor.getName().asString() + "=");
first = false;
}
else {
iv.aconst(", " + propertyDescriptor.getName().asString() + "=");
generator.addStringConstant(", " + propertyDescriptor.getName().asString() + "=");
}
genInvokeAppendMethod(iv, JAVA_STRING_TYPE, null);
JvmKotlinType type = genOrLoadOnStack(iv, context, propertyDescriptor, 0);
Type asmType = type.getType();
@@ -127,16 +132,23 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
kotlinType = DescriptorUtilsKt.getBuiltIns(function).getStringType();
}
}
genInvokeAppendMethod(iv, asmType, kotlinType, typeMapper);
genInvokeAppendMethod(generator, asmType, kotlinType, typeMapper, StackValue.onStack(asmType));
}
iv.aconst(")");
genInvokeAppendMethod(iv, JAVA_STRING_TYPE, null);
generator.addStringConstant(")");
iv.invokevirtual("java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false);
generator.genToString();
iv.areturn(JAVA_STRING_TYPE);
FunctionCodegen.endVisit(mv, toStringMethodName, getDeclaration());
recordMethodForFunctionIfRequired(function, toStringMethodName, toStringMethodDesc);
}
private void recordMethodForFunctionIfRequired(@NotNull FunctionDescriptor function, @NotNull String name, @NotNull String desc) {
if (isInErasedInlineClass) {
v.getSerializationBindings().put(JvmSerializationBindings.METHOD_FOR_FUNCTION, function, new Method(name, desc));
}
}
@Override
@@ -146,7 +158,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
MethodContext context = fieldOwnerContext.intoFunction(function);
JvmDeclarationOrigin methodOrigin = JvmDeclarationOriginKt.OtherOrigin(function);
String hashCodeMethodName = mapFunctionName(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), hashCodeMethodName, getHashCodeDesc(), null, null);
String hashCodeMethodDesc = getHashCodeDesc();
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), hashCodeMethodName, hashCodeMethodDesc, null, null);
if (!isInErasedInlineClass && classDescriptor.isInline()) {
FunctionCodegen.generateMethodInsideInlineClassWrapper(methodOrigin, function, classDescriptor, mv, typeMapper);
@@ -202,6 +215,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
mv.visitInsn(IRETURN);
FunctionCodegen.endVisit(mv, hashCodeMethodName, getDeclaration());
recordMethodForFunctionIfRequired(function, hashCodeMethodName, hashCodeMethodDesc);
}
private String mapFunctionName(@NotNull FunctionDescriptor functionDescriptor) {
@@ -215,7 +230,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
MethodContext context = fieldOwnerContext.intoFunction(function);
JvmDeclarationOrigin methodOrigin = JvmDeclarationOriginKt.OtherOrigin(function);
String equalsMethodName = mapFunctionName(function);
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), equalsMethodName, getEqualsDesc(), null, null);
String equalsMethodDesc = getEqualsDesc();
MethodVisitor mv = v.newMethod(methodOrigin, getAccess(), equalsMethodName, equalsMethodDesc, null, null);
if (!isInErasedInlineClass && classDescriptor.isInline()) {
FunctionCodegen.generateMethodInsideInlineClassWrapper(methodOrigin, function, classDescriptor, mv, typeMapper);
@@ -266,6 +282,8 @@ public class FunctionsFromAnyGeneratorImpl extends FunctionsFromAnyGenerator {
iv.areturn(Type.INT_TYPE);
FunctionCodegen.endVisit(mv, equalsMethodName, getDeclaration());
recordMethodForFunctionIfRequired(function, equalsMethodName, equalsMethodDesc);
}
private static void visitEndForAnnotationVisitor(@Nullable AnnotationVisitor annotation) {

View File

@@ -62,13 +62,18 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.builtins.StandardNames.ENUM_VALUES;
import static org.jetbrains.kotlin.builtins.StandardNames.ENUM_VALUE_OF;
import static org.jetbrains.kotlin.codegen.AsmUtil.CAPTURED_THIS_FIELD;
import static org.jetbrains.kotlin.codegen.CodegenUtilKt.isGenericToArray;
import static org.jetbrains.kotlin.codegen.CodegenUtilKt.isNonGenericToArray;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.*;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.*;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedSubclass;
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.getDelegatedLocalVariableMetadata;
import static org.jetbrains.kotlin.load.java.JvmAbi.*;
import static org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil.*;
import static org.jetbrains.kotlin.load.java.JvmAbi.HIDDEN_INSTANCE_FIELD;
import static org.jetbrains.kotlin.load.java.JvmAbi.INSTANCE_FIELD;
import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_GET;
import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_SET;
import static org.jetbrains.kotlin.resolve.BindingContextUtils.getNotNull;
@@ -814,7 +819,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
}
if (properVisibilityForCompanionObjectInstanceField &&
JvmCodegenUtil.isCompanionObjectInInterfaceNotIntrinsic(companionObjectDescriptor) &&
Visibilities.isPrivate(companionObjectDescriptor.getVisibility())) {
DescriptorVisibilities.isPrivate(companionObjectDescriptor.getVisibility())) {
fieldAccessFlags |= ACC_SYNTHETIC;
}
StackValue.Field field = StackValue.singleton(companionObjectDescriptor, typeMapper);

View File

@@ -65,7 +65,7 @@ class InterfaceImplBodyCodegen(
if (memberDescriptor !is CallableMemberDescriptor) continue
if (memberDescriptor.kind.isReal) continue
if (memberDescriptor.visibility == Visibilities.INVISIBLE_FAKE) continue
if (memberDescriptor.visibility == DescriptorVisibilities.INVISIBLE_FAKE) continue
if (memberDescriptor.modality == Modality.ABSTRACT) continue
val implementation = findImplementationFromInterface(memberDescriptor) ?: continue

View File

@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMapper
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
@@ -42,7 +42,7 @@ class JvmBackendClassResolverForModuleWithDependencies(
val platformClass = moduleDescriptor.findClassAcrossModuleDependencies(type.classId) ?: return emptyList()
return JavaToKotlinClassMap.mapPlatformClass(platformClass) + platformClass
return JavaToKotlinClassMapper.mapPlatformClass(platformClass) + platformClass
}
}
@@ -54,4 +54,4 @@ val Type.classId: ClassId
val classRelativeNameWithDollars = if (lastDotIndex >= 0) className.substring(lastDotIndex + 1) else className
val classFQN = FqName(classRelativeNameWithDollars.replace('$', '.'))
return ClassId(packageFQN, classFQN, false)
}
}

View File

@@ -12,6 +12,8 @@ import kotlin.text.StringsKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.CodegenUtil;
import org.jetbrains.kotlin.builtins.StandardNames;
import org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity;
import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor;
import org.jetbrains.kotlin.codegen.binding.CalculatedClosure;
import org.jetbrains.kotlin.codegen.context.CodegenContext;
@@ -27,7 +29,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor;
import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor;
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt;
@@ -106,7 +108,7 @@ public class JvmCodegenUtil {
boolean isDelegate = descriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION;
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration().getOriginal();
if (JvmAbi.isPropertyWithBackingFieldInOuterClass(descriptor)) {
if (DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(descriptor)) {
// For property with backed field, check if the access is done in the same class containing the backed field and
// not the class that declared the field.
containingDeclaration = containingDeclaration.getContainingDeclaration();
@@ -219,7 +221,7 @@ public class JvmCodegenUtil {
if (DescriptorPsiUtilsKt.hasBody(accessor)) return false;
// If the accessor is private or final, it can't be overridden in the subclass and thus we can use direct access
return Visibilities.isPrivate(accessor.getVisibility()) || accessor.getModality() == FINAL;
return DescriptorVisibilities.isPrivate(accessor.getVisibility()) || accessor.getModality() == FINAL;
}
public static boolean isDebuggerContext(@NotNull CodegenContext context) {
@@ -338,12 +340,12 @@ public class JvmCodegenUtil {
public static boolean isCompanionObjectInInterfaceNotIntrinsic(@NotNull DeclarationDescriptor companionObject) {
return isCompanionObject(companionObject) &&
isJvmInterface(companionObject.getContainingDeclaration()) &&
!JvmAbi.isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject);
!DescriptorsJvmAbiUtil.isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject);
}
public static boolean isNonIntrinsicPrivateCompanionObjectInInterface(@NotNull DeclarationDescriptorWithVisibility companionObject) {
return isCompanionObjectInInterfaceNotIntrinsic(companionObject) &&
Visibilities.isPrivate(companionObject.getVisibility());
DescriptorVisibilities.isPrivate(companionObject.getVisibility());
}
public static boolean isDeclarationOfBigArityFunctionInvoke(@Nullable DeclarationDescriptor descriptor) {
@@ -352,7 +354,7 @@ public class JvmCodegenUtil {
public static boolean isDeclarationOfBigArityCreateCoroutineMethod(@Nullable DeclarationDescriptor descriptor) {
return descriptor instanceof SimpleFunctionDescriptor && descriptor.getName().asString().equals(SUSPEND_FUNCTION_CREATE_METHOD_NAME) &&
((SimpleFunctionDescriptor) descriptor).getValueParameters().size() >= FunctionInvokeDescriptor.BIG_ARITY - 1 &&
((SimpleFunctionDescriptor) descriptor).getValueParameters().size() >= BuiltInFunctionArity.BIG_ARITY - 1 &&
descriptor.getContainingDeclaration() instanceof AnonymousFunctionDescriptor && ((AnonymousFunctionDescriptor) descriptor.getContainingDeclaration()).isSuspend();
}
@@ -404,7 +406,7 @@ public class JvmCodegenUtil {
// The Result class is the only inline class in the standard library without special rules for equality.
// We only call Result.equals-impl0 if we are compiling for Kotlin 1.4 or later. Otherwise, the code
// might well be running against an older version of the standard library.
if (DescriptorUtils.getFqNameSafe(classDescriptor).equals(DescriptorUtils.RESULT_FQ_NAME)) {
if (DescriptorUtils.getFqNameSafe(classDescriptor).equals(StandardNames.RESULT_FQ_NAME)) {
return state.getLanguageVersionSettings().getApiVersion().compareTo(ApiVersion.KOTLIN_1_4) >= 0;
} else {
return ((DeserializedClassDescriptor) descriptor).getMetadataVersion().isAtLeast(1, 1, 16);

View File

@@ -24,6 +24,8 @@ import org.jetbrains.kotlin.resolve.calls.checkers.isRestrictsSuspensionReceiver
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
class JvmRuntimeTypes(
module: ModuleDescriptor,
@@ -84,7 +86,7 @@ class JvmRuntimeTypes(
packageFragment, classKind, false, false, Name.identifier(name), SourceElement.NO_SOURCE, LockBasedStorageManager.NO_LOCKS
).apply {
modality = Modality.FINAL
visibility = Visibilities.PUBLIC
visibility = DescriptorVisibilities.PUBLIC
setTypeParameterDescriptors(emptyList())
createTypeConstructor()
}
@@ -96,6 +98,14 @@ class JvmRuntimeTypes(
else
descriptor
if (actualFunctionDescriptor.returnType == null)
throw KotlinExceptionWithAttachments(
"Return type for function description is null. Super type cannot be calculated." +
"initDesc=${descriptor}, actDesc=${actualFunctionDescriptor}, isReleaseCoroutines=${
languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
}"
)
val functionType = createFunctionType(
descriptor.builtIns,
Annotations.EMPTY,
@@ -152,7 +162,7 @@ class JvmRuntimeTypes(
referencedFunction.isSuspend || isSuspendConversion
)
val suspendFunctionType = if (referencedFunction.isSuspend) suspendFunctionInterface?.defaultType else null
val suspendFunctionType = if (referencedFunction.isSuspend || isSuspendConversion) suspendFunctionInterface?.defaultType else null
val superClass = when {
generateOptimizedCallableReferenceSuperClasses -> when {
isAdaptedCallableReference || isSuspendConversion -> adaptedFunctionReference

View File

@@ -25,7 +25,8 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
import org.jetbrains.kotlin.load.java.JavaVisibilities;
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.name.SpecialNames;
@@ -56,8 +57,8 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.calculateInnerClassAccessFlags;
import static org.jetbrains.kotlin.codegen.AsmUtil.isPrimitive;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.calculateInnerClassAccessFlags;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isNonDefaultInterfaceMember;
import static org.jetbrains.kotlin.codegen.inline.InlineCodegenUtilsKt.getInlineName;
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED;
@@ -257,7 +258,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
@NotNull Method syntheticMethod,
@NotNull Annotations annotations
) {
int flags = ACC_DEPRECATED | ACC_STATIC | ACC_SYNTHETIC | AsmUtil.getVisibilityAccessFlag(descriptor);
int flags = ACC_DEPRECATED | ACC_STATIC | ACC_SYNTHETIC | DescriptorAsmUtil.getVisibilityAccessFlag(descriptor);
MethodVisitor mv = v.newMethod(JvmDeclarationOriginKt.OtherOrigin(descriptor), flags, syntheticMethod.getName(),
syntheticMethod.getDescriptor(), null, null);
AnnotationCodegen.forMethod(mv, this, state).genAnnotations(new AnnotatedImpl(annotations), Type.VOID_TYPE, null);
@@ -468,7 +469,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
Name.special("<clinit>"), SYNTHESIZED, KotlinSourceElementKt.toSourceElement(element));
clInit.initialize(null, null, Collections.emptyList(), Collections.emptyList(),
DescriptorUtilsKt.getModule(descriptor).getBuiltIns().getUnitType(),
Modality.FINAL, Visibilities.PRIVATE);
Modality.FINAL, DescriptorVisibilities.PRIVATE);
return clInit;
}
@@ -726,7 +727,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
public SourceMapper getOrCreateSourceMapper() {
if (sourceMapper == null) {
// note: this is used in InlineCodegen and the element is always physical (KtElement) there
sourceMapper = new SourceMapper(SourceInfo.Companion.createInfo((KtElement)element, getClassName()));
sourceMapper = new SourceMapper(SourceInfo.Companion.createFromPsi((KtElement)element, getClassName()));
}
return sourceMapper;
}
@@ -877,11 +878,11 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
AccessorKind fieldAccessorKind = accessor instanceof AccessorForPropertyBackingField
? accessor.getAccessorKind() : null;
boolean syntheticBackingField = fieldAccessorKind == AccessorKind.FIELD_FROM_LOCAL;
boolean forceFieldForCompanionProperty = JvmAbi.isPropertyWithBackingFieldInOuterClass(original) &&
boolean forceFieldForCompanionProperty = DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(original) &&
!isCompanionObject(accessor.getContainingDeclaration());
boolean forceField = forceFieldForCompanionProperty ||
syntheticBackingField ||
original.getVisibility() == JavaVisibilities.PROTECTED_STATIC_VISIBILITY;
original.getVisibility() == JavaDescriptorVisibilities.PROTECTED_STATIC_VISIBILITY;
StackValue property = codegen.intermediateValueForProperty(
original, forceField, syntheticBackingField, accessor.getSuperCallTarget(),
forceFieldForCompanionProperty, StackValue.none(), null,

View File

@@ -224,8 +224,8 @@ class MultifileClassCodegenImpl(
}
private fun shouldGenerateInFacade(descriptor: MemberDescriptor): Boolean {
if (Visibilities.isPrivate(descriptor.visibility)) return false
if (AsmUtil.getVisibilityAccessFlag(descriptor) == Opcodes.ACC_PRIVATE) return false
if (DescriptorVisibilities.isPrivate(descriptor.visibility)) return false
if (DescriptorAsmUtil.getVisibilityAccessFlag(descriptor) == Opcodes.ACC_PRIVATE) return false
if (!state.classBuilderMode.generateBodies) return true

View File

@@ -97,7 +97,7 @@ class MultifileClassPartCodegen(
val extraFlags = if (shouldGeneratePartHierarchy) JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG else 0
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART, extraFlags) { av ->
AsmUtil.writeAnnotationData(av, serializer, packageProto)
DescriptorAsmUtil.writeAnnotationData(av, serializer, packageProto)
av.visit(JvmAnnotationNames.METADATA_MULTIFILE_CLASS_NAME_FIELD_NAME, facadeClassType.internalName)
val kotlinPackageFqName = element.packageFqName

View File

@@ -43,7 +43,7 @@ import org.jetbrains.org.objectweb.asm.Type;
import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.writeAnnotationData;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.writeAnnotationData;
import static org.jetbrains.kotlin.load.java.JvmAnnotationNames.METADATA_PACKAGE_NAME_FIELD_NAME;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;

View File

@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext;
@@ -43,8 +44,8 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.List;
import static org.jetbrains.kotlin.codegen.AsmUtil.getDeprecatedAccessFlag;
import static org.jetbrains.kotlin.codegen.AsmUtil.getVisibilityForBackingField;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.getDeprecatedAccessFlag;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.getVisibilityForBackingField;
import static org.jetbrains.kotlin.codegen.FunctionCodegen.processInterfaceMethod;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
@@ -159,7 +160,7 @@ public class PropertyCodegen {
private void genBackingFieldAndAnnotations(@NotNull PropertyDescriptor descriptor) {
// Fields and '$annotations' methods for non-private const properties are generated in the multi-file facade
boolean isBackingFieldOwner = descriptor.isConst() && !Visibilities.isPrivate(descriptor.getVisibility())
boolean isBackingFieldOwner = descriptor.isConst() && !DescriptorVisibilities.isPrivate(descriptor.getVisibility())
? !(context instanceof MultifileClassPartContext)
: CodegenContextUtil.isImplementationOwner(context, descriptor);
@@ -217,7 +218,7 @@ public class PropertyCodegen {
// and setter, in this case, the property can always be accessed through the accessor 'access<property name>$cp' and avoid some
// useless indirection by using others accessors.
if (isCompanionObject(descriptor.getContainingDeclaration())) {
if (Visibilities.isPrivate(descriptor.getVisibility()) && isDefaultGetterAndSetter) {
if (DescriptorVisibilities.isPrivate(descriptor.getVisibility()) && isDefaultGetterAndSetter) {
return false;
}
return true;
@@ -227,14 +228,14 @@ public class PropertyCodegen {
if (isTopLevelInJvmMultifileClass(descriptor)) return true;
// Private class properties have accessors only in cases when those accessors are non-trivial
if (Visibilities.isPrivate(descriptor.getVisibility())) {
if (DescriptorVisibilities.isPrivate(descriptor.getVisibility())) {
return !isDefaultAccessor;
}
// Non-private properties with private setter should not be generated for trivial properties
// as the class will use direct field access instead
//noinspection ConstantConditions
if (accessor != null && accessor.isSetter() && Visibilities.isPrivate(descriptor.getSetter().getVisibility())) {
if (accessor != null && accessor.isSetter() && DescriptorVisibilities.isPrivate(descriptor.getSetter().getVisibility())) {
return !isDefaultAccessor;
}
@@ -253,12 +254,12 @@ public class PropertyCodegen {
if (hasJvmFieldAnnotation(descriptor)) return false;
if (kind == OwnerKind.ERASED_INLINE_CLASS) return false;
Visibility visibility = descriptor.getVisibility();
DescriptorVisibility visibility = descriptor.getVisibility();
if (InlineClassesUtilsKt.isInlineClass(descriptor.getContainingDeclaration())) {
return visibility.isPublicAPI();
}
else {
return !Visibilities.isPrivate(visibility);
return !DescriptorVisibilities.isPrivate(visibility);
}
}
@@ -407,10 +408,10 @@ public class PropertyCodegen {
ClassBuilder builder = v;
FieldOwnerContext backingFieldContext = context;
if (AsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor) ) {
if (DescriptorAsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor) ) {
modifiers |= ACC_STATIC;
if (JvmAbi.isPropertyWithBackingFieldInOuterClass(propertyDescriptor)) {
if (DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(propertyDescriptor)) {
ImplementationBodyCodegen codegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen();
builder = codegen.v;
backingFieldContext = codegen.context;
@@ -418,7 +419,7 @@ public class PropertyCodegen {
}
modifiers |= getVisibilityForBackingField(propertyDescriptor, isDelegate);
if (AsmUtil.isPropertyWithBackingFieldCopyInOuterClass(propertyDescriptor)) {
if (DescriptorAsmUtil.isPropertyWithBackingFieldCopyInOuterClass(propertyDescriptor)) {
ImplementationBodyCodegen parentBodyCodegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen();
parentBodyCodegen.addCompanionObjectPropertyToCopy(propertyDescriptor, defaultValue);
}
@@ -435,10 +436,10 @@ public class PropertyCodegen {
if (annotatedField != null) {
// Don't emit nullability annotations for backing field if:
// - backing field is invisible from Java (private or synthetic);
// - backing field is synthetic;
// - property is lateinit (since corresponding field is actually nullable).
boolean skipNullabilityAnnotations =
(modifiers & ACC_PRIVATE) != 0 || (modifiers & ACC_SYNTHETIC) != 0 ||
(modifiers & ACC_SYNTHETIC) != 0 ||
propertyDescriptor.isLateInit();
AnnotationCodegen.forField(fv, memberCodegen, state, skipNullabilityAnnotations)
.genAnnotations(annotatedField, type, propertyDescriptor.getType());
@@ -511,8 +512,8 @@ public class PropertyCodegen {
private void generateAccessor(@Nullable KtPropertyAccessor accessor, @NotNull PropertyAccessorDescriptor descriptor) {
if (context instanceof MultifileClassFacadeContext &&
(Visibilities.isPrivate(descriptor.getVisibility()) ||
AsmUtil.getVisibilityAccessFlag(descriptor) == Opcodes.ACC_PRIVATE)) {
(DescriptorVisibilities.isPrivate(descriptor.getVisibility()) ||
DescriptorAsmUtil.getVisibilityAccessFlag(descriptor) == Opcodes.ACC_PRIVATE)) {
return;
}

View File

@@ -92,8 +92,8 @@ class PropertyReferenceCodegen(
element,
state.classFileVersion,
ACC_FINAL or ACC_SUPER or
AsmUtil.getVisibilityAccessFlagForClass(classDescriptor) or
AsmUtil.getSyntheticAccessFlagForLambdaClass(classDescriptor),
DescriptorAsmUtil.getVisibilityAccessFlagForClass(classDescriptor) or
DescriptorAsmUtil.getSyntheticAccessFlagForLambdaClass(classDescriptor),
asmType.internalName,
null,
superAsmType.internalName,
@@ -108,7 +108,7 @@ class PropertyReferenceCodegen(
if (JvmCodegenUtil.isConst(closure)) {
generateConstInstance(asmType, wrapperMethod.returnType)
} else {
AsmUtil.genClosureFields(closure, v, typeMapper, state.languageVersionSettings)
DescriptorAsmUtil.genClosureFields(closure, v, typeMapper, state.languageVersionSettings)
}
generateConstructor()

View File

@@ -46,7 +46,9 @@ import org.jetbrains.org.objectweb.asm.commons.Method;
import java.util.Collections;
import java.util.Map;
import static org.jetbrains.kotlin.codegen.AsmUtil.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE;
import static org.jetbrains.kotlin.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.genAreEqualCall;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.*;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -106,7 +108,7 @@ public class SamWrapperCodegen {
SimpleFunctionDescriptor erasedInterfaceFunction = samType.getOriginalAbstractMethod().copy(
classDescriptor,
Modality.FINAL,
Visibilities.PUBLIC,
DescriptorVisibilities.PUBLIC,
CallableMemberDescriptor.Kind.SYNTHESIZED,
/*copyOverrides=*/ false
);
@@ -268,12 +270,12 @@ public class SamWrapperCodegen {
if (!(descriptor instanceof CallableMemberDescriptor)) continue;
CallableMemberDescriptor member = (CallableMemberDescriptor) descriptor;
if (member.getModality() == Modality.ABSTRACT ||
Visibilities.isPrivate(member.getVisibility()) ||
member.getVisibility() == Visibilities.INVISIBLE_FAKE ||
DescriptorVisibilities.isPrivate(member.getVisibility()) ||
member.getVisibility() == DescriptorVisibilities.INVISIBLE_FAKE ||
DescriptorUtils.isMethodOfAny(member)) continue;
for (Map.Entry<FunctionDescriptor, FunctionDescriptor> entry : CodegenUtil.INSTANCE.copyFunctions(
member, member, classDescriptor, Modality.OPEN, Visibilities.PUBLIC, CallableMemberDescriptor.Kind.DECLARATION, false
member, member, classDescriptor, Modality.OPEN, DescriptorVisibilities.PUBLIC, CallableMemberDescriptor.Kind.DECLARATION, false
).entrySet()) {
ClassBodyCodegen.generateDelegationToDefaultImpl(entry.getKey(), entry.getValue(), receiverType, functionCodegen, state, false);
}

View File

@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.codegen
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.codegen.AsmUtil.writeAnnotationData
import org.jetbrains.kotlin.codegen.context.CodegenContext
import org.jetbrains.kotlin.codegen.context.MethodContext
import org.jetbrains.kotlin.codegen.context.ScriptContext
@@ -71,7 +70,7 @@ class ScriptCodegen private constructor(
val serializer = DescriptorSerializer.create(scriptDescriptor, JvmSerializerExtension(v.serializationBindings, state), null)
val classProto = serializer.classProto(scriptDescriptor).build()
writeKotlinMetadata(v, state, KotlinClassHeader.Kind.CLASS, JvmAnnotationNames.METADATA_SCRIPT_FLAG) { av ->
writeAnnotationData(av, serializer, classProto)
DescriptorAsmUtil.writeAnnotationData(av, serializer, classProto)
}
}

View File

@@ -21,28 +21,26 @@ import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtNamedFunction
data class SourceInfo(val source: String, val pathOrCleanFQN: String, val linesInFile: Int) {
data class SourceInfo(
val sourceFileName: String?,
val pathOrCleanFQN: String,
val linesInFile: Int
) {
companion object {
fun createInfo(element: KtElement?, internalClassName: String): SourceInfo {
fun createFromPsi(element: KtElement?, internalClassName: String): SourceInfo {
assert(element != null) { "Couldn't create source mapper for null element $internalClassName" }
val lineNumbers = CodegenUtil.getLineNumberForElement(element!!.containingFile, true)
?: error("Couldn't extract line count in ${element.containingFile}")
?: error("Couldn't extract line count in ${element.containingFile}")
//TODO hack condition for package parts cleaning
val isTopLevel = element is KtFile || (element is KtNamedFunction && element.getParent() is KtFile)
val cleanedClassFqName = if (!isTopLevel) internalClassName else internalClassName.substringBefore('$')
return SourceInfo(element.containingKtFile.name, cleanedClassFqName, lineNumbers)
val fileName = element.containingKtFile.name
return SourceInfo(fileName, cleanedClassFqName, lineNumbers)
}
fun createInfoForIr(lineNumbers: Int, internalClassName: String, containingFileName: String): SourceInfo {
//TODO cut topLevel names
// val isTopLevel = element is KtFile || (element is KtNamedFunction && element.getParent() is KtFile)
// val cleanedClassFqName = if (!isTopLevel) internalClassName else internalClassName.substringBefore('$')
return SourceInfo(containingFileName, internalClassName, lineNumbers)
}
}
}

View File

@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.KtExpression;
@@ -1543,7 +1544,7 @@ public abstract class StackValue {
//TODO: try to don't generate defaults at all in CollectionElementReceiver
List<ResolvedValueArgument> getterArguments = new ArrayList(collectionElementReceiver.valueArguments);
List<ResolvedValueArgument> getterArguments = new ArrayList<>(collectionElementReceiver.valueArguments);
List<ResolvedValueArgument> getterDefaults = CollectionsKt.takeLastWhile(getterArguments,
argument -> argument instanceof DefaultValueArgument);
@@ -1761,7 +1762,7 @@ public abstract class StackValue {
// is from a different context), the assertion will be generated on each access, see KT-28331.
if (descriptor instanceof AccessorForPropertyBackingField) {
PropertyDescriptor property = ((AccessorForPropertyBackingField) descriptor).getCalleeDescriptor();
if (!skipLateinitAssertion && property.isLateInit() && JvmAbi.isPropertyWithBackingFieldInOuterClass(property) &&
if (!skipLateinitAssertion && property.isLateInit() && DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(property) &&
!JvmCodegenUtil.couldUseDirectAccessToProperty(property, true, false, codegen.context, false)) {
genNonNullAssertForLateinit(v, property.getName().asString());
}

View File

@@ -0,0 +1,152 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.codegen
import com.google.common.collect.Sets
import org.jetbrains.kotlin.codegen.BranchedValue.Companion.FALSE
import org.jetbrains.kotlin.codegen.BranchedValue.Companion.TRUE
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.JvmStringConcat
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
import org.jetbrains.kotlin.resolve.jvm.AsmTypes.JAVA_STRING_TYPE
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.Handle
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import java.lang.StringBuilder
class StringConcatGenerator(val mode: JvmStringConcat, val mv: InstructionAdapter) {
private val template = StringBuilder("")
private val paramTypes = arrayListOf<Type>()
private var justFlushed = false
@JvmOverloads
fun genStringBuilderConstructorIfNeded(swap: Boolean = false) {
if (mode.isDynamic) return
mv.visitTypeInsn(Opcodes.NEW, "java/lang/StringBuilder")
mv.dup()
mv.invokespecial("java/lang/StringBuilder", "<init>", "()V", false)
if (swap) {
mv.swap()
}
}
@JvmOverloads
fun putValueOrProcessConstant(stackValue: StackValue, type: Type = stackValue.type, kotlinType: KotlinType? = stackValue.kotlinType) {
justFlushed = false
if (mode == JvmStringConcat.INDY_WITH_CONSTANTS) {
when (stackValue) {
is StackValue.Constant -> {
template.append(stackValue.value)
return
}
TRUE -> {
template.append(true)
return
}
FALSE -> {
template.append(false)
return
}
}
}
stackValue.put(type, kotlinType, mv)
invokeAppend(type)
}
fun addStringConstant(value: String) {
putValueOrProcessConstant(StackValue.constant(value, JAVA_STRING_TYPE, null))
}
fun invokeAppend(type: Type) {
if (!mode.isDynamic) {
mv.invokevirtual(
"java/lang/StringBuilder",
"append",
"(" + stringBuilderAppendType(type) + ")Ljava/lang/StringBuilder;",
false
)
} else {
justFlushed = false
paramTypes.add(type)
template.append("\u0001")
if (paramTypes.size == 200) {
// Concatenate current arguments into string
// because of `StringConcatFactory` limitation add use it as new argument for further processing:
// "The number of parameter slots in {@code concatType} is less than or equal to 200"
genToString()
justFlushed = true
}
}
}
fun genToString() {
if (!mode.isDynamic) {
mv.invokevirtual("java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false)
} else {
//if state was flushed in `invokeAppend` do nothing
if (justFlushed) return
if (mode == JvmStringConcat.INDY_WITH_CONSTANTS) {
val bootstrap = Handle(
Opcodes.H_INVOKESTATIC,
"java/lang/invoke/StringConcatFactory",
"makeConcatWithConstants",
"(Ljava/lang/invoke/MethodHandles\$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;",
false
)
mv.invokedynamic(
"makeConcatWithConstants",
Type.getMethodDescriptor(JAVA_STRING_TYPE, *paramTypes.toTypedArray()),
bootstrap,
arrayOf(template.toString())
)
} else {
val bootstrap = Handle(
Opcodes.H_INVOKESTATIC,
"java/lang/invoke/StringConcatFactory",
"makeConcat",
"(Ljava/lang/invoke/MethodHandles\$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;",
false
)
mv.invokedynamic(
"makeConcat",
Type.getMethodDescriptor(JAVA_STRING_TYPE, *paramTypes.toTypedArray()),
bootstrap,
arrayOf()
)
}
template.clear()
paramTypes.clear()
paramTypes.add(JAVA_STRING_TYPE)
template.append("\u0001")
}
}
companion object {
private val STRING_BUILDER_OBJECT_APPEND_ARG_TYPES: Set<Type> = Sets.newHashSet(
AsmTypes.getType(String::class.java),
AsmTypes.getType(StringBuffer::class.java),
AsmTypes.getType(CharSequence::class.java)
)
private fun stringBuilderAppendType(type: Type): Type {
return when (type.sort) {
Type.OBJECT -> if (STRING_BUILDER_OBJECT_APPEND_ARG_TYPES.contains(type)) type else AsmTypes.OBJECT_TYPE
Type.ARRAY -> AsmTypes.OBJECT_TYPE
Type.BYTE, Type.SHORT -> Type.INT_TYPE
else -> type
}
}
fun create(state: GenerationState, mv: InstructionAdapter) =
StringConcatGenerator(state.runtimeStringConcat, mv)
}
}

View File

@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.codegen
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
import org.jetbrains.kotlin.resolve.jvm.checkers.isValidDalvikCharacter
const val DESTRUCTURED_LAMBDA_ARGUMENT_VARIABLE_PREFIX = "\$dstr\$"
@@ -26,25 +25,3 @@ fun getNameForDestructuredParameterOrNull(valueParameterDescriptor: ValueParamet
)
}
}
fun mangleNameIfNeeded(name: String): String {
if (name.all { it.isValidCharacter() }) {
return name
}
return buildString {
for (c in name) {
if (c.isValidCharacter()) {
append(c)
} else {
val hexString = Integer.toHexString(c.toInt())
assert(hexString.length <= 4)
append("_u").append(hexString)
}
}
}
}
private fun Char.isValidCharacter(): Boolean {
return this != '$' && this != '-' && isValidDalvikCharacter(this)
}

View File

@@ -616,7 +616,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
String nameForClassOrPackageMember = getNameForClassOrPackageMember(functionDescriptor);
if (functionDescriptor instanceof SimpleFunctionDescriptor && functionDescriptor.isSuspend() &&
!functionDescriptor.getVisibility().equals(Visibilities.LOCAL)) {
!functionDescriptor.getVisibility().equals(DescriptorVisibilities.LOCAL)) {
if (nameForClassOrPackageMember != null) {
nameStack.push(nameForClassOrPackageMember);
@@ -821,20 +821,17 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
Map<ValueParameterDescriptor, ResolvedValueArgument> arguments = newResolvedCall.getValueArguments();
for (ValueParameterDescriptor valueParameter : arguments.keySet()) {
SamType samType = SamType.createByValueParameter(valueParameter);
if (samType == null) continue;
ResolvedValueArgument argument = arguments.get(valueParameter);
if (argument instanceof ExpressionValueArgument) {
ValueArgument valueArgument = ((ExpressionValueArgument) argument).getValueArgument();
if (valueArgument != null && newResolvedCall.getExpectedTypeForSamConvertedArgument(valueArgument) != null) {
recordSamTypeOnArgumentExpression(samType, valueArgument);
recordSamTypeOnArgumentExpression(valueParameter, valueArgument);
}
} else if (argument instanceof VarargValueArgument) {
VarargValueArgument varargValueArgument = (VarargValueArgument) argument;
for (ValueArgument valueArgument : varargValueArgument.getArguments()) {
if (valueArgument != null && newResolvedCall.getExpectedTypeForSamConvertedArgument(valueArgument) != null) {
recordSamTypeOnArgumentExpression(samType, valueArgument);
recordSamTypeOnArgumentExpression(valueParameter, valueArgument);
}
}
}
@@ -872,6 +869,13 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
}
}
private void recordSamTypeOnArgumentExpression(ValueParameterDescriptor valueParameter, ValueArgument valueArgument) {
SamType samType = SamType.createByValueParameter(valueParameter);
if (samType == null) return;
recordSamTypeOnArgumentExpression(samType, valueArgument);
}
private void recordSamTypeOnArgumentExpression(SamType samType, ValueArgument valueArgument) {
KtExpression argumentExpression = valueArgument.getArgumentExpression();
assert argumentExpression != null : valueArgument.asElement().getText();

View File

@@ -20,6 +20,7 @@ import com.intellij.openapi.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.AsmUtil;
import org.jetbrains.kotlin.codegen.DescriptorAsmUtil;
import org.jetbrains.kotlin.codegen.context.EnclosedValueDescriptor;
import org.jetbrains.kotlin.config.LanguageFeature;
import org.jetbrains.kotlin.config.LanguageVersionSettings;
@@ -113,7 +114,7 @@ public final class MutableClosure implements CalculatedClosure {
return AsmUtil.CAPTURED_RECEIVER_FIELD;
}
String labeledThis = AsmUtil.getNameForCapturedReceiverField(
String labeledThis = DescriptorAsmUtil.getNameForCapturedReceiverField(
enclosingFunWithReceiverDescriptor, bindingContext, languageVersionSettings);
return AsmUtil.getCapturedFieldName(labeledThis);

View File

@@ -87,7 +87,7 @@ fun InstructionAdapter.generateClosureFieldsInitializationFromParameters(
k += fieldInfo.fieldType.size
continue
}
k = AsmUtil.genAssignInstanceFieldFromParam(fieldInfo, k, this)
k = DescriptorAsmUtil.genAssignInstanceFieldFromParam(fieldInfo, k, this)
}
return boundReferenceReceiverFieldInfo?.let { Pair(boundReferenceReceiverParameterIndex, it) }
@@ -122,7 +122,7 @@ internal fun generateCallableReferenceDeclarationContainerClass(
// TODO: would it work for arrays?
val containerKotlinType = container.defaultType
val containerType = typeMapper.mapClass(container)
AsmUtil.putJavaLangClassInstance(iv, containerType, containerKotlinType, typeMapper)
DescriptorAsmUtil.putJavaLangClassInstance(iv, containerType, containerKotlinType, typeMapper)
}
container is PackageFragmentDescriptor -> {
iv.aconst(typeMapper.mapOwner(descriptor))
@@ -211,4 +211,4 @@ private fun getSignatureString(callable: CallableDescriptor, state: GenerationSt
state.typeMapper.mapAsmMethod(declaration)
}
return method.name + method.descriptor
}
}

View File

@@ -19,14 +19,13 @@ import org.jetbrains.kotlin.codegen.inline.ReificationArgument
import org.jetbrains.kotlin.codegen.intrinsics.TypeIntrinsics
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.isReleaseCoroutines
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.SpecialSignatureInfo
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -98,11 +97,12 @@ fun generateAsCast(
kotlinType: KotlinType,
asmType: Type,
isSafe: Boolean,
languageVersionSettings: LanguageVersionSettings
languageVersionSettings: LanguageVersionSettings,
unifiedNullChecks: Boolean,
) {
if (!isSafe) {
if (!TypeUtils.isNullableType(kotlinType)) {
generateNullCheckForNonSafeAs(v, kotlinType, languageVersionSettings)
generateNullCheckForNonSafeAs(v, kotlinType, unifiedNullChecks)
}
} else {
with(v) {
@@ -122,15 +122,13 @@ fun generateAsCast(
private fun generateNullCheckForNonSafeAs(
v: InstructionAdapter,
type: KotlinType,
languageVersionSettings: LanguageVersionSettings
unifiedNullChecks: Boolean,
) {
with(v) {
dup()
val nonnull = Label()
ifnonnull(nonnull)
val exceptionClass =
if (languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4) "java/lang/NullPointerException"
else "kotlin/TypeCastException"
val exceptionClass = if (unifiedNullChecks) "java/lang/NullPointerException" else "kotlin/TypeCastException"
AsmUtil.genThrow(
v,
exceptionClass,
@@ -154,7 +152,7 @@ fun populateCompanionBackingFieldNamesToOuterContextIfNeeded(
return
}
if (!JvmAbi.isClassCompanionObjectWithBackingFieldsInOuter(descriptor)) {
if (!DescriptorsJvmAbiUtil.isClassCompanionObjectWithBackingFieldsInOuter(descriptor)) {
return
}
val properties = companion.declarations.filterIsInstance<KtProperty>()
@@ -590,7 +588,7 @@ private fun generateLambdaForRunSuspend(
lambdaBuilder.newField(
JvmDeclarationOrigin.NO_ORIGIN,
ACC_PRIVATE or ACC_FINAL,
ACC_PRIVATE or ACC_FINAL or ACC_SYNTHETIC,
"args",
ARRAY_OF_STRINGS_TYPE.descriptor, null, null
)
@@ -685,4 +683,4 @@ internal fun LabelNode.linkWithLabel(): LabelNode {
return this
}
fun linkedLabel(): Label = LabelNode().linkWithLabel().label
fun linkedLabel(): Label = LabelNode().linkWithLabel().label

View File

@@ -14,12 +14,12 @@ import org.jetbrains.kotlin.codegen.state.GenerationState;
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
import org.jetbrains.kotlin.config.JvmDefaultMode;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.load.java.JavaVisibilities;
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor;
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.jvm.annotations.JvmAnnotationUtilKt;
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor;
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
import org.jetbrains.kotlin.storage.NullableLazyValue;
import org.jetbrains.kotlin.types.KotlinType;
@@ -27,7 +27,7 @@ import org.jetbrains.org.objectweb.asm.Type;
import java.util.*;
import static org.jetbrains.kotlin.codegen.AsmUtil.getVisibilityAccessFlag;
import static org.jetbrains.kotlin.codegen.DescriptorAsmUtil.getVisibilityAccessFlag;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isInSamePackage;
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isNonDefaultInterfaceMember;
import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode;
@@ -625,7 +625,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
}
if (descriptorContext == null &&
JavaVisibilities.PROTECTED_STATIC_VISIBILITY == descriptor.getVisibility() &&
JavaDescriptorVisibilities.PROTECTED_STATIC_VISIBILITY == descriptor.getVisibility() &&
(!(descriptor.getOriginal() instanceof SamConstructorDescriptor))) {
//seems we need static receiver in resolved call
descriptorContext = ExpressionCodegen.getParentContextSubclassOf((ClassDescriptor) enclosed, this);
@@ -672,7 +672,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
PropertySetterDescriptor setter = propertyDescriptor.getSetter();
int setterAccessFlag = propertyAccessFlag;
if (setter != null && setter.getVisibility().normalize() != Visibilities.INVISIBLE_FAKE) {
if (setter != null && setter.getVisibility().normalize() != DescriptorVisibilities.INVISIBLE_FAKE) {
setterAccessFlag = propertyAccessFlag | getVisibilityAccessFlag(setter);
}
boolean setterAccessorRequired = isAccessorRequired(setterAccessFlag, unwrappedDescriptor, descriptorContext,

View File

@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.codegen.context;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.codegen.AsmUtil;
import org.jetbrains.kotlin.codegen.DescriptorAsmUtil;
import org.jetbrains.kotlin.codegen.JvmCodegenUtil;
import org.jetbrains.kotlin.codegen.OwnerKind;
import org.jetbrains.kotlin.codegen.StackValue;
@@ -67,7 +67,7 @@ public class MethodContext extends CodegenContext<CallableMemberDescriptor> {
@SuppressWarnings("ConstantConditions")
KotlinType kotlinType = getCallableDescriptorWithReceiver().getExtensionReceiverParameter().getType();
Type asmType = typeMapper.mapType(kotlinType);
return StackValue.local(AsmUtil.getReceiverIndex(this, getContextDescriptor()), asmType, kotlinType);
return StackValue.local(DescriptorAsmUtil.getReceiverIndex(this, getContextDescriptor()), asmType, kotlinType);
}
@Override

View File

@@ -43,7 +43,6 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
import org.jetbrains.kotlin.serialization.DescriptorSerializer
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.typeUtil.makeNullable
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import org.jetbrains.kotlin.utils.sure
import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.org.objectweb.asm.MethodVisitor
@@ -95,7 +94,7 @@ abstract class AbstractCoroutineCodegen(
},
builtIns.nullableAnyType,
Modality.FINAL,
Visibilities.PUBLIC,
DescriptorVisibilities.PUBLIC,
userDataForDoResume
)
}
@@ -104,9 +103,9 @@ abstract class AbstractCoroutineCodegen(
ValueParameterDescriptorImpl(
this, null, index, Annotations.EMPTY, name,
type,
false, false,
false,
null, SourceElement.NO_SOURCE
declaresDefaultValue = false, isCrossinline = false,
isNoinline = false,
varargElementType = null, source = SourceElement.NO_SOURCE
)
override fun generateConstructor(): Method {
@@ -157,7 +156,7 @@ abstract class AbstractCoroutineCodegen(
return constructor
}
abstract protected val passArityToSuperClass: Boolean
protected abstract val passArityToSuperClass: Boolean
}
class CoroutineCodegenForLambda private constructor(
@@ -187,6 +186,23 @@ class CoroutineCodegenForLambda private constructor(
private val endLabel = Label()
private val varsCountByType = hashMapOf<Type, Int>()
private val fieldsForParameters: Map<ParameterDescriptor, FieldInfo> = createFieldsForParameters()
private fun createFieldsForParameters(): Map<ParameterDescriptor, FieldInfo> {
val result = hashMapOf<ParameterDescriptor, FieldInfo>()
for (parameter in allFunctionParameters()) {
if (parameter.isUnused()) continue
val type = state.typeMapper.mapType(parameter.type)
val normalizedType = type.normalize()
val index = varsCountByType[normalizedType]?.plus(1) ?: 0
varsCountByType[normalizedType] = index
result[parameter] = createHiddenFieldInfo(parameter.type, "${normalizedType.descriptor[0]}$$index")
}
return result
}
private fun getCreateFunction(): SimpleFunctionDescriptor = SimpleFunctionDescriptorImpl.create(
funDescriptor.containingDeclaration,
Annotations.EMPTY,
@@ -204,7 +220,7 @@ class CoroutineCodegenForLambda private constructor(
state.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
),
funDescriptor.modality,
Visibilities.PUBLIC
DescriptorVisibilities.PUBLIC
)
}
@@ -232,11 +248,10 @@ class CoroutineCodegenForLambda private constructor(
override fun generateClosureBody() {
for (parameter in allFunctionParameters()) {
if (parameter.isUnused()) continue
val fieldInfo = parameter.getFieldInfoForCoroutineLambdaParameter()
val fieldInfo = fieldsForParameters[parameter] ?: continue
v.newField(
OtherOrigin(parameter),
Opcodes.ACC_PRIVATE,
Opcodes.ACC_PRIVATE + Opcodes.ACC_SYNTHETIC,
fieldInfo.fieldName,
fieldInfo.fieldType.descriptor, null, null
)
@@ -257,7 +272,7 @@ class CoroutineCodegenForLambda private constructor(
super.generateBody()
if (doNotGenerateInvokeBridge) {
v.serializationBindings.put<FunctionDescriptor, Method>(
v.serializationBindings.put(
METHOD_FOR_FUNCTION,
originalSuspendFunctionDescriptor,
typeMapper.mapAsmMethod(erasedInvokeFunction)
@@ -296,7 +311,7 @@ class CoroutineCodegenForLambda private constructor(
val untypedAsmMethod = typeMapper.mapAsmMethod(untypedDescriptor)
val jvmMethodSignature = typeMapper.mapSignatureSkipGeneric(untypedDescriptor)
val mv = v.newMethod(
OtherOrigin(element, funDescriptor), AsmUtil.getVisibilityAccessFlag(untypedDescriptor) or Opcodes.ACC_FINAL,
OtherOrigin(element, funDescriptor), DescriptorAsmUtil.getVisibilityAccessFlag(untypedDescriptor) or Opcodes.ACC_FINAL,
untypedAsmMethod.name, untypedAsmMethod.descriptor, null, ArrayUtil.EMPTY_STRING_ARRAY
)
mv.visitCode()
@@ -320,7 +335,7 @@ class CoroutineCodegenForLambda private constructor(
newarray(AsmTypes.OBJECT_TYPE)
// 0 - this
// 1..22 - parameters
// 23 - first empy slot
// 23 - first empty slot
val arraySlot = 23
store(arraySlot, AsmTypes.OBJECT_TYPE)
for ((varIndex, type) in parameterTypes.withVariableIndices()) {
@@ -405,8 +420,8 @@ class CoroutineCodegenForLambda private constructor(
// Pass lambda parameters to 'invoke' call on newly constructed object
var index = 1
for (parameter in allFunctionParameters()) {
val fieldInfoForCoroutineLambdaParameter = parameter.getFieldInfoForCoroutineLambdaParameter()
if (!parameter.isUnused()) {
val fieldInfoForCoroutineLambdaParameter = fieldsForParameters[parameter]
if (fieldInfoForCoroutineLambdaParameter != null) {
if (isBigArity) {
load(cloneIndex, fieldInfoForCoroutineLambdaParameter.ownerType)
load(1, AsmTypes.OBJECT_TYPE)
@@ -433,7 +448,7 @@ class CoroutineCodegenForLambda private constructor(
} else {
load(index, fieldInfoForCoroutineLambdaParameter.fieldType)
}
AsmUtil.genAssignInstanceFieldFromParam(
DescriptorAsmUtil.genAssignInstanceFieldFromParam(
fieldInfoForCoroutineLambdaParameter,
index,
this,
@@ -442,7 +457,7 @@ class CoroutineCodegenForLambda private constructor(
)
}
}
index += if (isBigArity || generateErasedCreate) 1 else fieldInfoForCoroutineLambdaParameter.fieldType.size
index += if (isBigArity || generateErasedCreate) 1 else state.typeMapper.mapType(parameter.type).size
}
load(cloneIndex, AsmTypes.OBJECT_TYPE)
@@ -452,26 +467,31 @@ class CoroutineCodegenForLambda private constructor(
private fun ExpressionCodegen.initializeCoroutineParameters() {
for (parameter in allFunctionParameters()) {
if (parameter.isUnused()) continue
val fieldStackValue =
StackValue.field(
parameter.getFieldInfoForCoroutineLambdaParameter(), generateThisOrOuter(context.thisDescriptor, false)
)
val fieldForParameter = fieldsForParameters[parameter] ?: continue
val fieldStackValue = StackValue.field(fieldForParameter, generateThisOrOuter(context.thisDescriptor, false))
val mappedType = typeMapper.mapType(parameter.type)
fieldStackValue.put(mappedType, v)
val originalType = typeMapper.mapType(parameter.type)
// If a parameter has reference type, it has prefix L$,
// however, when the type is primitive, its prefix is ${type.descriptor}$.
// In other words, it the type is Boolean, the prefix is Z$.
// This is different from spilled variables, where all int-like primitives have prefix I$.
// This is not a problem, since we do not clean spilled primitives up
// and we do not coerce Int to Boolean, which takes quite a bit of bytecode (see coerceInt).
val normalizedType = originalType.normalize()
fieldStackValue.put(normalizedType, v)
val newIndex = myFrameMap.enter(parameter, mappedType)
v.store(newIndex, mappedType)
val newIndex = myFrameMap.enter(parameter, originalType)
StackValue.coerce(normalizedType, originalType, v)
v.store(newIndex, originalType)
val name =
if (parameter is ReceiverParameterDescriptor)
AsmUtil.getNameForReceiverParameter(originalSuspendFunctionDescriptor, bindingContext, languageVersionSettings)
DescriptorAsmUtil.getNameForReceiverParameter(originalSuspendFunctionDescriptor, bindingContext, languageVersionSettings)
else
(getNameForDestructuredParameterOrNull(parameter as ValueParameterDescriptor) ?: parameter.name.asString())
val label = Label()
v.mark(label)
v.visitLocalVariable(name, mappedType.descriptor, null, label, endLabel, newIndex)
v.visitLocalVariable(name, originalType.descriptor, null, label, endLabel, newIndex)
}
initializeVariablesForDestructuredLambdaParameters(
@@ -485,13 +505,10 @@ class CoroutineCodegenForLambda private constructor(
originalSuspendFunctionDescriptor.extensionReceiverParameter.let(::listOfNotNull) +
originalSuspendFunctionDescriptor.valueParameters
private fun ParameterDescriptor.getFieldInfoForCoroutineLambdaParameter() =
createHiddenFieldInfo(type, COROUTINE_LAMBDA_PARAMETER_PREFIX + (this.safeAs<ValueParameterDescriptor>()?.index ?: ""))
private fun createHiddenFieldInfo(type: KotlinType, name: String) =
FieldInfo.createForHiddenField(
typeMapper.mapClass(closureContext.thisDescriptor),
typeMapper.mapType(type),
typeMapper.mapType(type).normalize(),
type,
name
)
@@ -514,7 +531,8 @@ class CoroutineCodegenForLambda private constructor(
isForNamedFunction = false,
languageVersionSettings = languageVersionSettings,
disableTailCallOptimizationForFunctionReturningUnit = false,
useOldSpilledVarTypeAnalysis = state.configuration.getBoolean(JVMConfigurationKeys.USE_OLD_SPILLED_VAR_TYPE_ANALYSIS)
useOldSpilledVarTypeAnalysis = state.configuration.getBoolean(JVMConfigurationKeys.USE_OLD_SPILLED_VAR_TYPE_ANALYSIS),
initialVarsCountByType = varsCountByType
)
val maybeWithForInline = if (forInline)
SuspendForInlineCopyingMethodVisitor(stateMachineBuilder, access, name, desc, functionCodegen::newMethod)
@@ -618,6 +636,9 @@ class CoroutineCodegenForNamedFunction private constructor(
override val passArityToSuperClass get() = false
private val inlineClassToBoxInInvokeSuspend: KotlinType? =
originalSuspendFunctionDescriptor.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(state.typeMapper)
override fun generateBridges() {
// Do not generate any closure bridges
}
@@ -701,6 +722,17 @@ class CoroutineCodegenForNamedFunction private constructor(
callableMethod.genInvokeInstruction(codegen.v)
}
if (inlineClassToBoxInInvokeSuspend != null) {
with(codegen.v) {
// We need to box the returned inline class in resume path.
// But first, check for COROUTINE_SUSPENDED, since the function can return it
generateCoroutineSuspendedCheck(languageVersionSettings)
// Now we box the inline class
StackValue.coerce(AsmTypes.OBJECT_TYPE, typeMapper.mapType(inlineClassToBoxInInvokeSuspend), this)
StackValue.boxInlineClass(inlineClassToBoxInInvokeSuspend, this)
}
}
codegen.v.visitInsn(Opcodes.ARETURN)
}
}
@@ -746,7 +778,7 @@ class CoroutineCodegenForNamedFunction private constructor(
serializer.functionProto(
createFreeFakeLambdaDescriptor(suspendFunctionJvmView, state.typeApproximator)
)?.build() ?: return@writeKotlinMetadata
AsmUtil.writeAnnotationData(av, serializer, functionProto)
DescriptorAsmUtil.writeAnnotationData(av, serializer, functionProto)
}
}
@@ -758,16 +790,11 @@ class CoroutineCodegenForNamedFunction private constructor(
declaration: KtFunction
): CoroutineCodegenForNamedFunction {
val bindingContext = expressionCodegen.state.bindingContext
val closure =
bindingContext[
CodegenBinding.CLOSURE,
bindingContext[CodegenBinding.CLASS_FOR_CALLABLE, originalSuspendDescriptor]
].sure { "There must be a closure defined for $originalSuspendDescriptor" }
val closure = bindingContext[CLOSURE, bindingContext[CodegenBinding.CLASS_FOR_CALLABLE, originalSuspendDescriptor]]
.sure { "There must be a closure defined for $originalSuspendDescriptor" }
val suspendFunctionView =
bindingContext[
CodegenBinding.SUSPEND_FUNCTION_TO_JVM_VIEW, originalSuspendDescriptor
].sure { "There must be a jvm view defined for $originalSuspendDescriptor" }
val suspendFunctionView = bindingContext[CodegenBinding.SUSPEND_FUNCTION_TO_JVM_VIEW, originalSuspendDescriptor]
.sure { "There must be a jvm view defined for $originalSuspendDescriptor" }
if (suspendFunctionView.dispatchReceiverParameter != null) {
closure.setNeedsCaptureOuterClass()
@@ -785,10 +812,8 @@ class CoroutineCodegenForNamedFunction private constructor(
}
}
private const val COROUTINE_LAMBDA_PARAMETER_PREFIX = "p$"
private object FailingFunctionGenerationStrategy : FunctionGenerationStrategy() {
override fun skipNotNullAssertionsForParameters(): kotlin.Boolean {
override fun skipNotNullAssertionsForParameters(): Boolean {
error("This functions must not be called")
}
@@ -805,4 +830,4 @@ private object FailingFunctionGenerationStrategy : FunctionGenerationStrategy()
fun reportSuspensionPointInsideMonitor(element: KtElement, state: GenerationState, stackTraceElement: String) {
state.diagnostics.report(ErrorsJvm.SUSPENSION_POINT_INSIDE_MONITOR.on(element, stackTraceElement))
}
}

View File

@@ -20,6 +20,7 @@ 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.tree.*
import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue
import kotlin.math.max
private const val COROUTINES_DEBUG_METADATA_VERSION = 1
@@ -63,7 +64,9 @@ class CoroutineTransformerMethodVisitor(
// JVM_IR backend generates $completion, while old backend does not
private val putContinuationParameterToLvt: Boolean = true,
// New SourceInterpreter-less analyser can be somewhat unstable, disable it
private val useOldSpilledVarTypeAnalysis: Boolean = false
private val useOldSpilledVarTypeAnalysis: Boolean = false,
// Parameters of suspend lambda are put to the same fields as spilled variables
private val initialVarsCountByType: Map<Type, Int> = emptyMap()
) : TransformationMethodVisitor(delegate, access, name, desc, signature, exceptions) {
private val classBuilderForCoroutineState: ClassBuilder by lazy(obtainClassBuilderForCoroutineState)
@@ -111,6 +114,7 @@ class CoroutineTransformerMethodVisitor(
if (examiner.allSuspensionPointsAreTailCalls(suspensionPoints)) {
examiner.replacePopsBeforeSafeUnitInstancesWithCoroutineSuspendedChecks()
dropSuspensionMarkers(methodNode)
dropUnboxInlineClassMarkers(methodNode, suspensionPoints)
return
}
@@ -132,15 +136,19 @@ class CoroutineTransformerMethodVisitor(
UninitializedStoresProcessor(methodNode, shouldPreserveClassInitialization).run()
updateLvtAccordingToLiveness(methodNode, isForNamedFunction)
val spilledToVariableMapping = spillVariables(suspensionPoints, methodNode)
val suspendMarkerVarIndex = methodNode.maxLocals++
val suspensionPointLineNumbers = suspensionPoints.map { findSuspensionPointLineNumber(it) }
val continuationLabels = suspensionPoints.withIndex().map {
transformCallAndReturnContinuationLabel(
it.index + 1, it.value, methodNode, suspendMarkerVarIndex, suspensionPointLineNumbers[it.index])
// Create states in state-machine, to which state-machine can jump
val stateLabels = suspensionPoints.withIndex().map {
transformCallAndReturnStateLabel(
it.index + 1, it.value, methodNode, suspendMarkerVarIndex, suspensionPointLineNumbers[it.index]
)
}
methodNode.instructions.apply {
@@ -163,7 +171,7 @@ class CoroutineTransformerMethodVisitor(
0,
suspensionPoints.size,
defaultLabel,
firstStateLabel, *continuationLabels.toTypedArray()
firstStateLabel, *stateLabels.toTypedArray()
),
firstStateLabel
)
@@ -180,25 +188,39 @@ class CoroutineTransformerMethodVisitor(
})
}
initializeFakeInlinerVariables(methodNode, stateLabels)
dropSuspensionMarkers(methodNode)
dropUnboxInlineClassMarkers(methodNode, suspensionPoints)
methodNode.removeEmptyCatchBlocks()
// The parameters (and 'this') shall live throughout the method, otherwise, d8 emits warning about invalid debug info
val startLabel = LabelNode()
val endLabel = LabelNode()
methodNode.instructions.insertBefore(methodNode.instructions.first, startLabel)
methodNode.instructions.insert(methodNode.instructions.last, endLabel)
fixLvtForParameters(methodNode, startLabel, endLabel)
if (languageVersionSettings.isReleaseCoroutines()) {
writeDebugMetadata(methodNode, suspensionPointLineNumbers, spilledToVariableMapping)
}
}
// When suspension point is inlined, it is in range of fake inliner variables.
// Path from TABLESWITCH into unspilling goes to latter part of the range.
// In this case the variables are uninitialized, initialize them
private fun initializeFakeInlinerVariables(methodNode: MethodNode, stateLabels: List<LabelNode>) {
for (stateLabel in stateLabels) {
for (record in methodNode.localVariables) {
if (isFakeLocalVariableForInline(record.name) &&
methodNode.instructions.indexOf(record.start) < methodNode.instructions.indexOf(stateLabel) &&
methodNode.instructions.indexOf(stateLabel) < methodNode.instructions.indexOf(record.end)
) {
methodNode.instructions.insert(stateLabel, withInstructionAdapter {
iconst(0)
store(record.index, Type.INT_TYPE)
})
}
}
}
}
private fun addCompletionParameterToLVT(methodNode: MethodNode) {
val index =
/* all args */ Type.getMethodType(methodNode.desc).argumentTypes.fold(0) { a, b -> a + b.size } +
/* all args */ Type.getMethodType(methodNode.desc).argumentTypes.fold(0) { a, b -> a + b.size } +
/* this */ (if (isStatic(methodNode.access)) 0 else 1) -
/* only last */ 1
val startLabel = with(methodNode.instructions) {
@@ -210,6 +232,16 @@ class CoroutineTransformerMethodVisitor(
if (last is LabelNode) last as LabelNode
else LabelNode().also { insert(last, it) }
}
// When compiling with the old backend against the bytecode generated by JVM IR, $completion may already be in LVT.
if (methodNode.localVariables.any {
it.name == SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME &&
areLabelsBeforeSameInsn(startLabel, it.start) &&
areLabelsBeforeSameInsn(endLabel, it.end)
}) {
return
}
methodNode.localVariables.add(
LocalVariableNode(
SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME,
@@ -311,31 +343,10 @@ class CoroutineTransformerMethodVisitor(
}
}
private fun fixLvtForParameters(methodNode: MethodNode, startLabel: LabelNode, endLabel: LabelNode) {
val paramsNum =
/* this */ (if (isStatic(methodNode.access)) 0 else 1) +
/* real params */ Type.getArgumentTypes(methodNode.desc).fold(0) { a, b -> a + b.size }
for (i in 0 until paramsNum) {
fixRangeOfLvtRecord(methodNode, i, startLabel, endLabel)
}
}
private fun fixRangeOfLvtRecord(methodNode: MethodNode, index: Int, startLabel: LabelNode, endLabel: LabelNode) {
val vars = methodNode.localVariables.filter { it.index == index }
assert(vars.size <= 1) {
"Someone else occupies parameter's slot at $index"
}
vars.firstOrNull()?.let {
it.start = startLabel
it.end = endLabel
}
}
private fun writeDebugMetadata(
methodNode: MethodNode,
suspensionPointLineNumbers: List<LineNumberNode?>,
spilledToLocalMapping: List<List<SpilledVariableDescriptor>>
spilledToLocalMapping: List<List<SpilledVariableAndField>>
) {
val lines = suspensionPointLineNumbers.map { it?.line ?: -1 }
val metadata = classBuilderForCoroutineState.newAnnotation(DEBUG_METADATA_ANNOTATION_ASM_TYPE.descriptor, true)
@@ -590,7 +601,19 @@ class CoroutineTransformerMethodVisitor(
}
}
private fun spillVariables(suspensionPoints: List<SuspensionPoint>, methodNode: MethodNode): List<List<SpilledVariableDescriptor>> {
private fun dropUnboxInlineClassMarkers(methodNode: MethodNode, suspensionPoints: List<SuspensionPoint>) {
for (marker in methodNode.instructions.asSequence().filter { isBeforeUnboxInlineClassMarker(it) }.toList()) {
methodNode.instructions.removeAll(listOf(marker.previous, marker))
}
for (marker in methodNode.instructions.asSequence().filter { isAfterUnboxInlineClassMarker(it) }.toList()) {
methodNode.instructions.removeAll(listOf(marker.previous.previous, marker.previous, marker))
}
for (suspension in suspensionPoints) {
methodNode.instructions.removeAll(suspension.unboxInlineClassInstructions)
}
}
private fun spillVariables(suspensionPoints: List<SuspensionPoint>, methodNode: MethodNode): List<List<SpilledVariableAndField>> {
val instructions = methodNode.instructions
val frames =
if (useOldSpilledVarTypeAnalysis) performRefinedTypeAnalysis(methodNode, containingClassInternalName)
@@ -598,11 +621,23 @@ class CoroutineTransformerMethodVisitor(
fun AbstractInsnNode.index() = instructions.indexOf(this)
// We postpone these actions because they change instruction indices that we use when obtaining frames
val postponedActions = mutableListOf<() -> Unit>()
val maxVarsCountByType = mutableMapOf<Type, Int>()
var initialSpilledVariablesCount = 0
for ((type, count) in initialVarsCountByType) {
if (type == AsmTypes.OBJECT_TYPE) {
initialSpilledVariablesCount = count
}
maxVarsCountByType[type] = count
}
val livenessFrames = analyzeLiveness(methodNode)
val spilledToVariableMapping = arrayListOf<List<SpilledVariableDescriptor>>()
// References shall be cleaned up after uspill (during spill in next suspension point) to prevent memory leaks,
val referencesToSpillBySuspensionPointIndex = arrayListOf<List<ReferenceToSpill>>()
// while primitives shall not
val primitivesToSpillBySuspensionPointIndex = arrayListOf<List<PrimitiveToSpill>>()
// Collect information about spillable variables, that we use to determine which variables we need to cleanup
for (suspension in suspensionPoints) {
val suspensionCallBegin = suspension.suspensionCallBegin
@@ -629,7 +664,8 @@ class CoroutineTransformerMethodVisitor(
// NB: it's also rather useful for sake of optimization
val livenessFrame = livenessFrames[suspensionCallBegin.index()]
val spilledToVariable = arrayListOf<SpilledVariableDescriptor>()
val referencesToSpill = arrayListOf<ReferenceToSpill>()
val primitivesToSpill = arrayListOf<PrimitiveToSpill>()
// 0 - this
// 1 - parameter
@@ -637,77 +673,181 @@ class CoroutineTransformerMethodVisitor(
// k - continuation
// k + 1 - data
// k + 2 - exception
val variablesToSpill =
(0 until localsCount)
.filterNot { it in setOf(continuationIndex, dataIndex, exceptionIndex) }
.map { Pair(it, frame.getLocal(it)) }
.filter { (index, value) ->
(index == 0 && needDispatchReceiver && isForNamedFunction) ||
(value.type != null && livenessFrame.isAlive(index))
}
for (slot in 0 until localsCount) {
if (slot == continuationIndex || slot == dataIndex || slot == exceptionIndex) continue
val value = frame.getLocal(slot)
if (value.type == null || !livenessFrame.isAlive(slot)) continue
for ((index, basicValue) in variablesToSpill) {
if (basicValue == StrictBasicValue.NULL_VALUE) {
postponedActions.add {
with(instructions) {
insert(suspension.tryCatchBlockEndLabelAfterSuspensionCall, withInstructionAdapter {
aconst(null)
store(index, AsmTypes.OBJECT_TYPE)
})
}
}
if (value == StrictBasicValue.NULL_VALUE) {
referencesToSpill += slot to null
continue
}
val type = basicValue.type!!
val type = value.type!!
val normalizedType = type.normalize()
val indexBySort = varsCountByType[normalizedType]?.plus(1) ?: 0
varsCountByType[normalizedType] = indexBySort
val fieldName = normalizedType.fieldNameForVar(indexBySort)
localVariableName(methodNode, index, suspension.suspensionCallEnd.next.index())
?.let { spilledToVariable.add(SpilledVariableDescriptor(fieldName, it)) }
postponedActions.add {
with(instructions) {
// store variable before suspension call
insertBefore(suspension.suspensionCallBegin, withInstructionAdapter {
load(continuationIndex, AsmTypes.OBJECT_TYPE)
load(index, type)
StackValue.coerce(type, normalizedType, this)
putfield(classBuilderForCoroutineState.thisName, fieldName, normalizedType.descriptor)
})
// restore variable after suspension call
insert(suspension.tryCatchBlockEndLabelAfterSuspensionCall, withInstructionAdapter {
load(continuationIndex, AsmTypes.OBJECT_TYPE)
getfield(classBuilderForCoroutineState.thisName, fieldName, normalizedType.descriptor)
StackValue.coerce(normalizedType, type, this)
store(index, type)
})
}
if (normalizedType == AsmTypes.OBJECT_TYPE) {
referencesToSpill += slot to SpillableVariable(value, type, normalizedType, fieldName)
} else {
primitivesToSpill += slot to SpillableVariable(value, type, normalizedType, fieldName)
}
}
spilledToVariableMapping.add(spilledToVariable)
referencesToSpillBySuspensionPointIndex += referencesToSpill
primitivesToSpillBySuspensionPointIndex += primitivesToSpill
varsCountByType.forEach {
maxVarsCountByType[it.key] = max(maxVarsCountByType[it.key] ?: 0, it.value)
for ((type, index) in varsCountByType) {
maxVarsCountByType[type] = max(maxVarsCountByType[type] ?: 0, index)
}
}
postponedActions.forEach(Function0<Unit>::invoke)
// Calculate variables to cleanup
maxVarsCountByType.forEach { entry ->
// Use CFG to calculate amount of spilled variables in previous suspension point (P) and current one (C).
// All fields from L$C to L$P should be cleaned. I.e. we should spill ACONST_NULL to them.
val cfg = ControlFlowGraph.build(methodNode)
// Collect all immediately preceding suspension points. I.e. suspension points, from which there is a path
// into current one, that does not cross other suspension points.
val suspensionPointEnds = suspensionPoints.associateBy { it.suspensionCallEnd }
fun findSuspensionPointPredecessors(suspension: SuspensionPoint): List<SuspensionPoint> {
val visited = mutableSetOf<AbstractInsnNode>()
fun dfs(current: AbstractInsnNode): List<SuspensionPoint> {
if (!visited.add(current)) return emptyList()
suspensionPointEnds[current]?.let { return listOf(it) }
return cfg.getPredecessorsIndices(current).flatMap { dfs(instructions[it]) }
}
return dfs(suspension.suspensionCallBegin)
}
val predSuspensionPoints = suspensionPoints.associateWith { findSuspensionPointPredecessors(it) }
// Calculate all pairs SuspensionPoint -> C and P, where P is minimum of all preds' Cs
fun countVariablesToSpill(index: Int): Int =
referencesToSpillBySuspensionPointIndex[index].count { (_, variable) -> variable != null }
val referencesToCleanBySuspensionPointIndex = arrayListOf<Pair<Int, Int>>() // current to pred
for (suspensionPointIndex in suspensionPoints.indices) {
val suspensionPoint = suspensionPoints[suspensionPointIndex]
val currentSpilledReferencesCount = countVariablesToSpill(suspensionPointIndex)
val preds = predSuspensionPoints[suspensionPoint]
val predSpilledReferencesCount =
if (preds.isNullOrEmpty()) initialSpilledVariablesCount
else preds.maxOf { countVariablesToSpill(suspensionPoints.indexOf(it)) }
referencesToCleanBySuspensionPointIndex += currentSpilledReferencesCount to predSpilledReferencesCount
}
// Mutate method node
fun generateSpillAndUnspill(suspension: SuspensionPoint, slot: Int, spillableVariable: SpillableVariable?) {
if (spillableVariable == null) {
with(instructions) {
insert(suspension.tryCatchBlockEndLabelAfterSuspensionCall, withInstructionAdapter {
aconst(null)
store(slot, AsmTypes.OBJECT_TYPE)
})
}
return
}
with(instructions) {
// store variable before suspension call
insertBefore(suspension.suspensionCallBegin, withInstructionAdapter {
load(continuationIndex, AsmTypes.OBJECT_TYPE)
load(slot, spillableVariable.type)
StackValue.coerce(spillableVariable.type, spillableVariable.normalizedType, this)
putfield(
classBuilderForCoroutineState.thisName,
spillableVariable.fieldName,
spillableVariable.normalizedType.descriptor
)
})
// restore variable after suspension call
insert(suspension.tryCatchBlockEndLabelAfterSuspensionCall, withInstructionAdapter {
load(continuationIndex, AsmTypes.OBJECT_TYPE)
getfield(
classBuilderForCoroutineState.thisName,
spillableVariable.fieldName,
spillableVariable.normalizedType.descriptor
)
StackValue.coerce(spillableVariable.normalizedType, spillableVariable.type, this)
store(slot, spillableVariable.type)
})
}
}
fun cleanUpField(suspension: SuspensionPoint, fieldIndex: Int) {
with(instructions) {
insertBefore(suspension.suspensionCallBegin, withInstructionAdapter {
load(continuationIndex, AsmTypes.OBJECT_TYPE)
aconst(null)
putfield(
classBuilderForCoroutineState.thisName,
"L\$$fieldIndex",
AsmTypes.OBJECT_TYPE.descriptor
)
})
}
}
for (suspensionPointIndex in suspensionPoints.indices) {
val suspension = suspensionPoints[suspensionPointIndex]
for ((slot, referenceToSpill) in referencesToSpillBySuspensionPointIndex[suspensionPointIndex]) {
generateSpillAndUnspill(suspension, slot, referenceToSpill)
}
val (currentSpilledCount, predSpilledCount) = referencesToCleanBySuspensionPointIndex[suspensionPointIndex]
if (predSpilledCount > currentSpilledCount) {
for (fieldIndex in currentSpilledCount until predSpilledCount) {
cleanUpField(suspension, fieldIndex)
}
}
for ((slot, primitiveToSpill) in primitivesToSpillBySuspensionPointIndex[suspensionPointIndex]) {
generateSpillAndUnspill(suspension, slot, primitiveToSpill)
}
}
for (entry in maxVarsCountByType) {
val (type, maxIndex) = entry
for (index in 0..maxIndex) {
for (index in (initialVarsCountByType[type]?.plus(1) ?: 0)..maxIndex) {
classBuilderForCoroutineState.newField(
JvmDeclarationOrigin.NO_ORIGIN, AsmUtil.NO_FLAG_PACKAGE_PRIVATE,
type.fieldNameForVar(index), type.descriptor, null, null
)
}
}
// Calculate debug metadata mapping
fun calculateSpilledVariableAndField(
suspension: SuspensionPoint,
slot: Int,
spillableVariable: SpillableVariable?
): SpilledVariableAndField? {
if (spillableVariable == null) return null
val name = localVariableName(methodNode, slot, suspension.suspensionCallEnd.next.index()) ?: return null
return SpilledVariableAndField(spillableVariable.fieldName, name)
}
val spilledToVariableMapping = arrayListOf<List<SpilledVariableAndField>>()
for (suspensionPointIndex in suspensionPoints.indices) {
val suspension = suspensionPoints[suspensionPointIndex]
val spilledToVariable = arrayListOf<SpilledVariableAndField>()
referencesToSpillBySuspensionPointIndex[suspensionPointIndex].mapNotNullTo(spilledToVariable) { (slot, spillableVariable) ->
calculateSpilledVariableAndField(suspension, slot, spillableVariable)
}
primitivesToSpillBySuspensionPointIndex[suspensionPointIndex].mapNotNullTo(spilledToVariable) { (slot, spillableVariable) ->
calculateSpilledVariableAndField(suspension, slot, spillableVariable)
}
spilledToVariableMapping += spilledToVariable
}
return spilledToVariableMapping
}
@@ -729,21 +869,21 @@ class CoroutineTransformerMethodVisitor(
private val SuspensionPoint.tryCatchBlockEndLabelAfterSuspensionCall: LabelNode
get() {
assert(suspensionCallEnd.next is LabelNode) {
"Next instruction after ${this} should be a label, but " +
"Next instruction after $this should be a label, but " +
"${suspensionCallEnd.next::class.java}/${suspensionCallEnd.next.opcode} was found"
}
return suspensionCallEnd.next as LabelNode
}
private fun transformCallAndReturnContinuationLabel(
private fun transformCallAndReturnStateLabel(
id: Int,
suspension: SuspensionPoint,
methodNode: MethodNode,
suspendMarkerVarIndex: Int,
suspendPointLineNumber: LineNumberNode?
): LabelNode {
val continuationLabel = LabelNode().linkWithLabel()
val stateLabel = LabelNode().linkWithLabel()
val continuationLabelAfterLoadedResult = LabelNode()
val suspendElementLineNumber = lineNumber
var nextLineNumberNode = nextDefinitelyHitLineNumber(suspension)
@@ -771,7 +911,7 @@ class CoroutineTransformerMethodVisitor(
load(suspendMarkerVarIndex, AsmTypes.OBJECT_TYPE)
areturn(AsmTypes.OBJECT_TYPE)
// Mark place for continuation
visitLabel(continuationLabel.label)
visitLabel(stateLabel.label)
})
// After suspension point there is always three nodes: L1, NOP, L2
@@ -792,6 +932,11 @@ class CoroutineTransformerMethodVisitor(
// Load continuation argument just like suspending function returns it
load(dataIndex, AsmTypes.OBJECT_TYPE)
// Unbox inline class, since this is the resume path and unlike the direct path
// the class is boxed.
for (insn in suspension.unboxInlineClassInstructions) {
insn.accept(this)
}
visitLabel(continuationLabelAfterLoadedResult.label)
@@ -822,7 +967,7 @@ class CoroutineTransformerMethodVisitor(
}
}
return continuationLabel
return stateLabel
}
// Find the next line number instruction that is defintely hit. That is, a line number
@@ -830,9 +975,11 @@ class CoroutineTransformerMethodVisitor(
private fun nextDefinitelyHitLineNumber(suspension: SuspensionPoint): LineNumberNode? {
var next = suspension.suspensionCallEnd.next
while (next != null) {
if (next.isBranchOrCall) return null
else if (next is LineNumberNode) return next
else next = next.next
when {
next.isBranchOrCall -> return null
next is LineNumberNode -> return next
else -> next = next.next
}
}
return next
}
@@ -888,9 +1035,19 @@ class CoroutineTransformerMethodVisitor(
return
}
private data class SpilledVariableDescriptor(val fieldName: String, val variableName: String)
private data class SpilledVariableAndField(val fieldName: String, val variableName: String)
}
private class SpillableVariable(
val value: BasicValue,
val type: Type,
val normalizedType: Type,
val fieldName: String
)
private typealias ReferenceToSpill = Pair<Int, SpillableVariable?>
private typealias PrimitiveToSpill = Pair<Int, SpillableVariable>
internal fun InstructionAdapter.generateContinuationConstructorCall(
objectTypeForState: Type?,
methodNode: MethodNode,
@@ -956,7 +1113,7 @@ inline fun withInstructionAdapter(block: InstructionAdapter.() -> Unit): InsnLis
return tmpMethodNode.instructions
}
private fun Type.normalize() =
internal fun Type.normalize() =
when (sort) {
Type.ARRAY, Type.OBJECT -> AsmTypes.OBJECT_TYPE
else -> this
@@ -979,6 +1136,16 @@ internal class SuspensionPoint(
) {
lateinit var tryCatchBlocksContinuationLabel: LabelNode
val unboxInlineClassInstructions: List<AbstractInsnNode> = findUnboxInlineClassInstructions()
private fun findUnboxInlineClassInstructions(): List<AbstractInsnNode> {
val beforeMarker = suspensionCallEnd.next?.next ?: return emptyList()
if (!isBeforeUnboxInlineClassMarker(beforeMarker)) return emptyList()
val afterMarker = beforeMarker.findNextOrNull { isAfterUnboxInlineClassMarker(it) }
?: error("Before unbox inline class marker without after unbox inline class marker")
return InsnSequence(beforeMarker.next, afterMarker.previous.previous).toList()
}
operator fun contains(insn: AbstractInsnNode): Boolean {
for (i in InsnSequence(suspensionCallBegin, suspensionCallEnd.next)) {
if (i == insn) return true
@@ -1027,3 +1194,87 @@ internal fun replaceFakeContinuationsWithRealOnes(methodNode: MethodNode, contin
methodNode.instructions.set(fakeContinuation, VarInsnNode(Opcodes.ALOAD, continuationIndex))
}
}
/* We do not want to spill dead variables, thus, we shrink its LVT record to region, where the variable is alive,
* so, the variable will not be visible in debugger. User can still prolong life span of the variable by using it.
*
* This means, that function parameters do not longer span the whole function, including `this`.
* This might and will break some bytecode processors, including old versions of R8. See KT-24510.
*/
private fun updateLvtAccordingToLiveness(method: MethodNode, isForNamedFunction: Boolean) {
val liveness = analyzeLiveness(method)
fun List<LocalVariableNode>.findRecord(insnIndex: Int, variableIndex: Int): LocalVariableNode? {
for (variable in this) {
if (variable.index == variableIndex &&
method.instructions.indexOf(variable.start) <= insnIndex &&
insnIndex < method.instructions.indexOf(variable.end)
) return variable
}
return null
}
fun isAlive(insnIndex: Int, variableIndex: Int): Boolean =
liveness[insnIndex].isAlive(variableIndex)
val oldLvt = arrayListOf<LocalVariableNode>()
for (record in method.localVariables) {
oldLvt += record
}
method.localVariables.clear()
// Skip `this` for suspend lamdba
val start = if (isForNamedFunction) 0 else 1
for (variableIndex in start until method.maxLocals) {
if (oldLvt.none { it.index == variableIndex }) continue
var startLabel: LabelNode? = null
for (insnIndex in 0 until (method.instructions.size() - 1)) {
val insn = method.instructions[insnIndex]
if (!isAlive(insnIndex, variableIndex) && isAlive(insnIndex + 1, variableIndex)) {
startLabel = insn as? LabelNode ?: insn.findNextOrNull { it is LabelNode } as? LabelNode
}
if (isAlive(insnIndex, variableIndex) && !isAlive(insnIndex + 1, variableIndex)) {
// No variable in LVT -> do not add one
val lvtRecord = oldLvt.findRecord(insnIndex, variableIndex) ?: continue
if (lvtRecord.name == CONTINUATION_VARIABLE_NAME) continue
val endLabel = insn as? LabelNode ?: insn.findNextOrNull { it is LabelNode } as? LabelNode ?: continue
// startLabel can be null in case of parameters
@Suppress("NAME_SHADOWING") val startLabel = startLabel ?: lvtRecord.start
var recordToExtend: LocalVariableNode? = null
for (record in method.localVariables) {
if (record.name == lvtRecord.name &&
record.desc == lvtRecord.desc &&
record.signature == lvtRecord.signature &&
record.index == lvtRecord.index
) {
if (InsnSequence(record.end, startLabel).none { isBeforeSuspendMarker(it) }) {
recordToExtend = record
break
}
}
}
if (recordToExtend != null) {
recordToExtend.end = endLabel
} else {
method.localVariables.add(
LocalVariableNode(lvtRecord.name, lvtRecord.desc, lvtRecord.signature, startLabel, endLabel, lvtRecord.index)
)
}
}
}
}
for (variable in oldLvt) {
// $continuation and $result are dead, but they are used by debugger, as well as fake inliner variables
// For example, $continuation is used to create async stack trace
if (variable.name == CONTINUATION_VARIABLE_NAME ||
variable.name == SUSPEND_CALL_RESULT_NAME ||
isFakeLocalVariableForInline(variable.name)
) {
method.localVariables.add(variable)
}
// this acts like $continuation for lambdas. For example, it is used by debugger to create async stack trace. Keep it.
if (variable.name == "this" && !isForNamedFunction) {
method.localVariables.add(variable)
}
}
}

View File

@@ -136,7 +136,11 @@ private class UnitSourceInterpreter(private val localVariables: Set<Int>) : Basi
override fun merge(value1: BasicValue?, value2: BasicValue?): BasicValue? =
if (value1 is UnitValue && value2 is UnitValue) {
UnitValue(value1.insns.union(value2.insns))
val newValue = UnitValue(value1.insns.union(value2.insns))
if (newValue.insns.any { it in unspillableUnitValues }) {
markUnspillable(newValue)
}
newValue
} else {
// Mark unit values as unspillable if we merge them with non-unit values here.
// This is conservative since the value could turn out to be unused.

View File

@@ -1,11 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.codegen.coroutines
import org.jetbrains.org.objectweb.asm.tree.analysis.Frame
import org.jetbrains.org.objectweb.asm.tree.analysis.SourceValue
typealias SourceFrames = Array<Frame<SourceValue>?>

View File

@@ -1,11 +0,0 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.codegen.coroutines
import org.jetbrains.org.objectweb.asm.tree.analysis.Frame
import org.jetbrains.org.objectweb.asm.tree.analysis.SourceValue
typealias SourceFrames = Array<Frame<SourceValue>>

View File

@@ -26,7 +26,6 @@ import org.jetbrains.org.objectweb.asm.tree.analysis.BasicInterpreter
import org.jetbrains.org.objectweb.asm.tree.analysis.BasicValue
import org.jetbrains.org.objectweb.asm.tree.analysis.Frame
// TODO Use this in variable liveness analysis
internal class MethodNodeExaminer(
val languageVersionSettings: LanguageVersionSettings,
containingClassInternalName: String,

View File

@@ -8,12 +8,13 @@ package org.jetbrains.kotlin.codegen.coroutines
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.COROUTINE_SUSPENDED_NAME
import org.jetbrains.kotlin.backend.common.isBuiltInSuspendCoroutineUninterceptedOrReturn
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalClassDescriptor
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType
import org.jetbrains.kotlin.codegen.*
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
import org.jetbrains.kotlin.codegen.inline.addFakeContinuationMarker
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.coroutines.isSuspendLambda
import org.jetbrains.kotlin.descriptors.*
@@ -41,6 +42,7 @@ import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.KotlinTypeFactory
import org.jetbrains.kotlin.types.TypeConstructorSubstitution
import org.jetbrains.kotlin.types.typeUtil.asTypeProjection
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
import org.jetbrains.kotlin.util.OperatorNameConventions
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import org.jetbrains.org.objectweb.asm.Label
@@ -111,8 +113,8 @@ fun computeLabelOwner(languageVersionSettings: LanguageVersionSettings, thisName
else
languageVersionSettings.coroutinesJvmInternalPackageFqName().child(Name.identifier("CoroutineImpl")).topLevelClassAsmType()
private val NORMALIZE_CONTINUATION_METHOD_NAME = "normalizeContinuation"
private val GET_CONTEXT_METHOD_NAME = "getContext"
private const val NORMALIZE_CONTINUATION_METHOD_NAME = "normalizeContinuation"
private const val GET_CONTEXT_METHOD_NAME = "getContext"
data class ResolvedCallWithRealDescriptor(val resolvedCall: ResolvedCall<*>, val fakeContinuationExpression: KtExpression)
@@ -140,11 +142,11 @@ fun ResolvedCall<*>.replaceSuspensionFunctionWithRealDescriptor(
if (this is VariableAsFunctionResolvedCall) {
val replacedFunctionCall =
functionCall.replaceSuspensionFunctionWithRealDescriptor(project, bindingContext, isReleaseCoroutines)
?: return null
?: return null
@Suppress("UNCHECKED_CAST")
return replacedFunctionCall.copy(
VariableAsFunctionResolvedCallImpl(
resolvedCall = VariableAsFunctionResolvedCallImpl(
replacedFunctionCall.resolvedCall as MutableResolvedCall<FunctionDescriptor>,
variableCall.asMutableResolvedCall(bindingContext)
)
@@ -312,7 +314,7 @@ private fun FunctionDescriptor.getContinuationParameterTypeOfSuspendFunction(isR
fun ModuleDescriptor.getResult(kotlinType: KotlinType) =
module.resolveTopLevelClass(
DescriptorUtils.RESULT_FQ_NAME,
StandardNames.RESULT_FQ_NAME,
NoLookupLocation.FROM_BACKEND
)?.defaultType?.let {
KotlinTypeFactory.simpleType(
@@ -413,7 +415,8 @@ fun createMethodNodeForSuspendCoroutineUninterceptedOrReturn(languageVersionSett
load(1, OBJECT_TYPE) // continuation
checkcast(languageVersionSettings.continuationAsmType())
invokestatic(
languageVersionSettings.coroutinesJvmInternalPackageFqName().child(Name.identifier("DebugProbesKt")).topLevelClassAsmType().internalName,
languageVersionSettings.coroutinesJvmInternalPackageFqName().child(Name.identifier("DebugProbesKt"))
.topLevelClassAsmType().internalName,
"probeCoroutineSuspended",
"(${languageVersionSettings.continuationAsmType()})V",
false
@@ -453,6 +456,32 @@ fun FunctionDescriptor.getOriginalSuspendFunctionView(bindingContext: BindingCon
fun FunctionDescriptor.getOriginalSuspendFunctionView(bindingContext: BindingContext, state: GenerationState) =
getOriginalSuspendFunctionView(bindingContext, state.languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines))
// For each suspend function, we have a corresponding JVM view function that has an extra continuation parameter,
// and, more importantly, returns 'kotlin.Any' (so that it can return as a reference value or a special COROUTINE_SUSPENDED object).
// This also causes boxing of primitives and inline class values.
// If we have a function returning an inline class value that is mapped to a reference type, we want to avoid boxing.
// However, we have to do that consistently both on declaration site and on call site.
fun FunctionDescriptor.originalReturnTypeOfSuspendFunctionReturningUnboxedInlineClass(typeMapper: KotlinTypeMapper): KotlinType? {
if (!isSuspend) return null
// Suspend lambdas cannot return unboxed inline class
if (this is AnonymousFunctionDescriptor) return null
val originalDescriptor = unwrapInitialDescriptorForSuspendFunction().original
val originalReturnType = originalDescriptor.returnType ?: return null
if (!originalReturnType.isInlineClassType()) return null
// Force boxing for primitives
if (AsmUtil.isPrimitive(typeMapper.mapType(originalReturnType.makeNotNullable()))) return null
// Force boxing for nullable inline class types with nullable underlying type
if (originalReturnType.isMarkedNullable && originalReturnType.isNullableUnderlyingType()) return null
// Force boxing if the function overrides function with different type modulo nullability
if (originalDescriptor.overriddenDescriptors.any {
(it.original.returnType?.isMarkedNullable == true && it.original.returnType?.isNullableUnderlyingType() == true) ||
// We do not care about type parameters, just main class type
it.original.returnType?.constructor?.declarationDescriptor != originalReturnType.constructor.declarationDescriptor
}) return null
// Don't box other inline classes
return originalReturnType
}
fun InstructionAdapter.loadCoroutineSuspendedMarker(languageVersionSettings: LanguageVersionSettings) {
invokestatic(
languageVersionSettings.coroutinesIntrinsicsFileFacadeInternalName().internalName,
@@ -462,6 +491,15 @@ fun InstructionAdapter.loadCoroutineSuspendedMarker(languageVersionSettings: Lan
)
}
fun InstructionAdapter.generateCoroutineSuspendedCheck(languageVersionSettings: LanguageVersionSettings) {
dup()
loadCoroutineSuspendedMarker(languageVersionSettings)
val elseLabel = Label()
ifacmpne(elseLabel)
areturn(OBJECT_TYPE)
mark(elseLabel)
}
fun InstructionAdapter.invokeDoResumeWithUnit(thisName: String) {
// .doResume(Unit, null)
StackValue.putUnitInstance(this)
@@ -494,14 +532,14 @@ fun Method.getImplForOpenMethod(ownerInternalName: String) =
fun FunctionDescriptor.isSuspendLambdaOrLocalFunction() = this.isSuspend && when (this) {
is AnonymousFunctionDescriptor -> this.isSuspendLambda
is SimpleFunctionDescriptor -> this.visibility == Visibilities.LOCAL
is SimpleFunctionDescriptor -> this.visibility == DescriptorVisibilities.LOCAL
else -> false
}
fun FunctionDescriptor.isLocalSuspendFunctionNotSuspendLambda() = isSuspendLambdaOrLocalFunction() && this !is AnonymousFunctionDescriptor
@JvmField
val EXPERIMENTAL_CONTINUATION_ASM_TYPE = DescriptorUtils.CONTINUATION_INTERFACE_FQ_NAME_EXPERIMENTAL.topLevelClassAsmType()
val EXPERIMENTAL_CONTINUATION_ASM_TYPE = StandardNames.CONTINUATION_INTERFACE_FQ_NAME_EXPERIMENTAL.topLevelClassAsmType()
@JvmField
val RELEASE_CONTINUATION_ASM_TYPE = DescriptorUtils.CONTINUATION_INTERFACE_FQ_NAME_RELEASE.topLevelClassAsmType()
val RELEASE_CONTINUATION_ASM_TYPE = StandardNames.CONTINUATION_INTERFACE_FQ_NAME_RELEASE.topLevelClassAsmType()

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