blob: b7b94dd8538d08b0c58060fa6109992f5d93353e [file]
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.gradle.compiler;
import com.google.gson.Gson;
import com.intellij.compiler.server.BuildProcessParametersProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.PathUtil;
import groovy.lang.GroovyObject;
import org.apache.tools.ant.taskdefs.Ant;
import org.gradle.internal.impldep.com.google.common.base.Optional;
import org.gradle.tooling.ProjectConnection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.gradle.settings.GradleSettings;
import org.slf4j.Logger;
import org.slf4j.impl.Log4jLoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* Adds Gradle build dependencies to the project build process' classpath.
*
* @author Vladislav.Soroka
*/
public class GradleBuildProcessParametersProvider extends BuildProcessParametersProvider {
@NotNull private final Project myProject;
private List<String> myGradleClasspath;
public GradleBuildProcessParametersProvider(@NotNull Project project) {
myProject = project;
}
@Override
@NotNull
public List<String> getClassPath() {
List<String> result = new ArrayList<>();
if (!GradleSettings.getInstance(myProject).getLinkedProjectsSettings().isEmpty()) {
addGradleClassPath(result);
addOtherClassPath(result);
}
return result;
}
private void addGradleClassPath(@NotNull final List<String> classpath) {
if (myGradleClasspath == null) {
myGradleClasspath = new ArrayList<>();
String gradleToolingApiJarPath = PathUtil.getJarPathForClass(ProjectConnection.class);
if (!StringUtil.isEmpty(gradleToolingApiJarPath)) {
myGradleClasspath.add(gradleToolingApiJarPath);
}
String gradleToolingApiImplDepJarPath = PathUtil.getJarPathForClass(Optional.class);
if (!StringUtil.isEmpty(gradleToolingApiImplDepJarPath)) {
myGradleClasspath.add(gradleToolingApiImplDepJarPath);
}
}
classpath.addAll(myGradleClasspath);
}
private static void addOtherClassPath(@NotNull final List<String> classpath) {
classpath.add(PathUtil.getJarPathForClass(Ant.class));
classpath.add(PathUtil.getJarPathForClass(GroovyObject.class));
classpath.add(PathUtil.getJarPathForClass(Gson.class));
classpath.add(PathUtil.getJarPathForClass(Logger.class));
classpath.add(PathUtil.getJarPathForClass(Log4jLoggerFactory.class));
}
}