(no message)

This commit is contained in:
Eugene Vigdorchik
2005-02-07 16:56:05 +03:00
parent 9da80232ab
commit 3901fa4ea2
6 changed files with 72 additions and 41 deletions
@@ -194,10 +194,7 @@ public class CopyPasteManagerEx extends CopyPasteManager implements ClipboardOwn
return;
}
for (int i = 0; i < elements.length; i++) {
PsiElement element = elements[i];
if (!element.isWritable()) {
if (RefactoringMessageUtil.checkReadOnlyStatus(myProject, element)) return;
}
if (RefactoringMessageUtil.checkReadOnlyStatusRecursively(myProject, elements[i])) return;
}
((CopyPasteManagerEx)CopyPasteManager.getInstance()).setElements(elements, false);
updateView();
@@ -83,10 +83,7 @@ public class DeleteHandler {
DeleteDialog dialog = new DeleteDialog(project, elements, new DeleteDialog.Callback() {
public void run(final DeleteDialog dialog) {
for (int i = 0; i < elements.length; i++) {
PsiElement element = elements[i];
if (!element.isWritable()) {
if (!RefactoringMessageUtil.checkReadOnlyStatus(project, element)) return;
}
if (!RefactoringMessageUtil.checkReadOnlyStatusRecursively(project, elements[i])) return;
}
SafeDeleteProcessor.createInstance(project, new Runnable() {
public void run() {
@@ -144,7 +141,7 @@ public class DeleteHandler {
VirtualFile virtualFile = ((PsiDirectory)elementToDelete).getVirtualFile();
if (virtualFile.getFileSystem() instanceof LocalFileSystem) {
ArrayList readOnlyFiles = new ArrayList();
ArrayList<VirtualFile> readOnlyFiles = new ArrayList<VirtualFile>();
getReadOnlyVirtualFiles(virtualFile, readOnlyFiles);
if (readOnlyFiles.size() > 0) {
@@ -158,7 +155,7 @@ public class DeleteHandler {
boolean success = true;
for (int j = 0; j < readOnlyFiles.size(); j++) {
VirtualFile file = (VirtualFile)readOnlyFiles.get(j);
VirtualFile file = readOnlyFiles.get(j);
success = clearReadOnlyFlag(file, project);
if (!success) break;
}
@@ -243,7 +240,7 @@ public class DeleteHandler {
/**
* Fills readOnlyFiles with VirtualFiles
*/
private static void getReadOnlyVirtualFiles(VirtualFile file, ArrayList readOnlyFiles) {
private static void getReadOnlyVirtualFiles(VirtualFile file, ArrayList<VirtualFile> readOnlyFiles) {
if (!file.isWritable()) {
readOnlyFiles.add(file);
}
+8 -8
View File
@@ -36,7 +36,7 @@ public class DeleteUtil {
}
}
ArrayList filteredElements = new ArrayList();
ArrayList<PsiElement> filteredElements = new ArrayList<PsiElement>();
for (int i = 0; i < elements.length; i++) {
PsiElement element = elements[i];
filteredElements.add(element);
@@ -45,10 +45,10 @@ public class DeleteUtil {
int previousSize;
do {
previousSize = filteredElements.size();
outer: for (Iterator iterator1 = filteredElements.iterator(); iterator1.hasNext();) {
PsiElement element1 = (PsiElement)iterator1.next();
for (Iterator iterator2 = filteredElements.iterator(); iterator2.hasNext();) {
PsiElement element2 = (PsiElement)iterator2.next();
outer: for (Iterator<PsiElement> iterator1 = filteredElements.iterator(); iterator1.hasNext();) {
PsiElement element1 = iterator1.next();
for (Iterator<PsiElement> iterator2 = filteredElements.iterator(); iterator2.hasNext();) {
PsiElement element2 = iterator2.next();
if (element1 == element2) continue;
if (PsiTreeUtil.isAncestor(element1, element2, false)) {
if (LOG.isDebugEnabled()) {
@@ -62,13 +62,13 @@ public class DeleteUtil {
} while (filteredElements.size() != previousSize);
if (LOG.isDebugEnabled()) {
for (Iterator iterator = filteredElements.iterator(); iterator.hasNext();) {
PsiElement element = (PsiElement)iterator.next();
for (Iterator<PsiElement> iterator = filteredElements.iterator(); iterator.hasNext();) {
PsiElement element = iterator.next();
LOG.debug("filtered element = "+element);
}
}
return (PsiElement[])filteredElements.toArray(new PsiElement[filteredElements.size()]);
return filteredElements.toArray(new PsiElement[filteredElements.size()]);
}
public static String generateWarningMessage(String actionName, final PsiElement[] elements) {
@@ -47,9 +47,7 @@ public class MoveFilesOrDirectoriesUtil {
if (element instanceof PsiDirectory) {
PsiPackage aPackage = ((PsiDirectory)element).getPackage();
LOG.assertTrue(aPackage == null);
if (!element.isWritable()) {
if (!RefactoringMessageUtil.checkReadOnlyStatus(project, element)) return;
}
if (!RefactoringMessageUtil.checkReadOnlyStatusRecursively(project, element)) return;
}
else if (element instanceof PsiFile) {
PsiFile aFile = (PsiFile)element;
@@ -68,9 +68,7 @@ public class SafeDeleteHandler implements RefactoringActionHandler {
for (int i = 0; i < elementsToDelete.length; i++) {
PsiElement psiElement = elementsToDelete[i];
if (!psiElement.isWritable()) {
if (!RefactoringMessageUtil.checkReadOnlyStatus(project, psiElement)) return;
}
if (!RefactoringMessageUtil.checkReadOnlyStatusRecursively(project, psiElement)) return;
}
SafeDeleteDialog dialog = new SafeDeleteDialog(project, elementsToDelete, new SafeDeleteDialog.Callback() {
@@ -28,9 +28,19 @@ public class RefactoringMessageUtil {
return checkReadOnlyStatus(element, project, "Refactoring cannot be performed");
}
public static boolean checkReadOnlyStatus(PsiElement element,
Project project,
final String messagePrefix) {
public static boolean checkReadOnlyStatus(PsiElement element, Project project, String messagePrefix) {
return checkReadOnlyStatus(element, project, messagePrefix, false);
}
public static boolean checkReadOnlyStatusRecursively (Project project, PsiElement element) {
return checkReadOnlyStatus(element, project, "Refactoring cannot be performed", true);
}
private static boolean checkReadOnlyStatus(PsiElement element,
Project project,
final String messagePrefix,
boolean recursively
) {
if (element instanceof PsiDirectory) {
PsiDirectory dir = (PsiDirectory)element;
final VirtualFile vFile = dir.getVirtualFile();
@@ -40,10 +50,18 @@ public class RefactoringMessageUtil {
return false;
}
else {
final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(new VirtualFile[]{vFile});
if (status.hasReadonlyFiles()) {
String message1 = messagePrefix + ".\n Directory " + vFile.getPresentableUrl() + " is read-only.";
showErrorMessage("Read-only Directory", message1, null, project);
VirtualFile[] vFiles;
if (recursively) {
List<VirtualFile> list = new ArrayList<VirtualFile>();
addVirtualFiles(vFile, list);
vFiles = list.toArray(new VirtualFile[list.size()]);
} else vFiles = new VirtualFile[]{vFile};
final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(vFiles);
final VirtualFile[] readonlyFiles = status.getReadonlyFiles();
if (readonlyFiles.length > 0) {
String subj = readonlyFiles[0].isDirectory() ? "Directory" : "File";
String message1 = messagePrefix + ".\n " + subj + " " + readonlyFiles[0].getPresentableUrl() + " is read-only.";
showErrorMessage("Read-only " + subj, message1, null, project);
return false;
}
return true;
@@ -51,20 +69,31 @@ public class RefactoringMessageUtil {
}
else if (element instanceof PsiPackage) {
final PsiDirectory[] directories = ((PsiPackage) element).getDirectories();
final List<VirtualFile> readOnlyDirs = new ArrayList<VirtualFile>();
final List<VirtualFile> readonlyList = new ArrayList<VirtualFile>();
final List<VirtualFile> failedDirs = new ArrayList<VirtualFile>();
for (int i = 0; i < directories.length; i++) {
PsiDirectory directory = directories[i];
if (!directory.isWritable()) {
final VirtualFile virtualFile = directory.getVirtualFile();
VirtualFile virtualFile = directory.getVirtualFile();
if (recursively) {
if (virtualFile.getFileSystem() instanceof JarFileSystem) {
failedDirs.add(virtualFile);
} else {
readOnlyDirs.add(virtualFile);
}
else {
addVirtualFiles(virtualFile, readonlyList);
}
}
else {
if (!directory.isWritable()) {
if (virtualFile.getFileSystem() instanceof JarFileSystem) {
failedDirs.add(virtualFile);
}
else {
readonlyList.add(virtualFile);
}
}
}
}
final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(readOnlyDirs.toArray(new VirtualFile[readOnlyDirs.size()]));
final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(readonlyList.toArray(new VirtualFile[readonlyList.size()]));
failedDirs.addAll(Arrays.asList(status.getReadonlyFiles()));
if (failedDirs.size() > 0) {
StringBuffer message = new StringBuffer(messagePrefix);
@@ -72,12 +101,12 @@ public class RefactoringMessageUtil {
for (Iterator<VirtualFile> iterator = failedDirs.iterator(); iterator.hasNext();) {
VirtualFile virtualFile = iterator.next();
final String presentableUrl = virtualFile.getPresentableUrl();
final String subj = virtualFile.isDirectory() ? "Directory " : "File ";
if (virtualFile.getFileSystem() instanceof JarFileSystem) {
message.append("Directory " + presentableUrl + " is located in a jar file.\n");
message.append(subj + presentableUrl + " is located in a jar file.\n");
}
else {
message.append("Directory " + presentableUrl + " is read-only.\n");
readOnlyDirs.add(virtualFile);
message.append(subj + presentableUrl + " is read-only.\n");
}
}
return false;
@@ -123,6 +152,18 @@ public class RefactoringMessageUtil {
}
}
private static void addVirtualFiles(final VirtualFile vFile, final List<VirtualFile> list) {
if (!vFile.isWritable()) {
list.add(vFile);
}
final VirtualFile[] children = vFile.getChildren();
if (children != null) {
for (int i = 0; i < children.length; i++) {
addVirtualFiles(children[i], list);
}
}
}
public static String getIncorrectIdentifierMessage(String identifierName) {
return "'" + identifierName + "' is not a legal java identifier";
}