From ba75c66809ba92d2570f4db7b1363729f6d59a3e Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 2 Feb 2015 08:57:07 +0100 Subject: [PATCH] =?UTF-8?q?optimize=20MemberFilter:=20don't=20visit=20JSRe?= =?UTF-8?q?ferenceExpression=20twice,=20don't=20call=20multiResolve=20twic?= =?UTF-8?q?e=20support=20JSDefinitionExpression=20correctly=20=E2=80=94=20?= =?UTF-8?q?we=20don't=20need=20to=20resolve=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../debugger/JavaScriptDebugAware.java | 9 +++++++-- .../jetbrains/debugger/MemberFilterBase.java | 2 +- .../src/org/jetbrains/debugger/SourceInfo.java | 5 +++++ .../org/jetbrains/debugger/VariableView.java | 17 ++++++++++------- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/JavaScriptDebugAware.java b/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/JavaScriptDebugAware.java index c0cad703e30d..3e292d752451 100644 --- a/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/JavaScriptDebugAware.java +++ b/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/JavaScriptDebugAware.java @@ -47,12 +47,17 @@ public abstract class JavaScriptDebugAware { protected abstract ExpressionInfo getEvaluationInfo(@NotNull PsiElement elementAtOffset, @NotNull Document document, @NotNull ExpressionInfoFactory expressionInfoFactory); public static boolean isBreakpointAware(@NotNull FileType fileType) { + return getBreakpointAware(fileType) != null; + } + + @Nullable + public static JavaScriptDebugAware getBreakpointAware(@NotNull FileType fileType) { for (JavaScriptDebugAware debugAware : EP_NAME.getExtensions()) { if (debugAware.getBreakpointTypeClass() == null && fileType.equals(debugAware.getFileType())) { - return true; + return debugAware; } } - return false; + return null; } @Nullable diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilterBase.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilterBase.java index 8700e763acb4..414b169b4679 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilterBase.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/MemberFilterBase.java @@ -9,7 +9,7 @@ import java.util.Collections; public abstract class MemberFilterBase implements MemberFilter { @Override public boolean isMemberVisible(@NotNull Variable variable, boolean filterFunctions) { - return true; + return variable.isReadable(); } @NotNull diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/SourceInfo.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/SourceInfo.java index adf4e8ff0428..818e77048e78 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/SourceInfo.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/SourceInfo.java @@ -38,4 +38,9 @@ public class SourceInfo extends XSourcePositionWrapper { public Navigatable createNavigatable(@NotNull Project project) { return new OpenFileDescriptor(project, myPosition.getFile(), myPosition.getLine(), column); } + + @Override + public String toString() { + return myPosition.getFile() + ":" + myPosition.getLine() + (column == -1 ? "": (":" + getColumn())); + } } diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java index e044d36aed95..4617eee9a0d7 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/VariableView.java @@ -19,8 +19,8 @@ import com.intellij.xdebugger.frame.presentation.XStringValuePresentation; import com.intellij.xdebugger.frame.presentation.XValuePresentation; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.concurrency.AsyncFunction; import org.jetbrains.concurrency.ConsumerRunnable; +import org.jetbrains.concurrency.ObsolescentAsyncFunction; import org.jetbrains.concurrency.Promise; import org.jetbrains.debugger.values.*; @@ -322,7 +322,12 @@ public final class VariableView extends XNamedValue implements VariableContext { promises.add(computeNamedProperties(objectValue, node, !hasIndexedProperties && additionalProperties == null)); } else { - promises.add(additionalProperties.then(new AsyncFunction() { + promises.add(additionalProperties.then(new ObsolescentAsyncFunction() { + @Override + public boolean isObsolete() { + return node.isObsolete(); + } + @NotNull @Override public Promise fun(Void o) { @@ -333,12 +338,10 @@ public final class VariableView extends XNamedValue implements VariableContext { } if (hasIndexedProperties == hasNamedProperties || additionalProperties != null) { - Promise.all(promises).processed(new ConsumerRunnable() { + Promise.all(promises).processed(new ObsolescentConsumer(node) { @Override - public void run() { - if (!node.isObsolete()) { - node.addChildren(XValueChildrenList.EMPTY, true); - } + public void consume(Void aVoid) { + node.addChildren(XValueChildrenList.EMPTY, true); } }); }