mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
javafx: disable handler refs for inappropriate place
This commit is contained in:
@@ -28,4 +28,5 @@ public class JavaFxCommonClassNames {
|
||||
@NonNls public static final String JAVAFX_BEANS_DEFAULT_PROPERTY = "javafx.beans.DefaultProperty";
|
||||
@NonNls public static final String JAVAFX_FXML_FXML = "javafx.fxml.FXML";
|
||||
@NonNls public static final String JAVAFX_BEANS_PROPERTY_OBJECT_PROPERTY = "javafx.beans.property.ObjectProperty";
|
||||
@NonNls public static final String JAVAFX_EVENT_EVENT_HANDLER = "javafx.event.EventHandler";
|
||||
}
|
||||
|
||||
+22
-3
@@ -16,11 +16,13 @@
|
||||
package org.jetbrains.plugins.javaFX.fxml;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.psi.xml.XmlAttributeValue;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.xml.XmlElementDescriptor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -36,6 +38,23 @@ class JavaFxEventHandlerReferenceProvider extends JavaFxControllerBasedReference
|
||||
ProcessingContext context) {
|
||||
final String attValueString = xmlAttributeValue.getValue();
|
||||
LOG.assertTrue(attValueString.startsWith("#"));
|
||||
|
||||
final XmlAttribute attribute = (XmlAttribute)xmlAttributeValue.getContext();
|
||||
if (attribute == null) return PsiReference.EMPTY_ARRAY;
|
||||
final String attributeName = attribute.getName();
|
||||
final XmlTag xmlTag = attribute.getParent();
|
||||
final XmlElementDescriptor descriptor = xmlTag.getDescriptor();
|
||||
if (descriptor == null) return PsiReference.EMPTY_ARRAY;
|
||||
final PsiElement currentTagClass = descriptor.getDeclaration();
|
||||
if (!(currentTagClass instanceof PsiClass)) return PsiReference.EMPTY_ARRAY;
|
||||
final PsiField handlerField = ((PsiClass)currentTagClass).findFieldByName(attributeName, true);
|
||||
if (handlerField == null) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
final PsiClass objectPropertyClass = JavaFxPropertyAttributeDescriptor.getPropertyClass(handlerField);
|
||||
if (objectPropertyClass == null || !InheritanceUtil.isInheritor(objectPropertyClass, JavaFxCommonClassNames.JAVAFX_EVENT_EVENT_HANDLER)) {
|
||||
return PsiReference.EMPTY_ARRAY;
|
||||
}
|
||||
final String eventHandlerName = attValueString.substring(1);
|
||||
final PsiMethod[] methods = controllerClass.findMethodsByName(eventHandlerName, true);
|
||||
|
||||
|
||||
+9
-7
@@ -73,7 +73,11 @@ public class JavaFxPropertyAttributeDescriptor implements XmlAttributeDescriptor
|
||||
}
|
||||
|
||||
protected PsiClass getEnum() {
|
||||
final PsiElement field = getDeclaration();
|
||||
final PsiClass aClass = getPropertyClass(getDeclaration());
|
||||
return aClass != null && aClass.isEnum() ? aClass : null;
|
||||
}
|
||||
|
||||
public static PsiClass getPropertyClass(PsiElement field) {
|
||||
if (field instanceof PsiField) {
|
||||
final PsiType type = ((PsiField)field).getType();
|
||||
if (type instanceof PsiClassType) {
|
||||
@@ -83,14 +87,12 @@ public class JavaFxPropertyAttributeDescriptor implements XmlAttributeDescriptor
|
||||
final PsiClass objectProperty = JavaPsiFacade.getInstance(attributeClass.getProject())
|
||||
.findClass(JavaFxCommonClassNames.JAVAFX_BEANS_PROPERTY_OBJECT_PROPERTY, attributeClass.getResolveScope());
|
||||
if (objectProperty != null) {
|
||||
final PsiSubstitutor superClassSubstitutor = TypeConversionUtil.getClassSubstitutor(objectProperty, attributeClass, resolveResult.getSubstitutor());
|
||||
final PsiSubstitutor superClassSubstitutor = TypeConversionUtil
|
||||
.getClassSubstitutor(objectProperty, attributeClass, resolveResult.getSubstitutor());
|
||||
if (superClassSubstitutor != null) {
|
||||
final PsiType propertyType = superClassSubstitutor.substitute(objectProperty.getTypeParameters()[0]);
|
||||
if (propertyType instanceof PsiClassType) {
|
||||
final PsiClass psiClass = ((PsiClassType)propertyType).resolve();
|
||||
if (psiClass != null && psiClass.isEnum()) {
|
||||
return psiClass;
|
||||
}
|
||||
return ((PsiClassType)propertyType).resolve();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,7 +101,7 @@ public class JavaFxPropertyAttributeDescriptor implements XmlAttributeDescriptor
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String validateValue(XmlElement context, String value) {
|
||||
|
||||
Reference in New Issue
Block a user