Nikolay Krasko
fbe16f7b91
Refactoring: delete unused CachedValueProperty class
2017-07-21 15:41:06 +03:00
Mikhail Glukhikh
1cb6128f2f
Minor: J2K test fix
2017-07-21 12:21:04 +03:00
Dmitry Petrov
bf3e896464
Update 'this' extension receiver when there's a smart cast
...
If 'this' (implicit or explicit) was used as an extension receiver,
and the corresponding call required a smart-cast,
this information was effectively lost in "old" resolution & inference,
but is required by "old" JVM BE to generate proper CHECKCASTs.
2017-07-21 08:58:52 +03:00
Dmitry Petrov
c9d54d7110
Generate proper error candidates for type aliases
...
#KT-17745 Fixed Target versions 1.1.5
2017-07-21 08:58:12 +03:00
Dmitry Petrov
b4d8337ca5
Ignore test for 'primitive Char == object' in JS (KT-19081)
2017-07-21 08:52:29 +03:00
Dmitry Petrov
709a7e201f
Simplify code for specialized BranchedValues
2017-07-21 08:52:29 +03:00
Dmitry Petrov
e1a55e8dec
Prefer compact bytecode for primitive/object comparisons with Boolean
...
'java.lang.Boolean#valueOf' doesn't allocate new objects
(it uses pre-allocated singletons for 'true' and 'false').
2017-07-21 08:52:29 +03:00
Dmitry Petrov
8e9c0294fe
Do not box primitives for 'primitive == object'
...
NB user-defined 'equals' can violate contract for 'Object#equals', e.g.,
it can be asymmetric.
Thus we can't avoid boxing for 'object == primitive'.
2017-07-21 08:52:29 +03:00
Dmitry Petrov
fa42f202fa
Avoid boxing on 'primitive == boxed' when possible
...
Similar to 'boxed == primitive' case, different bytecode due to
evaluation order.
2017-07-21 08:52:29 +03:00
Dmitry Petrov
e440de3494
Minor: GeneratePrimitiveVsObjectEqualityTestData
2017-07-21 08:52:29 +03:00
Dmitry Petrov
98ee83f4a3
Minor: move condition for boxed==primitive to corresponding isApplicable
2017-07-21 08:52:29 +03:00
Dmitry Petrov
4cba600268
Minor: some more evaluation order tests for 'boxed == primitive'
2017-07-21 08:52:29 +03:00
Dmitry Petrov
81609e4c6f
Generate complex equality comparison only when RHS can have side effects
...
In "short" version, LHS is always evaluated before RHS,
and RHS may be not evaluated if LHS is null.
So, it makes sense to use "short" version in cases when RHS can't have
side effects (because of more compact bytecode and more opportunities
for code elimination).
2017-07-21 08:52:29 +03:00
Dmitry Petrov
8aacddb9f0
Avoid primitive boxing for 'boxed == primitive' if possible
...
This makes sense for non-floating-point primitive type
(boolean, char, byte, short, int, long):
floating-point types use specialized versions of 'areEqual'.
2017-07-21 08:52:29 +03:00
Dmitry Petrov
275c758da1
Cleanup and move code around in BranchedValue
...
- Cleanup inspections
- Move optimized boxed-vs-primitive comparisons to a separate file
2017-07-21 08:52:29 +03:00
Dmitry Petrov
051ac44759
Verify bytecode after mandatory transformations and after optimizations
2017-07-21 08:52:29 +03:00
Simon Ogorodnik
7ed1669050
KT-19011: Fix import optimizing when extension functional type is used
...
It should check is extension functional type imported from companion
is actually called on companion instance
#KT-19011 fixed
2017-07-21 03:08:06 +03:00
Dimach
65e603c1ed
KT-13552: Fix J2K to generate else block while converting switch
...
#KT-13552 fixed
2017-07-20 23:35:11 +03:00
Mikhail Glukhikh
44790eccaf
Use "unnecessary variable" inspection in J2K
...
Unused variables are no more treated as unnecessary
Related to KT-15958
2017-07-20 17:48:27 +03:00
Mikhail Glukhikh
39f1ef390e
Do not report "redundant Unit" for generic calls coerced to Unit
...
So #KT-18999 Fixed
2017-07-20 17:48:20 +03:00
Mikhail Glukhikh
c554bfa20d
Move: RemoveSetterParameterTypeInspection to inspections package
2017-07-20 17:48:14 +03:00
Mikhail Glukhikh
e154e4cf75
Move: RedundantUnitReturnTypeInspection to inspections package
2017-07-20 17:48:07 +03:00
Simon Ogorodnik
8f78446bff
Minor: Clarify code for KT-18786: Fix J2K to move properties to top
2017-07-20 16:04:07 +03:00
Dmitry Jemerov
9213c4a1ab
EA-104855 - (1.1.4) NPE: KotlinCommonBlockKt.isFirstParameter
2017-07-20 12:50:12 +02:00
Dmitry Jemerov
fbcc519098
Fix tests affected by annotation wrapping changes
2017-07-20 12:32:48 +02:00
Alexander Udalov
5128b8a409
Add default implementation for Annotations.findAnnotation
2017-07-20 13:27:34 +03:00
Alexander Udalov
def3f73fdd
Use AnnotationDescriptor.fqName instead of type
...
Also use the annotationClass extension property instead of
TypeUtils.getClassDescriptor(annotation.type)
2017-07-20 13:26:13 +03:00
Alexander Udalov
541b9dab52
Introduce optimized BuiltInAnnotationDescriptor for built-in annotations
...
It's built on a FQ name and avoids resolution of the annotation class
descriptor as much as possible
2017-07-20 13:26:13 +03:00
Alexander Udalov
f39106f75c
Do not use parameter descriptors in AnnotationDescriptorImpl
2017-07-20 13:26:13 +03:00
Alexander Udalov
eb205f620c
Do not use parameter descriptors in most annotation implementations
...
Except AnnotationDescriptorImpl, which is refactored in the subsequent
commit.
Note that we no longer check the presence of parameters with the
corresponding names in the annotation class in
LazyJavaAnnotationDescriptor, this is why test data changed
2017-07-20 13:25:39 +03:00
Alexander Udalov
cc7ed2ba54
Change map key type in AnnotationDescriptor.getAllValueArguments
...
Turns out, only the parameter's name is needed at all usages of this
method. Such a map is both easier to use (no need to call
ValueParameterDescriptor.getName) and easier to construct (no need to
resolve annotation class, its constructor, its parameters). In this
commit, only usages have changed but the implementations are still using
the old logic, this is going to be refactored in subsequent commits
2017-07-20 13:25:39 +03:00
Alexander Udalov
41ea0e8ef8
Introduce AnnotationDescriptor.fqName
...
Could be used instead of ".annotationClass.fqName" to avoid the unneeded
resolution of the annotation class descriptor
2017-07-20 13:25:38 +03:00
Alexander Udalov
1d64b61a8f
J2K AnnotationDescriptor, refactor implementations
2017-07-20 13:25:38 +03:00
Alexander Udalov
7ec67505c5
Optimize Annotations.isEmpty in some implementations
2017-07-20 13:25:38 +03:00
Alexander Udalov
9ee4b39e1b
Provide default implementation for Annotations.findExternalAnnotation
2017-07-20 13:25:38 +03:00
Alexander Udalov
5636318eb4
Optimize DeserializedAnnotations in terms of memory traffic
...
Do not wrap every annotation object into an AnnotationWithTarget
2017-07-20 13:25:38 +03:00
Alexander Udalov
21197b53aa
Do not load annotations on value parameter if there are none
...
Also fix an error in the doc in descriptors.proto
2017-07-20 13:25:38 +03:00
Alexander Udalov
c197db9c69
Remove some unnecessary lazy computations in LazyJavaClassDescriptor
2017-07-20 13:25:38 +03:00
Mikhail Glukhikh
bdc44ff4cf
Unnecessary variable: do not start inlining in write action
...
So #KT-19110 Fixed
(cherry picked from commit 6325fb1)
2017-07-20 12:39:52 +03:00
Ilya Chernikov
e38aaf3e07
Fix xmx setting for the daemon in tests
2017-07-20 10:54:05 +02:00
Ilya Chernikov
17a189a24b
Improve logging and exception handling in the daemon
2017-07-20 10:54:05 +02:00
Denis Zharkov
904c7f9c64
Fix nullable variables spilling in coroutines
...
See the last comment in testData for clarification
#KT-18983 Fixed
2017-07-20 10:53:32 +03:00
Denis Zharkov
90e894b171
Use known jvm binary class for package part if possible
2017-07-20 10:53:09 +03:00
Denis Zharkov
99a10d8d63
Minor. Rename compactIfPossible -> compact
...
As ArrayList can always be compacted
2017-07-20 10:53:09 +03:00
Denis Zharkov
f454858bbb
Optimize memory footprint for case of empty annotations in types
...
It seems that most of the simple types don't have any annotations,
so for that case it's worth removing the field from SimpleTypeImpl
Also introduce a NotNullSimpleType being used when replacing nullability
2017-07-20 10:53:09 +03:00
Denis Zharkov
f8a12a0ec3
Optimize JavaTypeResolver by avoiding using some language features
...
It's quite a hot point and using local functions with default
parameters seem to affect negatively to overall performance
(at least some of compiler benchmark have shown it)
2017-07-20 10:53:09 +03:00
Denis Zharkov
d7cee95d95
Call compactIfPossible where it's possible in BinaryJava*
...
It helps to avoid retaining a lot of redundant empty SmartList's
instances
2017-07-20 10:53:09 +03:00
Denis Zharkov
e2ce285ec3
Reduce memory footprint after functions substitution
...
Do not recreate new instances if descriptors' parts remain
effectively the same
2017-07-20 10:53:09 +03:00
Denis Zharkov
4a73fbb70a
Reduce memory footprint of TypeSubstitutor
...
Avoid creating new instances if types remain unchanged
2017-07-20 10:53:09 +03:00
Denis Zharkov
4385ce8828
Reduce memory footprint for basic case of flexible types
...
The case is when we have a simple type constructor
(not array nor collection) and type is not raw:
A<T1, >..A<T1>?
Actually these types are almost equal besides of nullability,
but we create and resolve two different simple types,
they have different arguments' lists, etc.
The idea is to add NullableSimpleType subclass with delegate
to another simple type
It should help a lot both with common cases and with corner ones:
flexibles types in spark for Function22 having exponential size
because of its flexibility
#KT-14375 Fixed
#KT-14323 Fixed
2017-07-20 10:53:09 +03:00