mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[Parameter Hints Manager] use syntax traverser
This commit is contained in:
+6
-57
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user