[Parameter Hints Manager] use syntax traverser

This commit is contained in:
Yaroslav Lepenkin
2016-10-04 23:34:57 +03:00
parent 99a2007f54
commit c649917fd3
@@ -26,7 +26,6 @@ import com.intellij.openapi.editor.Inlay;
import com.intellij.openapi.editor.VisualPosition;
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.psi.*;
@@ -67,70 +66,20 @@ public class ParameterHintsPassFactory extends AbstractProjectComponent implemen
myAnnotations.clear();
if (!isEnabled() || !(myFile instanceof PsiJavaFile)) return;
PsiJavaFile file = (PsiJavaFile) myFile;
PsiClass[] classes = file.getClasses();
for (PsiClass aClass : classes) {
ProgressIndicatorProvider.checkCanceled();
addElementsToFold(aClass);
}
SyntaxTraverser.psiTraverser(file).forEach(element -> process(element));
}
private static boolean isEnabled() {
return EditorSettingsExternalizable.getInstance().isShowParameterNameHints();
}
private void addElementsToFold(PsiClass aClass) {
PsiElement[] children = aClass.getChildren();
for (PsiElement child : children) {
ProgressIndicatorProvider.checkCanceled();
if (child instanceof PsiMethod) {
PsiMethod method = (PsiMethod)child;
PsiCodeBlock body = method.getBody();
if (body != null) {
addCodeBlockFolds(body);
}
}
else if (child instanceof PsiField) {
PsiField field = (PsiField)child;
PsiExpression initializer = field.getInitializer();
if (initializer != null) {
addCodeBlockFolds(initializer);
} else if (field instanceof PsiEnumConstant) {
addCodeBlockFolds(field);
}
}
else if (child instanceof PsiClassInitializer) {
PsiClassInitializer initializer = (PsiClassInitializer)child;
addCodeBlockFolds(initializer);
}
else if (child instanceof PsiClass) {
addElementsToFold((PsiClass)child);
}
private void process(PsiElement child) {
if (child instanceof PsiCallExpression) {
inlineLiteralArgumentsNames((PsiCallExpression)child);
}
}
private void addCodeBlockFolds(PsiElement scope) {
scope.accept(new JavaRecursiveElementWalkingVisitor() {
@Override
public void visitClass(PsiClass aClass) {
addElementsToFold(aClass);
}
@Override
public void visitMethodCallExpression(PsiMethodCallExpression expression) {
inlineLiteralArgumentsNames(expression);
super.visitMethodCallExpression(expression);
}
@Override
public void visitNewExpression(PsiNewExpression expression) {
inlineLiteralArgumentsNames(expression);
super.visitNewExpression(expression);
}
});
}
private void inlineLiteralArgumentsNames(@NotNull PsiCallExpression expression) {
ParameterNameHintsManager manager = new ParameterNameHintsManager(expression);
for (InlayInfo info : manager.getDescriptors()) {