// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md). // Licensed under the Apache License, Version 2.0 (see LICENSE). package com.twitter.intellij.pants.util; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import com.twitter.intellij.pants.service.project.model.LibraryInfo; import com.twitter.intellij.pants.service.project.model.ProjectInfo; import com.twitter.intellij.pants.service.project.model.TargetInfo; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.Arrays; import java.util.List; public class PantsScalaUtil { private static final String scalaLibrary = "scala-library"; private static final String scalaCompiler = "scala-compiler"; private static List<String> scalaLibsToAdd = Arrays.asList(scalaLibrary, scalaCompiler, "scala-reflect", "scala-actors"); public static List<String> getScalaLibNamesToAdd() { return scalaLibsToAdd; } public static boolean isScalaLib(final String libraryId) { return ContainerUtil.exists( scalaLibsToAdd, new Condition<String>() { @Override public boolean value(String libName) { return StringUtil.startsWith(libraryId, getFullScalaLibId(libName)); } } ); } public static boolean isScalaLibraryLib(final String libraryId) { return StringUtil.containsIgnoreCase(libraryId, getFullScalaLibId(scalaLibrary)); } private static String getFullScalaLibId(String libName) { return "org.scala-lang:" + libName; } public static boolean hasMissingScalaCompilerLibs(final ProjectInfo projectInfo) { return ContainerUtil.exists( projectInfo.getTargets().values(), new Condition<TargetInfo>() { @Override public boolean value(TargetInfo info) { for (String libraryId : info.getLibraries()) { final LibraryInfo libraryInfo = projectInfo.getLibraries().get(libraryId); final String libraryJarPath = libraryInfo != null ? libraryInfo.getDefault() : null; if (isScalaLib(libraryId) && libraryJarPath != null && !getScalaLibFile(libraryJarPath, scalaCompiler).exists()) { return true; } } return false; } } ); } @NotNull public static File getScalaLibFile(@NotNull String scalaLibraryJarPath, @NotNull String libName) { return new File(StringUtil.replace(scalaLibraryJarPath, scalaLibrary, libName)); } }