diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java index b6bba863ca88..749f0e1944af 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java @@ -42,6 +42,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.sun.jdi.Value; import org.jetbrains.annotations.NotNull; @@ -1325,8 +1326,20 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder { processBoxingConversions(constructor.getParameterList().getParameters(), argExpressions, constructorResolveResult.getSubstitutor(), argumentEvaluators); } - if (aClass != null && aClass.getContainingClass() != null && !aClass.hasModifierProperty(PsiModifier.STATIC)) { - argumentEvaluators = addThisEvaluator(argumentEvaluators, aClass.getContainingClass()); + if (aClass != null) { + PsiClass containingClass = aClass.getContainingClass(); + if (containingClass != null && !aClass.hasModifierProperty(PsiModifier.STATIC)) { + PsiExpression qualifier = expression.getQualifier(); + if (qualifier != null) { + qualifier.accept(this); + if (myResult != null) { + argumentEvaluators = ArrayUtil.prepend(myResult, argumentEvaluators); + } + } + else { + argumentEvaluators = ArrayUtil.prepend(new ThisEvaluator(calcIterationCount(containingClass, "this")), argumentEvaluators); + } + } } JVMName signature = JVMNameUtil.getJVMConstructorSignature(constructor, aClass); @@ -1346,14 +1359,6 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder { } } - private Evaluator[] addThisEvaluator(Evaluator[] argumentEvaluators, PsiClass cls) { - Evaluator[] res = new Evaluator[argumentEvaluators.length+1]; - int depth = calcIterationCount(cls, "this"); - res[0] = new ThisEvaluator(depth); - System.arraycopy(argumentEvaluators, 0, res, 1, argumentEvaluators.length); - return res; - } - @Override public void visitArrayInitializerExpression(PsiArrayInitializerExpression expression) { PsiExpression[] initializers = expression.getInitializers();