IDEA-161167 cannot use a qualified class instance creation expression in Java debugger "Evaluate Expression"

This commit is contained in:
Egor.Ushakov
2016-09-20 12:58:33 +03:00
parent b762d88d54
commit cbc2db51d5
@@ -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();