diff options
author | 2015-11-18 18:05:04 +0000 | |
---|---|---|
committer | 2015-11-19 10:00:08 +0000 | |
commit | e4aa435e158c647cd1478216fd1c26d82e969421 (patch) | |
tree | 9f2a9248930422d5a264a5161c64c65b4ca53a1b /src | |
parent | 0371208ede2b0ddea61dc0bcb3dceb2c19f232ff (diff) |
Don't store repeated packageId in targets when serializing package
--
MOS_MIGRATED_REVID=108154410
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java | 38 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java | 6 |
2 files changed, 23 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java index 2a57d5e567..3b57f1d37e 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageDeserializer.java @@ -154,7 +154,7 @@ public class PackageDeserializer { InputFile inputFile; try { inputFile = context.packageBuilder.createInputFile( - deserializeLabel(sourceFile.getName()).getName(), EmptyLocation.INSTANCE); + sourceFile.getName(), EmptyLocation.INSTANCE); } catch (GeneratedLabelConflict e) { throw new PackageDeserializationException(e); } @@ -175,7 +175,7 @@ public class PackageDeserializer { try { context.packageBuilder.addPackageGroup( - deserializeLabel(packageGroupPb.getName()).getName(), + packageGroupPb.getName(), specifications, deserializeLabels(packageGroupPb.getIncludedPackageGroupList()), NullEventHandler.INSTANCE, // TODO(bazel-team): Handle errors properly @@ -185,8 +185,9 @@ public class PackageDeserializer { } } - private void deserializeRule(DeserializationContext context, Build.Rule rulePb) - throws PackageDeserializationException, InterruptedException { + private void deserializeRule( + PackageIdentifier packageId, DeserializationContext context, Build.Rule rulePb) + throws PackageDeserializationException, InterruptedException { Location ruleLocation = EmptyLocation.INSTANCE; RuleClass ruleClass = packageDeserializationEnvironment.getRuleClass(rulePb, ruleLocation); Map<String, ParsedAttributeValue> attributeValues = new HashMap<>(); @@ -205,8 +206,8 @@ public class PackageDeserializer { AttributeContainerWithoutLocation attributeContainer = new AttributeContainerWithoutLocation(ruleClass, hasher.hash().asBytes()); - Label ruleLabel = deserializeLabel(rulePb.getName()); try { + Label ruleLabel = LABEL_INTERNER.intern(Label.create(packageId, rulePb.getName())); Rule rule = createRuleWithParsedAttributeValues(ruleClass, ruleLabel, context.packageBuilder, ruleLocation, attributeValues, NullEventHandler.INSTANCE, attributeContainer); @@ -371,9 +372,9 @@ public class PackageDeserializer { * @throws IOException * @throws InterruptedException */ - private void deserializeInternal(Build.Package packagePb, StoredEventHandler eventHandler, - Package.Builder builder, CodedInputStream codedIn) - throws PackageDeserializationException, IOException, InterruptedException { + private void deserializeInternal(PackageIdentifier packageId, Build.Package packagePb, + StoredEventHandler eventHandler, Package.Builder builder, CodedInputStream codedIn) + throws PackageDeserializationException, IOException, InterruptedException { Path buildFile = packageDeserializationEnvironment.getPath(packagePb.getBuildFilePath()); Preconditions.checkNotNull(buildFile); DeserializationContext context = new DeserializationContext(builder); @@ -434,11 +435,12 @@ public class PackageDeserializer { builder.setWorkspaceName(packagePb.getWorkspaceName()); - deserializeTargets(codedIn, context); + deserializeTargets(packageId, codedIn, context); } - private void deserializeTargets(CodedInputStream codedIn, DeserializationContext context) - throws IOException, PackageDeserializationException, InterruptedException { + private void deserializeTargets( + PackageIdentifier packageId, CodedInputStream codedIn, DeserializationContext context) + throws IOException, PackageDeserializationException, InterruptedException { Build.TargetOrTerminator tot; while (!(tot = readTargetOrTerminator(codedIn)).getIsTerminator()) { Build.Target target = tot.getTarget(); @@ -450,7 +452,7 @@ public class PackageDeserializer { deserializePackageGroup(context, target.getPackageGroup()); break; case RULE: - deserializeRule(context, target.getRule()); + deserializeRule(packageId, context, target.getRule()); break; default: throw new IllegalStateException("Unexpected Target type: " + target.getType()); @@ -496,17 +498,17 @@ public class PackageDeserializer { // Read the initial Package message so we have the data to initialize the builder. We will read // the Targets in individually later. Build.Package packagePb = readPackageProto(codedIn); - Package.Builder builder; + PackageIdentifier packageId; try { - builder = new Package.Builder( - PackageIdentifier - .create(packagePb.getRepository(), new PathFragment(packagePb.getName())), - null); + packageId = PackageIdentifier.create( + packagePb.getRepository(), new PathFragment(packagePb.getName())); } catch (LabelSyntaxException e) { throw new PackageDeserializationException(e); } + + Package.Builder builder = new Package.Builder(packageId, null); StoredEventHandler eventHandler = new StoredEventHandler(); - deserializeInternal(packagePb, eventHandler, builder, codedIn); + deserializeInternal(packageId, packagePb, eventHandler, builder, codedIn); builder.addEvents(eventHandler.getEvents()); return builder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java b/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java index 899651277a..0432071203 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageSerializer.java @@ -425,7 +425,7 @@ public class PackageSerializer { private Build.Target serializeInputFile(InputFile inputFile) { Build.SourceFile.Builder builder = Build.SourceFile.newBuilder(); - builder.setName(inputFile.getLabel().toString()); + builder.setName(inputFile.getLabel().getName()); if (inputFile.isVisibilitySpecified()) { for (Label visibilityLabel : inputFile.getVisibility().getDeclaredLabels()) { builder.addVisibilityLabel(visibilityLabel.toString()); @@ -444,7 +444,7 @@ public class PackageSerializer { private Build.Target serializePackageGroup(PackageGroup packageGroup) { Build.PackageGroup.Builder builder = Build.PackageGroup.newBuilder(); - builder.setName(packageGroup.getLabel().toString()); + builder.setName(packageGroup.getLabel().getName()); for (PackageSpecification packageSpecification : packageGroup.getPackageSpecifications()) { builder.addContainedPackage(packageSpecification.toString()); @@ -462,7 +462,7 @@ public class PackageSerializer { private Build.Target serializeRule(Rule rule) { Build.Rule.Builder builder = Build.Rule.newBuilder(); - builder.setName(rule.getLabel().toString()); + builder.setName(rule.getLabel().getName()); builder.setRuleClass(rule.getRuleClass()); builder.setPublicByDefault(rule.getRuleClassObject().isPublicByDefault()); for (Attribute attribute : rule.getAttributes()) { |