mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 06:05:01 +07:00
javafx: disable line markers for final fields, classes without default constructors, inner classes (IDEA-100927)
This commit is contained in:
+30
-20
@@ -23,14 +23,14 @@ import com.intellij.codeInsight.navigation.NavigationUtil;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.navigation.GotoRelatedItem;
|
||||
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.psi.xml.XmlAttributeValue;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.ConstantFunction;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.Processor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -49,11 +49,21 @@ public class JavaFxRelatedItemLineMarkerProvider extends RelatedItemLineMarkerPr
|
||||
protected void collectNavigationMarkers(@NotNull PsiElement element, final Collection<? super RelatedItemLineMarkerInfo> result) {
|
||||
if (element instanceof PsiField) {
|
||||
final PsiField field = (PsiField)element;
|
||||
if (JavaFxPsiUtil.isVisibleInFxml(field) && !field.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
if (JavaFxPsiUtil.isVisibleInFxml(field) && !field.hasModifierProperty(PsiModifier.STATIC) && !field.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
final PsiClass containingClass = field.getContainingClass();
|
||||
if (containingClass != null && containingClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||
final PsiMethod[] constructors = containingClass.getConstructors();
|
||||
boolean defaultConstructor = constructors.length == 0;
|
||||
for (PsiMethod constructor : constructors) {
|
||||
if (constructor.getParameterList().getParametersCount() == 0) {
|
||||
defaultConstructor = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!defaultConstructor) return;
|
||||
if (containingClass.getContainingClass() != null) return;
|
||||
final ArrayList<GotoRelatedItem> targets = new ArrayList<GotoRelatedItem>();
|
||||
collectTargets(element, targets, new Function<PsiElement, GotoRelatedItem>() {
|
||||
collectTargets(field, targets, new Function<PsiElement, GotoRelatedItem>() {
|
||||
@Override
|
||||
public GotoRelatedItem fun(PsiElement element) {
|
||||
return new GotoRelatedItem(element);
|
||||
@@ -70,24 +80,24 @@ public class JavaFxRelatedItemLineMarkerProvider extends RelatedItemLineMarkerPr
|
||||
}
|
||||
}
|
||||
|
||||
private static <T> void collectTargets(PsiElement element, final ArrayList<T> targets, final Function<PsiElement, T> fun, final boolean stopAtFirst) {
|
||||
ReferencesSearch.search(element).forEach(new Processor<PsiReference>() {
|
||||
@Override
|
||||
public boolean process(PsiReference reference) {
|
||||
final PsiElement referenceElement = reference.getElement();
|
||||
if (referenceElement == null) return true;
|
||||
if (!(referenceElement instanceof XmlAttributeValue)) return true;
|
||||
final XmlAttributeValue attributeValue = (XmlAttributeValue)referenceElement;
|
||||
final PsiElement parent = attributeValue.getParent();
|
||||
if (!(parent instanceof XmlAttribute)) return true;
|
||||
final PsiFile containingFile = referenceElement.getContainingFile();
|
||||
if (containingFile == null) return true;
|
||||
if (JavaFxFileTypeFactory.isFxml(containingFile)) {
|
||||
private static <T> void collectTargets(PsiField field, final ArrayList<T> targets, final Function<PsiElement, T> fun, final boolean stopAtFirst) {
|
||||
final GlobalSearchScope searchScope = GlobalSearchScope.getScopeRestrictedByFileTypes(field.getResolveScope(), StdFileTypes.XML);
|
||||
ReferencesSearch.search(field, searchScope).forEach(
|
||||
new Processor<PsiReference>() {
|
||||
@Override
|
||||
public boolean process(PsiReference reference) {
|
||||
final PsiElement referenceElement = reference.getElement();
|
||||
if (referenceElement == null) return true;
|
||||
final PsiFile containingFile = referenceElement.getContainingFile();
|
||||
if (containingFile == null) return true;
|
||||
if (!JavaFxFileTypeFactory.isFxml(containingFile)) return true;
|
||||
if (!(referenceElement instanceof XmlAttributeValue)) return true;
|
||||
final XmlAttributeValue attributeValue = (XmlAttributeValue)referenceElement;
|
||||
final PsiElement parent = attributeValue.getParent();
|
||||
if (!(parent instanceof XmlAttribute)) return true;
|
||||
targets.add(fun.fun(parent));
|
||||
if (stopAtFirst) return false;
|
||||
return !stopAtFirst;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user