Commit Graph

2259 Commits

Author SHA1 Message Date
Alexander Udalov fca7a8c4a2 Drop PrimitiveTypesUtil, store desc in JvmPrimitiveType 2015-02-25 20:13:46 +03:00
Nikolay Krasko f3919db592 Find usages and reference to delegation origin 2015-02-24 21:52:52 +03:00
Nikolay Krasko 377209f0c3 Do not report CONFLICTING_JVM_DECLARATIONS on delegated origin element 2015-02-24 21:33:55 +03:00
Alexander Udalov cf0842b135 Fix initialization order in REPL
#KT-6843 Fixed
2015-02-22 16:12:38 +03:00
Michael Bogdanov 37006ad566 Annotate additional files through bytecode toolwindow analysis 2015-02-20 10:16:22 +03:00
Pavel V. Talanov d6a942a574 Remove all deprecated OBJECT$ usages from project code 2015-02-18 19:33:56 +03:00
Alexander Udalov a960d2d785 Fix "No descriptor for enum entry" exception
EA-52557, EA-64887
2015-02-17 15:31:45 +03:00
Alexander Udalov e705ff2517 Write KotlinSyntheticClass annotation on when-by-enum mapping classes 2015-02-16 21:46:22 +03:00
Alexander Udalov 6ce8d6bd2e Serialize descriptors for local/anonymous classes on JVM
Reflection needs this information to work for local classes and anonymous
objects
2015-02-16 21:46:21 +03:00
Alexander Udalov 0d05fca838 Support serialization/deserialization of local classes
Most of these changes are aimed to support and correctly transform ClassId for
local classes, no actual bytes are written or read at the moment (see next
commits). See the comment on ClassId for clarification.

A hack in DescriptorSerializer which erased anonymous types to Any (which had
been breaking the consistency between descriptors resolved from sources and
from serialized information) is now gone
2015-02-16 20:19:54 +03:00
Alexander Udalov 5d8ae3ed6a Minor, refactor some constants in JvmAnnotationNames
Declare KotlinClass similarly to KotlinSyntheticClass, this will be used later
2015-02-16 20:19:52 +03:00
Alexander Udalov e812c4e67f Introduce KotlinSyntheticClass.Kind.LOCAL_TRAIT_IMPL 2015-02-16 20:19:50 +03:00
Alexander Udalov 17c930c84f Use abstract factory for reflection objects on JVM
Introduce an abstract factory class ReflectionFactory which is responsible for creating
reflection objects (KClass, KProperty, ...). The meaningful implementation is
located in "reflection.jvm" where KClassImpl/KPropertyImpl/... are accessible
and can be instantiated. The default implementation will be used in the lite
runtime with no reflection and will return nulls / throw exceptions there.

Put all functions, calls to which are generated by JVM back-end, in one place:
the class named Reflection which contains only static methods. Previously these
functions were scattered across different files in module "reflection.jvm".

The code using reflection may now be compiled against either runtime, but
reflection features will work if and only if reflection is accessible at
runtime
2015-02-16 20:19:13 +03:00
Pavel V. Talanov 766912c590 Generate additional deprecated "OBJECT$" field for class object
To avoid breaking some code for now
It should be removed later
2015-02-16 15:38:43 +03:00
Pavel V. Talanov 7d5c0dc8bf Refactor: ImplementationBodyCodegen#generateFieldForSingleton() 2015-02-16 15:38:43 +03:00
Pavel V. Talanov f482768acf Introduce ClassDescriptor#getDefaultObjectDescriptor()
ClassDescriptor#getClassObjectDescriptor (with old semantics) is now a utility
Process usages and replace with calls to a new method where appropriate
2015-02-16 15:38:42 +03:00
Pavel V. Talanov 945072a129 Drop DeserializedResolverUtils and it's usages 2015-02-16 15:38:41 +03:00
Pavel V. Talanov d9d3f68a39 Drop JetClassObject element and its usages
as class objects are now represented by JetObjectDeclaration element
2015-02-16 15:38:31 +03:00
Pavel V. Talanov 0343fd8fc7 Rework class objects
Class objects have name "Default" by default
Do not produce synthetic class objects
Class objects have new semantics:
    class "A" has class object "B" if literal "A" can be used as a value of type "B"
Class objects act like ordinary nested objects
    i.e. are accessible from class scope via getClassifier()
Jvm backend: class object fields and class have the name of class object ("Default")
	as opposed to special "OBJECT$" and "object"
Serialization: only the name of class object is needed to serialize data
2015-02-16 15:38:27 +03:00
Nikolay Krasko 0f3971323f Go to Declaration does not work on usage of constant from class object in Java (KT-6172)
#KT-6172 Fixed
2015-02-13 20:28:51 +03:00
Nikolay Krasko 56c2870ac6 Refactoring: make parameters not-null 2015-02-13 20:28:50 +03:00
Alexander Udalov 9b28e19551 Use CodegenContext to determine outer class & enclosing method 2015-02-11 18:10:49 +03:00
Alexander Udalov 22e5efc7cd Remove useless parameter of FunctionCodegen.generateDefault
JvmMethodSignature can now be perfectly obtained by JetTypeMapper.mapSignature
2015-02-11 18:10:43 +03:00
Alexander Udalov f4d4fc042b Remove useless parameter of FunctionCodegen.generateMethod
JvmMethodSignature can now be perfectly obtained by JetTypeMapper.mapSignature
2015-02-11 18:10:42 +03:00
Alexander Udalov e7a744b315 Make JetTypeMapper aware of SAM constructor arguments
This obsoletes 'replaceName' workaround that was present in ClosureCodegen but
missing in other crucial call sites of mapSignature, e.g. generation of
EnclosingMethod info

 #KT-6691 Fixed
