mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
prefer files from the original resolve context in debugger fields, this helps when we have same fqn classes in the project (for example in a lib and a module), in this case now we choose some random file.
This commit is contained in:
+20
-2
@@ -21,10 +21,13 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.JavaCodeFragment;
|
||||
import com.intellij.psi.JavaRecursiveElementVisitor;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiLocalVariable;
|
||||
import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.StringBuilderSpinAllocator;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.xdebugger.XDebugSession;
|
||||
@@ -37,6 +40,7 @@ import com.sun.jdi.ObjectReference;
|
||||
import com.sun.jdi.Value;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -55,11 +59,11 @@ public class CodeFragmentFactoryContextWrapper extends CodeFragmentFactory {
|
||||
}
|
||||
|
||||
public JavaCodeFragment createCodeFragment(TextWithImports item, PsiElement context, Project project) {
|
||||
return myDelegate.createCodeFragment(item, wrapContext(project, context), project);
|
||||
return prepareResolveScope(myDelegate.createCodeFragment(item, wrapContext(project, context), project));
|
||||
}
|
||||
|
||||
public JavaCodeFragment createPresentationCodeFragment(TextWithImports item, PsiElement context, Project project) {
|
||||
return myDelegate.createPresentationCodeFragment(item, wrapContext(project, context), project);
|
||||
return prepareResolveScope(myDelegate.createPresentationCodeFragment(item, wrapContext(project, context), project));
|
||||
}
|
||||
|
||||
public boolean isContextAccepted(PsiElement contextElement) {
|
||||
@@ -75,6 +79,20 @@ public class CodeFragmentFactoryContextWrapper extends CodeFragmentFactory {
|
||||
public EvaluatorBuilder getEvaluatorBuilder() {
|
||||
return myDelegate.getEvaluatorBuilder();
|
||||
}
|
||||
|
||||
private static JavaCodeFragment prepareResolveScope(JavaCodeFragment codeFragment) {
|
||||
GlobalSearchScope originalResolveScope = codeFragment.getResolveScope();
|
||||
codeFragment.forceResolveScope(new DelegatingGlobalSearchScope(GlobalSearchScope.allScope(codeFragment.getProject())) {
|
||||
final Comparator<VirtualFile> myScopeComparator = Comparator.comparing(originalResolveScope::contains);
|
||||
@Override
|
||||
public int compare(@NotNull VirtualFile file1, @NotNull VirtualFile file2) {
|
||||
// prefer files from the original resolve scope
|
||||
int res = myScopeComparator.compare(file1, file2);
|
||||
return res != 0 ? res : super.compare(file1, file2);
|
||||
}
|
||||
});
|
||||
return codeFragment;
|
||||
}
|
||||
|
||||
private PsiElement wrapContext(Project project, final PsiElement originalContext) {
|
||||
if (project.isDefault()) return originalContext;
|
||||
|
||||
-2
@@ -36,7 +36,6 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiTypesUtil;
|
||||
@@ -69,7 +68,6 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
|
||||
if (codeFragment == null) {
|
||||
throw EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", text.getText()));
|
||||
}
|
||||
codeFragment.forceResolveScope(GlobalSearchScope.allScope(project));
|
||||
DebuggerUtils.checkSyntax(codeFragment);
|
||||
|
||||
return factory.getEvaluatorBuilder().build(codeFragment, position);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 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.
|
||||
@@ -46,7 +46,6 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.ui.SimpleColoredText;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -97,7 +96,6 @@ public class ValueHint extends AbstractValueHint {
|
||||
TextWithImportsImpl textWithImports = new TextWithImportsImpl(CodeFragmentKind.EXPRESSION, myCurrentExpression.getText());
|
||||
CodeFragmentFactory factory = DebuggerUtilsEx.findAppropriateCodeFragmentFactory(textWithImports, myCurrentExpression);
|
||||
JavaCodeFragment codeFragment = factory.createCodeFragment(textWithImports, myCurrentExpression.getContext(), getProject());
|
||||
codeFragment.forceResolveScope(GlobalSearchScope.allScope(getProject()));
|
||||
return factory.getEvaluatorBuilder().build(codeFragment, debuggerContext.getSourcePosition());
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -33,7 +33,6 @@ import com.intellij.debugger.jdi.StackFrameProxyImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.refactoring.extractMethod.PrepareFailedException;
|
||||
import com.intellij.refactoring.extractMethodObject.ExtractLightMethodObjectHandler;
|
||||
import com.intellij.xdebugger.frame.XValueModifier;
|
||||
@@ -65,10 +64,7 @@ public abstract class EvaluationDescriptor extends ValueDescriptorImpl{
|
||||
|
||||
public PsiCodeFragment createCodeFragment(PsiElement context) {
|
||||
TextWithImports text = getEvaluationText();
|
||||
final PsiCodeFragment fragment =
|
||||
DebuggerUtilsEx.findAppropriateCodeFragmentFactory(text, context).createCodeFragment(text, context, myProject);
|
||||
fragment.forceResolveScope(GlobalSearchScope.allScope(myProject));
|
||||
return fragment;
|
||||
return DebuggerUtilsEx.findAppropriateCodeFragmentFactory(text, context).createCodeFragment(text, context, myProject);
|
||||
}
|
||||
|
||||
public final Value calcValue(final EvaluationContextImpl evaluationContext) throws EvaluateException {
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.debugger.impl.DebuggerUtilsImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.reference.SoftReference;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -73,7 +72,6 @@ public abstract class CachedEvaluator {
|
||||
}
|
||||
cache.myPsiChildrenExpression = null;
|
||||
JavaCodeFragment codeFragment = myDefaultFragmentFactory.createCodeFragment(myReferenceExpression, psiClassAndType.first, project);
|
||||
codeFragment.forceResolveScope(GlobalSearchScope.allScope(project));
|
||||
codeFragment.setThisType(psiClassAndType.second);
|
||||
DebuggerUtils.checkSyntax(codeFragment);
|
||||
cache.myPsiChildrenExpression = codeFragment instanceof PsiExpressionCodeFragment ? ((PsiExpressionCodeFragment)codeFragment).getExpression() : null;
|
||||
|
||||
@@ -27,7 +27,6 @@ import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.xdebugger.XExpression;
|
||||
import com.intellij.xdebugger.XSourcePosition;
|
||||
@@ -92,7 +91,6 @@ public class JavaDebuggerEditorsProvider extends XDebuggerEditorsProviderBase {
|
||||
if (text != null) {
|
||||
CodeFragmentFactory factory = DebuggerUtilsEx.findAppropriateCodeFragmentFactory(text, context);
|
||||
JavaCodeFragment codeFragment = factory.createPresentationCodeFragment(text, context, project);
|
||||
codeFragment.forceResolveScope(GlobalSearchScope.allScope(project));
|
||||
|
||||
if (context != null) {
|
||||
PsiType contextType = context.getUserData(DebuggerUtilsImpl.PSI_TYPE_KEY);
|
||||
|
||||
Reference in New Issue
Block a user