From ff46945822eb06b5df7e9c2cee809ca39fcaaf26 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 4 Feb 2015 18:35:47 +0300 Subject: [PATCH] enabled quick evaluate and smart step into while debugging decompiled code --- .../debugger/actions/JavaSmartStepIntoHandler.java | 5 +++-- .../debugger/engine/JavaDebuggerEvaluator.java | 9 +++------ .../intellij/debugger/impl/DebuggerUtilsEx.java | 14 +++++++++++++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java b/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java index cbeca23dd6f3..020e8e498db2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 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. @@ -16,6 +16,7 @@ package com.intellij.debugger.actions; import com.intellij.debugger.SourcePosition; +import com.intellij.debugger.impl.DebuggerUtilsEx; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; @@ -67,7 +68,7 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { final int startOffset = doc.getLineStartOffset(line); final TextRange lineRange = new TextRange(startOffset, doc.getLineEndOffset(line)); final int offset = CharArrayUtil.shiftForward(doc.getCharsSequence(), startOffset, " \t"); - PsiElement element = file.findElementAt(offset); + PsiElement element = DebuggerUtilsEx.findElementAt(file, offset); if (element != null && !(element instanceof PsiCompiledElement)) { do { final PsiElement parent = element.getParent(); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java index 6649ff3516ac..f141ea18c630 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.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. @@ -21,6 +21,7 @@ import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.engine.evaluation.TextWithImports; import com.intellij.debugger.engine.evaluation.TextWithImportsImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; +import com.intellij.debugger.impl.DebuggerUtilsEx; import com.intellij.debugger.impl.EditorTextProvider; import com.intellij.debugger.ui.impl.watch.NodeManagerImpl; import com.intellij.debugger.ui.impl.watch.WatchItemDescriptor; @@ -103,11 +104,7 @@ public class JavaDebuggerEvaluator extends XDebuggerEvaluator { PsiDocumentManager.getInstance(project).commitAndRunReadAction(new Runnable() { @Override public void run() { - PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document); - if (psiFile == null) { - return; - } - PsiElement elementAtCursor = psiFile.findElementAt(offset); + PsiElement elementAtCursor = DebuggerUtilsEx.findElementAt(PsiDocumentManager.getInstance(project).getPsiFile(document), offset); if (elementAtCursor == null) { return; } diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java index 5600fe36632a..8404882c9e7d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerUtilsEx.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. @@ -668,4 +668,16 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils { return XSourcePositionImpl.createOpenFileDescriptor(project, this); } } + + /** + * Decompiler aware version + */ + @Nullable + public static PsiElement findElementAt(@Nullable PsiFile file, int offset) { + if (file instanceof PsiCompiledFile) { + file = ((PsiCompiledFile)file).getDecompiledPsiFile(); + } + if (file == null) return null; + return file.findElementAt(offset); + } }