com.facebook.buck.ide.intellij.DefaultIjLibraryFactoryResolver.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.buck.ide.intellij.DefaultIjLibraryFactoryResolver.java

Source

/*
 * Copyright 2015-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.ide.intellij;

import com.facebook.buck.android.AndroidPrebuiltAar;
import com.facebook.buck.ide.intellij.model.IjLibraryFactoryResolver;
import com.facebook.buck.io.ProjectFilesystem;
import com.facebook.buck.jvm.java.JavaLibrary;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.rules.BuildRule;
import com.facebook.buck.rules.BuildRuleResolver;
import com.facebook.buck.rules.SourcePath;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.rules.SourcePathRuleFinder;
import com.facebook.buck.rules.TargetNode;
import com.google.common.collect.ImmutableSet;
import java.nio.file.Path;
import java.util.Optional;

class DefaultIjLibraryFactoryResolver implements IjLibraryFactoryResolver {
    private final ProjectFilesystem projectFilesystem;
    private final SourcePathResolver sourcePathResolver;
    private final BuildRuleResolver buildRuleResolver;
    private final SourcePathRuleFinder ruleFinder;
    private final ImmutableSet.Builder<BuildTarget> requiredBuildTargets;

    DefaultIjLibraryFactoryResolver(ProjectFilesystem projectFilesystem, SourcePathResolver sourcePathResolver,
            BuildRuleResolver buildRuleResolver, SourcePathRuleFinder ruleFinder,
            ImmutableSet.Builder<BuildTarget> requiredBuildTargets) {
        this.projectFilesystem = projectFilesystem;
        this.sourcePathResolver = sourcePathResolver;
        this.buildRuleResolver = buildRuleResolver;
        this.ruleFinder = ruleFinder;
        this.requiredBuildTargets = requiredBuildTargets;
    }

    @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());
    }
}