// 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.settings.ExternalProjectSettings; import com.intellij.util.containers.ContainerUtilRt; import com.twitter.intellij.pants.model.PantsCompileOptions; import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Objects; public class PantsProjectSettings extends ExternalProjectSettings implements PantsCompileOptions { private List<String> myTargetSpecs = ContainerUtilRt.newArrayList(); private boolean myLibsWithSources; private boolean myEnableIncrementalImport; private boolean myUseIdeaProjectJdk; /** * @param targetSpecs targets explicted listed from `pants idea-plugin` goal. * @param externalProjectPath path to the Pants project. * @param libsWithSources whether to import sources and docs when resolving for jars. * @param isEnableIncrementalImport whether to enabled incremental import. * @param isUseIdeaProjectJdk whether use IDEA project JDK to compile Pants project. */ public PantsProjectSettings( List<String> targetSpecs, String externalProjectPath, boolean libsWithSources, boolean isEnableIncrementalImport, boolean isUseIdeaProjectJdk ) { setExternalProjectPath(externalProjectPath); myTargetSpecs = targetSpecs; myLibsWithSources = libsWithSources; myEnableIncrementalImport = isEnableIncrementalImport; myUseIdeaProjectJdk = isUseIdeaProjectJdk; } public PantsProjectSettings() { } @Override public boolean equals(Object obj) { if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } PantsProjectSettings other = (PantsProjectSettings) obj; return Objects.equals(myLibsWithSources, other.myLibsWithSources) && Objects.equals(myEnableIncrementalImport, other.myEnableIncrementalImport) && Objects.equals(myTargetSpecs, other.myTargetSpecs) && Objects.equals(myUseIdeaProjectJdk, other.myUseIdeaProjectJdk); } @NotNull @Override public PantsProjectSettings clone() { final PantsProjectSettings pantsProjectSettings = new PantsProjectSettings(); copyTo(pantsProjectSettings); return pantsProjectSettings; } @Override protected void copyTo(@NotNull ExternalProjectSettings receiver) { super.copyTo(receiver); if (receiver instanceof PantsProjectSettings) { ((PantsProjectSettings) receiver).setLibsWithSources(isLibsWithSources()); ((PantsProjectSettings) receiver).setTargetSpecs(getTargetSpecs()); ((PantsProjectSettings) receiver).setEnableIncrementalImport(isEnableIncrementalImport()); ((PantsProjectSettings) receiver).setUseIdeaProjectJdk(isUseIdeaProjectJdk()); } } /** * Get the target specs used to launched `pants idea-plugin`. */ @NotNull public List<String> getTargetSpecs() { return myTargetSpecs; } public void setTargetSpecs(List<String> targetSpecs) { myTargetSpecs = targetSpecs; } public boolean isLibsWithSources() { return myLibsWithSources; } public void setLibsWithSources(boolean libsWithSources) { myLibsWithSources = libsWithSources; } public boolean isEnableIncrementalImport() { return myEnableIncrementalImport; } public void setEnableIncrementalImport(boolean enableIncrementalImport) { myEnableIncrementalImport = enableIncrementalImport; } public boolean isUseIdeaProjectJdk() { return myUseIdeaProjectJdk; } public void setUseIdeaProjectJdk(boolean useIdeaProjectJdk) { myUseIdeaProjectJdk = useIdeaProjectJdk; } }