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 51b3ee21286..86adbd11b68 100644
--- a/build-common/test/org/jetbrains/kotlin/serialization/js/DebugJsProtoBuf.java
+++ b/build-common/test/org/jetbrains/kotlin/serialization/js/DebugJsProtoBuf.java
@@ -8,15 +8,795 @@ public final class DebugJsProtoBuf {
public static void registerAllExtensions(
org.jetbrains.kotlin.protobuf.ExtensionRegistry registry) {
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.classAnnotation);
+ registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.classContainingFileId);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.constructorAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.functionAnnotation);
+ registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.functionContainingFileId);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.propertyAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.compileTimeValue);
+ registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.propertyContainingFileId);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.enumEntryAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.parameterAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.typeAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.typeParameterAnnotation);
}
+ public interface FileOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.File)
+ org.jetbrains.kotlin.protobuf.MessageOrBuilder {
+
+ /**
+ * required int32 id = 1;
+ */
+ boolean hasId();
+ /**
+ * required int32 id = 1;
+ */
+ int getId();
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ java.util.List
+ getAnnotationList();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation getAnnotation(int index);
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ int getAnnotationCount();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ java.util.List extends org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder>
+ getAnnotationOrBuilderList();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder getAnnotationOrBuilder(
+ int index);
+ }
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.File}
+ */
+ public static final class File extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessage implements
+ // @@protoc_insertion_point(message_implements:org.jetbrains.kotlin.serialization.js.File)
+ FileOrBuilder {
+ // Use File.newBuilder() to construct.
+ private File(org.jetbrains.kotlin.protobuf.GeneratedMessage.Builder> builder) {
+ super(builder);
+ this.unknownFields = builder.getUnknownFields();
+ }
+ private File(boolean noInit) { this.unknownFields = org.jetbrains.kotlin.protobuf.UnknownFieldSet.getDefaultInstance(); }
+
+ private static final File defaultInstance;
+ public static File getDefaultInstance() {
+ return defaultInstance;
+ }
+
+ public File 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 File(
+ 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 8: {
+ bitField0_ |= 0x00000001;
+ id_ = input.readInt32();
+ break;
+ }
+ case 18: {
+ if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+ annotation_ = new java.util.ArrayList();
+ mutable_bitField0_ |= 0x00000002;
+ }
+ annotation_.add(input.readMessage(org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.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_ & 0x00000002) == 0x00000002)) {
+ annotation_ = java.util.Collections.unmodifiableList(annotation_);
+ }
+ 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_File_descriptor;
+ }
+
+ protected org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_File_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.class, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder.class);
+ }
+
+ public static org.jetbrains.kotlin.protobuf.Parser PARSER =
+ new org.jetbrains.kotlin.protobuf.AbstractParser() {
+ public File parsePartialFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return new File(input, extensionRegistry);
+ }
+ };
+
+ @java.lang.Override
+ public org.jetbrains.kotlin.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ private int bitField0_;
+ public static final int ID_FIELD_NUMBER = 1;
+ private int id_;
+ /**
+ * required int32 id = 1;
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public int getId() {
+ return id_;
+ }
+
+ public static final int ANNOTATION_FIELD_NUMBER = 2;
+ private java.util.List annotation_;
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List getAnnotationList() {
+ return annotation_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List extends org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder>
+ getAnnotationOrBuilderList() {
+ return annotation_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public int getAnnotationCount() {
+ return annotation_.size();
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation getAnnotation(int index) {
+ return annotation_.get(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder getAnnotationOrBuilder(
+ int index) {
+ return annotation_.get(index);
+ }
+
+ private void initFields() {
+ id_ = 0;
+ annotation_ = 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;
+
+ if (!hasId()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ for (int i = 0; i < getAnnotationCount(); i++) {
+ if (!getAnnotation(i).isInitialized()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(org.jetbrains.kotlin.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getSerializedSize();
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ output.writeInt32(1, id_);
+ }
+ for (int i = 0; i < annotation_.size(); i++) {
+ output.writeMessage(2, annotation_.get(i));
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public int getSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ size += org.jetbrains.kotlin.protobuf.CodedOutputStream
+ .computeInt32Size(1, id_);
+ }
+ for (int i = 0; i < annotation_.size(); i++) {
+ size += org.jetbrains.kotlin.protobuf.CodedOutputStream
+ .computeMessageSize(2, annotation_.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.File 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.File 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.File parseFrom(byte[] data)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File 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.File parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File 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.File parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseDelimitedFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File 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.File parseFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File 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.File 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.File}
+ */
+ public static final class Builder extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.Builder implements
+ // @@protoc_insertion_point(builder_implements:org.jetbrains.kotlin.serialization.js.File)
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.FileOrBuilder {
+ public static final org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_File_descriptor;
+ }
+
+ protected org.jetbrains.kotlin.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.internal_static_org_jetbrains_kotlin_serialization_js_File_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.class, org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.Builder.class);
+ }
+
+ // Construct using org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.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) {
+ getAnnotationFieldBuilder();
+ }
+ }
+ private static Builder create() {
+ return new Builder();
+ }
+
+ public Builder clear() {
+ super.clear();
+ id_ = 0;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ if (annotationBuilder_ == null) {
+ annotation_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000002);
+ } else {
+ annotationBuilder_.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_File_descriptor;
+ }
+
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File getDefaultInstanceForType() {
+ return org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.getDefaultInstance();
+ }
+
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File build() {
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File buildPartial() {
+ org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File result = new org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File(this);
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+ to_bitField0_ |= 0x00000001;
+ }
+ result.id_ = id_;
+ if (annotationBuilder_ == null) {
+ if (((bitField0_ & 0x00000002) == 0x00000002)) {
+ annotation_ = java.util.Collections.unmodifiableList(annotation_);
+ bitField0_ = (bitField0_ & ~0x00000002);
+ }
+ result.annotation_ = annotation_;
+ } else {
+ result.annotation_ = annotationBuilder_.build();
+ }
+ result.bitField0_ = to_bitField0_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder mergeFrom(org.jetbrains.kotlin.protobuf.Message other) {
+ if (other instanceof org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File) {
+ return mergeFrom((org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File other) {
+ if (other == org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File.getDefaultInstance()) return this;
+ if (other.hasId()) {
+ setId(other.getId());
+ }
+ if (annotationBuilder_ == null) {
+ if (!other.annotation_.isEmpty()) {
+ if (annotation_.isEmpty()) {
+ annotation_ = other.annotation_;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ } else {
+ ensureAnnotationIsMutable();
+ annotation_.addAll(other.annotation_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.annotation_.isEmpty()) {
+ if (annotationBuilder_.isEmpty()) {
+ annotationBuilder_.dispose();
+ annotationBuilder_ = null;
+ annotation_ = other.annotation_;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ annotationBuilder_ =
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+ getAnnotationFieldBuilder() : null;
+ } else {
+ annotationBuilder_.addAllMessages(other.annotation_);
+ }
+ }
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ if (!hasId()) {
+
+ return false;
+ }
+ for (int i = 0; i < getAnnotationCount(); i++) {
+ if (!getAnnotation(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.File parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (org.jetbrains.kotlin.serialization.js.DebugJsProtoBuf.File) e.getUnfinishedMessage();
+ throw e;
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+ private int bitField0_;
+
+ private int id_ ;
+ /**
+ * required int32 id = 1;
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public int getId() {
+ return id_;
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public Builder setId(int value) {
+ bitField0_ |= 0x00000001;
+ id_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public Builder clearId() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ id_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private java.util.List annotation_ =
+ java.util.Collections.emptyList();
+ private void ensureAnnotationIsMutable() {
+ if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+ annotation_ = new java.util.ArrayList(annotation_);
+ bitField0_ |= 0x00000002;
+ }
+ }
+
+ private org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder<
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder> annotationBuilder_;
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List getAnnotationList() {
+ if (annotationBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(annotation_);
+ } else {
+ return annotationBuilder_.getMessageList();
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public int getAnnotationCount() {
+ if (annotationBuilder_ == null) {
+ return annotation_.size();
+ } else {
+ return annotationBuilder_.getCount();
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation getAnnotation(int index) {
+ if (annotationBuilder_ == null) {
+ return annotation_.get(index);
+ } else {
+ return annotationBuilder_.getMessage(index);
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder setAnnotation(
+ int index, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation value) {
+ if (annotationBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureAnnotationIsMutable();
+ annotation_.set(index, value);
+ onChanged();
+ } else {
+ annotationBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder setAnnotation(
+ int index, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder builderForValue) {
+ if (annotationBuilder_ == null) {
+ ensureAnnotationIsMutable();
+ annotation_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ annotationBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation value) {
+ if (annotationBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureAnnotationIsMutable();
+ annotation_.add(value);
+ onChanged();
+ } else {
+ annotationBuilder_.addMessage(value);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(
+ int index, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation value) {
+ if (annotationBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureAnnotationIsMutable();
+ annotation_.add(index, value);
+ onChanged();
+ } else {
+ annotationBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder builderForValue) {
+ if (annotationBuilder_ == null) {
+ ensureAnnotationIsMutable();
+ annotation_.add(builderForValue.build());
+ onChanged();
+ } else {
+ annotationBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(
+ int index, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder builderForValue) {
+ if (annotationBuilder_ == null) {
+ ensureAnnotationIsMutable();
+ annotation_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ annotationBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAllAnnotation(
+ java.lang.Iterable extends org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation> values) {
+ if (annotationBuilder_ == null) {
+ ensureAnnotationIsMutable();
+ org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll(
+ values, annotation_);
+ onChanged();
+ } else {
+ annotationBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder clearAnnotation() {
+ if (annotationBuilder_ == null) {
+ annotation_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000002);
+ onChanged();
+ } else {
+ annotationBuilder_.clear();
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder removeAnnotation(int index) {
+ if (annotationBuilder_ == null) {
+ ensureAnnotationIsMutable();
+ annotation_.remove(index);
+ onChanged();
+ } else {
+ annotationBuilder_.remove(index);
+ }
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder getAnnotationBuilder(
+ int index) {
+ return getAnnotationFieldBuilder().getBuilder(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder getAnnotationOrBuilder(
+ int index) {
+ if (annotationBuilder_ == null) {
+ return annotation_.get(index); } else {
+ return annotationBuilder_.getMessageOrBuilder(index);
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List extends org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder>
+ getAnnotationOrBuilderList() {
+ if (annotationBuilder_ != null) {
+ return annotationBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(annotation_);
+ }
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder addAnnotationBuilder() {
+ return getAnnotationFieldBuilder().addBuilder(
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder addAnnotationBuilder(
+ int index) {
+ return getAnnotationFieldBuilder().addBuilder(
+ index, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List
+ getAnnotationBuilderList() {
+ return getAnnotationFieldBuilder().getBuilderList();
+ }
+ private org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder<
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder>
+ getAnnotationFieldBuilder() {
+ if (annotationBuilder_ == null) {
+ annotationBuilder_ = new org.jetbrains.kotlin.protobuf.RepeatedFieldBuilder<
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation, org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Builder, org.jetbrains.kotlin.serialization.DebugProtoBuf.AnnotationOrBuilder>(
+ annotation_,
+ ((bitField0_ & 0x00000002) == 0x00000002),
+ getParentForChildren(),
+ isClean());
+ annotation_ = null;
+ }
+ return annotationBuilder_;
+ }
+
+ // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.File)
+ }
+
+ static {
+ defaultInstance = new File(true);
+ defaultInstance.initFields();
+ }
+
+ // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.js.File)
+ }
+
public interface ClassesOrBuilder extends
// @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.Classes)
org.jetbrains.kotlin.protobuf.MessageOrBuilder {
@@ -2195,6 +2975,17 @@ public final class DebugJsProtoBuf {
.newFileScopedGeneratedExtension(
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class,
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
+ public static final int CLASS_CONTAINING_FILE_ID_FIELD_NUMBER = 135;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Class { ... }
+ */
+ public static final
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension<
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Class,
+ java.lang.Integer> classContainingFileId = org.jetbrains.kotlin.protobuf.GeneratedMessage
+ .newFileScopedGeneratedExtension(
+ java.lang.Integer.class,
+ null);
public static final int CONSTRUCTOR_ANNOTATION_FIELD_NUMBER = 130;
/**
* extend .org.jetbrains.kotlin.serialization.Constructor { ... }
@@ -2217,6 +3008,17 @@ public final class DebugJsProtoBuf {
.newFileScopedGeneratedExtension(
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class,
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
+ public static final int FUNCTION_CONTAINING_FILE_ID_FIELD_NUMBER = 135;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Function { ... }
+ */
+ public static final
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension<
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Function,
+ java.lang.Integer> functionContainingFileId = org.jetbrains.kotlin.protobuf.GeneratedMessage
+ .newFileScopedGeneratedExtension(
+ java.lang.Integer.class,
+ null);
public static final int PROPERTY_ANNOTATION_FIELD_NUMBER = 130;
/**
* extend .org.jetbrains.kotlin.serialization.Property { ... }
@@ -2239,6 +3041,17 @@ public final class DebugJsProtoBuf {
.newFileScopedGeneratedExtension(
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.class,
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.Argument.Value.getDefaultInstance());
+ public static final int PROPERTY_CONTAINING_FILE_ID_FIELD_NUMBER = 135;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Property { ... }
+ */
+ public static final
+ org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension<
+ org.jetbrains.kotlin.serialization.DebugProtoBuf.Property,
+ java.lang.Integer> propertyContainingFileId = org.jetbrains.kotlin.protobuf.GeneratedMessage
+ .newFileScopedGeneratedExtension(
+ java.lang.Integer.class,
+ null);
public static final int ENUM_ENTRY_ANNOTATION_FIELD_NUMBER = 130;
/**
* extend .org.jetbrains.kotlin.serialization.EnumEntry { ... }
@@ -2283,6 +3096,11 @@ public final class DebugJsProtoBuf {
.newFileScopedGeneratedExtension(
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.class,
org.jetbrains.kotlin.serialization.DebugProtoBuf.Annotation.getDefaultInstance());
+ private static final org.jetbrains.kotlin.protobuf.Descriptors.Descriptor
+ internal_static_org_jetbrains_kotlin_serialization_js_File_descriptor;
+ 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_Classes_descriptor;
private static
@@ -2310,44 +3128,52 @@ public final class DebugJsProtoBuf {
"\n#js/js.serializer/src/js.debug.proto\022%o" +
"rg.jetbrains.kotlin.serialization.js\0320co" +
"re/deserialization/src/descriptors.debug" +
- ".proto\"!\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.jetbr" +
- "ains.kotlin.serialization.js.Library.Fil" +
- "eEntry\022H\n\004kind\030\002 \001(\01623.org.jetbrains.kot" +
- "lin.serialization.js.Library.Kind:\005PLAIN" +
- "\022\027\n\017imported_module\030\003 \003(\t\032*\n\tFileEntry\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.jetbrains.ko" +
- "tlin.serialization.Class\030\202\001 \003(\0132..org.je" +
- "tbrains.kotlin.serialization.Annotation:" +
- "\200\001\n\026constructor_annotation\022/.org.jetbrai" +
- "ns.kotlin.serialization.Constructor\030\202\001 \003" +
- "(\0132..org.jetbrains.kotlin.serialization." +
- "Annotation:z\n\023function_annotation\022,.org." +
- "jetbrains.kotlin.serialization.Function\030" +
- "\202\001 \003(\0132..org.jetbrains.kotlin.serializat",
- "ion.Annotation:z\n\023property_annotation\022,." +
- "org.jetbrains.kotlin.serialization.Prope" +
- "rty\030\202\001 \003(\0132..org.jetbrains.kotlin.serial" +
- "ization.Annotation:\210\001\n\022compile_time_valu" +
- "e\022,.org.jetbrains.kotlin.serialization.P" +
- "roperty\030\203\001 \001(\0132=.org.jetbrains.kotlin.se" +
- "rialization.Annotation.Argument.Value:}\n" +
- "\025enum_entry_annotation\022-.org.jetbrains.k" +
- "otlin.serialization.EnumEntry\030\202\001 \003(\0132..o" +
- "rg.jetbrains.kotlin.serialization.Annota",
- "tion:\201\001\n\024parameter_annotation\0222.org.jetb" +
- "rains.kotlin.serialization.ValueParamete" +
+ ".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:r\n\017type_annotation\022(.or" +
- "g.jetbrains.kotlin.serialization.Type\030\202\001" +
- " \003(\0132..org.jetbrains.kotlin.serializatio" +
- "n.Annotation:\205\001\n\031type_parameter_annotati" +
- "on\0221.org.jetbrains.kotlin.serialization." +
- "TypeParameter\030\202\001 \003(\0132..org.jetbrains.kot" +
- "lin.serialization.AnnotationB\021B\017DebugJsP",
- "rotoBuf"
+ "ation.Annotation:z\n\023function_annotation\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"
};
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
@@ -2362,14 +3188,20 @@ public final class DebugJsProtoBuf {
new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor[] {
org.jetbrains.kotlin.serialization.DebugProtoBuf.getDescriptor(),
}, assigner);
- internal_static_org_jetbrains_kotlin_serialization_js_Classes_descriptor =
+ internal_static_org_jetbrains_kotlin_serialization_js_File_descriptor =
getDescriptor().getMessageTypes().get(0);
+ internal_static_org_jetbrains_kotlin_serialization_js_File_fieldAccessorTable = new
+ 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 =
+ getDescriptor().getMessageTypes().get(1);
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(1);
+ getDescriptor().getMessageTypes().get(2);
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,
@@ -2381,14 +3213,17 @@ public final class DebugJsProtoBuf {
internal_static_org_jetbrains_kotlin_serialization_js_Library_FileEntry_descriptor,
new java.lang.String[] { "Path", "Content", });
classAnnotation.internalInit(descriptor.getExtensions().get(0));
- constructorAnnotation.internalInit(descriptor.getExtensions().get(1));
- functionAnnotation.internalInit(descriptor.getExtensions().get(2));
- propertyAnnotation.internalInit(descriptor.getExtensions().get(3));
- compileTimeValue.internalInit(descriptor.getExtensions().get(4));
- enumEntryAnnotation.internalInit(descriptor.getExtensions().get(5));
- parameterAnnotation.internalInit(descriptor.getExtensions().get(6));
- typeAnnotation.internalInit(descriptor.getExtensions().get(7));
- typeParameterAnnotation.internalInit(descriptor.getExtensions().get(8));
+ classContainingFileId.internalInit(descriptor.getExtensions().get(1));
+ constructorAnnotation.internalInit(descriptor.getExtensions().get(2));
+ functionAnnotation.internalInit(descriptor.getExtensions().get(3));
+ functionContainingFileId.internalInit(descriptor.getExtensions().get(4));
+ propertyAnnotation.internalInit(descriptor.getExtensions().get(5));
+ compileTimeValue.internalInit(descriptor.getExtensions().get(6));
+ propertyContainingFileId.internalInit(descriptor.getExtensions().get(7));
+ enumEntryAnnotation.internalInit(descriptor.getExtensions().get(8));
+ parameterAnnotation.internalInit(descriptor.getExtensions().get(9));
+ typeAnnotation.internalInit(descriptor.getExtensions().get(10));
+ typeParameterAnnotation.internalInit(descriptor.getExtensions().get(11));
org.jetbrains.kotlin.serialization.DebugProtoBuf.getDescriptor();
}
diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt
index 0c21008c6b9..78af6f0fc6b 100644
--- a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt
+++ b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt
@@ -77,7 +77,7 @@ class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() {
imported = listOf(),
data = analysisResult.moduleDescriptor
)
- FileUtil.writeToFile(metaFile, KotlinJavascriptSerializationUtil.metadataAsString(description))
+ FileUtil.writeToFile(metaFile, KotlinJavascriptSerializationUtil.metadataAsString(analysisResult.bindingContext, description))
}
finally {
Disposer.dispose(rootDisposable)
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 68e941337ff..1b16e8700db 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
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.js.translate.utils;
+import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*;
@@ -24,8 +25,18 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget;
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.js.PredefinedAnnotation;
import org.jetbrains.kotlin.name.FqName;
+import org.jetbrains.kotlin.name.FqNameUnsafe;
+import org.jetbrains.kotlin.psi.KtAnnotationEntry;
+import org.jetbrains.kotlin.psi.KtFile;
+import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.constants.ConstantValue;
+import org.jetbrains.kotlin.resolve.source.PsiSourceFile;
+import org.jetbrains.kotlin.serialization.js.KotlinJavascriptPackageFragment;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
public final class AnnotationsUtils {
private static final String JS_NAME = "kotlin.js.JsName";
@@ -174,10 +185,63 @@ public final class AnnotationsUtils {
@Nullable
public static String getModuleName(@NotNull DeclarationDescriptor declaration) {
AnnotationDescriptor annotation = declaration.getAnnotations().findAnnotation(JS_MODULE_ANNOTATION);
- if (annotation == null) return null;
+ return annotation != null ? extractJsModuleName(annotation) : null;
+ }
+ @Nullable
+ public static String getFileModuleName(@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_MODULE_ANNOTATION.toUnsafe())) {
+ return extractJsModuleName(annotation);
+ }
+ }
+
+ return null;
+ }
+
+ @NotNull
+ private static String extractJsModuleName(@NotNull AnnotationDescriptor annotation) {
ConstantValue> importValue = annotation.getAllValueArguments().values().iterator().next();
assert importValue != null : "JsModule annotation should have at least one argument";
return (String) importValue.getValue();
}
+
+ @NotNull
+ public static List getContainingFileAnnotations(
+ @NotNull BindingContext bindingContext,
+ @NotNull DeclarationDescriptor descriptor
+ ) {
+ PackageFragmentDescriptor containingPackage = DescriptorUtils.getParentOfType(descriptor, PackageFragmentDescriptor.class, false);
+ if (containingPackage instanceof KotlinJavascriptPackageFragment) {
+ return ((KotlinJavascriptPackageFragment) containingPackage).getContainingFileAnnotations(descriptor);
+ }
+
+ KtFile kotlinFile = getFile(descriptor);
+ if (kotlinFile != null) {
+ List annotations = new ArrayList();
+ for (KtAnnotationEntry psiAnnotation : kotlinFile.getAnnotationEntries()) {
+ AnnotationDescriptor annotation = bindingContext.get(BindingContext.ANNOTATION, psiAnnotation);
+ annotations.add(annotation);
+ }
+ return annotations;
+ }
+
+ return Collections.emptyList();
+ }
+
+ @Nullable
+ private static KtFile getFile(DeclarationDescriptor descriptor) {
+ if (!(descriptor instanceof DeclarationDescriptorWithSource)) return null;
+ SourceFile file = ((DeclarationDescriptorWithSource) descriptor).getSource().getContainingFile();
+ if (!(file instanceof PsiSourceFile)) return null;
+
+ PsiFile psiFile = ((PsiSourceFile) file).getPsiFile();
+ if (!(psiFile instanceof KtFile)) return null;
+
+ return (KtFile) psiFile;
+ }
}
diff --git a/js/js.serializer/src/js.proto b/js/js.serializer/src/js.proto
index cde55f81ffa..f593e3ff49e 100644
--- a/js/js.serializer/src/js.proto
+++ b/js/js.serializer/src/js.proto
@@ -21,8 +21,14 @@ import "core/deserialization/src/descriptors.proto";
option java_outer_classname = "JsProtoBuf";
option optimize_for = LITE_RUNTIME;
+message File {
+ required int32 id = 1;
+ repeated Annotation annotation = 2;
+}
+
extend Class {
repeated Annotation class_annotation = 130;
+ optional int32 class_containing_file_id = 135;
}
extend Constructor {
@@ -31,11 +37,13 @@ extend Constructor {
extend Function {
repeated Annotation function_annotation = 130;
+ optional int32 function_containing_file_id = 135;
}
extend Property {
repeated Annotation property_annotation = 130;
optional Annotation.Argument.Value compile_time_value = 131;
+ optional int32 property_containing_file_id = 135;
}
extend EnumEntry {
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 f161788c22e..b6b0c89339d 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
@@ -8,15 +8,600 @@ public final class JsProtoBuf {
public static void registerAllExtensions(
org.jetbrains.kotlin.protobuf.ExtensionRegistryLite registry) {
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.classAnnotation);
+ registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.classContainingFileId);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.constructorAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.functionAnnotation);
+ registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.functionContainingFileId);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.propertyAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.compileTimeValue);
+ registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.propertyContainingFileId);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.enumEntryAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.parameterAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.typeAnnotation);
registry.add(org.jetbrains.kotlin.serialization.js.JsProtoBuf.typeParameterAnnotation);
}
+ public interface FileOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.File)
+ org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
+
+ /**
+ * required int32 id = 1;
+ */
+ boolean hasId();
+ /**
+ * required int32 id = 1;
+ */
+ int getId();
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ java.util.List
+ getAnnotationList();
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ org.jetbrains.kotlin.serialization.ProtoBuf.Annotation getAnnotation(int index);
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ int getAnnotationCount();
+ }
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.File}
+ */
+ public static final class File extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite implements
+ // @@protoc_insertion_point(message_implements:org.jetbrains.kotlin.serialization.js.File)
+ FileOrBuilder {
+ // Use File.newBuilder() to construct.
+ private File(org.jetbrains.kotlin.protobuf.GeneratedMessageLite.Builder builder) {
+ super(builder);
+ this.unknownFields = builder.getUnknownFields();
+ }
+ private File(boolean noInit) { this.unknownFields = org.jetbrains.kotlin.protobuf.ByteString.EMPTY;}
+
+ private static final File defaultInstance;
+ public static File getDefaultInstance() {
+ return defaultInstance;
+ }
+
+ public File getDefaultInstanceForType() {
+ return defaultInstance;
+ }
+
+ private final org.jetbrains.kotlin.protobuf.ByteString unknownFields;
+ private File(
+ 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 8: {
+ bitField0_ |= 0x00000001;
+ id_ = input.readInt32();
+ break;
+ }
+ case 18: {
+ if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+ annotation_ = new java.util.ArrayList();
+ mutable_bitField0_ |= 0x00000002;
+ }
+ annotation_.add(input.readMessage(org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.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_ & 0x00000002) == 0x00000002)) {
+ annotation_ = java.util.Collections.unmodifiableList(annotation_);
+ }
+ 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 File parsePartialFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input,
+ org.jetbrains.kotlin.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return new File(input, extensionRegistry);
+ }
+ };
+
+ @java.lang.Override
+ public org.jetbrains.kotlin.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ private int bitField0_;
+ public static final int ID_FIELD_NUMBER = 1;
+ private int id_;
+ /**
+ * required int32 id = 1;
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public int getId() {
+ return id_;
+ }
+
+ public static final int ANNOTATION_FIELD_NUMBER = 2;
+ private java.util.List annotation_;
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List getAnnotationList() {
+ return annotation_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List extends org.jetbrains.kotlin.serialization.ProtoBuf.AnnotationOrBuilder>
+ getAnnotationOrBuilderList() {
+ return annotation_;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public int getAnnotationCount() {
+ return annotation_.size();
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.ProtoBuf.Annotation getAnnotation(int index) {
+ return annotation_.get(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.ProtoBuf.AnnotationOrBuilder getAnnotationOrBuilder(
+ int index) {
+ return annotation_.get(index);
+ }
+
+ private void initFields() {
+ id_ = 0;
+ annotation_ = 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;
+
+ if (!hasId()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ for (int i = 0; i < getAnnotationCount(); i++) {
+ if (!getAnnotation(i).isInitialized()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(org.jetbrains.kotlin.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getSerializedSize();
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ output.writeInt32(1, id_);
+ }
+ for (int i = 0; i < annotation_.size(); i++) {
+ output.writeMessage(2, annotation_.get(i));
+ }
+ output.writeRawBytes(unknownFields);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public int getSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ size += org.jetbrains.kotlin.protobuf.CodedOutputStream
+ .computeInt32Size(1, id_);
+ }
+ for (int i = 0; i < annotation_.size(); i++) {
+ size += org.jetbrains.kotlin.protobuf.CodedOutputStream
+ .computeMessageSize(2, annotation_.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.File 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.File 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.File parseFrom(byte[] data)
+ throws org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.File 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.File parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.File 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.File parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return PARSER.parseDelimitedFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.File 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.File parseFrom(
+ org.jetbrains.kotlin.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return PARSER.parseFrom(input);
+ }
+ public static org.jetbrains.kotlin.serialization.js.JsProtoBuf.File 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.File prototype) {
+ return newBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() { return newBuilder(this); }
+
+ /**
+ * Protobuf type {@code org.jetbrains.kotlin.serialization.js.File}
+ */
+ public static final class Builder extends
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite.Builder<
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.File, Builder>
+ implements
+ // @@protoc_insertion_point(builder_implements:org.jetbrains.kotlin.serialization.js.File)
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.FileOrBuilder {
+ // Construct using org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ }
+ private static Builder create() {
+ return new Builder();
+ }
+
+ public Builder clear() {
+ super.clear();
+ id_ = 0;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ annotation_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000002);
+ return this;
+ }
+
+ public Builder clone() {
+ return create().mergeFrom(buildPartial());
+ }
+
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.File getDefaultInstanceForType() {
+ return org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.getDefaultInstance();
+ }
+
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.File build() {
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.File result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public org.jetbrains.kotlin.serialization.js.JsProtoBuf.File buildPartial() {
+ org.jetbrains.kotlin.serialization.js.JsProtoBuf.File result = new org.jetbrains.kotlin.serialization.js.JsProtoBuf.File(this);
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+ to_bitField0_ |= 0x00000001;
+ }
+ result.id_ = id_;
+ if (((bitField0_ & 0x00000002) == 0x00000002)) {
+ annotation_ = java.util.Collections.unmodifiableList(annotation_);
+ bitField0_ = (bitField0_ & ~0x00000002);
+ }
+ result.annotation_ = annotation_;
+ result.bitField0_ = to_bitField0_;
+ return result;
+ }
+
+ public Builder mergeFrom(org.jetbrains.kotlin.serialization.js.JsProtoBuf.File other) {
+ if (other == org.jetbrains.kotlin.serialization.js.JsProtoBuf.File.getDefaultInstance()) return this;
+ if (other.hasId()) {
+ setId(other.getId());
+ }
+ if (!other.annotation_.isEmpty()) {
+ if (annotation_.isEmpty()) {
+ annotation_ = other.annotation_;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ } else {
+ ensureAnnotationIsMutable();
+ annotation_.addAll(other.annotation_);
+ }
+
+ }
+ setUnknownFields(
+ getUnknownFields().concat(other.unknownFields));
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ if (!hasId()) {
+
+ return false;
+ }
+ for (int i = 0; i < getAnnotationCount(); i++) {
+ if (!getAnnotation(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.File parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (org.jetbrains.kotlin.serialization.js.JsProtoBuf.File) e.getUnfinishedMessage();
+ throw e;
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+ private int bitField0_;
+
+ private int id_ ;
+ /**
+ * required int32 id = 1;
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public int getId() {
+ return id_;
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public Builder setId(int value) {
+ bitField0_ |= 0x00000001;
+ id_ = value;
+
+ return this;
+ }
+ /**
+ * required int32 id = 1;
+ */
+ public Builder clearId() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ id_ = 0;
+
+ return this;
+ }
+
+ private java.util.List annotation_ =
+ java.util.Collections.emptyList();
+ private void ensureAnnotationIsMutable() {
+ if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+ annotation_ = new java.util.ArrayList(annotation_);
+ bitField0_ |= 0x00000002;
+ }
+ }
+
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public java.util.List getAnnotationList() {
+ return java.util.Collections.unmodifiableList(annotation_);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public int getAnnotationCount() {
+ return annotation_.size();
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public org.jetbrains.kotlin.serialization.ProtoBuf.Annotation getAnnotation(int index) {
+ return annotation_.get(index);
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder setAnnotation(
+ int index, org.jetbrains.kotlin.serialization.ProtoBuf.Annotation value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureAnnotationIsMutable();
+ annotation_.set(index, value);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder setAnnotation(
+ int index, org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Builder builderForValue) {
+ ensureAnnotationIsMutable();
+ annotation_.set(index, builderForValue.build());
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(org.jetbrains.kotlin.serialization.ProtoBuf.Annotation value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureAnnotationIsMutable();
+ annotation_.add(value);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(
+ int index, org.jetbrains.kotlin.serialization.ProtoBuf.Annotation value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensureAnnotationIsMutable();
+ annotation_.add(index, value);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(
+ org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Builder builderForValue) {
+ ensureAnnotationIsMutable();
+ annotation_.add(builderForValue.build());
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAnnotation(
+ int index, org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Builder builderForValue) {
+ ensureAnnotationIsMutable();
+ annotation_.add(index, builderForValue.build());
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder addAllAnnotation(
+ java.lang.Iterable extends org.jetbrains.kotlin.serialization.ProtoBuf.Annotation> values) {
+ ensureAnnotationIsMutable();
+ org.jetbrains.kotlin.protobuf.AbstractMessageLite.Builder.addAll(
+ values, annotation_);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder clearAnnotation() {
+ annotation_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000002);
+
+ return this;
+ }
+ /**
+ * repeated .org.jetbrains.kotlin.serialization.Annotation annotation = 2;
+ */
+ public Builder removeAnnotation(int index) {
+ ensureAnnotationIsMutable();
+ annotation_.remove(index);
+
+ return this;
+ }
+
+ // @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.File)
+ }
+
+ static {
+ defaultInstance = new File(true);
+ defaultInstance.initFields();
+ }
+
+ // @@protoc_insertion_point(class_scope:org.jetbrains.kotlin.serialization.js.File)
+ }
+
public interface ClassesOrBuilder extends
// @@protoc_insertion_point(interface_extends:org.jetbrains.kotlin.serialization.js.Classes)
org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
@@ -1890,6 +2475,22 @@ public final class JsProtoBuf {
org.jetbrains.kotlin.protobuf.WireFormat.FieldType.MESSAGE,
false,
org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.class);
+ public static final int CLASS_CONTAINING_FILE_ID_FIELD_NUMBER = 135;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Class { ... }
+ */
+ public static final
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension<
+ org.jetbrains.kotlin.serialization.ProtoBuf.Class,
+ java.lang.Integer> classContainingFileId = org.jetbrains.kotlin.protobuf.GeneratedMessageLite
+ .newSingularGeneratedExtension(
+ org.jetbrains.kotlin.serialization.ProtoBuf.Class.getDefaultInstance(),
+ 0,
+ null,
+ null,
+ 135,
+ org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32,
+ java.lang.Integer.class);
public static final int CONSTRUCTOR_ANNOTATION_FIELD_NUMBER = 130;
/**
* extend .org.jetbrains.kotlin.serialization.Constructor { ... }
@@ -1922,6 +2523,22 @@ public final class JsProtoBuf {
org.jetbrains.kotlin.protobuf.WireFormat.FieldType.MESSAGE,
false,
org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.class);
+ public static final int FUNCTION_CONTAINING_FILE_ID_FIELD_NUMBER = 135;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Function { ... }
+ */
+ public static final
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension<
+ org.jetbrains.kotlin.serialization.ProtoBuf.Function,
+ java.lang.Integer> functionContainingFileId = org.jetbrains.kotlin.protobuf.GeneratedMessageLite
+ .newSingularGeneratedExtension(
+ org.jetbrains.kotlin.serialization.ProtoBuf.Function.getDefaultInstance(),
+ 0,
+ null,
+ null,
+ 135,
+ org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32,
+ java.lang.Integer.class);
public static final int PROPERTY_ANNOTATION_FIELD_NUMBER = 130;
/**
* extend .org.jetbrains.kotlin.serialization.Property { ... }
@@ -1954,6 +2571,22 @@ public final class JsProtoBuf {
131,
org.jetbrains.kotlin.protobuf.WireFormat.FieldType.MESSAGE,
org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.class);
+ public static final int PROPERTY_CONTAINING_FILE_ID_FIELD_NUMBER = 135;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Property { ... }
+ */
+ public static final
+ org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension<
+ org.jetbrains.kotlin.serialization.ProtoBuf.Property,
+ java.lang.Integer> propertyContainingFileId = org.jetbrains.kotlin.protobuf.GeneratedMessageLite
+ .newSingularGeneratedExtension(
+ org.jetbrains.kotlin.serialization.ProtoBuf.Property.getDefaultInstance(),
+ 0,
+ null,
+ null,
+ 135,
+ org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32,
+ java.lang.Integer.class);
public static final int ENUM_ENTRY_ANNOTATION_FIELD_NUMBER = 130;
/**
* extend .org.jetbrains.kotlin.serialization.EnumEntry { ... }
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileRegistry.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileRegistry.kt
new file mode 100644
index 00000000000..d80cc8a4994
--- /dev/null
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinFileRegistry.kt
@@ -0,0 +1,28 @@
+/*
+ * 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.serialization.js
+
+import org.jetbrains.kotlin.psi.KtFile
+
+class KotlinFileRegistry {
+ private val fileIdsImpl = mutableMapOf()
+
+ fun lookup(file: KtFile) = fileIdsImpl.getOrPut(file) { fileIdsImpl.size }
+
+ val fileIds: Map
+ get() = fileIdsImpl
+}
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 6b91f33eef8..277cc859238 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
@@ -16,13 +16,22 @@
package org.jetbrains.kotlin.serialization.js
+import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
+import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
+import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.protobuf.CodedInputStream
+import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.serialization.ProtoBuf
+import org.jetbrains.kotlin.serialization.deserialization.AnnotationDeserializer
import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragment
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
+import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
+import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
+import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor
import org.jetbrains.kotlin.storage.StorageManager
import java.io.InputStream
@@ -37,6 +46,20 @@ class KotlinJavascriptPackageFragment(
NameResolverImpl.read(stream)
}
+ 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()
+ }.orEmpty()
+ }
+
+ private val annotationDeserializer: AnnotationDeserializer by lazy {
+ AnnotationDeserializer(module, components.notFoundClasses)
+ }
+
override val classDataFinder = KotlinJavascriptClassDataFinder(nameResolver, loadResource)
override fun computeMemberScope(): DeserializedPackageMemberScope =
@@ -56,4 +79,24 @@ class KotlinJavascriptPackageFragment(
private fun loadResourceSure(path: String): InputStream =
loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path")
+
+ fun getContainingFileAnnotations(descriptor: DeclarationDescriptor): List {
+ if (DescriptorUtils.getParentOfType(descriptor, PackageFragmentDescriptor::class.java) != this) {
+ throw IllegalArgumentException("Provided descriptor $descriptor does not belong to this package $this")
+ }
+ val fileId = when (descriptor) {
+ is DeserializedClassDescriptor -> descriptor.classProto.getExtension(JsProtoBuf.classContainingFileId)
+ is DeserializedSimpleFunctionDescriptor -> descriptor.proto.getExtension(JsProtoBuf.functionContainingFileId)
+ is DeserializedPropertyDescriptor -> descriptor.proto.getExtension(JsProtoBuf.propertyContainingFileId)
+ else -> null
+ }
+
+ return fileId?.let { fileMap[it] }?.annotations.orEmpty()
+ }
+
+ private inner class FileHolder(val annotationsProto: List) {
+ val annotations: List by lazy {
+ annotationsProto.map { annotationDeserializer.deserializeAnnotation(it, nameResolver) }
+ }
+ }
}
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 9699ba8e7bc..f39b6b7618e 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,10 +19,13 @@ 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
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope
+import org.jetbrains.kotlin.serialization.AnnotationSerializer
import org.jetbrains.kotlin.serialization.DescriptorSerializer
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.StringTableImpl
@@ -51,7 +54,7 @@ object KotlinJavascriptSerializationUtil {
}
private val STRING_TABLE_DEFAULT_BYTES = run {
- val serializer = DescriptorSerializer.createTopLevel(KotlinJavascriptSerializerExtension())
+ val serializer = DescriptorSerializer.createTopLevel(KotlinJavascriptSerializerExtension(KotlinFileRegistry()))
val stream = ByteArrayOutputStream()
serializer.stringTable.serializeTo(stream)
stream.toByteArray()
@@ -75,8 +78,7 @@ object KotlinJavascriptSerializationUtil {
val packageFqNames = getPackages(contentMap).map(::FqName).toSet()
if (packageFqNames.isEmpty()) return null
- return createKotlinJavascriptPackageFragmentProvider(storageManager, moduleDescriptor, packageFqNames, configuration) {
- path ->
+ return createKotlinJavascriptPackageFragmentProvider(storageManager, moduleDescriptor, packageFqNames, configuration) { path ->
if (!contentMap.containsKey(path)) {
when {
isPackageMetadataFile(path) ->
@@ -118,16 +120,18 @@ object KotlinJavascriptSerializationUtil {
return byteStream.toByteArray()
}
- fun metadataAsString(jsDescriptor: JsModuleDescriptor): String =
- KotlinJavascriptMetadataUtils.formatMetadataAsString(jsDescriptor.name, jsDescriptor.toBinaryMetadata())
+ fun metadataAsString(bindingContext: BindingContext, jsDescriptor: JsModuleDescriptor): String =
+ KotlinJavascriptMetadataUtils.formatMetadataAsString(jsDescriptor.name, jsDescriptor.toBinaryMetadata(bindingContext))
- fun serializePackage(module: ModuleDescriptor, fqName: FqName, writeFun: (String, ByteArray) -> Unit) {
+ fun serializePackage(bindingContext: BindingContext, module: ModuleDescriptor, fqName: FqName,
+ writeFun: (String, ByteArray) -> Unit) {
val packageView = module.getPackage(fqName)
// TODO: ModuleDescriptor should be able to return the package only with the contents of that module, without dependencies
val skip: (DeclarationDescriptor) -> Boolean = { DescriptorUtils.getContainingModule(it) != module }
- val serializerExtension = KotlinJavascriptSerializerExtension()
+ val fileRegistry = KotlinFileRegistry()
+ val serializerExtension = KotlinJavascriptSerializerExtension(fileRegistry)
val serializer = DescriptorSerializer.createTopLevel(serializerExtension)
val classifierDescriptors = DescriptorSerializer.sort(packageView.memberScope.getContributedDescriptors(
@@ -141,6 +145,9 @@ object KotlinJavascriptSerializationUtil {
}
}, skip)
+ writeFun(KotlinJavascriptSerializedResourcePaths.getFileListFilePath(fqName),
+ serializeFiles(fileRegistry, bindingContext, AnnotationSerializer(serializer.stringTable)))
+
val packageStream = ByteArrayOutputStream()
val fragments = packageView.fragments
val members = fragments
@@ -190,15 +197,34 @@ object KotlinJavascriptSerializationUtil {
}
}
+ private fun serializeFiles(fileRegistry: KotlinFileRegistry, bindingContext: BindingContext,
+ serializer: AnnotationSerializer): ByteArray {
+ val filesProto = JsProtoBuf.Files.newBuilder()
+ for ((file, id) in fileRegistry.fileIds) {
+ val fileProto = JsProtoBuf.File.newBuilder()
+ fileProto.id = id
+ for (annotationPsi in file.annotationEntries) {
+ val annotation = bindingContext[BindingContext.ANNOTATION, annotationPsi]!!
+ fileProto.addAnnotation(serializer.serializeAnnotation(annotation))
+ }
+ filesProto.addFile(fileProto)
+ }
+
+ return ByteArrayOutputStream().use { out ->
+ filesProto.build().writeTo(out)
+ out
+ }.toByteArray()
+ }
+
private fun getFileName(classDescriptor: ClassDescriptor): String {
return KotlinJavascriptSerializedResourcePaths.getClassMetadataPath(classDescriptor.classId!!)
}
- fun toContentMap(module: ModuleDescriptor): Map {
+ fun toContentMap(bindingContext: BindingContext, module: ModuleDescriptor): Map {
val contentMap = hashMapOf()
getPackagesFqNames(module).forEach {
- serializePackage(module, it) {
+ serializePackage(bindingContext, module, it) {
fileName, bytes -> contentMap[fileName] = bytes
}
}
@@ -243,7 +269,8 @@ object KotlinJavascriptSerializationUtil {
return result.map { it.substringAfter('/').replace('/', '.') }.toSet()
}
- private fun JsModuleDescriptor.toBinaryMetadata() = contentMapToByteArray(toContentMap(data), kind, imported)
+ private fun JsModuleDescriptor.toBinaryMetadata(bindingContext: BindingContext) =
+ contentMapToByteArray(toContentMap(bindingContext, data), kind, imported)
}
private fun ByteArray.readAsContentMap(name: String): JsModuleDescriptor