diff --git a/build-common/test/org/jetbrains/kotlin/serialization/js/DebugJsProtoBuf.java b/build-common/test/org/jetbrains/kotlin/serialization/js/DebugJsProtoBuf.java
index 86adbd11b68..193d2437993 100644
--- a/build-common/test/org/jetbrains/kotlin/serialization/js/DebugJsProtoBuf.java
+++ b/build-common/test/org/jetbrains/kotlin/serialization/js/DebugJsProtoBuf.java
@@ -797,6 +797,694 @@ public final class DebugJsProtoBuf {
// @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.js.File)
}
+ public interface FilesOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.Files)
+ org.jetbrains.kotlin.protobuf.MessageOrBuilder {
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ java.util.List
+ getFileList();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File getFile(int index);
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ int getFileCount();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ java.util.List extends org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder>
+ getFileOrBuilderList();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder getFileOrBuilder(
+ int index);
+ }
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.Files}
+ */
+ public static final class Files extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessage implements
+ // @@protoc_insertion_point(message_implements:org.jetbrains.kotlin.serialization.js.Files)
+ FilesOrBuilder {
+ // Use Files.newBuilder() to construct.
+ private Files(org.jetbrains.kotlin.protobuf.GeneratedMessage.Builder> builder) {
+ super(builder);
+ this.unknownFields = builder.getUnknownFields();
+ }
+ private Files(boolean noInit) { this.unknownFields = org.jetbrains.kotlin.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+ private static final Files defaultInstance;
+ public static Files getDefaultInstance() {
+ return defaultInstance;
+ }
+
+ public Files getDefaultInstanceForType() {
+ return defaultInstance;
+ }
+
+ private final org.jetbrains.kotlin.protobuf.UnknownFieldSet unknownFields;
+ @java.lang.Override
+ public final org.jetbrains.kotlin.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ private Files(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ initFields();
+ int mutable_bitField0_ = 0;
+ org.jetbrains.kotlin.protobuf.UnknownFieldSet.Builder unknownFields =
+ org.jetbrains.kotlin.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownField(input, unknownFields,
+ extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 10: {
+ if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = new java.util.ArrayList();
+ mutable_bitField0_ |= 0x00000001;
+ }
+ file_.add(input.readMessage(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.PARSER, extensionRegistry));
+ break;
+ }
+ }
+ }
+ } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException(
+ e.getMessage()).setUnfinishedMessage(this);
+ } finally {
+ if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = java.util.Collections.unmodifiableList(file_);
+ }
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+ public static final org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_Files_descriptor;
+ }
+
+ protected org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_Files_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.class, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.Builder.class);
+ }
+
+ public static org.jetbrains.kotlin.protobuf.Parser PARSER =
+ new org.jetbrains.kotlin.protobuf.AbstractParser() {
+ public Files parsePartialFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return new Files(input, extensionRegistry);
+ }
+ };
+
+ @java.lang.Override
+ public org.jetbrains.kotlin.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ public static final int FILE_FIELD_NUMBER = 1;
+ private java.util.List file_;
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List getFileList() {
+ return file_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List extends org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder>
+ getFileOrBuilderList() {
+ return file_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public int getFileCount() {
+ return file_.size();
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File getFile(int index) {
+ return file_.get(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder getFileOrBuilder(
+ int index) {
+ return file_.get(index);
+ }
+
+ private void initFields() {
+ file_ = java.util.Collections.emptyList();
+ }
+ private byte memoizedIsInitialized = -1;
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ for (int i = 0; i < getFileCount(); i++) {
+ if (!getFile(i).isInitialized()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(org.jetbrains.kotlin.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getSerializedSize();
+ for (int i = 0; i < file_.size(); i++) {
+ output.writeMessage(1, file_.get(i));
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public int getSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ for (int i = 0; i < file_.size(); i++) {
+ size += org.jetbrains.kotlin.protobuf.CodedOutputStream
+ .computeMessageSize(1, file_.get(i));
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSerializedSize = size;
+ return size;
+ }
+
+ private static final long serialVersionUID = 0L;
+ @java.lang.Override
+ protected java.lang.Object writeReplace()
+ throws java.io.ObjectStreamException {
+ return super.writeReplace();
+ }
+
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.ByteString data)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.ByteString data,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(byte[] data)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(
+ byte[] data,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(
+ java.io.InputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseDelimitedFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseDelimitedFrom(
+ java.io.InputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return PARSER.parseDelimitedFrom(input, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input, extensionRegistry);
+ }
+
+ public static Builder newBuilder() { return Builder.create(); }
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files prototype) {
+ return newBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() { return newBuilder(this); }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.Files}
+ */
+ public static final class Builder extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.Builder implements
+ // @@protoc_insertion_point(builder_implements:org.jetbrains.kotlin.serialization.js.Files)
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FilesOrBuilder {
+ public static final org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_Files_descriptor;
+ }
+
+ protected org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_Files_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.class, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.Builder.class);
+ }
+
+ // Construct using org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+ private void maybeForceBuilderInitialization() {
+ if (org.jetbrains.kotlin.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+ getFileFieldBuilder();
+ }
+ }
+ private static Builder create() {
+ return new Builder();
+ }
+
+ public Builder clear() {
+ super.clear();
+ if (fileBuilder_ == null) {
+ file_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ fileBuilder_.clear();
+ }
+ return this;
+ }
+
+ public Builder clone() {
+ return create().mergeFrom(buildPartial());
+ }
+
+ public org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_Files_descriptor;
+ }
+
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files getDefaultInstanceForType() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.getDefaultInstance();
+ }
+
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files build() {
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files buildPartial() {
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files result = new org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files(this);
+ int from_bitField0_ = bitField0_;
+ if (fileBuilder_ == null) {
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = java.util.Collections.unmodifiableList(file_);
+ bitField0_ = (bitField0_ & ~0x00000001);
+ }
+ result.file_ = file_;
+ } else {
+ result.file_ = fileBuilder_.build();
+ }
+ onBuilt();
+ return result;
+ }
+
+ public Builder mergeFrom(org.jetbrains.kotlin.protobuf.Message other) {
+ if (other instanceof org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files) {
+ return mergeFrom((org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files other) {
+ if (other == org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files.getDefaultInstance()) return this;
+ if (fileBuilder_ == null) {
+ if (!other.file_.isEmpty()) {
+ if (file_.isEmpty()) {
+ file_ = other.file_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ ensureFileIsMutable();
+ file_.addAll(other.file_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.file_.isEmpty()) {
+ if (fileBuilder_.isEmpty()) {
+ fileBuilder_.dispose();
+ fileBuilder_ = null;
+ file_ = other.file_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ fileBuilder_ =
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+ getFileFieldBuilder() : null;
+ } else {
+ fileBuilder_.addAllMessages(other.file_);
+ }
+ }
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ for (int i = 0; i < getFileCount(); i++) {
+ if (!getFile(i).isInitialized()) {
+
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public Builder mergeFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.Files) e.getUnfinishedMessage();
+ throw e;
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+ private int bitField0_;
+
+ private java.util.List file_ =
+ java.util.Collections.emptyList();
+ private void ensureFileIsMutable() {
+ if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = new java.util.ArrayList(file_);
+ bitField0_ |= 0x00000001;
+ }
+ }
+
+ private org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder<
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder> fileBuilder_;
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List getFileList() {
+ if (fileBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(file_);
+ } else {
+ return fileBuilder_.getMessageList();
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public int getFileCount() {
+ if (fileBuilder_ == null) {
+ return file_.size();
+ } else {
+ return fileBuilder_.getCount();
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File getFile(int index) {
+ if (fileBuilder_ == null) {
+ return file_.get(index);
+ } else {
+ return fileBuilder_.getMessage(index);
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder setFile(
+ int index, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File value) {
+ if (fileBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureFileIsMutable();
+ file_.set(index, value);
+ onChanged();
+ } else {
+ fileBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder setFile(
+ int index, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder builderForValue) {
+ if (fileBuilder_ == null) {
+ ensureFileIsMutable();
+ file_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ fileBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File value) {
+ if (fileBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureFileIsMutable();
+ file_.add(value);
+ onChanged();
+ } else {
+ fileBuilder_.addMessage(value);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(
+ int index, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File value) {
+ if (fileBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureFileIsMutable();
+ file_.add(index, value);
+ onChanged();
+ } else {
+ fileBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder builderForValue) {
+ if (fileBuilder_ == null) {
+ ensureFileIsMutable();
+ file_.add(builderForValue.build());
+ onChanged();
+ } else {
+ fileBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(
+ int index, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder builderForValue) {
+ if (fileBuilder_ == null) {
+ ensureFileIsMutable();
+ file_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ fileBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addAllFile(
+ java.lang.Iterable extends org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File> values) {
+ if (fileBuilder_ == null) {
+ ensureFileIsMutable();
+ org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll(
+ values, file_);
+ onChanged();
+ } else {
+ fileBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder clearFile() {
+ if (fileBuilder_ == null) {
+ file_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ } else {
+ fileBuilder_.clear();
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder removeFile(int index) {
+ if (fileBuilder_ == null) {
+ ensureFileIsMutable();
+ file_.remove(index);
+ onChanged();
+ } else {
+ fileBuilder_.remove(index);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder getFileBuilder(
+ int index) {
+ return getFileFieldBuilder().getBuilder(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder getFileOrBuilder(
+ int index) {
+ if (fileBuilder_ == null) {
+ return file_.get(index); } else {
+ return fileBuilder_.getMessageOrBuilder(index);
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List extends org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder>
+ getFileOrBuilderList() {
+ if (fileBuilder_ != null) {
+ return fileBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(file_);
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder addFileBuilder() {
+ return getFileFieldBuilder().addBuilder(
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.getDefaultInstance());
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder addFileBuilder(
+ int index) {
+ return getFileFieldBuilder().addBuilder(
+ index, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.getDefaultInstance());
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List
+ getFileBuilderList() {
+ return getFileFieldBuilder().getBuilderList();
+ }
+ private org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder<
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder>
+ getFileFieldBuilder() {
+ if (fileBuilder_ == null) {
+ fileBuilder_ = new org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder<
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder>(
+ file_,
+ ((bitField0_ & 0x00000001) == 0x00000001),
+ getParentForChildren(),
+ isClean());
+ file_ = null;
+ }
+ return fileBuilder_;
+ }
+
+ // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.Files)
+ }
+
+ static {
+ defaultInstance = new Files(true);
+ defaultInstance.initFields();
+ }
+
+ // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.js.Files)
+ }
+
public interface ClassesOrBuilder extends
// @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.Classes)
org.jetbrains.kotlin.protobuf.MessageOrBuilder {
@@ -3101,6 +3789,11 @@ public final class DebugJsProtoBuf {
private static
org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable
internal_static_org_jetbrains_kotlin_serialization_js_File_fieldAccessorTable;
+ private static final org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
+ internal_static_org_jetbrains_kotlin_serialization_js_Files_descriptor;
+ private static
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_org_jetbrains_kotlin_serialization_js_Files_fieldAccessorTable;
private static final org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
internal_static_org_jetbrains_kotlin_serialization_js_Classes_descriptor;
private static
@@ -3130,50 +3823,52 @@ public final class DebugJsProtoBuf {
"re/deserialization/src/descriptors.debug" +
".proto\"V\n\004File\022\n\n\002id\030\001 \002(\005\022B\n\nannotation" +
"\030\002 \003(\0132..org.jetbrains.kotlin.serializat" +
- "ion.Annotation\"!\n\007Classes\022\026\n\nclass_name\030" +
- "\001 \003(\005B\002\020\001\"\225\002\n\007Library\022G\n\005entry\030\001 \003(\01328.o" +
- "rg.jetbrains.kotlin.serialization.js.Lib" +
- "rary.FileEntry\022H\n\004kind\030\002 \001(\01623.org.jetbr" +
- "ains.kotlin.serialization.js.Library.Kin",
- "d:\005PLAIN\022\027\n\017imported_module\030\003 \003(\t\032*\n\tFil" +
- "eEntry\022\014\n\004path\030\001 \002(\t\022\017\n\007content\030\002 \002(\014\"2\n" +
- "\004Kind\022\t\n\005PLAIN\020\001\022\007\n\003AMD\020\002\022\r\n\tCOMMON_JS\020\003" +
- "\022\007\n\003UMD\020\004:t\n\020class_annotation\022).org.jetb" +
- "rains.kotlin.serialization.Class\030\202\001 \003(\0132" +
- "..org.jetbrains.kotlin.serialization.Ann" +
- "otation:L\n\030class_containing_file_id\022).or" +
- "g.jetbrains.kotlin.serialization.Class\030\207" +
- "\001 \001(\005:\200\001\n\026constructor_annotation\022/.org.j" +
- "etbrains.kotlin.serialization.Constructo",
- "r\030\202\001 \003(\0132..org.jetbrains.kotlin.serializ" +
- "ation.Annotation:z\n\023function_annotation\022" +
+ "ion.Annotation\"B\n\005Files\0229\n\004file\030\001 \003(\0132+." +
+ "org.jetbrains.kotlin.serialization.js.Fi" +
+ "le\"!\n\007Classes\022\026\n\nclass_name\030\001 \003(\005B\002\020\001\"\225\002" +
+ "\n\007Library\022G\n\005entry\030\001 \003(\01328.org.jetbrains" +
+ ".kotlin.serialization.js.Library.FileEnt",
+ "ry\022H\n\004kind\030\002 \001(\01623.org.jetbrains.kotlin." +
+ "serialization.js.Library.Kind:\005PLAIN\022\027\n\017" +
+ "imported_module\030\003 \003(\t\032*\n\tFileEntry\022\014\n\004pa" +
+ "th\030\001 \002(\t\022\017\n\007content\030\002 \002(\014\"2\n\004Kind\022\t\n\005PLA" +
+ "IN\020\001\022\007\n\003AMD\020\002\022\r\n\tCOMMON_JS\020\003\022\007\n\003UMD\020\004:t\n" +
+ "\020class_annotation\022).org.jetbrains.kotlin" +
+ ".serialization.Class\030\202\001 \003(\0132..org.jetbra" +
+ "ins.kotlin.serialization.Annotation:L\n\030c" +
+ "lass_containing_file_id\022).org.jetbrains." +
+ "kotlin.serialization.Class\030\207\001 \001(\005:\200\001\n\026co",
+ "nstructor_annotation\022/.org.jetbrains.kot" +
+ "lin.serialization.Constructor\030\202\001 \003(\0132..o" +
+ "rg.jetbrains.kotlin.serialization.Annota" +
+ "tion:z\n\023function_annotation\022,.org.jetbra" +
+ "ins.kotlin.serialization.Function\030\202\001 \003(\013" +
+ "2..org.jetbrains.kotlin.serialization.An" +
+ "notation:R\n\033function_containing_file_id\022" +
",.org.jetbrains.kotlin.serialization.Fun" +
- "ction\030\202\001 \003(\0132..org.jetbrains.kotlin.seri" +
- "alization.Annotation:R\n\033function_contain" +
- "ing_file_id\022,.org.jetbrains.kotlin.seria" +
- "lization.Function\030\207\001 \001(\005:z\n\023property_ann" +
- "otation\022,.org.jetbrains.kotlin.serializa" +
- "tion.Property\030\202\001 \003(\0132..org.jetbrains.kot" +
- "lin.serialization.Annotation:\210\001\n\022compile",
- "_time_value\022,.org.jetbrains.kotlin.seria" +
- "lization.Property\030\203\001 \001(\0132=.org.jetbrains" +
- ".kotlin.serialization.Annotation.Argumen" +
- "t.Value:R\n\033property_containing_file_id\022," +
- ".org.jetbrains.kotlin.serialization.Prop" +
- "erty\030\207\001 \001(\005:}\n\025enum_entry_annotation\022-.o" +
- "rg.jetbrains.kotlin.serialization.EnumEn" +
- "try\030\202\001 \003(\0132..org.jetbrains.kotlin.serial" +
- "ization.Annotation:\201\001\n\024parameter_annotat" +
- "ion\0222.org.jetbrains.kotlin.serialization",
- ".ValueParameter\030\202\001 \003(\0132..org.jetbrains.k" +
- "otlin.serialization.Annotation:r\n\017type_a" +
- "nnotation\022(.org.jetbrains.kotlin.seriali" +
- "zation.Type\030\202\001 \003(\0132..org.jetbrains.kotli" +
- "n.serialization.Annotation:\205\001\n\031type_para" +
- "meter_annotation\0221.org.jetbrains.kotlin." +
- "serialization.TypeParameter\030\202\001 \003(\0132..org" +
- ".jetbrains.kotlin.serialization.Annotati" +
- "onB\021B\017DebugJsProtoBuf"
+ "ction\030\207\001 \001(\005:z\n\023property_annotation\022,.or" +
+ "g.jetbrains.kotlin.serialization.Propert",
+ "y\030\202\001 \003(\0132..org.jetbrains.kotlin.serializ" +
+ "ation.Annotation:\210\001\n\022compile_time_value\022" +
+ ",.org.jetbrains.kotlin.serialization.Pro" +
+ "perty\030\203\001 \001(\0132=.org.jetbrains.kotlin.seri" +
+ "alization.Annotation.Argument.Value:R\n\033p" +
+ "roperty_containing_file_id\022,.org.jetbrai" +
+ "ns.kotlin.serialization.Property\030\207\001 \001(\005:" +
+ "}\n\025enum_entry_annotation\022-.org.jetbrains" +
+ ".kotlin.serialization.EnumEntry\030\202\001 \003(\0132." +
+ ".org.jetbrains.kotlin.serialization.Anno",
+ "tation:\201\001\n\024parameter_annotation\0222.org.je" +
+ "tbrains.kotlin.serialization.ValueParame" +
+ "ter\030\202\001 \003(\0132..org.jetbrains.kotlin.serial" +
+ "ization.Annotation:r\n\017type_annotation\022(." +
+ "org.jetbrains.kotlin.serialization.Type\030" +
+ "\202\001 \003(\0132..org.jetbrains.kotlin.serializat" +
+ "ion.Annotation:\205\001\n\031type_parameter_annota" +
+ "tion\0221.org.jetbrains.kotlin.serializatio" +
+ "n.TypeParameter\030\202\001 \003(\0132..org.jetbrains.k" +
+ "otlin.serialization.AnnotationB\021B\017DebugJ",
+ "sProtoBuf"
};
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
@@ -3194,14 +3889,20 @@ public final class DebugJsProtoBuf {
org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_org_jetbrains_kotlin_serialization_js_File_descriptor,
new java.lang.String[] { "Id", "Annotation", });
- internal_static_org_jetbrains_kotlin_serialization_js_Classes_descriptor =
+ internal_static_org_jetbrains_kotlin_serialization_js_Files_descriptor =
getDescriptor().getMessageTypes().get(1);
+ internal_static_org_jetbrains_kotlin_serialization_js_Files_fieldAccessorTable = new
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_org_jetbrains_kotlin_serialization_js_Files_descriptor,
+ new java.lang.String[] { "File", });
+ internal_static_org_jetbrains_kotlin_serialization_js_Classes_descriptor =
+ getDescriptor().getMessageTypes().get(2);
internal_static_org_jetbrains_kotlin_serialization_js_Classes_fieldAccessorTable = new
org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_org_jetbrains_kotlin_serialization_js_Classes_descriptor,
new java.lang.String[] { "ClassName", });
internal_static_org_jetbrains_kotlin_serialization_js_Library_descriptor =
- getDescriptor().getMessageTypes().get(2);
+ getDescriptor().getMessageTypes().get(3);
internal_static_org_jetbrains_kotlin_serialization_js_Library_fieldAccessorTable = new
org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_org_jetbrains_kotlin_serialization_js_Library_descriptor,
diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.kt b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.kt
new file mode 100644
index 00000000000..f19982f052b
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.kt
@@ -0,0 +1,39 @@
+// MODULE: m1
+// FILE: a.kt
+package foo
+
+import kotlin.js.*
+
+@JsModule("A") @native object A {
+ fun f(): Int
+
+ val g: Int
+}
+
+@JsModule("B") @native open class B {
+ fun foo(): Int
+}
+
+@JsModule("bar") @native fun bar(): Unit
+
+// MODULE: m2(m1)
+// FILE: b.kt
+// TODO: it's hard to test @JsNonModule on file from an external module
+@file:JsModule("foo")
+package foo
+
+@native fun baz(): Unit
+
+// FILE: c.kt
+package bar
+
+import foo.*
+
+fun box() {
+ A.f()+A.g
+ B()
+ bar()
+ baz()
+}
+
+@native class DerivedB : B()
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.txt b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.txt
new file mode 100644
index 00000000000..856a428fa57
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.txt
@@ -0,0 +1,43 @@
+// -- Module: --
+package
+
+package foo {
+ @kotlin.js.JsModule(import = "bar") @kotlin.js.native public fun bar(): kotlin.Unit
+
+ @kotlin.js.JsModule(import = "A") @kotlin.js.native public object A {
+ private constructor A()
+ public final val g: kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+ public final fun f(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+ }
+
+ @kotlin.js.JsModule(import = "B") @kotlin.js.native public open class B {
+ public constructor B()
+ public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+ public final fun foo(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+ }
+}
+
+
+// -- Module: --
+package
+
+package bar {
+ public fun box(): kotlin.Unit
+
+ @kotlin.js.native public final class DerivedB : foo.B {
+ public constructor DerivedB()
+ public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+ public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+ }
+}
+
+package foo {
+ @kotlin.js.native public fun baz(): kotlin.Unit
+}
diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.kt b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.kt
new file mode 100644
index 00000000000..d54a443494c
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.kt
@@ -0,0 +1,33 @@
+// MODULE: m1
+// FILE: a.kt
+package foo
+
+import kotlin.js.*
+
+@JsNonModule @native object A {
+ fun f(): Int
+
+ val g: Int
+}
+
+@JsNonModule @native open class B {
+ fun foo(): Int
+}
+
+@JsNonModule @native fun bar(): Unit
+
+// MODULE: m2(m1)
+// MODULE_KIND: AMD
+// TODO: it's hard to test @JsNonModule on file from an external module
+// FILE: c.kt
+package bar
+
+import foo.*
+
+fun box() {
+ A.f()+A.g
+ B()
+ bar()
+}
+
+@native class DerivedB : B()
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.txt b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.txt
new file mode 100644
index 00000000000..35636a9db1c
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.txt
@@ -0,0 +1,34 @@
+package
+
+package bar {
+ public fun box(): kotlin.Unit
+
+ @kotlin.js.native public final class DerivedB : foo.B {
+ public constructor DerivedB()
+ public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+ public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+ }
+}
+
+package foo {
+ @kotlin.js.JsNonModule @kotlin.js.native public fun bar(): kotlin.Unit
+
+ @kotlin.js.JsNonModule @kotlin.js.native public object A {
+ private constructor A()
+ public final val g: kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+ public final fun f(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+ }
+
+ @kotlin.js.JsNonModule @kotlin.js.native public open class B {
+ public constructor B()
+ public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+ public final fun foo(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+ public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+ }
+}
diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java
index e8053b6b3b4..40b5883d118 100644
--- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java
+++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java
@@ -537,12 +537,18 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest {
}
dependencies.add(module.getBuiltIns().getBuiltInsModule());
+ dependencies.addAll(getAdditionalDependencies(module));
module.setDependencies(dependencies);
}
return modules;
}
+ @NotNull
+ protected List getAdditionalDependencies(@NotNull ModuleDescriptorImpl module) {
+ return Collections.emptyList();
+ }
+
@NotNull
@SuppressWarnings("unchecked")
protected ModuleDescriptorImpl createModule(@NotNull String moduleName, @NotNull StorageManager storageManager) {
diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java
index 691390b304d..19064468ef9 100644
--- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java
+++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.java
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.checkers;
+import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
@@ -29,11 +30,13 @@ import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
import org.jetbrains.kotlin.js.config.JSConfigurationKeys;
import org.jetbrains.kotlin.js.config.JsConfig;
import org.jetbrains.kotlin.js.config.LibrarySourcesConfig;
+import org.jetbrains.kotlin.js.resolve.BindingContextSlicesJsKt;
import org.jetbrains.kotlin.js.resolve.JsPlatform;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.resolve.BindingTrace;
import org.jetbrains.kotlin.serialization.js.JsModuleDescriptor;
+import org.jetbrains.kotlin.serialization.js.ModuleKind;
import org.jetbrains.kotlin.storage.StorageManager;
import org.jetbrains.kotlin.test.KotlinTestUtils;
@@ -77,9 +80,40 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
// TODO: support LANGUAGE directive in JS diagnostic tests
assert languageVersionSettings == null
: BaseDiagnosticsTest.LANGUAGE_DIRECTIVE + " directive is not supported in JS diagnostic tests";
+ moduleTrace.record(BindingContextSlicesJsKt.MODULE_KIND, moduleContext.getModule(), getModuleKind(ktFiles));
return TopDownAnalyzerFacadeForJS.analyzeFilesWithGivenTrace(ktFiles, moduleTrace, moduleContext, config);
}
+ @NotNull
+ private static ModuleKind getModuleKind(@NotNull List ktFiles) {
+ ModuleKind kind = ModuleKind.PLAIN;
+ for (KtFile file : ktFiles) {
+ String text = file.getText();
+ for (String line : StringUtil.splitByLines(text)) {
+ line = line.trim();
+ if (!line.startsWith("//")) continue;
+ line = line.substring(2).trim();
+ List parts = StringUtil.split(line, ":");
+ if (parts.size() != 2) continue;
+
+ if (!parts.get(0).trim().equals("MODULE_KIND")) continue;
+ kind = ModuleKind.valueOf(parts.get(1).trim());
+ }
+ }
+
+ return kind;
+ }
+
+ @Override
+ @NotNull
+ protected List getAdditionalDependencies(@NotNull ModuleDescriptorImpl module) {
+ List dependencies = new ArrayList();
+ for (JsModuleDescriptor moduleDescriptor : config.getModuleDescriptors()) {
+ dependencies.add(moduleDescriptor.getData());
+ }
+ return dependencies;
+ }
+
@Override
public boolean shouldSkipJvmSignatureDiagnostics(Map> groupedByModule) {
return true;
@@ -99,9 +133,7 @@ public abstract class AbstractDiagnosticsTestWithJsStdLib extends AbstractDiagno
List dependencies = new ArrayList();
dependencies.add(module);
- for (JsModuleDescriptor moduleDescriptor : config.getModuleDescriptors()) {
- dependencies.add(moduleDescriptor.getData());
- }
+ dependencies.addAll(getAdditionalDependencies(module));
dependencies.add(module.getBuiltIns().getBuiltInsModule());
module.setDependencies(dependencies);
diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java
index dc0ab31bc1b..e71093a4158 100644
--- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java
+++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJsStdLibGenerated.java
@@ -316,6 +316,18 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/module/prohibitedOnNonNative.kt");
doTest(fileName);
}
+
+ @TestMetadata("wrongCallToModule.kt")
+ public void testWrongCallToModule() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToModule.kt");
+ doTest(fileName);
+ }
+
+ @TestMetadata("wrongCallToNonModule.kt")
+ public void testWrongCallToNonModule() throws Exception {
+ String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithJsStdLib/module/wrongCallToNonModule.kt");
+ doTest(fileName);
+ }
}
@TestMetadata("compiler/testData/diagnostics/testsWithJsStdLib/name")
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt
index fa4f8c341ac..6e8c02185d3 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/analyze/TopDownAnalyzerFacadeForJS.kt
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.js.analyze
+import com.intellij.openapi.util.text.StringUtil
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.context.ContextForNewModule
@@ -25,6 +26,7 @@ import org.jetbrains.kotlin.frontend.js.di.createTopDownAnalyzerForJs
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.JsConfig
import org.jetbrains.kotlin.js.resolve.JsPlatform
+import org.jetbrains.kotlin.js.resolve.MODULE_KIND
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.*
@@ -39,7 +41,9 @@ object TopDownAnalyzerFacadeForJS {
config.moduleDescriptors.map { it.data } +
listOf(JsPlatform.builtIns.builtInsModule)
)
- return analyzeFilesWithGivenTrace(files, BindingTraceContext(), context, config)
+ val trace = BindingTraceContext()
+ trace.record(MODULE_KIND, context.module, config.moduleKind)
+ return analyzeFilesWithGivenTrace(files, trace, context, config)
}
@JvmStatic
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt
index 28b55e5799b..1a92fdb6bf7 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/JsPlatformConfigurator.kt
@@ -37,7 +37,7 @@ object JsPlatformConfigurator : PlatformConfigurator(
JsNameChecker, JsModuleChecker,
PlatformImplDeclarationChecker()
),
- additionalCallCheckers = listOf(ReifiedTypeParameterSubstitutionChecker()),
+ additionalCallCheckers = listOf(ReifiedTypeParameterSubstitutionChecker(), JsModuleCallChecker),
additionalTypeCheckers = listOf(),
additionalClassifierUsageCheckers = listOf(),
additionalAnnotationCheckers = listOf(),
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/bindingContextSlicesJs.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/bindingContextSlicesJs.kt
new file mode 100644
index 00000000000..95eb8f52e1f
--- /dev/null
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/bindingContextSlicesJs.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2010-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jetbrains.kotlin.js.resolve
+
+import org.jetbrains.kotlin.descriptors.ModuleDescriptor
+import org.jetbrains.kotlin.serialization.js.ModuleKind
+import org.jetbrains.kotlin.util.slicedMap.BasicWritableSlice
+import org.jetbrains.kotlin.util.slicedMap.RewritePolicy
+
+@JvmField val MODULE_KIND = BasicWritableSlice(RewritePolicy.DO_NOTHING)
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt
index 1a39d1108d2..197cf34e77b 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/DefaultErrorMessagesJs.kt
@@ -50,6 +50,10 @@ private val DIAGNOSTIC_FACTORY_TO_RENDERER by lazy {
put(ErrorsJs.JS_NAME_PROHIBITED_FOR_NAMED_NATIVE, "@JsName is prohibited for @native declaration with explicit name")
put(ErrorsJs.JS_MODULE_PROHIBITED_ON_VAR, "@JsModule annotation prohibited for 'var' declarations. Use 'val' instead.")
put(ErrorsJs.JS_MODULE_PROHIBITED_ON_NON_NATIVE, "@JsModule annotation prohibited for non-@native declarations.")
+ put(ErrorsJs.CALL_TO_JS_MODULE_WITHOUT_MODULE_SYSTEM, "Can't access declaration marked with @JsModule annotation " +
+ "from non-modular project")
+ put(ErrorsJs.CALL_TO_JS_NON_MODULE_WITH_MODULE_SYSTEM, "Can't access declaration marked with @JsNonModule annotation " +
+ "from modular project")
put(ErrorsJs.CANNOT_CHECK_FOR_NATIVE_INTERFACE, "Cannot check for native interface: {0}", RENDER_TYPE)
put(ErrorsJs.UNCHECKED_CAST_TO_NATIVE_INTERFACE, "Unchecked cast to native interface: {0} to {1}", RENDER_TYPE, RENDER_TYPE)
put(ErrorsJs.NATIVE_INTERFACE_AS_REIFIED_TYPE_ARGUMENT, "Cannot pass native interface {0} for reified type parameter", RENDER_TYPE)
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java
index a9a4cf73973..9bb8e9e3d76 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/ErrorsJs.java
@@ -54,6 +54,8 @@ public interface ErrorsJs {
DiagnosticFactory0 JS_NAME_PROHIBITED_FOR_NAMED_NATIVE = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0 JS_MODULE_PROHIBITED_ON_VAR = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
DiagnosticFactory0 JS_MODULE_PROHIBITED_ON_NON_NATIVE = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT);
+ DiagnosticFactory0 CALL_TO_JS_MODULE_WITHOUT_MODULE_SYSTEM = DiagnosticFactory0.create(ERROR, DEFAULT);
+ DiagnosticFactory0 CALL_TO_JS_NON_MODULE_WITH_MODULE_SYSTEM = DiagnosticFactory0.create(ERROR, DEFAULT);
DiagnosticFactory1 CANNOT_CHECK_FOR_NATIVE_INTERFACE = DiagnosticFactory1.create(ERROR);
DiagnosticFactory2 UNCHECKED_CAST_TO_NATIVE_INTERFACE = DiagnosticFactory2.create(WARNING);
DiagnosticFactory1 NATIVE_INTERFACE_AS_REIFIED_TYPE_ARGUMENT = DiagnosticFactory1.create(ERROR);
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsModuleCallChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsModuleCallChecker.kt
new file mode 100644
index 00000000000..db4c2503ce6
--- /dev/null
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsModuleCallChecker.kt
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010-2016 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jetbrains.kotlin.js.resolve.diagnostics
+
+import com.intellij.psi.PsiElement
+import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
+import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
+import org.jetbrains.kotlin.js.resolve.MODULE_KIND
+import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils
+import org.jetbrains.kotlin.resolve.DescriptorUtils
+import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker
+import org.jetbrains.kotlin.resolve.calls.checkers.CallCheckerContext
+import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
+import org.jetbrains.kotlin.resolve.scopes.receivers.ClassValueReceiver
+import org.jetbrains.kotlin.serialization.js.ModuleKind
+
+object JsModuleCallChecker : CallChecker {
+ override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
+ val bindingContext = context.trace.bindingContext
+ val containingDescriptor = context.scope.ownerDescriptor
+ val module = DescriptorUtils.getContainingModule(containingDescriptor)
+ val moduleKind = bindingContext[MODULE_KIND, module] ?: return
+
+ val callee = findRoot(extractModuleCallee(resolvedCall) ?: return)
+ if (!AnnotationsUtils.isNativeObject(callee)) return
+
+ val callToModule = AnnotationsUtils.getModuleName(callee) != null ||
+ AnnotationsUtils.getFileModuleName(bindingContext, callee) != null
+ val callToNonModule = AnnotationsUtils.isNonModule(callee) || AnnotationsUtils.isFromNonModuleFile(bindingContext, callee)
+
+ if (moduleKind == ModuleKind.PLAIN || moduleKind == ModuleKind.UMD) {
+ if (!callToNonModule && callToModule) {
+ context.trace.report(ErrorsJs.CALL_TO_JS_MODULE_WITHOUT_MODULE_SYSTEM.on(reportOn))
+ }
+ }
+ if (moduleKind != ModuleKind.PLAIN) {
+ if (!callToModule && callToNonModule) {
+ context.trace.report(ErrorsJs.CALL_TO_JS_NON_MODULE_WITH_MODULE_SYSTEM.on(reportOn))
+ }
+ }
+ }
+
+ private fun extractModuleCallee(call: ResolvedCall<*>): DeclarationDescriptor? {
+ val callee = call.resultingDescriptor
+ if (DescriptorUtils.isTopLevelDeclaration(callee)) return callee
+
+ val receiver = call.dispatchReceiver ?: return callee
+ if (receiver is ClassValueReceiver) return receiver.classQualifier.descriptor
+
+ return null
+ }
+
+ private fun findRoot(callee: DeclarationDescriptor) =
+ generateSequence(callee) { it.containingDeclaration }
+ .takeWhile { it !is PackageFragmentDescriptor }
+ .last()
+}
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java
index 1b16e8700db..0a96c092e4f 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java
@@ -41,6 +41,7 @@ import java.util.List;
public final class AnnotationsUtils {
private static final String JS_NAME = "kotlin.js.JsName";
private static final FqName JS_MODULE_ANNOTATION = new FqName("kotlin.js.JsModule");
+ private static final FqName JS_NON_MODULE_ANNOTATION = new FqName("kotlin.js.JsNonModule");
private AnnotationsUtils() {
}
@@ -203,6 +204,24 @@ public final class AnnotationsUtils {
return null;
}
+ public static boolean isNonModule(@NotNull DeclarationDescriptor declaration) {
+ return declaration.getAnnotations().findAnnotation(JS_NON_MODULE_ANNOTATION) != null;
+ }
+
+ public static boolean isFromNonModuleFile(@NotNull BindingContext bindingContext, @NotNull DeclarationDescriptor declaration) {
+ for (AnnotationDescriptor annotation : getContainingFileAnnotations(bindingContext, declaration)) {
+ DeclarationDescriptor annotationType = annotation.getType().getConstructor().getDeclarationDescriptor();
+ if (annotationType == null) continue;
+
+ FqNameUnsafe fqName = DescriptorUtils.getFqName(annotation.getType().getConstructor().getDeclarationDescriptor());
+ if (fqName.equals(JS_NON_MODULE_ANNOTATION.toUnsafe())) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
@NotNull
private static String extractJsModuleName(@NotNull AnnotationDescriptor annotation) {
ConstantValue> importValue = annotation.getAllValueArguments().values().iterator().next();
@@ -225,7 +244,9 @@ public final class AnnotationsUtils {
List annotations = new ArrayList();
for (KtAnnotationEntry psiAnnotation : kotlinFile.getAnnotationEntries()) {
AnnotationDescriptor annotation = bindingContext.get(BindingContext.ANNOTATION, psiAnnotation);
- annotations.add(annotation);
+ if (annotation != null) {
+ annotations.add(annotation);
+ }
}
return annotations;
}
diff --git a/js/js.libraries/src/core/annotations.kt b/js/js.libraries/src/core/annotations.kt
index ac879b1c767..e75476fccc6 100644
--- a/js/js.libraries/src/core/annotations.kt
+++ b/js/js.libraries/src/core/annotations.kt
@@ -52,4 +52,8 @@ annotation class JsName(val name: String)
@Retention(AnnotationRetention.BINARY)
@Target(CLASS, PROPERTY, FUNCTION, FILE)
-annotation class JsModule(val import: String)
\ No newline at end of file
+annotation class JsModule(val import: String)
+
+@Retention(AnnotationRetention.BINARY)
+@Target(CLASS, PROPERTY, FUNCTION, FILE)
+annotation class JsNonModule
\ No newline at end of file
diff --git a/js/js.serializer/src/js.proto b/js/js.serializer/src/js.proto
index f593e3ff49e..920bc7c9365 100644
--- a/js/js.serializer/src/js.proto
+++ b/js/js.serializer/src/js.proto
@@ -26,6 +26,10 @@ message File {
repeated Annotation annotation = 2;
}
+message Files {
+ repeated File file = 1;
+}
+
extend Class {
repeated Annotation class_annotation = 130;
optional int32 class_containing_file_id = 135;
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsProtoBuf.java b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsProtoBuf.java
index b6b0c89339d..3cf213e86a0 100644
--- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsProtoBuf.java
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/JsProtoBuf.java
@@ -602,6 +602,499 @@ public final class JsProtoBuf {
// @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.js.File)
}
+ public interface FilesOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.Files)
+ org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ java.util.List
+ getFileList();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.File getFile(int index);
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ int getFileCount();
+ }
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.Files}
+ */
+ public static final class Files extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite implements
+ // @@protoc_insertion_point(message_implements:org.jetbrains.kotlin.serialization.js.Files)
+ FilesOrBuilder {
+ // Use Files.newBuilder() to construct.
+ private Files(org.jetbrains.kotlin.protobuf.GeneratedMessageLite.Builder builder) {
+ super(builder);
+ this.unknownFields = builder.getUnknownFields();
+ }
+ private Files(boolean noInit) { this.unknownFields = org.jetbrains.kotlin.protobuf.ByteString.EMPTY;}
+
+ private static final Files defaultInstance;
+ public static Files getDefaultInstance() {
+ return defaultInstance;
+ }
+
+ public Files getDefaultInstanceForType() {
+ return defaultInstance;
+ }
+
+ private final org.jetbrains.kotlin.protobuf.ByteString unknownFields;
+ private Files(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ initFields();
+ int mutable_bitField0_ = 0;
+ org.jetbrains.kotlin.protobuf.ByteString.Output unknownFieldsOutput =
+ org.jetbrains.kotlin.protobuf.ByteString.newOutput();
+ org.jetbrains.kotlin.protobuf.CodedOutputStream unknownFieldsCodedOutput =
+ org.jetbrains.kotlin.protobuf.CodedOutputStream.newInstance(
+ unknownFieldsOutput);
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownField(input, unknownFieldsCodedOutput,
+ extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 10: {
+ if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = new java.util.ArrayList();
+ mutable_bitField0_ |= 0x00000001;
+ }
+ file_.add(input.readMessage(org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.PARSER, extensionRegistry));
+ break;
+ }
+ }
+ }
+ } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException(
+ e.getMessage()).setUnfinishedMessage(this);
+ } finally {
+ if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = java.util.Collections.unmodifiableList(file_);
+ }
+ try {
+ unknownFieldsCodedOutput.flush();
+ } catch (java.io.IOException e) {
+ // Should not happen
+ } finally {
+ unknownFields = unknownFieldsOutput.toByteString();
+ }
+ makeExtensionsImmutable();
+ }
+ }
+ public static org.jetbrains.kotlin.protobuf.Parser PARSER =
+ new org.jetbrains.kotlin.protobuf.AbstractParser() {
+ public Files parsePartialFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return new Files(input, extensionRegistry);
+ }
+ };
+
+ @java.lang.Override
+ public org.jetbrains.kotlin.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ public static final int FILE_FIELD_NUMBER = 1;
+ private java.util.List file_;
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List getFileList() {
+ return file_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List extends org.jetbrains.kotlin.serialization.js.JsProtoBuf.FileOrBuilder>
+ getFileOrBuilderList() {
+ return file_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public int getFileCount() {
+ return file_.size();
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.File getFile(int index) {
+ return file_.get(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.FileOrBuilder getFileOrBuilder(
+ int index) {
+ return file_.get(index);
+ }
+
+ private void initFields() {
+ file_ = java.util.Collections.emptyList();
+ }
+ private byte memoizedIsInitialized = -1;
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ for (int i = 0; i < getFileCount(); i++) {
+ if (!getFile(i).isInitialized()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(org.jetbrains.kotlin.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getSerializedSize();
+ for (int i = 0; i < file_.size(); i++) {
+ output.writeMessage(1, file_.get(i));
+ }
+ output.writeRawBytes(unknownFields);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public int getSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ for (int i = 0; i < file_.size(); i++) {
+ size += org.jetbrains.kotlin.protobuf.CodedOutputStream
+ .computeMessageSize(1, file_.get(i));
+ }
+ size += unknownFields.size();
+ memoizedSerializedSize = size;
+ return size;
+ }
+
+ private static final long serialVersionUID = 0L;
+ @java.lang.Override
+ protected java.lang.Object writeReplace()
+ throws java.io.ObjectStreamException {
+ return super.writeReplace();
+ }
+
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.ByteString data)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.ByteString data,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(byte[] data)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(
+ byte[] data,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(
+ java.io.InputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseDelimitedFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseDelimitedFrom(
+ java.io.InputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return PARSER.parseDelimitedFrom(input, extensionRegistry);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parseFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input, extensionRegistry);
+ }
+
+ public static Builder newBuilder() { return Builder.create(); }
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder(org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files prototype) {
+ return newBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() { return newBuilder(this); }
+
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.Files}
+ */
+ public static final class Builder extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite.Builder<
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files, Builder>
+ implements
+ // @@protoc_insertion_point(builder_implements:org.jetbrains.kotlin.serialization.js.Files)
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.FilesOrBuilder {
+ // Construct using org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ }
+ private static Builder create() {
+ return new Builder();
+ }
+
+ public Builder clear() {
+ super.clear();
+ file_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ return this;
+ }
+
+ public Builder clone() {
+ return create().mergeFrom(buildPartial());
+ }
+
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files getDefaultInstanceForType() {
+ return org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files.getDefaultInstance();
+ }
+
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files build() {
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files buildPartial() {
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files result = new org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files(this);
+ int from_bitField0_ = bitField0_;
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = java.util.Collections.unmodifiableList(file_);
+ bitField0_ = (bitField0_ & ~0x00000001);
+ }
+ result.file_ = file_;
+ return result;
+ }
+
+ public Builder mergeFrom(org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files other) {
+ if (other == org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files.getDefaultInstance()) return this;
+ if (!other.file_.isEmpty()) {
+ if (file_.isEmpty()) {
+ file_ = other.file_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ ensureFileIsMutable();
+ file_.addAll(other.file_);
+ }
+
+ }
+ setUnknownFields(
+ getUnknownFields().concat(other.unknownFields));
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ for (int i = 0; i < getFileCount(); i++) {
+ if (!getFile(i).isInitialized()) {
+
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public Builder mergeFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (org.jetbrains.kotlin.serialization.js.JsProtoBuf.Files) e.getUnfinishedMessage();
+ throw e;
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+ private int bitField0_;
+
+ private java.util.List file_ =
+ java.util.Collections.emptyList();
+ private void ensureFileIsMutable() {
+ if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+ file_ = new java.util.ArrayList(file_);
+ bitField0_ |= 0x00000001;
+ }
+ }
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public java.util.List getFileList() {
+ return java.util.Collections.unmodifiableList(file_);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public int getFileCount() {
+ return file_.size();
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.File getFile(int index) {
+ return file_.get(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder setFile(
+ int index, org.jetbrains.kotlin.serialization.js.JsProtoBuf.File value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureFileIsMutable();
+ file_.set(index, value);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder setFile(
+ int index, org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.Builder builderForValue) {
+ ensureFileIsMutable();
+ file_.set(index, builderForValue.build());
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(org.jetbrains.kotlin.serialization.js.JsProtoBuf.File value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureFileIsMutable();
+ file_.add(value);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(
+ int index, org.jetbrains.kotlin.serialization.js.JsProtoBuf.File value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureFileIsMutable();
+ file_.add(index, value);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.Builder builderForValue) {
+ ensureFileIsMutable();
+ file_.add(builderForValue.build());
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addFile(
+ int index, org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.Builder builderForValue) {
+ ensureFileIsMutable();
+ file_.add(index, builderForValue.build());
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder addAllFile(
+ java.lang.Iterable extends org.jetbrains.kotlin.serialization.js.JsProtoBuf.File> values) {
+ ensureFileIsMutable();
+ org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll(
+ values, file_);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder clearFile() {
+ file_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.js.File file = 1;
+ */
+ public Builder removeFile(int index) {
+ ensureFileIsMutable();
+ file_.remove(index);
+
+ return this;
+ }
+
+ // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.Files)
+ }
+
+ static {
+ defaultInstance = new Files(true);
+ defaultInstance.initFields();
+ }
+
+ // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.js.Files)
+ }
+
public interface ClassesOrBuilder extends
// @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.Classes)
org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt
index 277cc859238..c1c5cfe09b5 100644
--- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt
@@ -49,10 +49,8 @@ class KotlinJavascriptPackageFragment(
private val fileMap: Map by lazy {
loadResource(KotlinJavascriptSerializedResourcePaths.getFileListFilePath(fqName))?.use { rawInput ->
val input = CodedInputStream.newInstance(rawInput)
- val count = input.readInt32()
- val result = mutableListOf()
- (1..count).forEach { result += JsProtoBuf.File.parseFrom(input) }
- result.map { it.id to FileHolder(it.annotationList) }.toMap()
+ val filesProto = JsProtoBuf.Files.parseFrom(input).fileOrBuilderList
+ filesProto.map { it.id to FileHolder(it.annotationList) }.toMap()
}.orEmpty()
}
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
index f39b6b7618e..770bcdf9a64 100644
--- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.serialization.js
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.protobuf.ByteString
-import org.jetbrains.kotlin.protobuf.CodedOutputStream
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.classId