diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileWithoutContent.java b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileWithoutContent.java new file mode 100644 index 000000000000..2651966568e4 --- /dev/null +++ b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileWithoutContent.java @@ -0,0 +1,22 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.vfs; + +/** + * @author Irina.Chernushina on 7/4/2016. + */ +public interface VirtualFileWithoutContent { +} diff --git a/platform/diff-impl/src/com/intellij/diff/actions/BaseShowDiffAction.java b/platform/diff-impl/src/com/intellij/diff/actions/BaseShowDiffAction.java index 4f3a3627bf78..e918a207063e 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/BaseShowDiffAction.java +++ b/platform/diff-impl/src/com/intellij/diff/actions/BaseShowDiffAction.java @@ -23,6 +23,8 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileWithoutContent; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,6 +50,10 @@ abstract class BaseShowDiffAction extends AnAction implements DumbAware { protected abstract boolean isAvailable(@NotNull AnActionEvent e); + protected static boolean hasContent(VirtualFile file) { + return ! (file instanceof VirtualFileWithoutContent); + } + @Nullable protected abstract DiffRequest getDiffRequest(@NotNull AnActionEvent e); } diff --git a/platform/diff-impl/src/com/intellij/diff/actions/CompareFileWithEditorAction.java b/platform/diff-impl/src/com/intellij/diff/actions/CompareFileWithEditorAction.java index bbaa285236a1..7f27f7ff45b4 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/CompareFileWithEditorAction.java +++ b/platform/diff-impl/src/com/intellij/diff/actions/CompareFileWithEditorAction.java @@ -72,7 +72,7 @@ public class CompareFileWithEditorAction extends BaseShowDiffAction { } private static boolean canCompare(@NotNull VirtualFile file1, @NotNull VirtualFile file2) { - return file1.isValid() && file2.isValid() && !file1.equals(file2); + return file1.isValid() && file2.isValid() && !file1.equals(file2) && hasContent(file1) && hasContent(file2); } @Nullable diff --git a/platform/diff-impl/src/com/intellij/diff/actions/CompareFilesAction.java b/platform/diff-impl/src/com/intellij/diff/actions/CompareFilesAction.java index 39f47ddda532..6ac2e1f4a63c 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/CompareFilesAction.java +++ b/platform/diff-impl/src/com/intellij/diff/actions/CompareFilesAction.java @@ -83,20 +83,16 @@ public class CompareFilesAction extends BaseShowDiffAction { } if (files.length == 1) { - return isValidAndLocal(files[0]); + return hasContent(files[0]); } else if (files.length == 2) { - return isValidAndLocal(files[0]) && isValidAndLocal(files[1]); + return hasContent(files[0]) && hasContent(files[1]); } else { return false; } } - private static boolean isValidAndLocal(VirtualFile file) { - return file.isValid() && file.isInLocalFileSystem(); - } - @Nullable @Override protected DiffRequest getDiffRequest(@NotNull AnActionEvent e) { diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java index bfc20426a5d0..26f83ecd2f76 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java @@ -22,8 +22,8 @@ import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileSystem; +import com.intellij.openapi.vfs.VirtualFileWithoutContent; import com.intellij.openapi.vfs.newvfs.RefreshQueue; -import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -36,7 +36,7 @@ import java.util.List; * @author Alexey */ @Presentation(icon = "AllIcons.Nodes.ResourceBundle") -public class ResourceBundleAsVirtualFile extends VirtualFile { +public class ResourceBundleAsVirtualFile extends VirtualFile implements VirtualFileWithoutContent { private final ResourceBundle myResourceBundle; public ResourceBundleAsVirtualFile(@NotNull final ResourceBundle resourceBundle) {