diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java index 844883bded26..3a6147066aa4 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java @@ -71,24 +71,8 @@ public class JVMNameUtil { appendJVMSignature(buffer, ((PsiArrayType) psiType).getComponentType()); } else if (psiType instanceof PsiClassType) { - buffer.append("L"); - final JVMName jvmName = getJVMQualifiedName(psiType); - - if(jvmName instanceof JVMRawText) { - buffer.append(((JVMRawText)jvmName).getName().replace('.','/')); - } else { - buffer.append(new JVMName() { - public String getName(DebugProcessImpl process) throws EvaluateException { - return jvmName.getName(process).replace('.','/'); - } - - public String getDisplayName(DebugProcessImpl debugProcess) { - return jvmName.getDisplayName(debugProcess); - } - }); - } - buffer.append(";"); + appendJvmClassQualifiedName(buffer, jvmName); } else if (psiType instanceof PsiPrimitiveType) { buffer.append(getPrimitiveSignature(psiType.getCanonicalText())); @@ -98,6 +82,25 @@ public class JVMNameUtil { } } + private static void appendJvmClassQualifiedName(JVMNameBuffer buffer, final JVMName jvmName) { + buffer.append("L"); + if(jvmName instanceof JVMRawText) { + buffer.append(((JVMRawText)jvmName).getName().replace('.','/')); + } + else { + buffer.append(new JVMName() { + public String getName(DebugProcessImpl process) throws EvaluateException { + return jvmName.getName(process).replace('.','/'); + } + + public String getDisplayName(DebugProcessImpl debugProcess) { + return jvmName.getDisplayName(debugProcess); + } + }); + } + buffer.append(";"); + } + private static class JVMNameBuffer { List myList = new ArrayList(); @@ -268,6 +271,19 @@ public class JVMNameUtil { public static JVMName getJVMSignature(PsiMethod method) { JVMNameBuffer signature = new JVMNameBuffer(); signature.append("("); + + if (method.isConstructor()) { + final PsiClass declaringClass = method.getContainingClass(); + if (declaringClass != null) { + final PsiClass outerClass = declaringClass.getContainingClass(); + if (outerClass != null) { + // declaring class is an inner class + if (!declaringClass.hasModifierProperty(PsiModifier.STATIC)) { + appendJvmClassQualifiedName(signature, getJVMQualifiedName(outerClass)); + } + } + } + } for (PsiParameter psiParameter : method.getParameterList().getParameters()) { appendJVMSignature(signature, psiParameter.getType()); }