Commit Graph

956 Commits

Author SHA1 Message Date
Mikhael Bogdanov adae629258 Report diagnostic on virtual tailrec function
#KT-18541 Fixed
2019-10-16 13:02:31 +02:00
Mikhail Glukhikh 88bc6b992f Move .gitattributes for generated files from fir:resolve to fir:tree 2019-10-14 11:12:19 +03:00
Dmitriy Novozhilov 29cda7cb24 [FIR] Always use LF line endings in generated fir tree 2019-10-11 10:27:23 +03:00
Dmitriy Novozhilov 8e4e7c4a11 [FIR] Configure IC for fir tree generation task 2019-10-11 10:27:23 +03:00
Dmitriy Novozhilov dc1874af3c [FIR] Add empty line at the end of generated fir tree files 2019-10-10 20:45:21 +03:00
Dmitriy Novozhilov 0c27b863b0 [FIR] Add Readme for tree generator 2019-10-10 17:53:31 +03:00
Dmitriy Novozhilov b8a8a5575b [FIR] Move default visitors from separate sourceset 2019-10-10 17:53:30 +03:00
Dmitriy Novozhilov a8192dba90 [FIR] Remove old visitor generator and configure gradle task for tree generator 2019-10-10 17:53:30 +03:00
Dmitriy Novozhilov cb981919f9 [FIR] Replace FIR tree with generated implementation 2019-10-10 17:53:30 +03:00
Dmitriy Novozhilov d6d4b3329b [FIR] Add FIR tree generator 2019-10-10 17:53:29 +03:00
Mads Ager 92cf521e11 [IR] Deal with forward references in default argument lambdas.
Rely on the frontend weeding out cases that are not supported.

In psi2ir, introduce all the parameters before processing default
values.

Change the DefaultArgumentStubGenerator to generate code that
matches the behavior of the current backend.
2019-10-10 09:00:51 +02:00
Mikhail Glukhikh 07e067102b FIR body resolve: use one scope session per module
Gives significant (~5%) performance boost mainly due to use-site scope caching
2019-10-08 17:59:44 +03:00
Mikhail Glukhikh 58f2348647 FIR buildJavaUseSiteScope: fix visited symbols handling 2019-10-08 16:19:55 +03:00
Mikhail Glukhikh 1e8003e9a8 Use use-site session in buildJavaUseSiteScope 2019-10-08 16:19:55 +03:00
Mikhail Glukhikh 69905ab325 Derive FirClassDeclaredMemberScopeProvider from FirSessionComponent 2019-10-08 16:19:55 +03:00
Mikhail Glukhikh 75a3d2fb97 FirClassDeclaredMemberScope: keep cache in provider but not in ScopeSession 2019-10-08 16:19:55 +03:00
Mikhail Glukhikh dfa494a21e FIR: remove duplicate of 'wrapSubstitutionScopeIfNeed' 2019-10-08 16:19:55 +03:00
Mikhail Glukhikh a0ed03a121 FIR: apply overload conflict resolver even for variable (due to receivers) 2019-10-08 16:19:55 +03:00
Mikhail Glukhikh 4cd8b78779 FIR: eliminate most usages of FirSession.service() and getService() 2019-10-08 16:19:54 +03:00
Mikhail Glukhikh 708d914224 FIR: don't recreate tower resolver / conflict resolver / call completer 2019-10-08 16:19:54 +03:00
Mikhail Glukhikh 9801e06eac Use .firSymbolProvider instead of service, deprecate FirSession.service 2019-10-08 16:19:54 +03:00
Mikhail Glukhikh 3fee1445b9 Set more precise type in FirQualifiedNameResolver 2019-10-08 16:19:54 +03:00
Mikhail Glukhikh f7d12efc24 Memoize absent classifier names in FIR star importing scopes 2019-10-04 19:05:15 +03:00
Mikhail Glukhikh 6d8aa69878 FIR: rename CallResolver to FirTowerResolver 2019-10-04 19:02:52 +03:00
Mikhail Glukhikh 16de3257d5 FIR abstract importing scope: return NONE when we have no top-level callables 2019-10-04 18:59:12 +03:00
Mikhail Glukhikh 7ba40ac963 Memoize absent function/property names in FirSuperTypeScope 2019-10-04 18:59:12 +03:00
Mikhail Glukhikh 840ecf1a77 Don't enter twice top-level scopes w/out particular name in FIR tower resolver 2019-10-04 18:59:11 +03:00
Mikhail Glukhikh e276e8d9f3 Don't enter twice local scopes w/out particular name in FIR tower resolver 2019-10-04 18:59:11 +03:00
Mikhail Glukhikh e48428d39d FIR ScopeSession: use HashMap instead of LinkedHashMap 2019-10-04 18:59:11 +03:00
Mikhail Glukhikh 813e35643c FIR resolve: fix constructor handling in qualifier scope
Constructors aren't more visited twice in regular scopes
2019-10-04 18:59:10 +03:00
Mikhail Glukhikh 26e8202771 FIR: add 'isInner' parameter to constructors
This is helpful because inner class constructors are resolved in a bit
different way (like non-static vs static)
2019-10-04 18:59:10 +03:00
Pavel Kirpichenkov b7e5d9faae Update annotation rendering in diagnostics
Disable annotation rendering in default type and descriptor renderers.
Preserve annotations in Android and Serialization plugins.
Update error texts in ide tests.
Nullability annotations in Java descriptors are rendered with context-dependent renderer.

