diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java index 7ea88795fee8..576251768e26 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerContextImpl.java @@ -101,7 +101,8 @@ public final class DebuggerContextImpl implements DebuggerContext { public PsiElement getContextElement() { LOG.assertTrue(myInitialized); - if(myContextElement != null && !myContextElement.isValid()) { + PsiElement contextElement = myContextElement; + if(contextElement != null && !contextElement.isValid()) { myContextElement = ContextUtil.getContextElement(mySourcePosition); } return myContextElement; diff --git a/java/debugger/openapi/src/com/intellij/debugger/SourcePosition.java b/java/debugger/openapi/src/com/intellij/debugger/SourcePosition.java index d400ad21cdff..287ca5acea26 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/SourcePosition.java +++ b/java/debugger/openapi/src/com/intellij/debugger/SourcePosition.java @@ -107,7 +107,7 @@ public abstract class SourcePosition implements Navigatable{ } private void updateData() { - if(myModificationStamp != myFile.getModificationStamp()) { + if(dataUpdateNeeded()) { myModificationStamp = myFile.getModificationStamp(); myLine = null; myOffset = null; @@ -115,6 +115,17 @@ public abstract class SourcePosition implements Navigatable{ } } + private boolean dataUpdateNeeded() { + if (myModificationStamp != myFile.getModificationStamp()) { + return true; + } + final PsiElement psiElement = myPsiElement; + if (psiElement != null && !psiElement.isValid()) { + return true; + } + return false; + } + public int getLine() { updateData(); if (myLine == null) {