copy file: suggest to bind file type if unknown (IDEA-153379)

This commit is contained in:
Anna.Kozlova
2016-03-23 17:20:32 +01:00
parent 0d30474e77
commit d6cc35ac93
3 changed files with 17 additions and 4 deletions
@@ -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));
}
});
@@ -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();