honor selected dir if in Scratches; select file if in Project view

This commit is contained in:
Gregory.Shrago
2018-04-06 21:09:43 +03:00
parent 3922b23629
commit 527342d5d6
2 changed files with 19 additions and 4 deletions
@@ -18,10 +18,12 @@ import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.ui.LayeredIcon;
import com.intellij.util.*;
import com.intellij.util.containers.ContainerUtil;
@@ -153,6 +155,7 @@ public class ScratchFileActions {
else {
context.text = StringUtil.notNullize(e.getData(PlatformDataKeys.PREDEFINED_TEXT));
}
context.ideView = e.getData(LangDataKeys.IDE_VIEW);
return context;
}
@@ -165,13 +168,23 @@ public class ScratchFileActions {
}
ScratchFileCreationHelper.EXTENSION.forLanguage(language).beforeCreate(project, context);
String fileName = PathUtil.makeFileName(ObjectUtils.notNull(context.filePrefix, "scratch") +
VirtualFile dir = context.ideView != null ? PsiUtilCore.getVirtualFile(ArrayUtil.getFirstElement(context.ideView.getDirectories())) : null;
RootType rootType = dir == null ? null : ScratchFileService.getInstance().getRootType(dir);
String relativePath = rootType != ScratchRootType.getInstance() ? "" :
FileUtil.getRelativePath(ScratchFileService.getInstance().getRootPath(rootType), dir.getPath(), '/');
String fileName = (StringUtil.isEmpty(relativePath) ? "" : relativePath + "/") +
PathUtil.makeFileName(ObjectUtils.notNull(context.filePrefix, "scratch") +
(context.fileCounter != null ? context.fileCounter.create() : ""),
context.fileExtension);
VirtualFile f = ScratchRootType.getInstance().createScratchFile(
VirtualFile file = ScratchRootType.getInstance().createScratchFile(
project, fileName, language, context.text, context.createOption);
if (f != null) {
new OpenFileDescriptor(project, f, context.caretOffset).navigate(true);
if (file == null) return;
new OpenFileDescriptor(project, file, context.caretOffset).navigate(true);
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if (context.ideView != null && psiFile != null) {
context.ideView.selectElement(psiFile);
}
}
@@ -3,6 +3,7 @@
*/
package com.intellij.ide.scratch;
import com.intellij.ide.IdeView;
import com.intellij.lang.Language;
import com.intellij.lang.LanguageExtension;
import com.intellij.openapi.actionSystem.DataContext;
@@ -46,6 +47,7 @@ public abstract class ScratchFileCreationHelper {
public String fileExtension;
public ScratchFileService.Option createOption = ScratchFileService.Option.create_new_always;
public IdeView ideView;
}
@Nullable