// Copyright 2016 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.execution;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.twitter.intellij.pants.util.PantsUtil;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Optional;
public class PantsConfigurationContext {
private final Module module;
private final VirtualFile buildRoot;
private final List<String> targets;
private final PsiElement psiLocation;
private PantsConfigurationContext(
@NotNull Module myModule,
@NotNull VirtualFile myBuildRoot,
@NotNull List<String> myTargets,
@NotNull PsiElement myPsiLocation
) {
module = myModule;
buildRoot = myBuildRoot;
targets = myTargets;
psiLocation = myPsiLocation;
}
public static Optional<PantsConfigurationContext> validatesAndCreate(ConfigurationContext context) {
final Module module = context.getModule();
if (module == null) return Optional.empty();
final Optional<VirtualFile> buildRoot = PantsUtil.findBuildRoot(module);
if (!buildRoot.isPresent()) return Optional.empty();
final List<String> targets = PantsUtil.getNonGenTargetAddresses(module);
if (targets.isEmpty()) return Optional.empty();
final PsiElement psiLocation = context.getPsiLocation();
if (psiLocation == null) return Optional.empty();
return Optional.of(new PantsConfigurationContext(module, buildRoot.get(), targets, psiLocation));
}
public Module getModule() {
return module;
}
public VirtualFile getBuildRoot() {
return buildRoot;
}
public List<String> getTargets() {
return targets;
}
public PsiElement getLocation() {
return psiLocation;
}
}