Commit Graph

36037 Commits

Author SHA1 Message Date
Alexander Udalov ad59d5a1c8 Define applicability for platform/impl modifiers 2016-11-25 20:50:24 +03:00
Alexander Udalov a3cfd3962c Discriminate 'platform' declarations in resolution
Otherwise calls to functions which are declared twice (platform and impl) would
result in an error "conflicting overloads" in platform-specific modules
2016-11-25 20:50:24 +03:00
Alexander Udalov 926b81fb35 Use DefaultAnalyzerFacade for common code in diagnostic tests
Because of incomplete infrastructure, introduce a few dirty hacks to make
diagnostic tests analyze the common code via DefaultAnalyzerFacade, and also
add common module sources to analysis of platform-specific modules.

Also do not render 'platform' declarations from platform-specific modules to
the .txt file, since they are very likely to be exact copies of the same
declaration in the common module (see RecursiveDescriptorComparator)
2016-11-25 20:50:23 +03:00
Alexander Udalov a4169416ad Support platform modifier in back-ends, add multi-platform integration test
Skip 'platform' declarations completely in back-ends
2016-11-25 20:50:22 +03:00
Alexander Udalov c1eebacd55 Do not render declarations from other modules in diagnostic tests
Because PackageViewDescriptor may consist of several package fragments from
different modules (see LazyPackageViewDescriptorImpl#fragments), we now filter
out fragments from irrelevant modules before rendering them into the .txt
2016-11-25 20:50:21 +03:00
Alexander Udalov a8bd82e863 Support only simple declarations for 'impl' type aliases
E.g. 'impl typealias Foo<A, B> = Bar<A, B>' is allowed; everything else
(variance, changing order of parameters, etc.) is pretty much disallowed.

This is done for simplicity: otherwise matching the platform/impl class scopes
would be not so straightforward
2016-11-25 20:50:20 +03:00
Alexander Udalov 751949db69 Support platform/impl modifiers for classes
Do not report "unused parameter" for parameters of platform declarations. Do
not allow platform class constructors to have val/var parameters or have an
explicit delegation call to another constructor. Do not allow platform classes
to have 'init' blocks.

Also suppress the "supertype not initialized" error for platform classes: the
supertype should be initialized in the impl class
2016-11-25 20:50:19 +03:00
Alexander Udalov ce9691cd2b Support platform/impl modifiers for properties
Do not allow platform properties to have backing fields, initializers, be
delegated, lateinit or const, or have accessors with bodies
2016-11-25 20:50:18 +03:00
Alexander Udalov af1264a46d Support platform/impl modifiers for functions
Also add a new capability for ModuleDescriptor, which is used to obtain the
platform in the multi-platform scenario in tests.

Suppress the following errors for platform functions: "function has no body"
and "nothing to inline". Also do not report redeclaration between platform and
non-platform functions because this is the case when the common +
platform-specific code are analyzed together.

Note that some diagnostics reported in tests are not yet implemented in this
commit, they appear in subsequent commits
2016-11-25 20:50:17 +03:00
Alexander Udalov 6e2ef9b1d2 Add platform/impl soft keywords, add isPlatform/isImpl to MemberDescriptor 2016-11-25 20:50:17 +03:00
Alexander Udalov 0dc31af73d Introduce KotlinMetadataFinder#hasMetadataPackage
Before creating a MetadataPackageFragment, check that the corresponding
directory (across the classpath) contains at least one .kotlin_metadata file.
Otherwise we're creating packages for every simple name queried during the
resolution and sometimes prefer a (empty) package to the existing class, for
example when the latter class is star-imported
2016-11-25 20:50:15 +03:00
Alexander Udalov bfb7b21472 Load definitions of symbols from .kotlin_metadata files
Extract AbstractDeserializedPackageFragmentProvider out of
JvmBuiltInsPackageFragmentProvider and implement it a little bit differently in
MetadataPackageFragmentProvider. The main difference is in how the package
fragment scope is constructed: for built-ins, it's just a single scope that
loads everything from one protobuf message. For metadata, package scope can
consist of many files, some of which store information about classes and others
are similar to package parts on JVM, so a ChainedMemberScope instance is
created.

Introduce a bunch of interfaces/methods to deliver the needed behavior to the
'deserialization' module which is not JVM-specific and does not depend on the
compiler code: MetadataFinderFactory,
PackagePartProvider#findMetadataPackageParts, KotlinMetadataFinder#findMetadata.
Note that these declarations are currently only implemented in the compiler; no
metadata package parts/fragments will be found in IDE or reflection
2016-11-25 20:50:13 +03:00
Alexander Udalov 32792c5ce4 Store .kotlin_module files in MetadataSerializer
Compilation of top level functions/properties/typealiases results in a bunch of
different .kotlin_metadata files, so we need to store names of these files to
avoid scanning the file system in the compiler when loading code compiled by
K2MetadataCompiler.

For this, we reuse the PackageTable protobuf message, which is already used for
exactly the same purpose in the JVM back-end
2016-11-25 20:50:12 +03:00
Alexander Udalov 1d71c19b42 Serialize .kotlin_metadata binary files per source file
Do not serialize everything in the same package to the same file (as is done
for built-ins) because this approach is unfriendly to incremental compilation,
which is going to be supported in the future. Instead, similarly to JVM
serialize each class to its own file, and each source file with top-level
callables/typealiases to its own file.

E.g. if a file named test.kt contains a class Foo and some
functions/properties, the output will contain two files: TestKt.kotlin_metadata
and Foo.kotlin_metadata. Each one of this files contains the serialized
BuiltIns message (see builtins.proto)
2016-11-25 20:50:10 +03:00
Alexander Udalov ec03c6decb Introduce K2MetadataCompiler, extract MetadataSerializer out of BuiltInsSerializer
K2MetadataCompiler is a compiler facade similar to K2JVMCompiler and
K2JSCompiler and it produces .kotlin_metadata files. Each .kotlin_metadata file
contains the binary data which is a serialized BuiltIns protobuf message.

There's no 'kotlinc-***' script yet though, so to run this compiler currently
invoke this:

    KOTLIN_COMPILER=org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler kotlinc
2016-11-25 20:50:09 +03:00
Nikolay Krasko b007306740 Make breakpoints work inside nameless function bodies in inline calls 2016-11-25 18:06:36 +03:00
Nikolay Krasko 89ac89f0c6 Fix breakpoints in secondary constructors 2016-11-25 18:06:36 +03:00
Dmitry Petrov 3d2696c81b KT-13440 Bound callable references in reflection 2016-11-25 16:11:18 +03:00
Dmitry Petrov 5879e201cd Proper equality comparison for bound callable references represented as reflection objects
(including references to property accessors).
2016-11-25 14:49:24 +03:00
Dmitry Petrov 3dd0c9d1c7 Equality comparison for bound callable references takes into account bound receiver.
Fixed KT-14939: use expected receiver type when generating receiver code in get/set methods for bound property references.
Otherwise we have VerifyError for bound receiver 'null' of type 'Nothing?', which is mapped to 'java.lang.Void'.

TODO: proper equality comparison for property accessors ('x::prop.getter', 'x::prop.setter').
2016-11-25 14:49:24 +03:00
Alexey Andreev ce6cf6475c JS: fix compilation of project 2016-11-25 14:43:48 +03:00
Alexey Andreev 66c78be10f JS: don't optimize RTTI when possible, i.e. don't remove is and as when object is known at compile time to have type in RHS of expression. Substitute kotlin.Any with Object. Fix #KT-7665, #KT-7664 2016-11-25 14:08:13 +03:00
Alexey Andreev c581ec6dd6 JS: fixes after code review 2016-11-25 14:07:31 +03:00
Alexey Andreev 46242f4430 JS: when RHS of as cast is non-nullable native interface, check LHS for null 2016-11-25 14:07:30 +03:00
Alexey Andreev e17321e1f6 JS: fix some code in stdlib that attempts to to is check against native interface 2016-11-25 14:07:30 +03:00
Alexey Andreev 2eb54f234c JS: prohibit passing native interfaces to reified type parameters 2016-11-25 14:07:29 +03:00
Alexey Andreev acf7fcaebf JS: prohibit is checks against native interfaces. Warn about casts to native interfaces. Fix #KT-14037, fix #KT-14038 2016-11-25 14:07:29 +03:00
Mikhail Glukhikh 2bb81e6a18 Simplify boolean with constants intention supports now == (!=) true (false) cases #KT-13777 Fixed 2016-11-24 18:05:36 +03:00
Alexey Andreev 20669c1b97 JS: fix building stubs for JS library that contains classes in default package 2016-11-24 17:49:11 +03:00
Nikolay Krasko efeccd0929 Filter out variables with null values (EA-87276) 2016-11-24 17:22:33 +03:00
Mikhail Glukhikh 5c09e1ca98 KT-13393 related: convert reference to lambda inspection (off by default) introduced 2016-11-24 15:26:38 +03:00
Mikhail Glukhikh 9c75324188 Minor: rename in KtPsiFactory 2016-11-24 15:26:30 +03:00
Mikhail Glukhikh b111d1ba69 Convert reference to lambda intention introduced #KT-13393 Fixed 2016-11-24 15:26:18 +03:00
Mikhail Glukhikh 27df76b02d Minor: typo fixed 2016-11-24 15:26:07 +03:00
Mikhail Glukhikh c6997a1213 Redundant if inspection supports now assignments and just if (...) true else false #KT-13259 Fixed 2016-11-24 15:25:56 +03:00
Mikhail Glukhikh 14787e3583 VarianceChecker: correct handing of nested classes and their methods #KT-14733 Fixed 2016-11-24 14:22:23 +03:00
Sergey Mashkov 1954cffd01 IDL2K: regenerate stubs 2016-11-24 12:14:34 +03:00
Sergey Mashkov 379afa187b IDL2K: consider attribute ignores (from config.kt) before merge 2016-11-24 12:14:33 +03:00
Sergey Mashkov ae69233d9c IDL2K: render dictionaries as interfaces, always use nullable types 2016-11-24 12:14:32 +03:00
Sergey Mashkov d3afb683a3 Update tests expected files 2016-11-24 12:14:31 +03:00
Sergey Mashkov ecbf2c023d Upgrade example 2016-11-24 12:14:31 +03:00
Sergey Mashkov 3285728391 IDL2K: generate declarations for partial interfaces 2016-11-24 12:14:30 +03:00
Sergey Mashkov 25461b42b9 IDL2K: manually fix SVGUseElementShadowRoot due to error in the SVG 2 specification 2016-11-24 12:14:29 +03:00
Sergey Mashkov 44335901c5 IDL2K: rename trait to interface, render NoInterfaceObject as native interface 2016-11-24 12:14:28 +03:00
Sergey Mashkov 5e01d4c993 IDL2K: update downloaded IDLs 2016-11-24 12:14:28 +03:00
Sergey Mashkov f098d6881e IDL2K: better logging 2016-11-24 12:14:27 +03:00
Sergey Mashkov b0414fe905 IDL2K: better property duplicates handling, better reserved words handling 2016-11-24 12:14:26 +03:00
Sergey Mashkov 3c60e73d19 IDL2K: map array literal 2016-11-24 12:14:26 +03:00
Sergey Mashkov df21b8bb7e IDL2K: remove dfn-panel class during IDL extraction 2016-11-24 12:14:25 +03:00
Sergey Mashkov 2496f24817 IDL2K: update download urls 2016-11-24 12:14:24 +03:00