use of com.google.startupos.tools.build_file_generator.Protos.BuildFile in project startup-os by google.
the class BuildFileGenerator method generateBuildFiles.
/* Returns Map<String, BuildFile> where
String key is an absolute path to a folder where BUILD file should be created,
BuildFile is the proto message. */
Map<String, BuildFile> generateBuildFiles(List<String> buildFileGenerationBlacklist) throws IOException {
Map<String, BuildFile> result = new HashMap<>();
List<ProtoFile> wholeProjectProtoFiles = getWholeProjectProtoFiles();
List<ThirdPartyDep> thirdPartyDeps = getThirdPartyDeps().getThirdPartyDepList();
HttpArchiveDepsList httpArchiveDepsList = getHttpArchiveDepsList();
Map<String, String> internalProjectDeps = getInternalProjectJavaClassToTargetNameMap();
for (String packagePath : getPathsToCreateBuildFiles(buildFileGenerationBlacklist)) {
result.put(packagePath, generateBuildFile(packagePath, wholeProjectProtoFiles, thirdPartyDeps, httpArchiveDepsList, internalProjectDeps));
}
return result;
}
use of com.google.startupos.tools.build_file_generator.Protos.BuildFile in project startup-os by google.
the class BuildFileGenerator method generateBuildFile.
private BuildFile generateBuildFile(String packagePath, List<ProtoFile> wholeProjectProtoFiles, List<ThirdPartyDep> thirdPartyDeps, HttpArchiveDepsList httpArchiveDepsList, Map<String, String> internalProjectDeps) throws IOException {
BuildFile.Builder buildFile = BuildFile.newBuilder();
List<String> protoFilenames = getFilesByExtension(packagePath, ".proto");
List<ProtoFile> protoFiles = new ArrayList<>();
for (String protoFileName : protoFilenames) {
ProtoFile protoFile = protoFileAnalyzer.getProtoFile(fileUtils.joinPaths(packagePath, protoFileName));
protoFiles.add(protoFile);
ProtoLibrary protoLibrary = getProtoLibrary(protoFile);
buildFile.addProtoLibrary(protoLibrary);
buildFile.addJavaProtoLibrary(getJavaProtoLibrary(protoLibrary.getName()));
if (!protoFile.getServicesList().isEmpty()) {
buildFile.addJavaGrpcLibrary(getJavaGrpcLibrary(protoFile));
LoadExtensionStatement javaGrpcLibrary = getLoadExtensionStatement(JAVA_GRPC_LIBRARY_BZL_FILE_PATH, JAVA_GRPC_LIBRARY_SYMBOL);
if (!buildFile.getExtensionList().contains(javaGrpcLibrary)) {
buildFile.addExtension(javaGrpcLibrary);
}
}
}
List<String> javaClasses = getFilesByExtension(packagePath, ".java");
if (!javaClasses.isEmpty()) {
buildFile.addExtension(getLoadExtensionStatement(CHECKSTYLE_BZL_FILE_PATH, CHECKSTYLE_SYMBOL));
for (String javaClassName : javaClasses) {
JavaClass javaClass = javaClassAnalyzer.getJavaClass(fileUtils.joinPaths(packagePath, javaClassName));
String targetName;
if (javaClass.getHasMainMethod()) {
JavaBinary javaBinary = getJavaBinary(javaClass, thirdPartyDeps, httpArchiveDepsList, protoFiles, wholeProjectProtoFiles, internalProjectDeps);
targetName = javaBinary.getName();
buildFile.addJavaBinary(javaBinary);
} else if (javaClass.getIsTestClass()) {
JavaTest javaTest = getJavaTest(javaClass, packagePath, thirdPartyDeps, httpArchiveDepsList, protoFiles, wholeProjectProtoFiles, internalProjectDeps);
targetName = javaTest.getName();
buildFile.addJavaTest(javaTest);
} else {
JavaLibrary javaLibrary = getJavaLibrary(javaClass, thirdPartyDeps, httpArchiveDepsList, protoFiles, wholeProjectProtoFiles, internalProjectDeps);
targetName = javaLibrary.getName();
buildFile.addJavaLibrary(javaLibrary);
}
buildFile.addCheckstyleTest(getCheckstyleTest(targetName));
}
}
return buildFile.build();
}
use of com.google.startupos.tools.build_file_generator.Protos.BuildFile in project startup-os by google.
the class HttpArchiveDepsGenerator method getHttpArchiveDeps.
public HttpArchiveDepsList getHttpArchiveDeps(WorkspaceFile workspaceFile, List<String> httpArchiveNames) throws IOException {
HttpArchiveDepsList.Builder result = HttpArchiveDepsList.newBuilder();
for (String httpArchiveName : httpArchiveNames) {
WorkspaceFile.HttpArchive httpArchive = WorkspaceFile.HttpArchive.getDefaultInstance();
for (WorkspaceFile.HttpArchive currentHttpArchive : workspaceFile.getHttpArchiveList()) {
if (currentHttpArchive.getName().equals(httpArchiveName)) {
httpArchive = currentHttpArchive;
}
}
if (areCommitIdsTheSame(httpArchiveName, getCommitId(httpArchive.getStripPrefix()))) {
log.atInfo().log("Commit id in WORKSPACE file and commit id in \'%s\' file for \'%s\' http_archive " + "are the same. Nothing to update.", HTTP_ARCHIVE_DEPS_FILENAME, httpArchiveName);
continue;
}
if (httpArchive.getName().equals(httpArchiveName)) {
HttpArchiveDeps.Builder builder = HttpArchiveDeps.newBuilder();
String url = httpArchive.getUrls(0).split("/archive")[0] + ".git";
String repoName = url.substring(url.lastIndexOf('/') + 1).replace(".git", "");
GitRepo gitRepo = createRepo(url, repoName);
switchToCommit(gitRepo, httpArchive.getStripPrefix());
String absRepoPath = fileUtils.joinPaths(fileUtils.getCurrentWorkingDirectory(), BUILD_GENERATOR_TEMP_FOLDER, repoName);
ImmutableList<String> buildFilesAbsPaths = getBuildFilesAbsPaths(absRepoPath);
for (String path : buildFilesAbsPaths) {
BuildFile buildFile = buildFileParser.getBuildFile(path);
for (BuildFile.JavaLibrary javaLibrary : buildFile.getJavaLibraryList()) {
addDeps(absRepoPath, builder, path, javaLibrary.getSrcsList(), javaLibrary.getName());
}
for (BuildFile.JavaBinary javaBinary : buildFile.getJavaBinaryList()) {
addDeps(absRepoPath, builder, path, javaBinary.getSrcsList(), javaBinary.getName());
}
for (BuildFile.ProtoLibrary protoLibrary : buildFile.getProtoLibraryList()) {
String absProtoFilePath = path.replace("BUILD", protoLibrary.getSrcs(0));
for (BuildFile.JavaProtoLibrary javaProtoLibrary : buildFile.getJavaProtoLibraryList()) {
if (javaProtoLibrary.getDepsList().contains(":" + protoLibrary.getName())) {
ProtoFile protoFile = protoFileAnalyzer.getProtoFile(absProtoFilePath);
if ((!protoFile.getJavaPackage().isEmpty()) && (!protoFile.getJavaOuterClassname().isEmpty())) {
String fullJavaClassName = protoFile.getJavaPackage() + "." + protoFile.getJavaOuterClassname();
String target = path.replace(absRepoPath, "/").replace("/BUILD", ":") + javaProtoLibrary.getName();
builder.addHttpArchiveDep(HttpArchiveDep.newBuilder().setTarget(target).setJavaClass(fullJavaClassName).build());
}
}
}
}
}
builder.setName(getCommitId(httpArchive.getName())).setCommitId(getCommitId(httpArchive.getStripPrefix()));
result.addHttpArchiveDeps(builder.build());
fileUtils.clearDirectoryUnchecked(fileUtils.joinPaths(fileUtils.getCurrentWorkingDirectory(), BUILD_GENERATOR_TEMP_FOLDER));
} else {
log.atWarning().log("Can't find http_archive with name: %s", httpArchiveName);
}
}
fileUtils.deleteFileOrDirectoryIfExists(fileUtils.joinPaths(fileUtils.getCurrentWorkingDirectory(), BUILD_GENERATOR_TEMP_FOLDER));
return result.build();
}
use of com.google.startupos.tools.build_file_generator.Protos.BuildFile in project startup-os by google.
the class BuildFileGenerator method getInternalProjectJavaClassToTargetNameMap.
private Map<String, String> getInternalProjectJavaClassToTargetNameMap() {
Map<String, String> result = new HashMap<>();
for (String absPath : getPathsContainJavaAndProtoFiles()) {
final String relPackagePath = "/" + absPath.replace(fileUtils.getCurrentWorkingDirectory(), "");
final String absBuildFilePath = fileUtils.joinPaths(absPath, "BUILD");
if (fileUtils.fileExists(absBuildFilePath)) {
BuildFile buildFile = buildFileParser.getBuildFile(absBuildFilePath);
for (JavaLibrary javaLibrary : buildFile.getJavaLibraryList()) {
if (javaLibrary.getSrcsCount() > 0) {
String absClassPath = fileUtils.joinPaths(absPath, javaLibrary.getSrcs(0));
try {
JavaClass javaClass = javaClassAnalyzer.getJavaClass(absClassPath);
final String projectPackageSuffix = buildFileGeneratorUtils.getProjectPackageSuffix(projectName, javaClass.getPackage());
String targetName = relPackagePath + ":" + javaLibrary.getName();
for (String src : javaLibrary.getSrcsList()) {
String fullClassName = (relPackagePath.replace("//", "") + "." + src).replace("/", ".");
if (!projectPackageSuffix.isEmpty()) {
fullClassName = projectPackageSuffix + "." + fullClassName;
}
result.put(fullClassName.replaceAll(".java$", ""), targetName);
}
} catch (IOException e) {
throw new RuntimeException("Can't find java class by path: " + absClassPath, e);
}
}
}
}
}
return result;
}
Aggregations