// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.projectview;
import com.intellij.ide.SelectInContext;
import com.intellij.ide.SelectInManager;
import com.intellij.ide.StandardTargetWeights;
import com.intellij.ide.impl.ProjectViewSelectInTarget;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFileSystemItem;
import com.twitter.intellij.pants.util.PantsUtil;
import java.util.Optional;
public class PantsProjectPaneSelectInTarget extends ProjectViewSelectInTarget {
protected PantsProjectPaneSelectInTarget(Project project) {
super(project);
}
@Override
public String getMinorViewId() {
return ProjectFilesViewPane.ID;
}
@Override
public float getWeight() {
return StandardTargetWeights.PROJECT_WEIGHT;
}
@Override
protected boolean canWorkWithCustomObjects() {
return false;
}
@Override
public boolean canSelect(PsiFileSystemItem file) {
if (!super.canSelect(file)) return false;
final VirtualFile vFile = file.getVirtualFile();
return canSelect(vFile);
}
@Override
public boolean isSubIdSelectable(String subId, SelectInContext context) {
return canSelect(context);
}
private boolean canSelect(final VirtualFile vFile) {
if (vFile != null && vFile.isValid()) {
ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
if (projectFileIndex.isInLibraryClasses(vFile) || projectFileIndex.isInLibrarySource(vFile)) {
return true;
}
final Optional<VirtualFile> buildRoot = PantsUtil.findBuildRoot(myProject.getBaseDir());
return buildRoot.isPresent() && VfsUtil.isAncestor(buildRoot.get(), vFile, false);
}
return false;
}
public String toString() {
return SelectInManager.PROJECT;
}
}