mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
copy file: suggest to bind file type if unknown (IDEA-153379)
This commit is contained in:
@@ -34,7 +34,6 @@ import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -235,8 +234,7 @@ public class CreateFileAction extends CreateElementActionBase implements DumbAwa
|
||||
DumbService.allowStartingDumbModeInside(DumbModePermission.MAY_START_BACKGROUND, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final FileType type = FileTypeChooser.getKnownFileTypeOrAssociate(new FakeVirtualFile(psiDirectory.getVirtualFile(), getFileName(inputString)),
|
||||
project);
|
||||
final FileType type = FileTypeChooser.getKnownFileTypeOrAssociate(psiDirectory.getVirtualFile(), getFileName(inputString), project);
|
||||
result[0] = type != null && MyValidator.super.canClose(getFileName(inputString));
|
||||
}
|
||||
});
|
||||
|
||||
+8
-1
@@ -26,6 +26,7 @@ import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.ex.FileTypeChooser;
|
||||
import com.intellij.openapi.help.HelpManager;
|
||||
import com.intellij.openapi.keymap.KeymapUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -51,6 +52,7 @@ import com.intellij.util.PathUtilRt;
|
||||
import com.intellij.util.ui.FormBuilder;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
@@ -91,7 +93,7 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper {
|
||||
private PsiDirectory myTargetDirectory;
|
||||
private boolean myFileCopy = false;
|
||||
|
||||
public CopyFilesOrDirectoriesDialog(PsiElement[] elements, PsiDirectory defaultTargetDirectory, Project project, boolean doClone) {
|
||||
public CopyFilesOrDirectoriesDialog(PsiElement[] elements, @Nullable PsiDirectory defaultTargetDirectory, Project project, boolean doClone) {
|
||||
super(project, true);
|
||||
myElements = elements;
|
||||
myProject = project;
|
||||
@@ -122,6 +124,7 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper {
|
||||
myNewNameField.select(0, dotIdx);
|
||||
myNewNameField.putClientProperty(DialogWrapperPeer.HAVE_INITIAL_SELECTION, true);
|
||||
}
|
||||
myTargetDirectory = file.getContainingDirectory();
|
||||
myFileCopy = true;
|
||||
}
|
||||
else {
|
||||
@@ -265,6 +268,10 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper {
|
||||
Messages.showErrorDialog(myNewNameField, "Name is not a valid file name");
|
||||
return;
|
||||
}
|
||||
|
||||
if (myFileCopy && FileTypeChooser.getKnownFileTypeOrAssociate(myTargetDirectory.getVirtualFile(), newName, myProject) == null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
saveOpenInEditorState(myOpenFilesInEditor.isSelected());
|
||||
|
||||
@@ -149,6 +149,14 @@ public class FileTypeChooser extends DialogWrapper {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Speculates if file with newName would have known file type
|
||||
*/
|
||||
@Nullable
|
||||
public static FileType getKnownFileTypeOrAssociate(@NotNull VirtualFile parent, @NotNull String newName, @Nullable Project project) {
|
||||
return getKnownFileTypeOrAssociate(new FakeVirtualFile(parent, newName), project);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static FileType getKnownFileTypeOrAssociate(@NotNull String fileName) {
|
||||
FileTypeManager fileTypeManager = FileTypeManager.getInstance();
|
||||
|
||||
Reference in New Issue
Block a user