2015-02-11 18:10:41 +03:00
Alexander Udalov ca2cfb9859 Refactor SAM constructor invocation in JVM codegen
Compute all necessary info in CodegenAnnotatingVisitor and save to trace to be
read by ExpressionCodegen later
2015-02-11 18:10:39 +03:00
Alexander Udalov c84486f860 Refactor CodegenContext and subclasses
Drop unused methods, inline parameters, fix warnings, etc.
2015-02-11 18:10:38 +03:00
Alexander Udalov 61a27da8d5 Move and simplify AsmUtil.writeOuterClassAndEnclosingMethod 2015-02-11 18:10:36 +03:00
Alexander Udalov a280599969 Fix wrong checkcast for === on objects
#KT-6747 Fixed
2015-02-11 18:10:35 +03:00
Andrey Breslav 0e972acf8c == turned into a safe-call 2015-02-10 06:55:46 +01:00
Evgeny Gerashchenko f071802e19 Simplified process of filtering out obsolete package parts and loading descriptors from incremental caches.
Now when file is deleted or dirty (compiled right now), its old package part is used. Current package of file doesn't matter.
2015-02-06 17:44:39 +03:00
Alexander Udalov 5c2d0c6173 Generate not-null assertions on extension receiver parameters 2015-02-03 21:40:39 +03:00
Andrey Breslav da639039bd KT-6698 Bad class file when using a star-projection on a Java's recursive generic parameter
#KT-6698 Fixed
2015-02-02 19:52:00 +03:00
Dmitry Jemerov 37651ae886 use temporary binding trace 2015-01-30 16:00:59 +01:00
Dmitry Jemerov 6442b61db8 Don't generate redundant initializers for 'var' properties.
Since only 'val' properties store initializers as compile time constants in descriptors, we need to take the initializer expression from the PSI and try to evaluate it as a constant.

 #KT-6661 fixed
2015-01-30 14:05:25 +01:00
Andrey Breslav 6035260e68 LOCAL classes are ACC_PUBLIC in byte code 2015-01-29 16:07:29 +03:00
Alexander Udalov 5903b8c4a7 Reorder and optimize dependencies between modules and libraries
- drop 'kotlin-runtime' and other dependencies which are exported by
  other modules ('util' and 'util.runtime' in case of 'kotlin-runtime')
- make all Kotlin modules from the compiler depend on 'util' for clarity
- put 'util' and 'util.runtime' to the bottom of the list everywhere: when
  kotlin-runtime gets reflection, classes from core/ should have higher
  priority than their previous versions from kotlin-runtime.jar
2015-01-28 19:58:35 +03:00
Alexander Udalov d6b67523f6 Improve error message on error types in JetTypeMapper
#KT-6684
2015-01-28 15:25:37 +03:00
Alexander Udalov ae6ffeb88a Skip inlined lambdas when determining EnclosingMethod
#KT-6368 Fixed
2015-01-20 21:02:57 +03:00
Alexander Udalov 20dc3438a2 Fix generation of InnerClasses/EnclosingMethod attributes
Generate InnerClasses for each outer class and each direct inner class in all
inheritors of MemberCodegen, i.e. for classes, objects, lambdas, local classes,
etc.

Also skip lambdas which will be inlined when calculating outer class for
EnclosingMethod

 #KT-5447 Fixed
 #KT-5478 Fixed
2015-01-20 21:02:56 +03:00
Alexander Udalov baea660a0b Rewrite hack in codegen for lambdas in anonymous object super calls
Synthetic ClassDescriptor created in codegen for lambdas and such should have
correct container, because it'll be used in generation of InnerClasses
2015-01-16 21:48:57 +03:00
Alexander Udalov c23352d81b Remove ParentCodegenAware
Inline its fields to subclasses, fix parent codegen nullability
2015-01-16 21:47:51 +03:00
Denis Zharkov 6f94ebb9d6 Refined redundant null check optimization 2015-01-15 15:13:05 +03:00
Denis Zharkov 5675d2b26b Dead code elimination
#KT-6602 Fixed
 #KT-6305 Fixed
 #KT-5656 Fixed
2015-01-15 15:13:05 +03:00
Denis Zharkov aecb925b7b Refined skipping last goto when inlining try/catch/finally block 2015-01-15 15:13:05 +03:00
Natalia Ukhorskaya f5aefc96fb Local variable shouldn't be visible in debugger before initialization 2015-01-15 11:45:15 +03:00
Alexander Udalov 76d11330ee Fix === comparison for primitive types
#KT-6590 Fixed
2015-01-13 17:40:21 +03:00
Natalia Ukhorskaya b709baa9b4 Minor: rename 2015-01-12 14:16:24 +03:00
Alexander Udalov 63cefea6e9 Rename jet -> kotlin in frontend
org.jetbrains.jet -> org.jetbrains.kotlin

Also rename package slicedmap to slicedMap
2015-01-11 15:20:51 +03:00
Alexander Udalov 64c6055030 Rename jet -> kotlin in frontend, descriptors: resolve
org.jetbrains.jet.lang.resolve -> org.jetbrains.kotlin.resolve
2015-01-11 05:09:01 +03:00