diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java b/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java index 4cbf8658088..b6de25a02a3 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java +++ b/idea/src/org/jetbrains/jet/plugin/debugger/JetPositionManager.java @@ -23,7 +23,7 @@ import com.intellij.debugger.engine.DebugProcess; import com.intellij.debugger.requests.ClassPrepareRequestor; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.util.Ref; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.search.FilenameIndex; @@ -114,16 +114,17 @@ public class JetPositionManager implements PositionManager { if (!(sourcePosition.getFile() instanceof JetFile)) { throw new NoDataException(); } - final Collection names = classNamesForPosition(sourcePosition); + String name = classNameForPosition(sourcePosition); List result = new ArrayList(); - for (String name : names) { + if (name != null) { result.addAll(myDebugProcess.getVirtualMachineProxy().classesByName(name)); } return result; } - private Collection classNamesForPosition(final SourcePosition sourcePosition) { - final Collection names = new ArrayList(); + @Nullable + private String classNameForPosition(final SourcePosition sourcePosition) { + final Ref result = Ref.create(); ApplicationManager.getApplication().runReadAction(new Runnable() { @Override @@ -134,37 +135,37 @@ public class JetPositionManager implements PositionManager { PsiElement element = PsiTreeUtil.getParentOfType(sourcePosition.getElementAt(), JetClassOrObject.class, JetFunctionLiteralExpression.class, JetNamedFunction.class); if (element instanceof JetClassOrObject) { - names.add(typeMapper.getJvmInternalName((JetClassOrObject)element)); + result.set(typeMapper.getJvmInternalName((JetClassOrObject) element)); } else if (element instanceof JetFunctionLiteralExpression) { - names.add(typeMapper.getClosureAnnotator().classNameForAnonymousClass((JetFunctionLiteralExpression)element).getInternalName()); + result.set(typeMapper.getClosureAnnotator().classNameForAnonymousClass((JetFunctionLiteralExpression)element).getInternalName()); } else if (element instanceof JetNamedFunction) { PsiElement parent = PsiTreeUtil.getParentOfType(element, JetClassOrObject.class, JetFunctionLiteralExpression.class, JetNamedFunction.class); if (parent instanceof JetClassOrObject) { - names.add(typeMapper.getJvmInternalName((JetClassOrObject)parent)); + result.set(typeMapper.getJvmInternalName((JetClassOrObject) parent)); } else if (parent instanceof JetFunctionLiteralExpression || parent instanceof JetNamedFunction) { - names.add(typeMapper.getClosureAnnotator().classNameForAnonymousClass((JetElement)element).getInternalName()); + result.set(typeMapper.getClosureAnnotator().classNameForAnonymousClass((JetElement)element).getInternalName()); } } - if (names.isEmpty()) { + if (result.isNull()) { FqName fqName = JetPsiUtil.getFQName(namespace); boolean multiFileNamespace = typeMapper.getClosureAnnotator().isMultiFileNamespace(fqName); String namespaceInternalName = NamespaceCodegen.getJVMClassNameForKotlinNs(fqName).getInternalName(); if (multiFileNamespace) { String name = namespace.getName(); - names.add(namespaceInternalName + "$src$" + name.substring(0, name.lastIndexOf('.'))); + result.set(namespaceInternalName + "$src$" + name.substring(0, name.lastIndexOf('.'))); } else { - names.add(namespaceInternalName); + result.set(namespaceInternalName); } } } }); - return names; + return result.get(); } private JetTypeMapper prepareTypeMapper(final JetFile file) { @@ -215,20 +216,10 @@ public class JetPositionManager implements PositionManager { if (!(sourcePosition.getFile() instanceof JetFile)) { throw new NoDataException(); } - final Collection classNames = classNamesForPosition(sourcePosition); - if (classNames.isEmpty()) { + final String className = classNameForPosition(sourcePosition); + if (className == null) { return null; } - final Iterator iterator = classNames.iterator(); - boolean wildcard = false; - String namePattern = iterator.next(); - while (iterator.hasNext()) { - namePattern = StringUtil.commonPrefix(namePattern, iterator.next()); - wildcard = true; - } - if (wildcard) { - namePattern += "*"; - } - return myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, namePattern.replace('/', '.')); + return myDebugProcess.getRequestsManager().createClassPrepareRequest(classPrepareRequestor, className.replace('/', '.')); } }