mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
javafx: instantiate with valueOf fixed
This commit is contained in:
+19
-14
@@ -287,23 +287,28 @@ public class JavaFxClassBackedElementDescriptor implements XmlElementDescriptor,
|
||||
if (myPsiClass != null && myPsiClass.isValid()) {
|
||||
if(myPsiClass.getConstructors().length > 0) {
|
||||
final Project project = myPsiClass.getProject();
|
||||
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
|
||||
final PsiMethod noArgConstructor = myPsiClass
|
||||
.findMethodBySignature(JavaPsiFacade.getElementFactory(project).createConstructor(myPsiClass.getName()), false);
|
||||
.findMethodBySignature(factory.createConstructor(myPsiClass.getName()), false);
|
||||
if (noArgConstructor == null) {
|
||||
final PsiClass builderClass = JavaPsiFacade.getInstance(project).findClass(JavaFxCommonClassNames.JAVAFX_FXML_BUILDER,
|
||||
GlobalSearchScope.allScope(project));
|
||||
if (builderClass != null) {
|
||||
//todo cache this info
|
||||
final PsiTypeParameter typeParameter = builderClass.getTypeParameters()[0];
|
||||
if (ClassInheritorsSearch.search(builderClass).forEach(new Processor<PsiClass>() {
|
||||
@Override
|
||||
public boolean process(PsiClass aClass) {
|
||||
final PsiType initType =
|
||||
TypeConversionUtil.getSuperClassSubstitutor(builderClass, aClass, PsiSubstitutor.EMPTY).substitute(typeParameter);
|
||||
return !Comparing.equal(myPsiClass, PsiUtil.resolveClassInClassTypeOnly(initType));
|
||||
final PsiMethod valueOfPattern = factory.createMethodFromText("void valueOf(java.lang.String s){}", myPsiClass);
|
||||
final PsiMethod valueOf = myPsiClass.findMethodBySignature(valueOfPattern, false);
|
||||
if (valueOf == null || !valueOf.hasModifierProperty(PsiModifier.STATIC) || !myPsiClass.equals(PsiUtil.resolveClassInType(valueOf.getReturnType()))) {
|
||||
final PsiClass builderClass = JavaPsiFacade.getInstance(project).findClass(JavaFxCommonClassNames.JAVAFX_FXML_BUILDER,
|
||||
GlobalSearchScope.allScope(project));
|
||||
if (builderClass != null) {
|
||||
//todo cache this info
|
||||
final PsiTypeParameter typeParameter = builderClass.getTypeParameters()[0];
|
||||
if (ClassInheritorsSearch.search(builderClass).forEach(new Processor<PsiClass>() {
|
||||
@Override
|
||||
public boolean process(PsiClass aClass) {
|
||||
final PsiType initType =
|
||||
TypeConversionUtil.getSuperClassSubstitutor(builderClass, aClass, PsiSubstitutor.EMPTY).substitute(typeParameter);
|
||||
return !Comparing.equal(myPsiClass, PsiUtil.resolveClassInClassTypeOnly(initType));
|
||||
}
|
||||
})) {
|
||||
host.addMessage(context, "Unable to instantiate", ValidationHost.ErrorType.ERROR);
|
||||
}
|
||||
})) {
|
||||
host.addMessage(context, "Unable to instantiate", ValidationHost.ErrorType.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
<?import java.lang.String?>
|
||||
<?import javafx.collections.FXCollections?>
|
||||
<?import java.util.ArrayList?>
|
||||
<?import java.lang.Double?>
|
||||
<GridPane xmlns:fx="http://javafx.com/fxml">
|
||||
<fx:define>
|
||||
<FXCollections fx:factory="observableArrayList">
|
||||
@@ -10,6 +11,7 @@
|
||||
|
||||
<FXCollections fx:factory="observableArrayList">
|
||||
<String fx:value="A"/>
|
||||
<Double value="5"/>
|
||||
</FXCollections>
|
||||
|
||||
</fx:define>
|
||||
|
||||
Reference in New Issue
Block a user