diff --git a/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUtils.java b/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUtils.java index 92b6e2f55c1e..f8ed8d2ad4ed 100644 --- a/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUtils.java +++ b/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUtils.java @@ -17,10 +17,12 @@ package com.intellij.lang.parameterInfo; import com.intellij.lang.ASTNode; +import com.intellij.openapi.util.Conditions; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiWhiteSpace; +import com.intellij.psi.SyntaxTraverser; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.text.CharArrayUtil; @@ -53,16 +55,21 @@ public class ParameterInfoUtils { } public static int getCurrentParameterIndex(ASTNode argList, int offset, IElementType delimiterType) { - int curOffset = argList.getTextRange().getStartOffset(); + SyntaxTraverser s = SyntaxTraverser.astTraverser(argList).expandAndSkip(Conditions.is(argList)); + return getCurrentParameterIndex(s, offset, delimiterType); + } + + public static int getCurrentParameterIndex(SyntaxTraverser s, int offset, IElementType delimiterType) { + V root = s.getRoot(); + int curOffset = s.api.rangeOf(root).getStartOffset(); if (offset < curOffset) return -1; - ASTNode[] children = argList.getChildren(null); int index = 0; - for (ASTNode child : children) { - curOffset += child.getTextLength(); + for (V child : s) { + curOffset += s.api.rangeOf(child).getLength(); if (offset < curOffset) break; - IElementType type = child.getElementType(); + IElementType type = s.api.typeOf(child); if (type == delimiterType) index++; }