use of com.facebook.buck.jvm.java.JvmLibraryArg in project buck by facebook.
the class IjModuleFactory method addAnnotationOutputIfNeeded.
@SuppressWarnings("unchecked")
private void addAnnotationOutputIfNeeded(IJFolderFactory folderFactory, TargetNode<?, ?> targetNode, ModuleBuildContext context) {
TargetNode<? extends JvmLibraryArg, ?> jvmLibraryTargetNode = (TargetNode<? extends JvmLibraryArg, ?>) targetNode;
Optional<Path> annotationOutput = moduleFactoryResolver.getAnnotationOutputPath(jvmLibraryTargetNode);
if (!annotationOutput.isPresent()) {
return;
}
Path annotationOutputPath = annotationOutput.get();
context.addGeneratedSourceCodeFolder(folderFactory.create(annotationOutputPath, false, ImmutableSortedSet.of(annotationOutputPath)));
}
use of com.facebook.buck.jvm.java.JvmLibraryArg in project buck by facebook.
the class IjProject method write.
/**
* Write the project to disk.
*
* @param runPostGenerationCleaner Whether or not the post-generation cleaner should be run.
* @return set of {@link BuildTarget}s which should be built in order for the project to index
* correctly.
* @throws IOException
*/
public ImmutableSet<BuildTarget> write(boolean runPostGenerationCleaner, boolean removeUnusedLibraries, boolean excludeArtifacts) throws IOException {
final ImmutableSet.Builder<BuildTarget> requiredBuildTargets = ImmutableSet.builder();
IjLibraryFactory libraryFactory = new DefaultIjLibraryFactory(new IjLibraryFactoryResolver() {
@Override
public Path getPath(SourcePath path) {
Optional<BuildRule> rule = ruleFinder.getRule(path);
if (rule.isPresent()) {
requiredBuildTargets.add(rule.get().getBuildTarget());
}
return projectFilesystem.getRootPath().relativize(sourcePathResolver.getAbsolutePath(path));
}
@Override
public Optional<SourcePath> getPathIfJavaLibrary(TargetNode<?, ?> targetNode) {
BuildRule rule = buildRuleResolver.getRule(targetNode.getBuildTarget());
if (!(rule instanceof JavaLibrary)) {
return Optional.empty();
}
if (rule instanceof AndroidPrebuiltAar) {
AndroidPrebuiltAar aarRule = (AndroidPrebuiltAar) rule;
return Optional.ofNullable(aarRule.getBinaryJar());
}
requiredBuildTargets.add(rule.getBuildTarget());
return Optional.ofNullable(rule.getSourcePathToOutput());
}
});
IjModuleFactoryResolver moduleFactoryResolver = new IjModuleFactoryResolver() {
@Override
public Optional<Path> getDummyRDotJavaPath(TargetNode<?, ?> targetNode) {
BuildTarget dummyRDotJavaTarget = AndroidLibraryGraphEnhancer.getDummyRDotJavaTarget(targetNode.getBuildTarget());
Optional<BuildRule> dummyRDotJavaRule = buildRuleResolver.getRuleOptional(dummyRDotJavaTarget);
if (dummyRDotJavaRule.isPresent()) {
requiredBuildTargets.add(dummyRDotJavaTarget);
return Optional.of(DummyRDotJava.getRDotJavaBinFolder(dummyRDotJavaTarget, projectFilesystem));
}
return Optional.empty();
}
@Override
public Path getAndroidManifestPath(TargetNode<AndroidBinaryDescription.Arg, ?> targetNode) {
return sourcePathResolver.getAbsolutePath(targetNode.getConstructorArg().manifest);
}
@Override
public Optional<Path> getLibraryAndroidManifestPath(TargetNode<AndroidLibraryDescription.Arg, ?> targetNode) {
Optional<SourcePath> manifestPath = targetNode.getConstructorArg().manifest;
Optional<Path> defaultAndroidManifestPath = intellijConfig.getAndroidManifest().map(Path::toAbsolutePath);
return manifestPath.map(sourcePathResolver::getAbsolutePath).map(Optional::of).orElse(defaultAndroidManifestPath);
}
@Override
public Optional<Path> getProguardConfigPath(TargetNode<AndroidBinaryDescription.Arg, ?> targetNode) {
return targetNode.getConstructorArg().proguardConfig.map(this::getRelativePathAndRecordRule);
}
@Override
public Optional<Path> getAndroidResourcePath(TargetNode<AndroidResourceDescription.Arg, ?> targetNode) {
return AndroidResourceDescription.getResDirectoryForProject(buildRuleResolver, targetNode).map(this::getRelativePathAndRecordRule);
}
@Override
public Optional<Path> getAssetsPath(TargetNode<AndroidResourceDescription.Arg, ?> targetNode) {
return AndroidResourceDescription.getAssetsDirectoryForProject(buildRuleResolver, targetNode).map(this::getRelativePathAndRecordRule);
}
@Override
public Optional<Path> getAnnotationOutputPath(TargetNode<? extends JvmLibraryArg, ?> targetNode) {
AnnotationProcessingParams annotationProcessingParams = targetNode.getConstructorArg().buildAnnotationProcessingParams(targetNode.getBuildTarget(), projectFilesystem, buildRuleResolver, ImmutableSet.of());
if (annotationProcessingParams == null || annotationProcessingParams.isEmpty()) {
return Optional.empty();
}
return Optional.ofNullable(annotationProcessingParams.getGeneratedSourceFolderName());
}
private Path getRelativePathAndRecordRule(SourcePath sourcePath) {
requiredBuildTargets.addAll(OptionalCompat.asSet(ruleFinder.getRule(sourcePath).map(BuildRule::getBuildTarget)));
return sourcePathResolver.getRelativePath(sourcePath);
}
};
IjModuleGraph moduleGraph = IjModuleGraph.from(projectConfig, targetGraphAndTargets.getTargetGraph(), libraryFactory, new IjModuleFactory(projectFilesystem, moduleFactoryResolver, projectConfig, excludeArtifacts), aggregationMode);
JavaPackageFinder parsingJavaPackageFinder = ParsingJavaPackageFinder.preparse(javaFileParser, projectFilesystem, IjProjectTemplateDataPreparer.createPackageLookupPathSet(moduleGraph), javaPackageFinder);
IjProjectWriter writer = new IjProjectWriter(new IjProjectTemplateDataPreparer(parsingJavaPackageFinder, moduleGraph, projectFilesystem), projectConfig, projectFilesystem, moduleGraph);
writer.write(runPostGenerationCleaner, removeUnusedLibraries);
return requiredBuildTargets.build();
}
use of com.facebook.buck.jvm.java.JvmLibraryArg in project buck by facebook.
the class IjModuleGraphTest method createModuleGraph.
public static IjModuleGraph createModuleGraph(ImmutableSet<TargetNode<?, ?>> targets, final ImmutableMap<TargetNode<?, ?>, SourcePath> javaLibraryPaths, final Function<? super TargetNode<?, ?>, Optional<Path>> rDotJavaClassPathResolver, AggregationMode aggregationMode) {
final SourcePathResolver sourcePathResolver = new SourcePathResolver(new SourcePathRuleFinder(new BuildRuleResolver(TargetGraph.EMPTY, new DefaultTargetNodeToBuildRuleTransformer())));
IjLibraryFactoryResolver sourceOnlyResolver = new IjLibraryFactoryResolver() {
@Override
public Path getPath(SourcePath path) {
return sourcePathResolver.getAbsolutePath(path);
}
@Override
public Optional<SourcePath> getPathIfJavaLibrary(TargetNode<?, ?> targetNode) {
return Optional.ofNullable(javaLibraryPaths.get(targetNode));
}
};
BuckConfig buckConfig = FakeBuckConfig.builder().build();
IjProjectConfig projectConfig = IjProjectBuckConfig.create(buckConfig);
IjModuleFactory moduleFactory = new IjModuleFactory(new FakeProjectFilesystem(), new IjModuleFactoryResolver() {
@Override
public Optional<Path> getDummyRDotJavaPath(TargetNode<?, ?> targetNode) {
return rDotJavaClassPathResolver.apply(targetNode);
}
@Override
public Path getAndroidManifestPath(TargetNode<AndroidBinaryDescription.Arg, ?> targetNode) {
return Paths.get("TestAndroidManifest.xml");
}
@Override
public Optional<Path> getLibraryAndroidManifestPath(TargetNode<AndroidLibraryDescription.Arg, ?> targetNode) {
return Optional.empty();
}
@Override
public Optional<Path> getProguardConfigPath(TargetNode<AndroidBinaryDescription.Arg, ?> targetNode) {
return Optional.empty();
}
@Override
public Optional<Path> getAndroidResourcePath(TargetNode<AndroidResourceDescription.Arg, ?> targetNode) {
return Optional.empty();
}
@Override
public Optional<Path> getAssetsPath(TargetNode<AndroidResourceDescription.Arg, ?> targetNode) {
return Optional.empty();
}
@Override
public Optional<Path> getAnnotationOutputPath(TargetNode<? extends JvmLibraryArg, ?> targetNode) {
return Optional.empty();
}
}, projectConfig, false);
IjLibraryFactory libraryFactory = new DefaultIjLibraryFactory(sourceOnlyResolver);
return IjModuleGraph.from(projectConfig, TargetGraphFactory.newInstance(targets), libraryFactory, moduleFactory, aggregationMode);
}
Aggregations