#KT-20258 Fixed
2019-10-04 11:18:45 +03:00
Mikhail Glukhikh 7e87357ed0 FIR2IR: fix top-level parent settings thus fixing Cli.testFirHello 2019-10-03 11:47:22 +03:00
Denis Zharkov e54d2c7c32 Support named arguments in their own position
^KT-7745 In Proggress
2019-10-02 11:13:15 +03:00
Mikhail Glukhikh c7904b273f FIR: fix FirArraySetCall.acceptChildren thus fixing visitConsistencyTest 2019-10-01 18:23:06 +03:00
Denis Zharkov f91db5f0b8 Restore correct overloads ambiguity accidentally removed in 1.3.60
This problem is only relevant when isTypeRefinementEnabled == true (HMPP projects)

Ambiguity accidentally was removed after 471134d
There, for areCallableDescriptorsEquivalent we stopped assuming
as impossible a situation of having identity-different descriptors
in the same containing declaraton that still might be considered equal

So, before 471134d we were comparing
"fun foo(x: String)" with "[substituted] fun foo(x: String)"
and areCallableDescriptorsEquivalent returned false for such case.
Thus, both overrides were left in the resulting set.

After 471134d, those two descriptors
becamed considered as equal thus having a possibility to remove any of them.

The problem is that "areCallableDescriptorsEquivalent" has kind of
unclear contract. Effectively it checks whether two descriptors match
to the same declaration.

But some of the usages expect that it also makes sure that descriptors
have the same substitution (see org.jetbrains.kotlin.resolve.calls.smartcasts.IdentifierInfo.Variable#equals)

So, the straight solution is using original descriptors for the cases
where we need to make sure that descriptors relates to actually different
declarations

^KT-34027 Fixed
2019-09-30 20:09:42 +03:00
Mikhail Zarechenskiy 932d84d568 Fix performance regression in NI by fixing totally incorrect hashCode
The actual problem was introduced in 4f1e85b468, note how `hashCode` is implemented:
```
var currentHashCode = cachedHashCode
if (currentHashCode == 0) return currentHashCode
...
```
It's a silly bug, there should be check `if (currentHashCode != 0) ...` because `0` is used a marker for "uncomputed value".

Now, in the commit 0219b86d06 I added map with `KotlinType` as a key and because of constant `hash` for `KotlinType`, we basically got `List` instead of `Map`, which caused this performance regression

 #KT-34063 Fixed
2019-09-30 10:22:30 +03:00
Mikhail Glukhikh 4718ae4186 FIR: don't perform argument check for callable references
This fixes failing FIR2IR test
2019-09-27 09:23:34 +03:00
Mikhail Glukhikh da7d5d5702 FIR: provide receiver for accessor of extension property 2019-09-27 09:22:52 +03:00
Mikhail Glukhikh 0d4ca06372 Fix FirCallableReferenceAccessImpl.transformChildren 2019-09-27 09:21:53 +03:00
Mikhail Glukhikh 11fb121458 FirProvider: search for fake overridden symbol containing file correctly 2019-09-27 09:21:02 +03:00
Mikhail Glukhikh 0438ab96e1 FIR: add a test with current top resolve problems 2019-09-27 09:20:31 +03:00
Pavel Kirpichenkov 6c8e829f19 Update diagnostics for trailing lambdas, add quickfix
Alternative message for errors, caused by unexpected lambda expression arguments on a new line.
Both diagnostic are reported, if multiple lambda expressions were passed to the call.
For other errors trailing lambda diagnostic overrides the original one.

Quickfix for erroneous trailing lambdas on a new line after call.
Fix separates lambda expression from previous call with semicolon.
All trailing lambda arguments become standalone lambda expressions.
2019-09-25 15:38:17 +03:00
Mikhail Zarechenskiy 1a50a3cbb1 [NI] Avoid computing few things for simple calls without type variables 2019-09-20 17:56:07 +03:00
Pavel Kirpichenkov f45a49b122 Remove uncapturing in type mismatch diagnostics
#KT-32587 Fixed
2019-09-20 17:05:03 +03:00
Denis Zharkov 2bdbed978b FIR: Support SAM constructors 2019-09-18 10:03:55 +07:00
Denis Zharkov b3e96a1fcf FIR: Merge FirTopLevelDeclaredMemberScope into FirSelfImportingScope
It's strange that those scopes have similar semantics but belong
to different level (that might change semantics a bit)
2019-09-18 10:03:55 +07:00
Denis Zharkov 391346ae46 FIR: Pass BodyResolveComponents to ScopeTowerLevel 2019-09-18 10:03:28 +07:00
Denis Zharkov fb4b6b8290 FIR: Move constructor processing from scopes to tower resolvers 2019-09-18 10:03:28 +07:00
Denis Zharkov 08a8a9fa61 FIR: Move SamResolver to BodyResolveComponents 2019-09-18 10:00:04 +07:00