From 527342d5d65f3ee52cdfb6dd6907890619034f6f Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 6 Apr 2018 21:02:38 +0300 Subject: [PATCH] honor selected dir if in Scratches; select file if in Project view --- .../ide/scratch/ScratchFileActions.java | 21 +++++++++++++++---- .../scratch/ScratchFileCreationHelper.java | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java index 01f1c3edfee8..ce45e901555a 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileActions.java @@ -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); } } diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java index aa75126127fd..d8a747cfca2e 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java @@ -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