mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Javafx: Regression fixed - allow enum constants in fx:value attribute. Tests added
This commit is contained in:
+4
@@ -358,6 +358,10 @@ public class JavaFXHighlightingTest extends AbstractJavaFXTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testEnumConstantValue() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testBoxedConstantValue() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
+4
@@ -80,6 +80,10 @@ public class JavaFxCompletionTest extends LightFixtureCompletionTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testEnumConstantValue() throws Exception {
|
||||
doTest("TOP_LEFT");
|
||||
}
|
||||
|
||||
public void testConstants() throws Exception {
|
||||
doTest("NEGATIVE_INFINITY");
|
||||
}
|
||||
|
||||
@@ -438,8 +438,7 @@ public class JavaFxPsiUtil {
|
||||
}
|
||||
|
||||
public static boolean isAbleToInstantiate(@NotNull PsiClass psiClass, @NotNull Consumer<String> messageConsumer) {
|
||||
if (psiClass.getConstructors().length == 0) return true;
|
||||
if (hasNamedArgOrNoArgConstructor(psiClass)) return true;
|
||||
if (psiClass.isEnum() || hasNamedArgOrNoArgConstructor(psiClass)) return true;
|
||||
final PsiMethod valueOf = findValueOfMethod(psiClass);
|
||||
if (valueOf == null) {
|
||||
if (!hasBuilder(psiClass)) {
|
||||
@@ -451,6 +450,7 @@ public class JavaFxPsiUtil {
|
||||
}
|
||||
|
||||
private static boolean hasNamedArgOrNoArgConstructor(@NotNull PsiClass psiClass) {
|
||||
if (psiClass.getConstructors().length == 0) return true;
|
||||
return CachedValuesManager.getCachedValue(psiClass, () -> {
|
||||
for (PsiMethod constructor : psiClass.getConstructors()) {
|
||||
final PsiParameter[] parameters = constructor.getParameterList().getParameters();
|
||||
|
||||
+6
-2
@@ -52,7 +52,10 @@ public class JavaFxBuiltInAttributeDescriptor extends JavaFxPropertyAttributeDes
|
||||
|
||||
@Override
|
||||
public boolean isEnumerated() {
|
||||
return getPsiClass() != null && getName().equals(FxmlConstants.FX_CONSTANT);
|
||||
final PsiClass psiClass = getPsiClass();
|
||||
if (psiClass == null) return false;
|
||||
final String name = getName();
|
||||
return FxmlConstants.FX_CONSTANT.equals(name) || psiClass.isEnum() && FxmlConstants.FX_VALUE.equals(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -67,7 +70,8 @@ public class JavaFxBuiltInAttributeDescriptor extends JavaFxPropertyAttributeDes
|
||||
return isEnumerated() ? getPsiClass() : null ;
|
||||
}
|
||||
|
||||
protected boolean isConstant(PsiField field) {
|
||||
protected boolean isConstant(PsiField field, boolean inEnum) {
|
||||
if (inEnum) return field instanceof PsiEnumConstant;
|
||||
return field.hasModifierProperty(PsiModifier.STATIC) && field.hasModifierProperty(PsiModifier.FINAL) && field.hasModifierProperty(PsiModifier.PUBLIC);
|
||||
}
|
||||
|
||||
|
||||
+6
-6
@@ -72,12 +72,12 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript
|
||||
@Nullable
|
||||
@Override
|
||||
public String[] getEnumeratedValues() {
|
||||
final PsiClass enumClass = getEnum();
|
||||
if (enumClass != null) {
|
||||
final PsiField[] fields = enumClass.getAllFields();
|
||||
final PsiClass aClass = getEnum();
|
||||
if (aClass != null) {
|
||||
final PsiField[] fields = aClass.getAllFields();
|
||||
final List<String> enumConstants = new ArrayList<String>();
|
||||
for (PsiField enumField : fields) {
|
||||
if (isConstant(enumField)) {
|
||||
if (isConstant(enumField, aClass.isEnum())) {
|
||||
enumConstants.add(enumField.getName());
|
||||
}
|
||||
}
|
||||
@@ -94,8 +94,8 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript
|
||||
return null;
|
||||
}
|
||||
|
||||
protected boolean isConstant(PsiField enumField) {
|
||||
return enumField instanceof PsiEnumConstant;
|
||||
protected boolean isConstant(PsiField field, boolean inEnum) {
|
||||
return inEnum && field instanceof PsiEnumConstant;
|
||||
}
|
||||
|
||||
protected PsiClass getEnum() {
|
||||
|
||||
+1
-1
@@ -100,7 +100,7 @@ public class JavaFxRootTagDescriptor extends JavaFxClassTagDescriptorBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected boolean isConstant(PsiField field) {
|
||||
protected boolean isConstant(PsiField field, boolean inEnum) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?import javafx.geometry.Pos?>
|
||||
<?import javafx.scene.control.TextField?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml">
|
||||
<TextField>
|
||||
<alignment>
|
||||
<Pos fx:value="TO<caret>"/>
|
||||
</alignment>
|
||||
</TextField>
|
||||
</VBox>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?import javafx.geometry.Pos?>
|
||||
<?import javafx.scene.control.TextField?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml">
|
||||
<TextField>
|
||||
<alignment>
|
||||
<Pos fx:value="TOP_LEFT"/>
|
||||
</alignment>
|
||||
</TextField>
|
||||
</VBox>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?import javafx.geometry.Pos?>
|
||||
<?import javafx.scene.layout.GridPane?>
|
||||
<?import javafx.scene.control.TextField?>
|
||||
<GridPane xmlns:fx="http://javafx.com/fxml">
|
||||
<TextField promptText="User Name">
|
||||
<alignment>
|
||||
<Pos fx:value="TOP_LEFT"/>
|
||||
</alignment>
|
||||
</TextField>
|
||||
</GridPane>
|
||||
Reference in New Issue
Block a user