From 1b93351cf68aaaecf18dce956cf69f91ffae2ed6 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 6 Nov 2014 20:22:12 +0100 Subject: [PATCH] IDEA-128713 (option to prevent file chooser from peeking inside non-user directories) --- bin/idea.properties | 9 ++++++++- .../OpenProjectFileChooserDescriptor.java | 17 +++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/bin/idea.properties b/bin/idea.properties index be34798ed34e..a9cd05389fd5 100644 --- a/bin/idea.properties +++ b/bin/idea.properties @@ -99,4 +99,11 @@ sun.java2d.pmoffscreen=false # Maximum size (kilobytes) IDEA will load for showing past file contents - # in Show Diff or when calculating Digest Diff #--------------------------------------------------------------------- -#idea.max.vcs.loaded.size.kb=20480 \ No newline at end of file +#idea.max.vcs.loaded.size.kb=20480 + +#--------------------------------------------------------------------- +# IDEA file chooser peeks inside directories to detect whether they contain a valid project +# (to mark such directories with a corresponding icon). +# Uncommenting the option prevents this behavior outside of user home directory. +#--------------------------------------------------------------------- +#idea.chooser.lookup.for.project.dirs=false diff --git a/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java b/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java index b462fcbc11ad..b5cecc222169 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/OpenProjectFileChooserDescriptor.java @@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.projectImport.ProjectOpenProcessor; +import com.intellij.util.SystemProperties; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -34,6 +35,7 @@ import javax.swing.*; */ public class OpenProjectFileChooserDescriptor extends FileChooserDescriptor { private static final Icon ourProjectIcon = IconLoader.getIcon(ApplicationInfoEx.getInstanceEx().getSmallIconUrl()); + private static final boolean ourCanInspectDirs = SystemProperties.getBooleanProperty("idea.chooser.lookup.for.project.dirs", true); public OpenProjectFileChooserDescriptor(boolean chooseFiles) { super(chooseFiles, true, chooseFiles, chooseFiles, false, false); @@ -64,15 +66,14 @@ public class OpenProjectFileChooserDescriptor extends FileChooserDescriptor { } private static boolean canInspectDirectory(VirtualFile file) { - if (file.getParent() == null) return false; - VirtualFile home = VfsUtil.getUserHomeDir(); - if (home == null) return false; // unnatural situation - VirtualFile homes = home.getParent(); - if (homes == null) return false; // another one - if (homes.equals(file.getParent()) || VfsUtilCore.isAncestor(file, homes, false)) return false; - - return true; + if (home == null || VfsUtilCore.isAncestor(file, home, false)) { + return false; + } + if (ourCanInspectDirs || VfsUtilCore.isAncestor(home, file, true)) { + return true; + } + return false; } private static Icon getImporterIcon(VirtualFile file) {