Fix incremental recompilation of JS source maps

Note that this breaks binary compatibility.
It should be OK, since nobody is using incremental compilation API
for now.
This commit is contained in:
Alexey Andreev
2017-05-15 15:45:38 +03:00
parent ed592452a3
commit 5715803b96
5 changed files with 679 additions and 184 deletions
+3 -1
View File
@@ -282,6 +282,8 @@ message Vars {
message VarDeclaration {
required int32 name_id = 1;
optional Expression initial_value = 2;
optional int32 fileId = 3;
optional Location location = 4;
}
message Block {
@@ -325,7 +327,7 @@ message DoWhile {
message For {
oneof init {
Vars variables = 1;
Statement variables = 1;
Expression expression = 2;
EmptyInit empty = 3;
}
@@ -207,7 +207,7 @@ class JsAstDeserializer(program: JsProgram) {
StatementCase.FOR_STATEMENT -> {
val forProto = proto.forStatement
val initVars = if (forProto.hasVariables()) deserializeVars(forProto.variables) else null
val initVars = if (forProto.hasVariables()) deserialize(forProto.variables) as JsVars else null
val initExpr = if (forProto.hasExpression()) deserialize(forProto.expression) else null
val condition = if (forProto.hasCondition()) deserialize(forProto.condition) else null
val increment = if (forProto.hasIncrement()) deserialize(forProto.increment) else null
@@ -395,8 +395,13 @@ class JsAstDeserializer(program: JsProgram) {
private fun deserializeVars(proto: Vars): JsVars {
val vars = JsVars(proto.multiline)
for (declProto in proto.declarationList) {
val initialValue = if (declProto.hasInitialValue()) deserialize(declProto.initialValue) else null
vars.vars += JsVars.JsVar(deserializeName(declProto.nameId), initialValue)
vars.vars += withLocation(
fileId = if (declProto.hasFileId()) declProto.fileId else null,
location = if (declProto.hasLocation()) declProto.location else null
) {
val initialValue = if (declProto.hasInitialValue()) deserialize(declProto.initialValue) else null
JsVars.JsVar(deserializeName(declProto.nameId), initialValue)
}
}
if (proto.hasExportedPackageId()) {
vars.exportedPackage = deserializeString(proto.exportedPackageId)
@@ -20474,6 +20474,24 @@ public final class JsAstProtoBuf {
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Expression initial_value = 2;</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression getInitialValue();
/**
* <code>optional int32 fileId = 3;</code>
*/
boolean hasFileId();
/**
* <code>optional int32 fileId = 3;</code>
*/
int getFileId();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
boolean hasLocation();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location getLocation();
}
/**
* Protobuf type {@code org.jetbrains.kotlin.serialization.js.ast.VarDeclaration}
@@ -20543,6 +20561,24 @@ public final class JsAstProtoBuf {
bitField0_ |= 0x00000002;
break;
}
case 24: {
bitField0_ |= 0x00000004;
fileId_ = input.readInt32();
break;
}
case 34: {
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.Builder subBuilder = null;
if (((bitField0_ & 0x00000008) == 0x00000008)) {
subBuilder = location_.toBuilder();
}
location_ = input.readMessage(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.PARSER, extensionRegistry);
if (subBuilder != null) {
subBuilder.mergeFrom(location_);
location_ = subBuilder.buildPartial();
}
bitField0_ |= 0x00000008;
break;
}
}
}
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
@@ -20607,9 +20643,41 @@ public final class JsAstProtoBuf {
return initialValue_;
}
public static final int FILEID_FIELD_NUMBER = 3;
private int fileId_;
/**
* <code>optional int32 fileId = 3;</code>
*/
public boolean hasFileId() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional int32 fileId = 3;</code>
*/
public int getFileId() {
return fileId_;
}
public static final int LOCATION_FIELD_NUMBER = 4;
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location location_;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public boolean hasLocation() {
return ((bitField0_ & 0x00000008) == 0x00000008);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location getLocation() {
return location_;
}
private void initFields() {
nameId_ = 0;
initialValue_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
fileId_ = 0;
location_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.getDefaultInstance();
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -20627,6 +20695,12 @@ public final class JsAstProtoBuf {
return false;
}
}
if (hasLocation()) {
if (!getLocation().isInitialized()) {
memoizedIsInitialized = 0;
return false;
}
}
memoizedIsInitialized = 1;
return true;
}
@@ -20640,6 +20714,12 @@ public final class JsAstProtoBuf {
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeMessage(2, initialValue_);
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
output.writeInt32(3, fileId_);
}
if (((bitField0_ & 0x00000008) == 0x00000008)) {
output.writeMessage(4, location_);
}
output.writeRawBytes(unknownFields);
}
@@ -20657,6 +20737,14 @@ public final class JsAstProtoBuf {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(2, initialValue_);
}
if (((bitField0_ & 0x00000004) == 0x00000004)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeInt32Size(3, fileId_);
}
if (((bitField0_ & 0x00000008) == 0x00000008)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(4, location_);
}
size += unknownFields.size();
memoizedSerializedSize = size;
return size;
@@ -20755,6 +20843,10 @@ public final class JsAstProtoBuf {
bitField0_ = (bitField0_ & ~0x00000001);
initialValue_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000002);
fileId_ = 0;
bitField0_ = (bitField0_ & ~0x00000004);
location_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000008);
return this;
}
@@ -20786,6 +20878,14 @@ public final class JsAstProtoBuf {
to_bitField0_ |= 0x00000002;
}
result.initialValue_ = initialValue_;
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
to_bitField0_ |= 0x00000004;
}
result.fileId_ = fileId_;
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
to_bitField0_ |= 0x00000008;
}
result.location_ = location_;
result.bitField0_ = to_bitField0_;
return result;
}
@@ -20798,6 +20898,12 @@ public final class JsAstProtoBuf {
if (other.hasInitialValue()) {
mergeInitialValue(other.getInitialValue());
}
if (other.hasFileId()) {
setFileId(other.getFileId());
}
if (other.hasLocation()) {
mergeLocation(other.getLocation());
}
setUnknownFields(
getUnknownFields().concat(other.unknownFields));
return this;
@@ -20814,6 +20920,12 @@ public final class JsAstProtoBuf {
return false;
}
}
if (hasLocation()) {
if (!getLocation().isInitialized()) {
return false;
}
}
return true;
}
@@ -20928,6 +21040,98 @@ public final class JsAstProtoBuf {
return this;
}
private int fileId_ ;
/**
* <code>optional int32 fileId = 3;</code>
*/
public boolean hasFileId() {
return ((bitField0_ & 0x00000004) == 0x00000004);
}
/**
* <code>optional int32 fileId = 3;</code>
*/
public int getFileId() {
return fileId_;
}
/**
* <code>optional int32 fileId = 3;</code>
*/
public Builder setFileId(int value) {
bitField0_ |= 0x00000004;
fileId_ = value;
return this;
}
/**
* <code>optional int32 fileId = 3;</code>
*/
public Builder clearFileId() {
bitField0_ = (bitField0_ & ~0x00000004);
fileId_ = 0;
return this;
}
private org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location location_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.getDefaultInstance();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public boolean hasLocation() {
return ((bitField0_ & 0x00000008) == 0x00000008);
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location getLocation() {
return location_;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public Builder setLocation(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location value) {
if (value == null) {
throw new NullPointerException();
}
location_ = value;
bitField0_ |= 0x00000008;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public Builder setLocation(
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.Builder builderForValue) {
location_ = builderForValue.build();
bitField0_ |= 0x00000008;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public Builder mergeLocation(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location value) {
if (((bitField0_ & 0x00000008) == 0x00000008) &&
location_ != org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.getDefaultInstance()) {
location_ =
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.newBuilder(location_).mergeFrom(value).buildPartial();
} else {
location_ = value;
}
bitField0_ |= 0x00000008;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Location location = 4;</code>
*/
public Builder clearLocation() {
location_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Location.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000008);
return this;
}
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.serialization.js.ast.VarDeclaration)
}
@@ -25396,13 +25600,13 @@ public final class JsAstProtoBuf {
org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
boolean hasVariables();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars getVariables();
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement getVariables();
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Expression expression = 2;</code>
@@ -25500,13 +25704,13 @@ public final class JsAstProtoBuf {
break;
}
case 10: {
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.Builder subBuilder = null;
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.Builder subBuilder = null;
if (initCase_ == 1) {
subBuilder = ((org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_).toBuilder();
subBuilder = ((org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_).toBuilder();
}
init_ = input.readMessage(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.PARSER, extensionRegistry);
init_ = input.readMessage(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.PARSER, extensionRegistry);
if (subBuilder != null) {
subBuilder.mergeFrom((org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_);
subBuilder.mergeFrom((org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_);
init_ = subBuilder.buildPartial();
}
initCase_ = 1;
@@ -25646,19 +25850,19 @@ public final class JsAstProtoBuf {
public static final int VARIABLES_FIELD_NUMBER = 1;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public boolean hasVariables() {
return initCase_ == 1;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars getVariables() {
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement getVariables() {
if (initCase_ == 1) {
return (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_;
return (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_;
}
return org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.getDefaultInstance();
return org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.getDefaultInstance();
}
public static final int EXPRESSION_FIELD_NUMBER = 2;
@@ -25791,7 +25995,7 @@ public final class JsAstProtoBuf {
throws java.io.IOException {
getSerializedSize();
if (initCase_ == 1) {
output.writeMessage(1, (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_);
output.writeMessage(1, (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_);
}
if (initCase_ == 2) {
output.writeMessage(2, (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Expression) init_);
@@ -25819,7 +26023,7 @@ public final class JsAstProtoBuf {
size = 0;
if (initCase_ == 1) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(1, (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_);
.computeMessageSize(1, (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_);
}
if (initCase_ == 2) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
@@ -26095,24 +26299,24 @@ public final class JsAstProtoBuf {
private int bitField0_;
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public boolean hasVariables() {
return initCase_ == 1;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars getVariables() {
public org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement getVariables() {
if (initCase_ == 1) {
return (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_;
return (org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_;
}
return org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.getDefaultInstance();
return org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.getDefaultInstance();
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public Builder setVariables(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars value) {
public Builder setVariables(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement value) {
if (value == null) {
throw new NullPointerException();
}
@@ -26122,22 +26326,22 @@ public final class JsAstProtoBuf {
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public Builder setVariables(
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.Builder builderForValue) {
org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.Builder builderForValue) {
init_ = builderForValue.build();
initCase_ = 1;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public Builder mergeVariables(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars value) {
public Builder mergeVariables(org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement value) {
if (initCase_ == 1 &&
init_ != org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.getDefaultInstance()) {
init_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars.newBuilder((org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Vars) init_)
init_ != org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.getDefaultInstance()) {
init_ = org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement.newBuilder((org.jetbrains.kotlin.serialization.js.ast.JsAstProtoBuf.Statement) init_)
.mergeFrom(value).buildPartial();
} else {
init_ = value;
@@ -26147,7 +26351,7 @@ public final class JsAstProtoBuf {
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Vars variables = 1;</code>
* <code>optional .org.jetbrains.kotlin.serialization.js.ast.Statement variables = 1;</code>
*/
public Builder clearVariables() {
if (initCase_ == 1) {
@@ -217,7 +217,7 @@ class JsAstSerializer {
override fun visitFor(x: JsFor) {
val forBuilder = For.newBuilder()
when {
x.initVars != null -> forBuilder.variables = serializeVars(x.initVars)
x.initVars != null -> forBuilder.variables = serialize(x.initVars)
x.initExpression != null -> forBuilder.expression = serialize(x.initExpression)
else -> forBuilder.empty = EmptyInit.newBuilder().build()
}
@@ -460,8 +460,10 @@ class JsAstSerializer {
val varsBuilder = Vars.newBuilder()
for (varDecl in vars.vars) {
val declBuilder = VarDeclaration.newBuilder()
declBuilder.nameId = serialize(varDecl.name)
varDecl.initExpression?.let { declBuilder.initialValue = serialize(it) }
withLocation(varDecl, { declBuilder.fileId = it }, { declBuilder.location = it }) {
declBuilder.nameId = serialize(varDecl.name)
varDecl.initExpression?.let { declBuilder.initialValue = serialize(it) }
}
varsBuilder.addDeclaration(declBuilder)
}