// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.settings;
import com.intellij.openapi.externalSystem.model.settings.ExternalSystemExecutionSettings;
import com.twitter.intellij.pants.model.PantsExecutionOptions;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
public class PantsExecutionSettings extends ExternalSystemExecutionSettings implements PantsExecutionOptions {
private final boolean myLibsWithSourcesAndDocs;
private final boolean myUseIdeaProjectJdk;
private final boolean myEnableIncrementalImport;
private final List<String> myTargetSpecs;
private static final List<String> DEFAULT_TARGET_SPECS = Collections.emptyList();
private static final boolean DEFAULT_WITH_SOURCES_AND_DOCS = true;
private static final boolean DEFAULT_USE_IDEA_PROJECT_SDK = false;
private static final boolean DEFAULT_ENABLE_INCREMENTAL_IMPORT = false;
public static PantsExecutionSettings createDefault() {
return new PantsExecutionSettings(
DEFAULT_TARGET_SPECS,
DEFAULT_WITH_SOURCES_AND_DOCS,
DEFAULT_USE_IDEA_PROJECT_SDK,
DEFAULT_ENABLE_INCREMENTAL_IMPORT
);
}
/**
* @param targetSpecs targets explicitly listed from `pants idea-plugin` goal.
* @param libsWithSourcesAndDocs whether to import sources and docs when resolving for jars.
* @param useIdeaProjectJdk whether to explicitly use the JDK selected in project for Pants compile.
* @param enableIncrementalImport whether to incrementally import the project.
*/
public PantsExecutionSettings(
List<String> targetSpecs,
boolean libsWithSourcesAndDocs,
boolean useIdeaProjectJdk,
boolean enableIncrementalImport
) {
myTargetSpecs = targetSpecs;
myLibsWithSourcesAndDocs = libsWithSourcesAndDocs;
myUseIdeaProjectJdk = useIdeaProjectJdk;
myEnableIncrementalImport = enableIncrementalImport;
}
@NotNull
public List<String> getTargetSpecs() {
return myTargetSpecs;
}
public boolean isLibsWithSourcesAndDocs() {
return myLibsWithSourcesAndDocs;
}
public boolean isUseIdeaProjectJdk() {
return myUseIdeaProjectJdk;
}
public boolean isEnableIncrementalImport() {
return myEnableIncrementalImport;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
PantsExecutionSettings settings = (PantsExecutionSettings) o;
return Objects.equals(myUseIdeaProjectJdk, settings.myUseIdeaProjectJdk) &&
Objects.equals(myEnableIncrementalImport, settings.myEnableIncrementalImport) &&
Objects.equals(myLibsWithSourcesAndDocs, settings.myLibsWithSourcesAndDocs) &&
Objects.equals(myTargetSpecs, settings.myTargetSpecs);
}
@Override
public int hashCode() {
return Objects.hash(
myTargetSpecs,
myLibsWithSourcesAndDocs,
myUseIdeaProjectJdk,
myEnableIncrementalImport
);
}
}