make ClassUtil.getJvmClassName work correctly for groovy classes
authorpeter <peter@jetbrains.com>
Thu, 26 Jan 2012 15:39:42 +0000 (16:39 +0100)
committerpeter <peter@jetbrains.com>
Thu, 26 Jan 2012 17:31:32 +0000 (18:31 +0100)
java/execution/openapi/src/com/intellij/execution/JavaExecutionUtil.java
java/openapi/src/com/intellij/psi/util/ClassUtil.java

index 987a6c8a62b5a9c1c252f6671e64fa1f7f7d3474..89cc65ebeeafd5c7e6a8a8fc20a0724250c12ddb 100644 (file)
@@ -30,6 +30,7 @@ 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.ClassUtil;
 import com.intellij.psi.util.PsiClassUtil;
 import com.intellij.psi.util.PsiTreeUtil;
 import org.jetbrains.annotations.NotNull;
@@ -106,13 +107,7 @@ public class JavaExecutionUtil {
 
   @Nullable
   public static String getRuntimeQualifiedName(final PsiClass aClass) {
-    final PsiClass containingClass = aClass.getContainingClass();
-    if (containingClass != null) {
-      final String parentName = getRuntimeQualifiedName(containingClass);
-      return parentName + "$" + aClass.getName();
-    } else {
-      return aClass.getQualifiedName();
-    }
+    return ClassUtil.getJVMClassName(aClass);
   }
 
   @Nullable
index 18038c40c13d847c415fdc1d941768947ad9c4a3..d7f8aa2a27c2b02c26cf803943d2f4163c897cbd 100644 (file)
@@ -245,26 +245,19 @@ public class ClassUtil {
 
   @Nullable
   public static String getJVMClassName(PsiClass aClass) {
-    final String qName = aClass.getQualifiedName();
-    if (qName == null) return null;
-    return replaceDotsWithDollars(qName, aClass);
-  }
-
-  private static String replaceDotsWithDollars(final String qName, PsiClass aClass) {
-    StringBuilder qNameBuffer = new StringBuilder(qName);
-
-    int fromIndex = qNameBuffer.length();
-    PsiElement parent = aClass.getParent();
-    while (parent instanceof PsiClass) {
-      final int dotIndex = qNameBuffer.lastIndexOf(".", fromIndex);
-      if (dotIndex < 0) break;
-      qNameBuffer.replace(dotIndex, dotIndex + 1, "$");
-      fromIndex = dotIndex - 1;
-      parent = parent.getParent();
+    final PsiClass containingClass = aClass.getContainingClass();
+    if (containingClass != null) {
+      String parentName = getJVMClassName(containingClass);
+      if (parentName == null) {
+        return null;
+      }
+      
+      return parentName + "$" + aClass.getName();
     }
-    return qNameBuffer.toString();
+    return aClass.getQualifiedName();
   }
 
+
   @Nullable
   public static PsiClass findPsiClassByJVMName(final PsiManager manager, final String jvmClassName) {
     return findPsiClass(manager, jvmClassName.replace('/', '.'), null, true);