From c44ce9c6bc1fc79fb23ef7a80c5eac18b45f6155 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Wed, 10 Feb 2016 19:36:14 +0300 Subject: [PATCH 1/2] Don't return mutable constant --- .../src/com/intellij/ui/components/JBLayeredPane.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java b/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java index 5a17cc46d44a..3690d94e8d50 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBLayeredPane.java @@ -23,12 +23,10 @@ import java.awt.*; */ public class JBLayeredPane extends JLayeredPane { - private static final Dimension EMPTY = new Dimension(0, 0); - @Override public Dimension getMinimumSize() { if (!isMinimumSizeSet()) - return EMPTY; + return new Dimension(0, 0); return super.getMinimumSize(); } } From f50327e52f37dc89ee60400a142a49bd2149b02a Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 10 Feb 2016 19:46:57 +0300 Subject: [PATCH 2/2] do not allow runnable code inside doc comment in debugger source checker --- .../debugger/impl/SourceCodeChecker.java | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java b/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java index 0d90e308075e..9054f2dff05d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java @@ -17,14 +17,16 @@ package com.intellij.debugger.impl; import com.intellij.codeInsight.hint.HintManager; import com.intellij.debugger.DebuggerBundle; +import com.intellij.debugger.NoDataException; import com.intellij.debugger.SourcePosition; -import com.intellij.debugger.engine.CompoundPositionManager; import com.intellij.debugger.engine.DebugProcessImpl; import com.intellij.debugger.engine.LambdaMethodFilter; +import com.intellij.debugger.engine.PositionManagerImpl; import com.intellij.debugger.engine.SuspendContextImpl; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.events.SuspendContextCommandImpl; import com.intellij.debugger.jdi.StackFrameProxyImpl; +import com.intellij.execution.filters.LineNumbersMapping; import com.intellij.lang.java.JavaLanguage; import com.intellij.navigation.NavigationItem; import com.intellij.notification.NotificationType; @@ -38,10 +40,9 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.registry.Registry; -import com.intellij.psi.PsiCompiledFile; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.*; +import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.ui.AppUIUtil; import com.intellij.util.ThreeState; import com.intellij.util.containers.ContainerUtil; @@ -125,6 +126,12 @@ public class SourceCodeChecker { PsiElement psiMethod = DebuggerUtilsEx.getContainingMethod(position); if (psiMethod != null) { TextRange range = psiMethod.getTextRange(); + if (psiMethod instanceof PsiDocCommentOwner) { + PsiDocComment comment = ((PsiDocCommentOwner)psiMethod).getDocComment(); + if (comment != null) { + range = new TextRange(comment.getTextRange().getEndOffset() + 1, range.getEndOffset()); + } + } int startLine = document.getLineNumber(range.getStartOffset()) + 1; int endLine = document.getLineNumber(range.getEndOffset()) + 1; res = getLinesStream(locations, psiFile).allMatch(line -> startLine <= line && line <= endLine); @@ -171,19 +178,35 @@ public class SourceCodeChecker { DebugProcessImpl process = debuggerContext.getDebugProcess(); @SuppressWarnings("ConstantConditions") VirtualMachine machine = process.getVirtualMachineProxy().getVirtualMachine(); - CompoundPositionManager positionManager = process.getPositionManager(); + PositionManagerImpl positionManager = new PositionManagerImpl(process); // only default position manager for now List types = machine.allClasses(); System.out.println("Checking " + types.size() + " classes"); + int i = 0; for (ReferenceType type : types) { + i++; try { for (Location loc : type.allLineLocations()) { SourcePosition position = - ApplicationManager.getApplication().runReadAction((Computable)() -> positionManager.getSourcePosition(loc)); - if (position == null || - (position.getFile() instanceof PsiCompiledFile && - DebuggerUtilsEx.bytecodeToSourceLine(position.getFile(), loc.lineNumber()) == -1)) { + ApplicationManager.getApplication().runReadAction((Computable)() -> { + try { + return positionManager.getSourcePosition(loc); + } + catch (NoDataException ignore) { + return null; + } + }); + if (position == null) { continue; } + if (position.getFile() instanceof PsiCompiledFile) { + VirtualFile file = position.getFile().getVirtualFile(); + if (file == null || file.getUserData(LineNumbersMapping.LINE_NUMBERS_MAPPING_KEY) == null) { + break; // no mapping - skip the whole file + } + if (DebuggerUtilsEx.bytecodeToSourceLine(position.getFile(), loc.lineNumber()) == -1) { + continue; + } + } if (check(loc, position, process.getProject()) == ThreeState.NO) { System.out.println("failed " + type); break;