EA-69221 - IAE: SourcePosition$SourcePositionCache.<init>
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Wed, 10 Jun 2015 13:21:46 +0000 (16:21 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Wed, 10 Jun 2015 13:24:22 +0000 (16:24 +0300)
java/debugger/impl/src/com/intellij/debugger/engine/DefaultSourcePositionProvider.java
java/debugger/openapi/src/com/intellij/debugger/SourcePosition.java

index 41e436ba6c8ed6ac00de89214007e7a9b2784643..f75b1a27418a8500bae9caa690e7231ada6a5152 100644 (file)
@@ -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.
@@ -87,7 +87,7 @@ public class DefaultSourcePositionProvider extends SourcePositionProvider {
       if (nearest) {
         return DebuggerContextUtil.findNearest(context, psiVariable, aClass.getContainingFile());
       }
-      return SourcePosition.createFromOffset(psiVariable.getContainingFile(), psiVariable.getTextOffset());
+      return SourcePosition.createFromElement(psiVariable);
     }
     else {
       final DebuggerSession session = context.getDebuggerSession();
@@ -115,13 +115,11 @@ public class DefaultSourcePositionProvider extends SourcePositionProvider {
 
       if (aClass != null) {
         PsiField field = aClass.findFieldByName(fieldName, false);
-        if (field != null) {
-          PsiElement element = field.getNavigationElement();
-          if (nearest) {
-            return DebuggerContextUtil.findNearest(context, element, aClass.getContainingFile());
-          }
-          return SourcePosition.createFromOffset(element.getContainingFile(), element.getTextOffset());
+        if (field == null) return null;
+        if (nearest) {
+          return DebuggerContextUtil.findNearest(context, field.getNavigationElement(), aClass.getContainingFile());
         }
+        return SourcePosition.createFromElement(field);
       }
       return null;
     }
@@ -133,20 +131,16 @@ public class DefaultSourcePositionProvider extends SourcePositionProvider {
                                                              @NotNull DebuggerContextImpl context,
                                                              boolean nearest) {
     PsiElement place = PositionUtil.getContextElement(context);
-    if (place == null) {
-      return null;
-    }
+    if (place == null) return null;
 
     PsiVariable psiVariable = JavaPsiFacade.getInstance(project).getResolveHelper().resolveReferencedVariable(descriptor.getName(), place);
-    if (psiVariable == null) {
-      return null;
-    }
+    if (psiVariable == null) return null;
 
     PsiFile containingFile = psiVariable.getContainingFile();
     if(containingFile == null) return null;
     if (nearest) {
       return DebuggerContextUtil.findNearest(context, psiVariable, containingFile);
     }
-    return SourcePosition.createFromOffset(containingFile, psiVariable.getTextOffset());
+    return SourcePosition.createFromElement(psiVariable);
   }
 }
\ No newline at end of file
index 5e5ae92513845c07b21291e68cdcaa57a7b406d3..831a5fc3c4ae0a91621d6f4b08ca3ba64f52532c 100644 (file)
@@ -274,7 +274,7 @@ public abstract class SourcePosition implements Navigatable{
     }
   }
 
-  public static SourcePosition createFromLineComputable(final PsiFile file, final Computable<Integer> line) {
+  public static SourcePosition createFromLineComputable(@NotNull final PsiFile file, final Computable<Integer> line) {
     return new SourcePositionCache(file) {
       @Override
       protected int calcLine() {
@@ -283,7 +283,7 @@ public abstract class SourcePosition implements Navigatable{
     };
   }
 
-  public static SourcePosition createFromLine(final PsiFile file, final int line) {
+  public static SourcePosition createFromLine(@NotNull final PsiFile file, final int line) {
     return new SourcePositionCache(file) {
       @Override
       protected int calcLine() {
@@ -297,9 +297,8 @@ public abstract class SourcePosition implements Navigatable{
     };
   }
 
-  public static SourcePosition createFromOffset(final PsiFile file, final int offset) {
+  public static SourcePosition createFromOffset(@NotNull final PsiFile file, final int offset) {
     return new SourcePositionCache(file) {
-
       @Override
       protected int calcOffset() {
         return offset;
@@ -311,7 +310,8 @@ public abstract class SourcePosition implements Navigatable{
       }
     };
   }
-     
+
+  @Nullable
   public static SourcePosition createFromElement(PsiElement element) {
     ApplicationManager.getApplication().assertReadAccessAllowed();
     PsiElement navigationElement = element.getNavigationElement();
@@ -324,6 +324,7 @@ public abstract class SourcePosition implements Navigatable{
     else {
       psiFile = navigationElement.getContainingFile();
     }
+    if (psiFile == null) return null;
     return new SourcePositionCache(psiFile) {
       @Override
       protected PsiElement calcPsiElement() {