diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/indentGuide/IndentGuideTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/indentGuide/IndentGuideTest.groovy index 88af209beebf..99b599866679 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/indentGuide/IndentGuideTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/indentGuide/IndentGuideTest.groovy @@ -21,8 +21,6 @@ import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl import com.intellij.util.ArrayUtilRt import org.jetbrains.annotations.NotNull -import static junit.framework.Assert.assertNotNull - /** * @author Denis Zhdanov * @since 2/7/13 4:01 PM @@ -53,21 +51,20 @@ class Test { ) } - void "test that inner comment indents do not exceed"() { - // IDEA-89471. + void "test no indent guides in commented regions"() { doTest( """\ class Test { void test() { | return; -//| | if (true) { -//| | | int i1 = 1; -//| | | int i2 = 2; -//| | | if (true) { -//| | | | int j1 = 1; -//| | | | int j2 = 2; -//| | | } -//| | } +//| if (true) { +//| int i1 = 1; +//| int i2 = 2; +//| if (true) { +//| int j1 = 1; +//| int j2 = 2; +//| } +//| } //| int k = 1; } } @@ -76,13 +73,12 @@ class Test { } void "test indent guide which starts on comment line"() { - // IDEA-62184 doTest( """\ class Test { void test(int i) { | switch (i) { - | // + | |// | | case 1: | | case 2: | } @@ -125,10 +121,10 @@ class Test { class Test { int test() { | return 1 /*{ - | | int test2() { - | | | int i1; - | | } - | | int i2; + | int test2() { + | int i1; + | } + | int i2; | }*/; } } @@ -136,6 +132,21 @@ class Test { ) } + void "test empty comment does not break indents"() { + doTest( +"""\ +class Test { + void m() { + | +//| + | + | int v; + } +} +""" + ) + } + private void doTest(@NotNull String text) { IndentGuideTestData testData = parse(text) myFixture.configureByText("${getTestName(false)}.java", testData.documentText) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IndentsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IndentsPass.java index d19f5895930f..e1c0abec6d22 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IndentsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IndentsPass.java @@ -21,7 +21,9 @@ package com.intellij.codeInsight.daemon.impl; import com.intellij.codeHighlighting.TextEditorHighlightingPass; import com.intellij.codeInsight.highlighting.BraceMatchingUtil; -import com.intellij.lang.*; +import com.intellij.lang.Language; +import com.intellij.lang.LanguageParserDefinitions; +import com.intellij.lang.ParserDefinition; import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.colors.EditorColorsScheme; @@ -43,22 +45,16 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import com.intellij.util.DocumentUtil; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.containers.IntStack; import com.intellij.util.text.CharArrayUtil; -import gnu.trove.TIntIntHashMap; import org.jetbrains.annotations.NotNull; import java.awt.*; import java.util.*; import java.util.List; -import java.util.concurrent.ConcurrentMap; public class IndentsPass extends TextEditorHighlightingPass implements DumbAware { - private static final ConcurrentMap COMMENT_PREFIXES = ContainerUtil.newConcurrentMap(); - private static final String NO_COMMENT_INFO_MARKER = "hopefully, noone uses this string as a comment prefix"; - private static final Key> INDENT_HIGHLIGHTERS_IN_EDITOR_KEY = Key.create("INDENT_HIGHLIGHTERS_IN_EDITOR_KEY"); private static final Key LAST_TIME_INDENTS_BUILT = Key.create("LAST_TIME_INDENTS_BUILT"); @@ -302,7 +298,6 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware IndentsCalculator calculator = new IndentsCalculator(); calculator.calculate(); int[] lineIndents = calculator.lineIndents; - TIntIntHashMap effectiveCommentColumns = calculator.indentAfterUncomment; List descriptors = new ArrayList(); @@ -312,33 +307,26 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware lines.push(0); indents.push(0); assert myDocument != null; - final CharSequence chars = myDocument.getCharsSequence(); for (int line = 1; line < lineIndents.length; line++) { ProgressManager.checkCanceled(); - int curIndent = lineIndents[line]; + int curIndent = Math.abs(lineIndents[line]); while (!indents.empty() && curIndent <= indents.peek()) { ProgressManager.checkCanceled(); final int level = indents.pop(); int startLine = lines.pop(); if (level > 0) { - boolean addDescriptor = effectiveCommentColumns.contains(startLine); // Indent started at comment - if (!addDescriptor) { - for (int i = startLine; i < line; i++) { - if (level != lineIndents[i] && level != effectiveCommentColumns.get(i)) { - addDescriptor = true; - break; - } + for (int i = startLine; i < line; i++) { + if (level != Math.abs(lineIndents[i])) { + descriptors.add(createDescriptor(level, startLine, line, lineIndents)); + break; } } - if (addDescriptor) { - descriptors.add(createDescriptor(level, startLine, line, chars)); - } } } int prevLine = line - 1; - int prevIndent = lineIndents[prevLine]; + int prevIndent = Math.abs(lineIndents[prevLine]); if (curIndent - prevIndent > 1) { lines.push(prevLine); @@ -351,79 +339,17 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware final int level = indents.pop(); int startLine = lines.pop(); if (level > 0) { - descriptors.add(createDescriptor(level, startLine, myDocument.getLineCount(), chars)); + descriptors.add(createDescriptor(level, startLine, myDocument.getLineCount(), lineIndents)); } } return descriptors; } - private IndentGuideDescriptor createDescriptor(int level, int startLine, int endLine, CharSequence chars) { - while (startLine > 0 && isBlankLine(startLine, chars)) startLine--; + private static IndentGuideDescriptor createDescriptor(int level, int startLine, int endLine, int[] lineIndents) { + while (startLine > 0 && lineIndents[startLine] < 0) startLine--; return new IndentGuideDescriptor(level, startLine, endLine); } - private boolean isBlankLine(int line, CharSequence chars) { - Document document = myDocument; - if (document == null) { - return true; - } - int startOffset = document.getLineStartOffset(line); - int endOffset = document.getLineEndOffset(line); - return CharArrayUtil.shiftForward(chars, startOffset, endOffset, " \t") >= myDocument.getLineEndOffset(line); - } - - /** - * We want to treat comments specially in a way to skip comment prefix on line indent calculation. - *

- * Example: - *

-   *   if (true) {
-   *     int i1;
-   * //    int i2;
-   *     int i3;
-   *   }
-   * 
- * We want to use 'int i2;' start offset as the third line indent (though it has non-white space comment prefix (//) - * at the first column. - *

- * This method tries to parse comment prefix for the language implied by the given comment type. It uses - * {@link #NO_COMMENT_INFO_MARKER} as an indicator that that information is unavailable - * - * @param commentType target comment type - * @return prefix of the comment denoted by the given type if any; - * {@link #NO_COMMENT_INFO_MARKER} otherwise - */ - @NotNull - private static String getCommentPrefix(@NotNull IElementType commentType) { - Commenter c = LanguageCommenters.INSTANCE.forLanguage(commentType.getLanguage()); - if (!(c instanceof CodeDocumentationAwareCommenter)) { - COMMENT_PREFIXES.put(commentType, NO_COMMENT_INFO_MARKER); - return NO_COMMENT_INFO_MARKER; - } - CodeDocumentationAwareCommenter commenter = (CodeDocumentationAwareCommenter)c; - - IElementType lineCommentType = commenter.getLineCommentTokenType(); - String lineCommentPrefix = commenter.getLineCommentPrefix(); - if (lineCommentType != null) { - COMMENT_PREFIXES.put(lineCommentType, lineCommentPrefix == null ? NO_COMMENT_INFO_MARKER : lineCommentPrefix); - } - - IElementType blockCommentType = commenter.getBlockCommentTokenType(); - String blockCommentPrefix = commenter.getBlockCommentPrefix(); - if (blockCommentType != null) { - COMMENT_PREFIXES.put(blockCommentType, blockCommentPrefix == null ? NO_COMMENT_INFO_MARKER : blockCommentPrefix); - } - - IElementType docCommentType = commenter.getDocumentationCommentTokenType(); - String docCommentPrefix = commenter.getDocumentationCommentPrefix(); - if (docCommentType != null) { - COMMENT_PREFIXES.put(docCommentType, docCommentPrefix == null ? NO_COMMENT_INFO_MARKER : docCommentPrefix); - } - - COMMENT_PREFIXES.putIfAbsent(commentType, NO_COMMENT_INFO_MARKER); - return COMMENT_PREFIXES.get(commentType); - } - @NotNull private static RangeHighlighter createHighlighter(MarkupModel mm, TextRange range) { final RangeHighlighter highlighter = @@ -441,22 +367,8 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware @NotNull public final Map myComments = ContainerUtilRt.newHashMap(); - /** - * We need to treat specially commented lines. Consider a situation like below: - *

-     *   void test() {
-     *     if (true) {
-     *       int i;
-     *  //     int j;
-     *     }
-     *   }
-     * 
- * We don't want to show indent guide after 'int i;' line because un-commented line below ('int j;') would have the same indent - * level. That's why we remember 'indents after un-comment' at this collection. - */ - @NotNull public final TIntIntHashMap/* line -> indent column after un-comment */ indentAfterUncomment = new TIntIntHashMap(); - - @NotNull public final int[] lineIndents; + @NotNull public final int[] lineIndents; // negative value means the line is empty (or contains a comment) and indent + // (denoted by absolute value) was deduced from enclosing non-empty lines @NotNull public final CharSequence myChars; IndentsCalculator() { @@ -469,26 +381,19 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware * Calculates line indents for the {@link #myDocument target document}. */ void calculate() { + assert myDocument != null; final FileType fileType = myFile.getFileType(); - int prevLineIndent = -1; for (int line = 0; line < lineIndents.length; line++) { ProgressManager.checkCanceled(); int lineStart = myDocument.getLineStartOffset(line); int lineEnd = myDocument.getLineEndOffset(line); final int nonWhitespaceOffset = CharArrayUtil.shiftForward(myChars, lineStart, lineEnd, " \t"); - if (nonWhitespaceOffset == lineEnd) { + if (nonWhitespaceOffset == lineEnd || isComment(nonWhitespaceOffset)) { // treating commented lines in the same way as empty lines lineIndents[line] = -1; // Blank line marker } else { - final int column = ((EditorImpl)myEditor).calcColumnNumber(nonWhitespaceOffset, line, true, myChars); - if (prevLineIndent > 0 && prevLineIndent > column) { - lineIndents[line] = calcIndent(line, nonWhitespaceOffset, lineEnd, column); - } - else { - lineIndents[line] = column; - } - prevLineIndent = lineIndents[line]; + lineIndents[line] = ((EditorImpl)myEditor).calcColumnNumber(nonWhitespaceOffset, line, true, myChars); } } @@ -520,7 +425,7 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware for (int blankLine = startLine; blankLine < line; blankLine++) { assert lineIndents[blankLine] == -1; - lineIndents[blankLine] = Math.min(topIndent, indent); + lineIndents[blankLine] = - Math.min(topIndent, indent); } //noinspection AssignmentToForLoopParameter @@ -529,18 +434,8 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware } } - /** - * Tries to calculate given line's indent column assuming that there might be a comment at the given indent offset - * (see {@link #getCommentPrefix(IElementType)}). - * - * @param line target line - * @param indentOffset start indent offset to use for the given line - * @param lineEndOffset given line's end offset - * @param fallbackColumn column to return if it's not possible to apply comment-specific indent calculation rules - * @return given line's indent column to use - */ - private int calcIndent(int line, int indentOffset, int lineEndOffset, int fallbackColumn) { - final HighlighterIterator it = myEditor.getHighlighter().createIterator(indentOffset); + private boolean isComment(int offset) { + final HighlighterIterator it = myEditor.getHighlighter().createIterator(offset); IElementType tokenType = it.getTokenType(); Language language = tokenType.getLanguage(); TokenSet comments = myComments.get(language); @@ -550,27 +445,13 @@ public class IndentsPass extends TextEditorHighlightingPass implements DumbAware comments = definition.getCommentTokens(); } if (comments == null) { - return fallbackColumn; + return false; } else { myComments.put(language, comments); } } - if (comments.contains(tokenType) && indentOffset == it.getStart()) { - String prefix = COMMENT_PREFIXES.get(tokenType); - if (prefix == null) { - prefix = getCommentPrefix(tokenType); - } - if (!NO_COMMENT_INFO_MARKER.equals(prefix)) { - final int indentInsideCommentOffset = CharArrayUtil.shiftForward(myChars, indentOffset + prefix.length(), lineEndOffset, " \t"); - if (indentInsideCommentOffset < lineEndOffset) { - int indent = myEditor.calcColumnNumber(indentInsideCommentOffset, line); - indentAfterUncomment.put(line, indent - prefix.length()); - return indent; - } - } - } - return fallbackColumn; + return comments.contains(tokenType); } } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsConfigurable.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsConfigurable.java index cdeee7a9df8b..6f772f8beb02 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsConfigurable.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsConfigurable.java @@ -39,6 +39,7 @@ public class IntentionSettingsConfigurable extends BaseConfigurable implements S } JPanel component = myPanel.getComponent(); component.setPreferredSize(new Dimension(800, 600)); + component.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); return component; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsTree.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsTree.java index 3d35b72eb028..a252ebd52690 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsTree.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionSettingsTree.java @@ -96,7 +96,7 @@ public abstract class IntentionSettingsTree { myFilter = new MyFilterComponent(); myComponent = new JPanel(new BorderLayout()); - JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTree, SideBorder.TOP | SideBorder.RIGHT); + JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTree); myNorthPanel = new JPanel(new BorderLayout()); myNorthPanel.add(myFilter, BorderLayout.CENTER); diff --git a/platform/lang-impl/src/com/intellij/execution/console/IdeConsoleRootType.java b/platform/lang-impl/src/com/intellij/execution/console/IdeConsoleRootType.java index 4e2cd9a5eeea..7fcbdcd47a1c 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/IdeConsoleRootType.java +++ b/platform/lang-impl/src/com/intellij/execution/console/IdeConsoleRootType.java @@ -16,11 +16,7 @@ package com.intellij.execution.console; import com.intellij.icons.AllIcons; -import com.intellij.lang.Language; import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; @@ -41,13 +37,6 @@ public class IdeConsoleRootType extends ConsoleRootType { return findByClass(IdeConsoleRootType.class); } - @Nullable - @Override - public Language substituteLanguage(@NotNull Project project, @NotNull VirtualFile file) { - FileType fileType = getFileType(file); - return fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null; - } - @Nullable @Override public Icon substituteIcon(@NotNull Project project, @NotNull VirtualFile file) { @@ -59,10 +48,4 @@ public class IdeConsoleRootType extends ConsoleRootType { RunIdeConsoleAction.configureConsole(file, source); } - @Nullable - private static FileType getFileType(@NotNull VirtualFile file) { - String extension = file.getExtension(); - if (extension == null) return null; - return FileTypeManager.getInstance().getFileTypeByExtension(extension); - } } diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/RootType.java b/platform/lang-impl/src/com/intellij/ide/scratch/RootType.java index 11d3de6668a5..123b7e0ca659 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/RootType.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/RootType.java @@ -19,10 +19,13 @@ import com.intellij.lang.Language; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.LanguageSubstitutors; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -80,7 +83,7 @@ public abstract class RootType { @Nullable public Language substituteLanguage(@NotNull Project project, @NotNull VirtualFile file) { - return null; + return substituteLanguageImpl(getOriginalLanguage(file), file, project); } @Nullable @@ -101,4 +104,23 @@ public abstract class RootType { public void fileOpened(@NotNull VirtualFile file, @NotNull FileEditorManager source) { } + + @Nullable + protected static Language substituteLanguageImpl(Language language, VirtualFile file, Project project) { + return language != null && language != ScratchFileType.INSTANCE.getLanguage() ? + LanguageSubstitutors.INSTANCE.substituteLanguage(language, file, project) : language; + } + + @Nullable + protected static FileType getOriginalFileType(@NotNull VirtualFile file) { + String extension = file.getExtension(); + if (extension == null) return null; + return FileTypeManager.getInstance().getFileTypeByExtension(extension); + } + + @Nullable + protected static Language getOriginalLanguage(@NotNull VirtualFile file) { + FileType fileType = getOriginalFileType(file); + return fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null; + } } diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java index 87015782f224..89ad8c39eea4 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchProjectViewPane.java @@ -126,7 +126,6 @@ public class ScratchProjectViewPane extends ProjectViewPane { @Nullable private static PsiDirectory getDirectory(@NotNull Project project, @NotNull RootType rootId) { - // todo project roots not supported String path = ScratchFileService.getInstance().getRootPath(rootId); VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByPath(path); return virtualFile == null ? null : PsiManager.getInstance(project).findDirectory(virtualFile); @@ -162,7 +161,9 @@ public class ScratchProjectViewPane extends ProjectViewPane { List list = ContainerUtil.newArrayList(); for (RootType rootId : RootType.getAllRootIds()) { if (rootId.isHidden()) continue; - list.add(new MyRootNode(getProject(), rootId)); + MyRootNode e = new MyRootNode(getProject(), rootId); + if (e.getDirectory() == null) continue; + list.add(e); } return list; } @@ -182,11 +183,15 @@ public class ScratchProjectViewPane extends ProjectViewPane { @Override public Collection getChildren() { RootType rootType = getValue(); - PsiDirectory directory = getDirectory(getProject(), rootType); + PsiDirectory directory = getDirectory(); if (directory == null) return Collections.emptyList(); return new MyPsiNode(getProject(), rootType, directory).getChildren(); } + PsiDirectory getDirectory() { + return ScratchProjectViewPane.getDirectory(getProject(), getValue()); + } + @Override protected void update(PresentationData presentation) { presentation.setIcon(PlatformIcons.DIRECTORY_CLOSED_ICON); diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchRootType.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchRootType.java index e128110c388b..742920fc0009 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchRootType.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchRootType.java @@ -17,10 +17,8 @@ package com.intellij.ide.scratch; import com.intellij.icons.AllIcons; import com.intellij.lang.Language; -import com.intellij.lang.PerFileMappings; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.LanguageSubstitutors; import com.intellij.ui.LayeredIcon; import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; @@ -44,10 +42,8 @@ public final class ScratchRootType extends RootType { @Override public Language substituteLanguage(@NotNull Project project, @NotNull VirtualFile file) { - PerFileMappings mapping = ScratchFileService.getInstance().getScratchesMapping(); - Language language = mapping.getMapping(file); - return language != null && language != ScratchFileType.INSTANCE.getLanguage() ? - LanguageSubstitutors.INSTANCE.substituteLanguage(language, file, project) : language; + Language language = ScratchFileService.getInstance().getScratchesMapping().getMapping(file); + return substituteLanguageImpl(language, file, project); } @Nullable diff --git a/platform/platform-api/src/com/intellij/openapi/options/Configurable.java b/platform/platform-api/src/com/intellij/openapi/options/Configurable.java index 333594fe4fa7..1b5bc77c428e 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/Configurable.java +++ b/platform/platform-api/src/com/intellij/openapi/options/Configurable.java @@ -87,11 +87,14 @@ public interface Configurable extends UnnamedConfigurable { * the configurable contains its own scrollable components. */ interface NoScroll { + // see ConfigurableCardPanel#create(Configurable) } /** * Forbids setting an empty border to the content of the configurable. + * Required when the configurable represents is a tabbed pane. */ interface NoMargin { + // see ConfigurableCardPanel#create(Configurable) } } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java index 232bc62c7b3b..af9250cf67e3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableCardPanel.java @@ -36,6 +36,16 @@ public class ConfigurableCardPanel extends CardLayoutPanel() { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/FakeVirtualFile.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/FakeVirtualFile.java index 5dc589fa7b66..efe08e06a6b5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/FakeVirtualFile.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/FakeVirtualFile.java @@ -38,6 +38,11 @@ public class FakeVirtualFile extends StubVirtualFile { return myParent; } + @Override + public boolean isDirectory() { + return false; + } + @NotNull @Override public String getPath() { diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index faf150fe4e2c..23ed9505bc0a 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -88,7 +88,7 @@ ide.windowSystem.showTooWindowButtonsSwitcher=true ide.help.fxbrowser=false -passwordSafe.masterPassword.ttl=60 +passwordSafe.masterPassword.ttl=360 passwordSafe.memorySafe.ttl=-1 ide.tree.yieldingUiUpdate=true diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index fa6acd5d09b4..9a3ad2110a51 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -1525,8 +1525,8 @@ public class StringUtil extends StringUtilRt { */ @NotNull @Contract(pure = true) - public static String formatFileSize(long size) { - return formatValue(size, null, + public static String formatFileSize(long fileSize) { + return formatValue(fileSize, null, new String[]{"B", "K", "M", "G", "T", "P", "E"}, new long[]{1000, 1000, 1000, 1000, 1000, 1000}); } diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index c9045d496a6e..0c80b543d838 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -15,6 +15,7 @@ */ package com.intellij.util.ui; +import com.intellij.openapi.util.SystemInfo; import com.intellij.ui.border.CustomLineBorder; import javax.swing.*; @@ -25,8 +26,7 @@ import java.awt.*; * @author Konstantin Bulenkov */ public class JBUI { - private static boolean IS_HIDPI = ("true".equals(System.getProperty("hidpi")) || getSystemDPI() >= 144) - && !("false".equals(System.getProperty("hidpi"))); + private static boolean IS_HIDPI = !SystemInfo.isMac && ("true".equals(System.getProperty("hidpi")) || "true".equals(System.getProperty("is.hidpi"))); private static int getSystemDPI() { try {