blob: b7d8fdd99095b36a66fe66da606a542ae51c5da1 [file] [log] [blame]
/*
* Copyright 2013-present Facebook, Inc.
*
* 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 com.facebook.buck.java;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.model.BuildTargets;
import com.facebook.buck.rules.AbiRule;
import com.facebook.buck.rules.BuildableContext;
import com.facebook.buck.rules.OnDiskBuildInfo;
import com.facebook.buck.rules.Sha1HashCode;
import com.facebook.buck.step.Step;
import com.facebook.buck.step.fs.MkdirStep;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.hash.HashCode;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
/**
* Common utilities for working with {@link JavaLibrary} objects.
*/
public class JavaLibraryRules {
/** Utility class: do not instantiate. */
private JavaLibraryRules() {}
static void addAccumulateClassNamesStep(JavaLibrary javaLibrary,
BuildableContext buildableContext,
ImmutableList.Builder<Step> steps) {
Path pathToClassHashes = JavaLibraryRules.getPathToClassHashes(
javaLibrary.getBuildTarget());
steps.add(new MkdirStep(pathToClassHashes.getParent()));
steps.add(new AccumulateClassNamesStep(
Optional.fromNullable(javaLibrary.getPathToOutputFile()),
pathToClassHashes));
buildableContext.recordArtifact(pathToClassHashes);
}
static JavaLibrary.Data initializeFromDisk(
BuildTarget buildTarget,
OnDiskBuildInfo onDiskBuildInfo) {
Optional<Sha1HashCode> abiKeyHash = onDiskBuildInfo.getHash(AbiRule.ABI_KEY_ON_DISK_METADATA);
if (!abiKeyHash.isPresent()) {
throw new IllegalStateException(String.format(
"Should not be initializing %s from disk if the ABI key is not written.",
buildTarget));
}
List<String> lines;
try {
lines = onDiskBuildInfo.getOutputFileContentsByLine(getPathToClassHashes(buildTarget));
} catch (IOException e) {
throw new RuntimeException(e);
}
ImmutableSortedMap<String, HashCode> classHashes = AccumulateClassNamesStep.parseClassHashes(
lines);
return new JavaLibrary.Data(abiKeyHash.get(), classHashes);
}
private static Path getPathToClassHashes(BuildTarget buildTarget) {
return BuildTargets.getGenPath(buildTarget, "%s.classes.txt");
}
}