diff --git a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxGenerateDefaultPropertyValuesScript.java b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxGenerateDefaultPropertyValuesScript.java index 7a68e1756e5c..6ad78d30c6ef 100644 --- a/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxGenerateDefaultPropertyValuesScript.java +++ b/plugins/javaFX/javaFX-CE/testSrc/org/jetbrains/plugins/javaFX/fxml/JavaFxGenerateDefaultPropertyValuesScript.java @@ -2,9 +2,14 @@ package org.jetbrains.plugins.javaFX.fxml; import javafx.application.Application; import javafx.application.Platform; +import javafx.geometry.NodeOrientation; +import javafx.geometry.Pos; +import javafx.scene.AccessibleRole; import javafx.scene.Scene; +import javafx.scene.chart.LineChart; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; +import javafx.stage.PopupWindow; import javafx.stage.Stage; import org.jetbrains.annotations.NotNull; @@ -20,7 +25,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** - * This is not a test, this is a config generator for JavaFxRedundantPropertyValueInspection + * This is not a test, this is a resource generator for JavaFxRedundantPropertyValueInspection *

* When launched without arguments it produces default values for JavaFX classes having default constructor and their superclasses, including some (but not all) abstract classes *

@@ -59,70 +64,57 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { }); } - private static final Map ourToBoxed = new HashMap<>(); + private static final Map ourFromSource = new TreeMap<>(); static { - ourToBoxed.put(Boolean.TYPE, Boolean.class); - ourToBoxed.put(Character.TYPE, Character.class); - ourToBoxed.put(Byte.TYPE, Byte.class); - ourToBoxed.put(Short.TYPE, Short.class); - ourToBoxed.put(Integer.TYPE, Integer.class); - ourToBoxed.put(Long.TYPE, Long.class); - ourToBoxed.put(Float.TYPE, Float.class); - ourToBoxed.put(Double.TYPE, Double.class); - } - - private static final Map ourFromSource = new TreeMap<>(); - - static { - ourFromSource.put("javafx.concurrent.ScheduledService#maximumFailureCount", "Integer=2147483647"); - ourFromSource.put("javafx.concurrent.ScheduledService#restartOnFailure", "Boolean=true"); - ourFromSource.put("javafx.scene.Node#accessibleRole", "Enum=NODE"); - ourFromSource.put("javafx.scene.Node#focusTraversable", "Boolean=false"); - ourFromSource.put("javafx.scene.Node#nodeOrientation", "Enum=INHERIT"); - ourFromSource.put("javafx.scene.Node#pickOnBounds", "Boolean=false"); - ourFromSource.put("javafx.scene.SubScene#height", "Double=0.0"); - ourFromSource.put("javafx.scene.SubScene#width", "Double=0.0"); - ourFromSource.put("javafx.scene.chart.AreaChart#createSymbols", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.Axis#label", "String="); - ourFromSource.put("javafx.scene.chart.BarChart#barGap", "Double=4.0"); - ourFromSource.put("javafx.scene.chart.BarChart#categoryGap", "Double=10.0"); - ourFromSource.put("javafx.scene.chart.Chart#title", "String="); - ourFromSource.put("javafx.scene.chart.LineChart#axisSortingPolicy", "Enum=X_AXIS"); - ourFromSource.put("javafx.scene.chart.LineChart#createSymbols", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.StackedAreaChart#createSymbols", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.StackedBarChart#categoryGap", "Double=10.0"); - ourFromSource.put("javafx.scene.chart.XYChart#alternativeColumnFillVisible", "Boolean=false"); - ourFromSource.put("javafx.scene.chart.XYChart#alternativeRowFillVisible", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.XYChart#horizontalGridLinesVisible", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.XYChart#horizontalZeroLineVisible", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.XYChart#verticalGridLinesVisible", "Boolean=true"); - ourFromSource.put("javafx.scene.chart.XYChart#verticalZeroLineVisible", "Boolean=true"); - ourFromSource.put("javafx.scene.control.ComboBoxBase#editable", "Boolean=false"); - ourFromSource.put("javafx.scene.control.CustomMenuItem#hideOnClick", "Boolean=true"); - ourFromSource.put("javafx.scene.control.Labeled#alignment", "Enum=CENTER_LEFT"); - ourFromSource.put("javafx.scene.control.Labeled#mnemonicParsing", "Boolean=false"); - ourFromSource.put("javafx.scene.control.SpinnerValueFactory#wrapAround", "Boolean=false"); - ourFromSource.put("javafx.scene.control.TableSelectionModel#cellSelectionEnabled", "Boolean=false"); - ourFromSource.put("javafx.scene.media.AudioClip#balance", "Double=0.0"); - ourFromSource.put("javafx.scene.media.AudioClip#cycleCount", "Integer=1"); - ourFromSource.put("javafx.scene.media.AudioClip#pan", "Double=0.0"); - ourFromSource.put("javafx.scene.media.AudioClip#priority", "Integer=0"); - ourFromSource.put("javafx.scene.media.AudioClip#rate", "Double=1.0"); - ourFromSource.put("javafx.scene.media.AudioClip#volume", "Double=1.0"); - ourFromSource.put("javafx.scene.media.AudioEqualizer#enabled", "Boolean=false"); - ourFromSource.put("javafx.scene.media.MediaPlayer#audioSpectrumInterval", "Double=0.1"); - ourFromSource.put("javafx.scene.media.MediaPlayer#audioSpectrumNumBands", "Integer=128"); - ourFromSource.put("javafx.scene.media.MediaPlayer#audioSpectrumThreshold", "Integer=-60"); - ourFromSource.put("javafx.scene.media.MediaPlayer#autoPlay", "Boolean=false"); - ourFromSource.put("javafx.scene.media.MediaPlayer#balance", "Double=0.0"); - ourFromSource.put("javafx.scene.media.MediaPlayer#cycleCount", "Integer=1"); - ourFromSource.put("javafx.scene.media.MediaPlayer#mute", "Boolean=false"); - ourFromSource.put("javafx.scene.media.MediaPlayer#rate", "Double=1.0"); - ourFromSource.put("javafx.scene.media.MediaPlayer#volume", "Double=1.0"); - ourFromSource.put("javafx.stage.PopupWindow#anchorLocation", "Enum=WINDOW_TOP_LEFT"); - ourFromSource.put("javafx.stage.PopupWindow#autoHide", "Boolean=false"); - ourFromSource.put("javafx.stage.PopupWindow#consumeAutoHidingEvents", "Boolean=true"); + ourFromSource.put("javafx.concurrent.ScheduledService#maximumFailureCount", Integer.MAX_VALUE); + ourFromSource.put("javafx.concurrent.ScheduledService#restartOnFailure", true); + ourFromSource.put("javafx.scene.Node#accessibleRole", AccessibleRole.NODE); + ourFromSource.put("javafx.scene.Node#focusTraversable", false); + ourFromSource.put("javafx.scene.Node#nodeOrientation", NodeOrientation.INHERIT); + ourFromSource.put("javafx.scene.Node#pickOnBounds", false); + ourFromSource.put("javafx.scene.SubScene#height", 0.0); + ourFromSource.put("javafx.scene.SubScene#width", 0.0); + ourFromSource.put("javafx.scene.chart.AreaChart#createSymbols", true); + ourFromSource.put("javafx.scene.chart.Axis#label", ""); + ourFromSource.put("javafx.scene.chart.BarChart#barGap", 4.0); + ourFromSource.put("javafx.scene.chart.BarChart#categoryGap", 10.0); + ourFromSource.put("javafx.scene.chart.Chart#title", ""); + ourFromSource.put("javafx.scene.chart.LineChart#axisSortingPolicy", LineChart.SortingPolicy.X_AXIS); + ourFromSource.put("javafx.scene.chart.LineChart#createSymbols", true); + ourFromSource.put("javafx.scene.chart.StackedAreaChart#createSymbols", true); + ourFromSource.put("javafx.scene.chart.StackedBarChart#categoryGap", 10.0); + ourFromSource.put("javafx.scene.chart.XYChart#alternativeColumnFillVisible", false); + ourFromSource.put("javafx.scene.chart.XYChart#alternativeRowFillVisible", true); + ourFromSource.put("javafx.scene.chart.XYChart#horizontalGridLinesVisible", true); + ourFromSource.put("javafx.scene.chart.XYChart#horizontalZeroLineVisible", true); + ourFromSource.put("javafx.scene.chart.XYChart#verticalGridLinesVisible", true); + ourFromSource.put("javafx.scene.chart.XYChart#verticalZeroLineVisible", true); + ourFromSource.put("javafx.scene.control.ComboBoxBase#editable", false); + ourFromSource.put("javafx.scene.control.CustomMenuItem#hideOnClick", true); + ourFromSource.put("javafx.scene.control.Labeled#alignment", Pos.CENTER_LEFT); + ourFromSource.put("javafx.scene.control.Labeled#mnemonicParsing", false); + ourFromSource.put("javafx.scene.control.SpinnerValueFactory#wrapAround", false); + ourFromSource.put("javafx.scene.control.TableSelectionModel#cellSelectionEnabled", false); + ourFromSource.put("javafx.scene.media.AudioClip#balance", 0.0); + ourFromSource.put("javafx.scene.media.AudioClip#cycleCount", 1); + ourFromSource.put("javafx.scene.media.AudioClip#pan", 0.0); + ourFromSource.put("javafx.scene.media.AudioClip#priority", 0); + ourFromSource.put("javafx.scene.media.AudioClip#rate", 1.0); + ourFromSource.put("javafx.scene.media.AudioClip#volume", 1.0); + ourFromSource.put("javafx.scene.media.AudioEqualizer#enabled", false); + ourFromSource.put("javafx.scene.media.MediaPlayer#audioSpectrumInterval", 0.1); + ourFromSource.put("javafx.scene.media.MediaPlayer#audioSpectrumNumBands", 128); + ourFromSource.put("javafx.scene.media.MediaPlayer#audioSpectrumThreshold", -60); + ourFromSource.put("javafx.scene.media.MediaPlayer#autoPlay", false); + ourFromSource.put("javafx.scene.media.MediaPlayer#balance", 0.0); + ourFromSource.put("javafx.scene.media.MediaPlayer#cycleCount", 1); + ourFromSource.put("javafx.scene.media.MediaPlayer#mute", false); + ourFromSource.put("javafx.scene.media.MediaPlayer#rate", 1.0); + ourFromSource.put("javafx.scene.media.MediaPlayer#volume", 1.0); + ourFromSource.put("javafx.stage.PopupWindow#anchorLocation", PopupWindow.AnchorLocation.WINDOW_TOP_LEFT); + ourFromSource.put("javafx.stage.PopupWindow#autoHide", false); + ourFromSource.put("javafx.stage.PopupWindow#consumeAutoHidingEvents", true); } private static final Set ourSkippedProperties = new HashSet<>( @@ -130,56 +122,6 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { "javafx.scene.web.WebEngine#userAgent", "javafx.scene.control.ButtonBar#buttonOrder")); - static class TypedValue { - - private final String kind; - private final String value; - - TypedValue(@NotNull String kind, @NotNull String value) { - this.kind = kind; - this.value = value; - } - - public String getKind() { - return kind; - } - - public String getValue() { - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TypedValue)) return false; - - TypedValue that = (TypedValue)o; - return kind.equals(that.kind) && value.equals(that.value); - } - - @Override - public int hashCode() { - return kind.hashCode() ^ value.hashCode(); - } - - @Override - public String toString() { - return kind + ':' + value; - } - } - - static class ContainedValue extends TypedValue { - private final String declaringClass; - - public ContainedValue(@NotNull String kind, @NotNull String value, @NotNull String declaringClass) { - super(kind, value); - this.declaringClass = declaringClass; - } - - public String getDeclaringClass() { - return declaringClass; - } - } /** * Attempt to instantiate JavaFX classes on the FX thread, obtain default property values from instantiated objects. @@ -187,8 +129,8 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { private static void generate() { System.out.println("--- JavaFX default property values ---"); - final Map> containedProperties = new TreeMap<>(); - final Map> declaredProperties = new TreeMap<>(); + final Map> defaultPropertyValues = new TreeMap<>(); + final Map> declaredProperties = new TreeMap<>(); final Map>> overriddenProperties = new TreeMap<>(); final Map superClasses = new TreeMap<>(); try (final ZipInputStream zip = new ZipInputStream(new FileInputStream(new File(BINARIES_PATH)))) { @@ -213,7 +155,7 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { } } - Object obj = null; + Object instance = null; for (PropertyDescriptor desc : info.getPropertyDescriptors()) { final String propName = desc.getName(); final String propQualifiedName = currentClass.getName() + "#" + propName; @@ -223,48 +165,41 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { if (setter == null || !hasBinding) continue; final Type type = setter.getGenericParameterTypes()[0]; - if (type instanceof Class) { - final Class paramCls = (Class)type; - final String kind = kind(paramCls); - if (kind != null) { - if (obj == null) { - obj = instantiate(currentClass); - if (obj == null) break; + if (type instanceof Class && isSupportedPropertyType((Class)type)) { + if (instance == null) { + instance = instantiate(currentClass); + if (instance == null) break; + } + final Object value; + final Method getter = desc.getReadMethod(); + try { + value = getter.invoke(instance); + } + catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException("Can't invoke " + getter + " on " + currentClass, e); + } + if (value != null) { + final Class declaringClass = getter.getDeclaringClass(); + final DefaultValue newValue = new DefaultValue(value, declaringClass.getName()); + if (declaringClass.getName().startsWith("javafx")) { + defaultPropertyValues + .computeIfAbsent(currentClass.getName(), unused -> new TreeMap<>()) + .put(propName, newValue); } - final Object value; - final Method getter = desc.getReadMethod(); - try { - value = getter.invoke(obj); - } - catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException("Can't invoke " + getter + " on " + currentClass, e); - } - if (value != null) { - if (!value.equals(validate(paramCls, value))) { - throw new RuntimeException("Invalid " + currentClass + "#" + propName + ":" + paramCls + "=" + value); - } - final Class declaringClass = getter.getDeclaringClass(); - final ContainedValue newValue = new ContainedValue(kind, String.valueOf(value), declaringClass.getName()); - if (declaringClass.getName().startsWith("javafx")) { - containedProperties - .computeIfAbsent(currentClass.getName(), unused -> new TreeMap<>()) - .put(propName, newValue); - } - final Map shareableProperties = - declaredProperties.computeIfAbsent(declaringClass.getName(), unused -> new TreeMap<>()); - final TypedValue sharedValue = shareableProperties.get(propName); + final Map shareableProperties = + declaredProperties.computeIfAbsent(declaringClass.getName(), unused -> new TreeMap<>()); + final String sharedValue = shareableProperties.get(propName); - if (sharedValue == null) { - shareableProperties.put(propName, newValue); - } - else if (!sharedValue.equals(newValue)) { - final Set multipleValues = overriddenProperties - .computeIfAbsent(declaringClass.getName(), unused -> new TreeMap<>()) - .computeIfAbsent(propName, unused -> new TreeSet<>()); - multipleValues.add(sharedValue.getValue()); - multipleValues.add(newValue.getValue()); - } + if (sharedValue == null) { + shareableProperties.put(propName, newValue.getValueText()); + } + else if (!sharedValue.equals(newValue.getValueText())) { + final Set multipleValues = overriddenProperties + .computeIfAbsent(declaringClass.getName(), unused -> new TreeMap<>()) + .computeIfAbsent(propName, unused -> new TreeSet<>()); + multipleValues.add(sharedValue); + multipleValues.add(newValue.getValueText()); } } } @@ -277,60 +212,51 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { } System.out.println("-------- Collected from sources ---------"); - ourFromSource.forEach((k, v) -> System.out.println(k + ":" + v)); + ourFromSource.forEach((qualifiedPropName, value) -> System.out.println(qualifiedPropName + "=" + value)); System.out.println("-------- Shared (not overridden) ---------"); declaredProperties.forEach( (className, propertyMap) -> { final Map> multipleValues = overriddenProperties.getOrDefault(className, Collections.emptyMap()); - propertyMap.forEach((propName, typedValue) -> { + propertyMap.forEach((propName, valueText) -> { if (!multipleValues.containsKey(propName)) { - System.out.println(className + "#" + propName + ":" + typedValue.getKind() + "=" + typedValue.getValue()); + System.out.println(className + "#" + propName + "=" + valueText); } }); }); System.out.println("-------- Overridden in subclass ---------"); - final Map> fromSource = new TreeMap<>(); - ourFromSource.forEach((classAndPropName, kindAndValue) -> { - final int p1 = classAndPropName.indexOf('#'); - if (p1 > 0 && p1 < classAndPropName.length()) { - final String className = classAndPropName.substring(0, p1); - final String propName = classAndPropName.substring(p1 + 1); - final int p3 = kindAndValue.indexOf('='); - if (p3 > 0 && p3 < kindAndValue.length()) { - final String kind = kindAndValue.substring(0, p3); - final String value = kindAndValue.substring(p3 + 1); - final Map propMap = fromSource.computeIfAbsent(className, unused -> new TreeMap<>()); - if (!propMap.containsKey(propName)) { - final ContainedValue valueFromSource = new ContainedValue(kind, value, className); - propMap.put(propName, valueFromSource); - } - } + final Map> fromSource = new TreeMap<>(); + ourFromSource.forEach((qualifiedPropName, value) -> { + final int p = qualifiedPropName.indexOf('#'); + if (p > 0 && p < qualifiedPropName.length()) { + final String className = qualifiedPropName.substring(0, p); + final String propName = qualifiedPropName.substring(p + 1); + fromSource.computeIfAbsent(className, unused -> new TreeMap<>()) + .computeIfAbsent(propName, unused -> new DefaultValue(value, className)); } }); - containedProperties.forEach( + defaultPropertyValues.forEach( (className, propertyMap) -> propertyMap.forEach( (propName, propValue) -> { - final ContainedValue sourceValue = fromSource.getOrDefault(className, Collections.emptyMap()).get(propName); - if (sourceValue != null && - sourceValue.equals(propValue)) { + final DefaultValue sourceValue = fromSource.getOrDefault(className, Collections.emptyMap()).get(propName); + if (sourceValue != null && areValuesEqual(propValue, sourceValue)) { return; } final Map> multipleValues = overriddenProperties.get(propValue.getDeclaringClass()); if (multipleValues != null && multipleValues.get(propName) != null) { boolean sameValueInSuperClass = false; for (String scName = superClasses.get(className); scName != null; scName = superClasses.get(scName)) { - final Map superPropMap = containedProperties.getOrDefault(scName, fromSource.get(scName)); + final Map superPropMap = defaultPropertyValues.getOrDefault(scName, fromSource.get(scName)); if (superPropMap != null) { - ContainedValue superValue = superPropMap.get(propName); + DefaultValue superValue = superPropMap.get(propName); if (superValue != null) { - sameValueInSuperClass = superValue.equals(propValue); + sameValueInSuperClass = areValuesEqual(propValue, superValue); break; } } } if (!sameValueInSuperClass) { - System.out.println(className + "#" + propName + ":" + propValue.getKind() + "=" + propValue.getValue()); + System.out.println(className + "#" + propName + "=" + propValue.getValueText()); } } })); @@ -343,46 +269,17 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { ourSkippedProperties.forEach(propName -> System.out.println("-- " + propName)); } - private static String kind(Class aCls) { - String kind = null; - if (aCls.isPrimitive()) { - kind = ourToBoxed.get(aCls).getSimpleName(); - } - else if (aCls.isEnum()) { - kind = "Enum"; - } - else if (Number.class.isAssignableFrom(aCls) || Boolean.class.isAssignableFrom(aCls) || Character.class.isAssignableFrom(aCls)) { - kind = aCls.getSimpleName(); - } - else if (CharSequence.class.isAssignableFrom(aCls)) { - kind = "String"; - } - return kind; + private static boolean areValuesEqual(DefaultValue first, DefaultValue second) { + return second.getValueText().equals(first.getValueText()); } - private static Object validate(Class aCls, Object val) { - try { - if (aCls.isPrimitive()) { - aCls = ourToBoxed.get(aCls); - Method valueOf = aCls.getDeclaredMethod("valueOf", String.class); - return valueOf.invoke(null, String.valueOf(val)); - } - if (Number.class.isAssignableFrom(aCls) || Boolean.class.isAssignableFrom(aCls) || Character.class.isAssignableFrom(aCls)) { - Method valueOf = aCls.getDeclaredMethod("valueOf", String.class); - return valueOf.invoke(null, String.valueOf(val)); - } - if (CharSequence.class.isAssignableFrom(aCls)) { - return val; - } - if (aCls.isEnum()) { - Method valueOf = aCls.getDeclaredMethod("valueOf", String.class); - return valueOf.invoke(null, String.valueOf(val)); - } - throw new IllegalStateException("Cannot cast " + val + " to unsupported class " + aCls); - } - catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { - throw new IllegalStateException("Cannot cast " + val + " to " + aCls, e); - } + private static boolean isSupportedPropertyType(Class propertyClass) { + return propertyClass.isPrimitive() || + propertyClass.isEnum() || + Number.class.isAssignableFrom(propertyClass) || + Boolean.class.isAssignableFrom(propertyClass) || + Character.class.isAssignableFrom(propertyClass) || + CharSequence.class.isAssignableFrom(propertyClass); } private static Object instantiate(Class aClass) { @@ -530,4 +427,27 @@ public class JavaFxGenerateDefaultPropertyValuesScript extends Application { System.out.println("--- Default values collected from JavaDoc and declarations. To be reviewed and manually edited ---"); props.forEach((n, v) -> System.out.println(n + "=" + v)); } + + private static class DefaultValue { + private final String myValueText; + private final String myDeclaringClass; + + public DefaultValue(@NotNull Object value, @NotNull String declaringClass) { + myValueText = String.valueOf(value); + myDeclaringClass = declaringClass; + } + + public String getDeclaringClass() { + return myDeclaringClass; + } + + public String getValueText() { + return myValueText; + } + + @Override + public String toString() { + return myValueText; + } + } } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java index d60539dca5fa..4aa147da4651 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/JavaFxPsiUtil.java @@ -446,7 +446,7 @@ public class JavaFxPsiUtil { public static boolean hasBuilder(@NotNull final PsiClass psiClass) { final Project project = psiClass.getProject(); - return CachedValuesManager.getManager(project).getCachedValue(psiClass, new CachedValueProvider() { + return CachedValuesManager.getCachedValue(psiClass, new CachedValueProvider() { @Nullable @Override public Result compute() { @@ -604,8 +604,6 @@ public class JavaFxPsiUtil { return null; } - private static final Key>> FILE_IDS_KEY = Key.create("FILE_IDS_KEY"); - @NotNull public static Map collectFileIds(@Nullable final XmlTag currentTag) { if (currentTag == null) return Collections.emptyMap(); @@ -614,10 +612,8 @@ public class JavaFxPsiUtil { final XmlTag rootTag = ((XmlFile)containingFile).getRootTag(); if (rootTag == null) return Collections.emptyMap(); - final Map cachedIds = CachedValuesManager.getManager(containingFile.getProject()) - .getCachedValue(rootTag, FILE_IDS_KEY, - () -> new CachedValueProvider.Result<>(prepareFileIds(rootTag), PsiModificationTracker.MODIFICATION_COUNT), false); - + final Map cachedIds = CachedValuesManager + .getCachedValue(rootTag, () -> new CachedValueProvider.Result<>(prepareFileIds(rootTag), PsiModificationTracker.MODIFICATION_COUNT)); final XmlAttribute currentIdAttribute = currentTag.getAttribute(FxmlConstants.FX_ID); if (currentIdAttribute != null) { final String currentId = currentIdAttribute.getValue(); @@ -684,6 +680,21 @@ public class JavaFxPsiUtil { || findValueOfMethod(targetClass) != null; } + @Nullable + public static String getBoxedPropertyType(PsiElement declaration) { + PsiType psiType = getWritablePropertyType(declaration); + if (psiType instanceof PsiPrimitiveType) { + return ((PsiPrimitiveType)psiType).getBoxedTypeName(); + } + if (PsiPrimitiveType.getUnboxedType(psiType) != null) { + final PsiClass psiClass = PsiUtil.resolveClassInType(psiType); + if (psiClass != null) { + return psiClass.getQualifiedName(); + } + } + return null; + } + private static class JavaFxControllerCachedValueProvider implements CachedValueProvider { private final Project myProject; private final PsiFile myContainingFile; diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection.java index fbd642fa8d74..a98b32f30696 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection.java @@ -1,12 +1,14 @@ package org.jetbrains.plugins.javaFX.fxml.codeInsight.inspections; import com.intellij.codeInsight.daemon.impl.analysis.RemoveAttributeIntentionFix; -import com.intellij.codeInspection.*; +import com.intellij.codeInspection.ProblemHighlightType; +import com.intellij.codeInspection.ProblemsHolder; +import com.intellij.codeInspection.XmlSuppressableInspectionTool; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.psi.*; -import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.meta.PsiMetaData; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; @@ -17,8 +19,9 @@ import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.javaFX.fxml.FxmlConstants; +import org.jetbrains.plugins.javaFX.fxml.JavaFxCommonNames; import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory; -import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxClassBackedElementDescriptor; +import org.jetbrains.plugins.javaFX.fxml.JavaFxPsiUtil; import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxPropertyAttributeDescriptor; import org.jetbrains.plugins.javaFX.fxml.descriptors.JavaFxPropertyElementDescriptor; @@ -26,8 +29,10 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.ref.Reference; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URL; -import java.util.LinkedHashSet; +import java.util.Collections; import java.util.Map; /** @@ -36,7 +41,7 @@ import java.util.Map; public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspectionTool { private static final Logger LOG = Logger.getInstance("#" + JavaFxRedundantPropertyValueInspection.class.getName()); - private static Reference>> ourDefaultPropertyValues; + private static Reference>> ourDefaultPropertyValues; @NotNull @Override @@ -64,7 +69,7 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe return; } - final Object defaultValue = getDefaultValue(attributeName, attribute.getParent()); + final Object defaultValue = getDefaultValue(descriptor, attributeName, attribute.getParent()); if (defaultValue == null) return; if (isEqualValue(attributeValue, defaultValue)) { @@ -78,8 +83,7 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe public void visitXmlTag(XmlTag tag) { super.visitXmlTag(tag); final XmlElementDescriptor descriptor = tag.getDescriptor(); - if (!(descriptor instanceof JavaFxPropertyElementDescriptor) && - !(descriptor instanceof JavaFxClassBackedElementDescriptor)) { + if (!(descriptor instanceof JavaFxPropertyElementDescriptor)) { return; } if (tag.getSubTags().length != 0) return; @@ -90,7 +94,7 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe return; } - final Object defaultValue = getDefaultValue(tag.getName(), tag.getParentTag()); + final Object defaultValue = getDefaultValue(descriptor, tag.getName(), tag.getParentTag()); if (defaultValue == null) return; if (isEqualValue(tagText, defaultValue)) { @@ -103,21 +107,19 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe } @Nullable - private static Object getDefaultValue(@NotNull String propertyName, @Nullable XmlTag enclosingTag) { + private static Object getDefaultValue(PsiMetaData propertyDescriptor, @NotNull String propertyName, @Nullable XmlTag enclosingTag) { if (enclosingTag != null) { final XmlElementDescriptor descriptor = enclosingTag.getDescriptor(); if (descriptor != null) { final PsiElement declaration = descriptor.getDeclaration(); if (declaration instanceof PsiClass) { - PsiClass containingClass = ((PsiClass)declaration); - { - final Object defaultValue = getDefaultPropertyValue(containingClass.getQualifiedName(), propertyName); - if (defaultValue != null) return defaultValue; - } - final LinkedHashSet superClasses = InheritanceUtil.getSuperClasses(containingClass); - for (PsiClass superClass : superClasses) { - final Object defaultValue = getDefaultPropertyValue(superClass.getQualifiedName(), propertyName); - if (defaultValue != null) return defaultValue; + for (PsiClass psiClass = ((PsiClass)declaration); psiClass != null; psiClass = psiClass.getSuperClass()) { + final String qualifiedName = psiClass.getQualifiedName(); + if (CommonClassNames.JAVA_LANG_OBJECT.equals(qualifiedName)) break; + final String defaultValue = getDefaultPropertyValue(qualifiedName, propertyName); + if (defaultValue != null) { + return getBoxedValue(propertyDescriptor.getDeclaration(), defaultValue); + } } } } @@ -125,12 +127,25 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe return null; } + private static Object getBoxedValue(PsiElement declaration, String value) { + String boxedQName = JavaFxPsiUtil.getBoxedPropertyType(declaration); + if (boxedQName == null) return value; + try { + final Class boxedClass = Class.forName(boxedQName); + final Method method = boxedClass.getMethod(JavaFxCommonNames.VALUE_OF, String.class); + return method.invoke(boxedClass, value); + } + catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException ignored) { + return value; + } + } + private static boolean isEqualValue(@NotNull String attributeValue, @NotNull Object defaultValue) { if (defaultValue instanceof String && defaultValue.equals(attributeValue)) return true; if (defaultValue instanceof Boolean) return defaultValue == Boolean.valueOf(attributeValue); if (defaultValue instanceof Double) { try { - return Double.compare((Double)defaultValue, Double.valueOf(attributeValue)) == 0; + return Double.compare((Double)defaultValue, Double.parseDouble(attributeValue)) == 0; } catch (NumberFormatException ignored) { return false; @@ -138,7 +153,7 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe } if (defaultValue instanceof Integer) { try { - return Integer.compare((Integer)defaultValue, Integer.valueOf(attributeValue)) == 0; + return Integer.compare((Integer)defaultValue, Integer.parseInt(attributeValue)) == 0; } catch (NumberFormatException ignored) { return false; @@ -147,33 +162,37 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe return false; } - private static Object getDefaultPropertyValue(String classQualifiedName, String propertyName) { - final Map values = getDefaultPropertyValues(classQualifiedName); + @Nullable + private static String getDefaultPropertyValue(String classQualifiedName, String propertyName) { + final Map values = getDefaultPropertyValues(classQualifiedName); return values != null ? values.get(propertyName) : null; } /** - * Load property values config. The config is produced with the script JavaFxGenerateDefaultPropertyValuesScript (can be found in tests) + * Load property values resource. The resource is produced with the script JavaFxGenerateDefaultPropertyValuesScript (can be found in tests) */ - private static Map getDefaultPropertyValues(String classQualifiedName) { - if (ourDefaultPropertyValues == null) { - ourDefaultPropertyValues = loadDefaultPropertyValues(JavaFxRedundantPropertyValueInspection.class.getSimpleName() + "8.txt"); + @Nullable + private static Map getDefaultPropertyValues(String classQualifiedName) { + Map> values = SoftReference.dereference(ourDefaultPropertyValues); + if (values == null) { + values = loadDefaultPropertyValues(JavaFxRedundantPropertyValueInspection.class.getSimpleName() + "8.txt"); + ourDefaultPropertyValues = new SoftReference<>(values); } - Map> values = SoftReference.dereference(ourDefaultPropertyValues); - return values != null ? values.get(classQualifiedName) : null; + return values.get(classQualifiedName); } /** * The file format is ClassName#propertyName:type=value per line, line with leading double dash (--) is commented out */ - private static Reference>> loadDefaultPropertyValues(String resourceName) { + @NotNull + private static Map> loadDefaultPropertyValues(@NotNull String resourceName) { final URL resource = JavaFxRedundantPropertyValueInspection.class.getResource(resourceName); if (resource == null) { LOG.warn("Resource not found: " + resourceName); - return null; + return Collections.emptyMap(); } - final Map> result = new THashMap<>(200); + final Map> result = new THashMap<>(200); try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.openStream(), CharsetToolkit.UTF8_CHARSET))) { for (String line : FileUtil.loadLines(reader)) { if (line.isEmpty() || line.startsWith("--")) continue; @@ -181,21 +200,14 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe final int p1 = line.indexOf('#'); if (p1 > 0 && p1 < line.length()) { final String className = line.substring(0, p1); - final int p2 = line.indexOf(':', p1); + final int p2 = line.indexOf('=', p1); if (p2 > p1 && p2 < line.length()) { final String propertyName = line.substring(p1 + 1, p2); - final int p3 = line.indexOf('=', p2 + 1); - if (p3 > 0 && p3 < line.length()) { - final String type = line.substring(p2 + 1, p3); - final String text = line.substring(p3 + 1); - final Object value = parseValue(type, text); - if (value != null) { - lineParsed = true; - final Map properties = result.computeIfAbsent(className, ignored -> new THashMap()); - if (properties.put(propertyName, value) != null) { - LOG.warn("Duplicate default property value " + line); - } - } + final String valueText = line.substring(p2 + 1); + lineParsed = true; + final Map properties = result.computeIfAbsent(className, ignored -> new THashMap<>()); + if (properties.put(propertyName, valueText) != null) { + LOG.warn("Duplicate default property value " + line); } } } @@ -205,35 +217,10 @@ public class JavaFxRedundantPropertyValueInspection extends XmlSuppressableInspe } } catch (IOException e) { - LOG.warn("Cannot read resource: " + resourceName, e); - return null; - } - - return new SoftReference>>(result); - } - - @Nullable - private static Object parseValue(String type, String text) { - try { - switch (type) { - case "Boolean": - return Boolean.valueOf(text); - case "Integer": - return Integer.valueOf(text); - case "Double": - return Double.valueOf(text); - case "String": - case "Enum": - return text; - default: - LOG.warn("Unsupported value type " + type + " for '" + text + "'"); - return null; - } - } - catch (NumberFormatException ignored) { - LOG.warn("Invalid format of " + type + ": '" + text + "'"); - return null; + LOG.warn("Can't read resource: " + resourceName, e); + return Collections.emptyMap(); } + return result; } } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection8.txt b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection8.txt index 5fae741200b7..62dc185e1988 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection8.txt +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxRedundantPropertyValueInspection8.txt @@ -1,664 +1,664 @@ --- JavaFX default property values --- -------- Collected from sources --------- -javafx.concurrent.ScheduledService#maximumFailureCount:Integer=2147483647 -javafx.concurrent.ScheduledService#restartOnFailure:Boolean=true -javafx.scene.Node#accessibleRole:Enum=NODE -javafx.scene.Node#focusTraversable:Boolean=false -javafx.scene.Node#nodeOrientation:Enum=INHERIT -javafx.scene.Node#pickOnBounds:Boolean=false -javafx.scene.SubScene#height:Double=0.0 -javafx.scene.SubScene#width:Double=0.0 -javafx.scene.chart.AreaChart#createSymbols:Boolean=true -javafx.scene.chart.Axis#label:String= -javafx.scene.chart.BarChart#barGap:Double=4.0 -javafx.scene.chart.BarChart#categoryGap:Double=10.0 -javafx.scene.chart.Chart#title:String= -javafx.scene.chart.LineChart#axisSortingPolicy:Enum=X_AXIS -javafx.scene.chart.LineChart#createSymbols:Boolean=true -javafx.scene.chart.StackedAreaChart#createSymbols:Boolean=true -javafx.scene.chart.StackedBarChart#categoryGap:Double=10.0 -javafx.scene.chart.XYChart#alternativeColumnFillVisible:Boolean=false -javafx.scene.chart.XYChart#alternativeRowFillVisible:Boolean=true -javafx.scene.chart.XYChart#horizontalGridLinesVisible:Boolean=true -javafx.scene.chart.XYChart#horizontalZeroLineVisible:Boolean=true -javafx.scene.chart.XYChart#verticalGridLinesVisible:Boolean=true -javafx.scene.chart.XYChart#verticalZeroLineVisible:Boolean=true -javafx.scene.control.ComboBoxBase#editable:Boolean=false -javafx.scene.control.CustomMenuItem#hideOnClick:Boolean=true -javafx.scene.control.Labeled#alignment:Enum=CENTER_LEFT -javafx.scene.control.Labeled#mnemonicParsing:Boolean=false -javafx.scene.control.SpinnerValueFactory#wrapAround:Boolean=false -javafx.scene.control.TableSelectionModel#cellSelectionEnabled:Boolean=false -javafx.scene.media.AudioClip#balance:Double=0.0 -javafx.scene.media.AudioClip#cycleCount:Integer=1 -javafx.scene.media.AudioClip#pan:Double=0.0 -javafx.scene.media.AudioClip#priority:Integer=0 -javafx.scene.media.AudioClip#rate:Double=1.0 -javafx.scene.media.AudioClip#volume:Double=1.0 -javafx.scene.media.AudioEqualizer#enabled:Boolean=false -javafx.scene.media.MediaPlayer#audioSpectrumInterval:Double=0.1 -javafx.scene.media.MediaPlayer#audioSpectrumNumBands:Integer=128 -javafx.scene.media.MediaPlayer#audioSpectrumThreshold:Integer=-60 -javafx.scene.media.MediaPlayer#autoPlay:Boolean=false -javafx.scene.media.MediaPlayer#balance:Double=0.0 -javafx.scene.media.MediaPlayer#cycleCount:Integer=1 -javafx.scene.media.MediaPlayer#mute:Boolean=false -javafx.scene.media.MediaPlayer#rate:Double=1.0 -javafx.scene.media.MediaPlayer#volume:Double=1.0 -javafx.stage.PopupWindow#anchorLocation:Enum=WINDOW_TOP_LEFT -javafx.stage.PopupWindow#autoHide:Boolean=false -javafx.stage.PopupWindow#consumeAutoHidingEvents:Boolean=true +javafx.concurrent.ScheduledService#maximumFailureCount=2147483647 +javafx.concurrent.ScheduledService#restartOnFailure=true +javafx.scene.Node#accessibleRole=NODE +javafx.scene.Node#focusTraversable=false +javafx.scene.Node#nodeOrientation=INHERIT +javafx.scene.Node#pickOnBounds=false +javafx.scene.SubScene#height=0.0 +javafx.scene.SubScene#width=0.0 +javafx.scene.chart.AreaChart#createSymbols=true +javafx.scene.chart.Axis#label= +javafx.scene.chart.BarChart#barGap=4.0 +javafx.scene.chart.BarChart#categoryGap=10.0 +javafx.scene.chart.Chart#title= +javafx.scene.chart.LineChart#axisSortingPolicy=X_AXIS +javafx.scene.chart.LineChart#createSymbols=true +javafx.scene.chart.StackedAreaChart#createSymbols=true +javafx.scene.chart.StackedBarChart#categoryGap=10.0 +javafx.scene.chart.XYChart#alternativeColumnFillVisible=false +javafx.scene.chart.XYChart#alternativeRowFillVisible=true +javafx.scene.chart.XYChart#horizontalGridLinesVisible=true +javafx.scene.chart.XYChart#horizontalZeroLineVisible=true +javafx.scene.chart.XYChart#verticalGridLinesVisible=true +javafx.scene.chart.XYChart#verticalZeroLineVisible=true +javafx.scene.control.ComboBoxBase#editable=false +javafx.scene.control.CustomMenuItem#hideOnClick=true +javafx.scene.control.Labeled#alignment=CENTER_LEFT +javafx.scene.control.Labeled#mnemonicParsing=false +javafx.scene.control.SpinnerValueFactory#wrapAround=false +javafx.scene.control.TableSelectionModel#cellSelectionEnabled=false +javafx.scene.media.AudioClip#balance=0.0 +javafx.scene.media.AudioClip#cycleCount=1 +javafx.scene.media.AudioClip#pan=0.0 +javafx.scene.media.AudioClip#priority=0 +javafx.scene.media.AudioClip#rate=1.0 +javafx.scene.media.AudioClip#volume=1.0 +javafx.scene.media.AudioEqualizer#enabled=false +javafx.scene.media.MediaPlayer#audioSpectrumInterval=0.1 +javafx.scene.media.MediaPlayer#audioSpectrumNumBands=128 +javafx.scene.media.MediaPlayer#audioSpectrumThreshold=-60 +javafx.scene.media.MediaPlayer#autoPlay=false +javafx.scene.media.MediaPlayer#balance=0.0 +javafx.scene.media.MediaPlayer#cycleCount=1 +javafx.scene.media.MediaPlayer#mute=false +javafx.scene.media.MediaPlayer#rate=1.0 +javafx.scene.media.MediaPlayer#volume=1.0 +javafx.stage.PopupWindow#anchorLocation=WINDOW_TOP_LEFT +javafx.stage.PopupWindow#autoHide=false +javafx.stage.PopupWindow#consumeAutoHidingEvents=true -------- Shared (not overridden) --------- -javafx.animation.Animation#autoReverse:Boolean=false -javafx.animation.Animation#cycleCount:Integer=1 -javafx.animation.Animation#rate:Double=1.0 -javafx.animation.FadeTransition#byValue:Double=0.0 -javafx.animation.FadeTransition#fromValue:Double=NaN -javafx.animation.FadeTransition#toValue:Double=NaN -javafx.animation.PathTransition#orientation:Enum=NONE -javafx.animation.RotateTransition#byAngle:Double=0.0 -javafx.animation.RotateTransition#fromAngle:Double=NaN -javafx.animation.RotateTransition#toAngle:Double=NaN -javafx.animation.ScaleTransition#byX:Double=0.0 -javafx.animation.ScaleTransition#byY:Double=0.0 -javafx.animation.ScaleTransition#byZ:Double=0.0 -javafx.animation.ScaleTransition#fromX:Double=NaN -javafx.animation.ScaleTransition#fromY:Double=NaN -javafx.animation.ScaleTransition#fromZ:Double=NaN -javafx.animation.ScaleTransition#toX:Double=NaN -javafx.animation.ScaleTransition#toY:Double=NaN -javafx.animation.ScaleTransition#toZ:Double=NaN -javafx.animation.TranslateTransition#byX:Double=0.0 -javafx.animation.TranslateTransition#byY:Double=0.0 -javafx.animation.TranslateTransition#byZ:Double=0.0 -javafx.animation.TranslateTransition#fromX:Double=NaN -javafx.animation.TranslateTransition#fromY:Double=NaN -javafx.animation.TranslateTransition#fromZ:Double=NaN -javafx.animation.TranslateTransition#toX:Double=NaN -javafx.animation.TranslateTransition#toY:Double=NaN -javafx.animation.TranslateTransition#toZ:Double=NaN -javafx.scene.Camera#farClip:Double=100.0 -javafx.scene.Camera#nearClip:Double=0.1 -javafx.scene.Group#autoSizeChildren:Boolean=true -javafx.scene.LightBase#lightOn:Boolean=true -javafx.scene.Node#cache:Boolean=false -javafx.scene.Node#cacheHint:Enum=DEFAULT -javafx.scene.Node#depthTest:Enum=INHERIT -javafx.scene.Node#disable:Boolean=false -javafx.scene.Node#layoutX:Double=0.0 -javafx.scene.Node#layoutY:Double=0.0 -javafx.scene.Node#managed:Boolean=true -javafx.scene.Node#mouseTransparent:Boolean=false -javafx.scene.Node#opacity:Double=1.0 -javafx.scene.Node#rotate:Double=0.0 -javafx.scene.Node#scaleX:Double=1.0 -javafx.scene.Node#scaleY:Double=1.0 -javafx.scene.Node#scaleZ:Double=1.0 -javafx.scene.Node#style:String= -javafx.scene.Node#translateX:Double=0.0 -javafx.scene.Node#translateY:Double=0.0 -javafx.scene.Node#translateZ:Double=0.0 -javafx.scene.Node#visible:Boolean=true -javafx.scene.PerspectiveCamera#fieldOfView:Double=30.0 -javafx.scene.PerspectiveCamera#verticalFieldOfView:Boolean=true -javafx.scene.canvas.Canvas#height:Double=0.0 -javafx.scene.canvas.Canvas#width:Double=0.0 -javafx.scene.chart.Axis#animated:Boolean=true -javafx.scene.chart.Axis#autoRanging:Boolean=true -javafx.scene.chart.Axis#tickLabelGap:Double=3.0 -javafx.scene.chart.Axis#tickLabelRotation:Double=0.0 -javafx.scene.chart.Axis#tickLabelsVisible:Boolean=true -javafx.scene.chart.Axis#tickLength:Double=8.0 -javafx.scene.chart.Axis#tickMarkVisible:Boolean=true -javafx.scene.chart.Axis$TickMark#position:Double=0.0 -javafx.scene.chart.CategoryAxis#endMargin:Double=5.0 -javafx.scene.chart.CategoryAxis#gapStartAndEnd:Boolean=true -javafx.scene.chart.CategoryAxis#startMargin:Double=5.0 -javafx.scene.chart.Chart#animated:Boolean=true -javafx.scene.chart.Chart#legendSide:Enum=BOTTOM -javafx.scene.chart.Chart#legendVisible:Boolean=true -javafx.scene.chart.Chart#titleSide:Enum=TOP -javafx.scene.chart.NumberAxis#forceZeroInRange:Boolean=true -javafx.scene.chart.NumberAxis#tickUnit:Double=5.0 -javafx.scene.chart.PieChart#clockwise:Boolean=true -javafx.scene.chart.PieChart#labelLineLength:Double=20.0 -javafx.scene.chart.PieChart#labelsVisible:Boolean=true -javafx.scene.chart.PieChart#startAngle:Double=0.0 -javafx.scene.chart.ValueAxis#lowerBound:Double=0.0 -javafx.scene.chart.ValueAxis#minorTickCount:Integer=5 -javafx.scene.chart.ValueAxis#minorTickLength:Double=5.0 -javafx.scene.chart.ValueAxis#minorTickVisible:Boolean=true -javafx.scene.chart.ValueAxis#upperBound:Double=100.0 -javafx.scene.control.Button#cancelButton:Boolean=false -javafx.scene.control.Button#defaultButton:Boolean=false -javafx.scene.control.ButtonBar#buttonMinWidth:Double=85.0 -javafx.scene.control.Cell#editable:Boolean=true -javafx.scene.control.CheckBox#allowIndeterminate:Boolean=false -javafx.scene.control.CheckBox#indeterminate:Boolean=false -javafx.scene.control.CheckBox#selected:Boolean=false -javafx.scene.control.CheckBoxTreeItem#independent:Boolean=false -javafx.scene.control.CheckBoxTreeItem#indeterminate:Boolean=false -javafx.scene.control.CheckBoxTreeItem#selected:Boolean=false -javafx.scene.control.CheckMenuItem#selected:Boolean=false -javafx.scene.control.ComboBox#visibleRowCount:Integer=10 -javafx.scene.control.ComboBoxBase#promptText:String= -javafx.scene.control.ContextMenu#impl_showRelativeToWindow:Boolean=false -javafx.scene.control.DatePicker#showWeekNumbers:Boolean=false -javafx.scene.control.Dialog#headerText:String=Confirmation -javafx.scene.control.Dialog#resizable:Boolean=false -javafx.scene.control.Dialog#title:String=Confirmation -javafx.scene.control.DialogPane#expanded:Boolean=false -javafx.scene.control.Hyperlink#visited:Boolean=false -javafx.scene.control.Labeled#contentDisplay:Enum=LEFT -javafx.scene.control.Labeled#ellipsisString:String=... -javafx.scene.control.Labeled#graphicTextGap:Double=4.0 -javafx.scene.control.Labeled#lineSpacing:Double=0.0 -javafx.scene.control.Labeled#text:String= -javafx.scene.control.Labeled#textAlignment:Enum=LEFT -javafx.scene.control.Labeled#textOverrun:Enum=ELLIPSIS -javafx.scene.control.Labeled#underline:Boolean=false -javafx.scene.control.Labeled#wrapText:Boolean=false -javafx.scene.control.ListView#editable:Boolean=false -javafx.scene.control.ListView#fixedCellSize:Double=-1.0 -javafx.scene.control.ListView#orientation:Enum=VERTICAL -javafx.scene.control.MenuBar#useSystemMenuBar:Boolean=false -javafx.scene.control.MenuButton#popupSide:Enum=BOTTOM -javafx.scene.control.MenuItem#disable:Boolean=false -javafx.scene.control.MenuItem#mnemonicParsing:Boolean=true -javafx.scene.control.MenuItem#text:String= -javafx.scene.control.MenuItem#visible:Boolean=true -javafx.scene.control.Pagination#currentPageIndex:Integer=0 -javafx.scene.control.Pagination#maxPageIndicatorCount:Integer=10 -javafx.scene.control.Pagination#pageCount:Integer=2147483647 -javafx.scene.control.PopupControl#maxHeight:Double=-1.0 -javafx.scene.control.PopupControl#maxWidth:Double=-1.0 -javafx.scene.control.PopupControl#minHeight:Double=-1.0 -javafx.scene.control.PopupControl#minWidth:Double=-1.0 -javafx.scene.control.PopupControl#prefHeight:Double=-1.0 -javafx.scene.control.PopupControl#prefWidth:Double=-1.0 -javafx.scene.control.PopupControl#style:String= -javafx.scene.control.ProgressIndicator#progress:Double=-1.0 -javafx.scene.control.RadioMenuItem#selected:Boolean=false -javafx.scene.control.ScrollBar#blockIncrement:Double=10.0 -javafx.scene.control.ScrollBar#max:Double=100.0 -javafx.scene.control.ScrollBar#min:Double=0.0 -javafx.scene.control.ScrollBar#orientation:Enum=HORIZONTAL -javafx.scene.control.ScrollBar#unitIncrement:Double=1.0 -javafx.scene.control.ScrollBar#value:Double=0.0 -javafx.scene.control.ScrollBar#visibleAmount:Double=15.0 -javafx.scene.control.ScrollPane#fitToHeight:Boolean=false -javafx.scene.control.ScrollPane#fitToWidth:Boolean=false -javafx.scene.control.ScrollPane#hbarPolicy:Enum=AS_NEEDED -javafx.scene.control.ScrollPane#hmax:Double=1.0 -javafx.scene.control.ScrollPane#hmin:Double=0.0 -javafx.scene.control.ScrollPane#hvalue:Double=0.0 -javafx.scene.control.ScrollPane#minViewportHeight:Double=0.0 -javafx.scene.control.ScrollPane#minViewportWidth:Double=0.0 -javafx.scene.control.ScrollPane#pannable:Boolean=false -javafx.scene.control.ScrollPane#prefViewportHeight:Double=0.0 -javafx.scene.control.ScrollPane#prefViewportWidth:Double=0.0 -javafx.scene.control.ScrollPane#vbarPolicy:Enum=AS_NEEDED -javafx.scene.control.ScrollPane#vmax:Double=1.0 -javafx.scene.control.ScrollPane#vmin:Double=0.0 -javafx.scene.control.ScrollPane#vvalue:Double=0.0 -javafx.scene.control.Separator#halignment:Enum=CENTER -javafx.scene.control.Separator#orientation:Enum=HORIZONTAL -javafx.scene.control.Separator#valignment:Enum=CENTER -javafx.scene.control.Slider#blockIncrement:Double=10.0 -javafx.scene.control.Slider#majorTickUnit:Double=25.0 -javafx.scene.control.Slider#max:Double=100.0 -javafx.scene.control.Slider#min:Double=0.0 -javafx.scene.control.Slider#minorTickCount:Integer=3 -javafx.scene.control.Slider#orientation:Enum=HORIZONTAL -javafx.scene.control.Slider#showTickLabels:Boolean=false -javafx.scene.control.Slider#showTickMarks:Boolean=false -javafx.scene.control.Slider#snapToTicks:Boolean=false -javafx.scene.control.Slider#value:Double=0.0 -javafx.scene.control.Slider#valueChanging:Boolean=false -javafx.scene.control.Spinner#editable:Boolean=false -javafx.scene.control.SplitPane#orientation:Enum=HORIZONTAL -javafx.scene.control.SplitPane$Divider#position:Double=0.5 -javafx.scene.control.Tab#closable:Boolean=true -javafx.scene.control.Tab#disable:Boolean=false -javafx.scene.control.TabPane#rotateGraphic:Boolean=false -javafx.scene.control.TabPane#side:Enum=TOP -javafx.scene.control.TabPane#tabClosingPolicy:Enum=SELECTED_TAB -javafx.scene.control.TabPane#tabMaxHeight:Double=1.7976931348623157E308 -javafx.scene.control.TabPane#tabMaxWidth:Double=1.7976931348623157E308 -javafx.scene.control.TabPane#tabMinHeight:Double=0.0 -javafx.scene.control.TabPane#tabMinWidth:Double=0.0 -javafx.scene.control.TableColumn#sortType:Enum=ASCENDING -javafx.scene.control.TableColumnBase#editable:Boolean=true -javafx.scene.control.TableColumnBase#maxWidth:Double=5000.0 -javafx.scene.control.TableColumnBase#minWidth:Double=10.0 -javafx.scene.control.TableColumnBase#prefWidth:Double=80.0 -javafx.scene.control.TableColumnBase#resizable:Boolean=true -javafx.scene.control.TableColumnBase#sortable:Boolean=true -javafx.scene.control.TableColumnBase#style:String= -javafx.scene.control.TableColumnBase#text:String= -javafx.scene.control.TableColumnBase#visible:Boolean=true -javafx.scene.control.TableView#editable:Boolean=false -javafx.scene.control.TableView#fixedCellSize:Double=-1.0 -javafx.scene.control.TableView#tableMenuButtonVisible:Boolean=false -javafx.scene.control.TextArea#prefColumnCount:Integer=40 -javafx.scene.control.TextArea#prefRowCount:Integer=10 -javafx.scene.control.TextArea#scrollLeft:Double=0.0 -javafx.scene.control.TextArea#scrollTop:Double=0.0 -javafx.scene.control.TextArea#wrapText:Boolean=false -javafx.scene.control.TextField#alignment:Enum=CENTER_LEFT -javafx.scene.control.TextField#prefColumnCount:Integer=12 -javafx.scene.control.TextInputControl#editable:Boolean=true -javafx.scene.control.TextInputControl#promptText:String= -javafx.scene.control.TextInputControl#text:String= -javafx.scene.control.TitledPane#animated:Boolean=true -javafx.scene.control.TitledPane#collapsible:Boolean=true -javafx.scene.control.TitledPane#expanded:Boolean=true -javafx.scene.control.ToggleButton#selected:Boolean=false -javafx.scene.control.ToolBar#orientation:Enum=HORIZONTAL -javafx.scene.control.Tooltip#contentDisplay:Enum=LEFT -javafx.scene.control.Tooltip#graphicTextGap:Double=4.0 -javafx.scene.control.Tooltip#text:String= -javafx.scene.control.Tooltip#textAlignment:Enum=LEFT -javafx.scene.control.Tooltip#textOverrun:Enum=ELLIPSIS -javafx.scene.control.Tooltip#wrapText:Boolean=false -javafx.scene.control.TreeItem#expanded:Boolean=false -javafx.scene.control.TreeTableColumn#sortType:Enum=ASCENDING -javafx.scene.control.TreeTableView#editable:Boolean=false -javafx.scene.control.TreeTableView#fixedCellSize:Double=-1.0 -javafx.scene.control.TreeTableView#showRoot:Boolean=true -javafx.scene.control.TreeTableView#sortMode:Enum=ALL_DESCENDANTS -javafx.scene.control.TreeTableView#tableMenuButtonVisible:Boolean=false -javafx.scene.control.TreeView#editable:Boolean=false -javafx.scene.control.TreeView#fixedCellSize:Double=-1.0 -javafx.scene.control.TreeView#showRoot:Boolean=true -javafx.scene.control.cell.ComboBoxListCell#comboBoxEditable:Boolean=false -javafx.scene.control.cell.ComboBoxTableCell#comboBoxEditable:Boolean=false -javafx.scene.control.cell.ComboBoxTreeCell#comboBoxEditable:Boolean=false -javafx.scene.control.cell.ComboBoxTreeTableCell#comboBoxEditable:Boolean=false -javafx.scene.effect.Blend#mode:Enum=SRC_OVER -javafx.scene.effect.Blend#opacity:Double=1.0 -javafx.scene.effect.Bloom#threshold:Double=0.3 -javafx.scene.effect.BoxBlur#height:Double=5.0 -javafx.scene.effect.BoxBlur#iterations:Integer=1 -javafx.scene.effect.BoxBlur#width:Double=5.0 -javafx.scene.effect.ColorAdjust#brightness:Double=0.0 -javafx.scene.effect.ColorAdjust#contrast:Double=0.0 -javafx.scene.effect.ColorAdjust#hue:Double=0.0 -javafx.scene.effect.ColorAdjust#saturation:Double=0.0 -javafx.scene.effect.ColorInput#height:Double=0.0 -javafx.scene.effect.ColorInput#width:Double=0.0 -javafx.scene.effect.ColorInput#x:Double=0.0 -javafx.scene.effect.ColorInput#y:Double=0.0 -javafx.scene.effect.DisplacementMap#offsetX:Double=0.0 -javafx.scene.effect.DisplacementMap#offsetY:Double=0.0 -javafx.scene.effect.DisplacementMap#scaleX:Double=1.0 -javafx.scene.effect.DisplacementMap#scaleY:Double=1.0 -javafx.scene.effect.DisplacementMap#wrap:Boolean=false -javafx.scene.effect.DropShadow#blurType:Enum=THREE_PASS_BOX -javafx.scene.effect.DropShadow#height:Double=21.0 -javafx.scene.effect.DropShadow#offsetX:Double=0.0 -javafx.scene.effect.DropShadow#offsetY:Double=0.0 -javafx.scene.effect.DropShadow#radius:Double=10.0 -javafx.scene.effect.DropShadow#spread:Double=0.0 -javafx.scene.effect.DropShadow#width:Double=21.0 -javafx.scene.effect.FloatMap#height:Integer=1 -javafx.scene.effect.FloatMap#width:Integer=1 -javafx.scene.effect.GaussianBlur#radius:Double=10.0 -javafx.scene.effect.Glow#level:Double=0.3 -javafx.scene.effect.ImageInput#x:Double=0.0 -javafx.scene.effect.ImageInput#y:Double=0.0 -javafx.scene.effect.InnerShadow#blurType:Enum=THREE_PASS_BOX -javafx.scene.effect.InnerShadow#choke:Double=0.0 -javafx.scene.effect.InnerShadow#height:Double=21.0 -javafx.scene.effect.InnerShadow#offsetX:Double=0.0 -javafx.scene.effect.InnerShadow#offsetY:Double=0.0 -javafx.scene.effect.InnerShadow#radius:Double=10.0 -javafx.scene.effect.InnerShadow#width:Double=21.0 -javafx.scene.effect.Light$Distant#azimuth:Double=45.0 -javafx.scene.effect.Light$Distant#elevation:Double=45.0 -javafx.scene.effect.Light$Point#x:Double=0.0 -javafx.scene.effect.Light$Point#y:Double=0.0 -javafx.scene.effect.Light$Point#z:Double=0.0 -javafx.scene.effect.Light$Spot#pointsAtX:Double=0.0 -javafx.scene.effect.Light$Spot#pointsAtY:Double=0.0 -javafx.scene.effect.Light$Spot#pointsAtZ:Double=0.0 -javafx.scene.effect.Light$Spot#specularExponent:Double=1.0 -javafx.scene.effect.Lighting#diffuseConstant:Double=1.0 -javafx.scene.effect.Lighting#specularConstant:Double=0.3 -javafx.scene.effect.Lighting#specularExponent:Double=20.0 -javafx.scene.effect.Lighting#surfaceScale:Double=1.5 -javafx.scene.effect.MotionBlur#angle:Double=0.0 -javafx.scene.effect.MotionBlur#radius:Double=10.0 -javafx.scene.effect.PerspectiveTransform#llx:Double=0.0 -javafx.scene.effect.PerspectiveTransform#lly:Double=0.0 -javafx.scene.effect.PerspectiveTransform#lrx:Double=0.0 -javafx.scene.effect.PerspectiveTransform#lry:Double=0.0 -javafx.scene.effect.PerspectiveTransform#ulx:Double=0.0 -javafx.scene.effect.PerspectiveTransform#uly:Double=0.0 -javafx.scene.effect.PerspectiveTransform#urx:Double=0.0 -javafx.scene.effect.PerspectiveTransform#ury:Double=0.0 -javafx.scene.effect.Reflection#bottomOpacity:Double=0.0 -javafx.scene.effect.Reflection#fraction:Double=0.75 -javafx.scene.effect.Reflection#topOffset:Double=0.0 -javafx.scene.effect.Reflection#topOpacity:Double=0.5 -javafx.scene.effect.SepiaTone#level:Double=1.0 -javafx.scene.effect.Shadow#blurType:Enum=THREE_PASS_BOX -javafx.scene.effect.Shadow#height:Double=21.0 -javafx.scene.effect.Shadow#radius:Double=10.0 -javafx.scene.effect.Shadow#width:Double=21.0 -javafx.scene.image.ImageView#fitHeight:Double=0.0 -javafx.scene.image.ImageView#fitWidth:Double=0.0 -javafx.scene.image.ImageView#preserveRatio:Boolean=false -javafx.scene.image.ImageView#smooth:Boolean=true -javafx.scene.image.ImageView#x:Double=0.0 -javafx.scene.image.ImageView#y:Double=0.0 -javafx.scene.layout.ColumnConstraints#fillWidth:Boolean=true -javafx.scene.layout.ColumnConstraints#maxWidth:Double=-1.0 -javafx.scene.layout.ColumnConstraints#minWidth:Double=-1.0 -javafx.scene.layout.ColumnConstraints#percentWidth:Double=-1.0 -javafx.scene.layout.ColumnConstraints#prefWidth:Double=-1.0 -javafx.scene.layout.FlowPane#alignment:Enum=TOP_LEFT -javafx.scene.layout.FlowPane#columnHalignment:Enum=LEFT -javafx.scene.layout.FlowPane#hgap:Double=0.0 -javafx.scene.layout.FlowPane#orientation:Enum=HORIZONTAL -javafx.scene.layout.FlowPane#prefWrapLength:Double=400.0 -javafx.scene.layout.FlowPane#rowValignment:Enum=CENTER -javafx.scene.layout.FlowPane#vgap:Double=0.0 -javafx.scene.layout.GridPane#alignment:Enum=TOP_LEFT -javafx.scene.layout.GridPane#gridLinesVisible:Boolean=false -javafx.scene.layout.GridPane#hgap:Double=0.0 -javafx.scene.layout.GridPane#vgap:Double=0.0 -javafx.scene.layout.HBox#alignment:Enum=TOP_LEFT -javafx.scene.layout.HBox#fillHeight:Boolean=true -javafx.scene.layout.HBox#spacing:Double=0.0 -javafx.scene.layout.Region#cacheShape:Boolean=true -javafx.scene.layout.Region#centerShape:Boolean=true -javafx.scene.layout.Region#maxHeight:Double=-1.0 -javafx.scene.layout.Region#maxWidth:Double=-1.0 -javafx.scene.layout.Region#minHeight:Double=-1.0 -javafx.scene.layout.Region#minWidth:Double=-1.0 -javafx.scene.layout.Region#prefHeight:Double=-1.0 -javafx.scene.layout.Region#prefWidth:Double=-1.0 -javafx.scene.layout.Region#scaleShape:Boolean=true -javafx.scene.layout.Region#snapToPixel:Boolean=true -javafx.scene.layout.RowConstraints#fillHeight:Boolean=true -javafx.scene.layout.RowConstraints#maxHeight:Double=-1.0 -javafx.scene.layout.RowConstraints#minHeight:Double=-1.0 -javafx.scene.layout.RowConstraints#percentHeight:Double=-1.0 -javafx.scene.layout.RowConstraints#prefHeight:Double=-1.0 -javafx.scene.layout.StackPane#alignment:Enum=CENTER -javafx.scene.layout.TilePane#alignment:Enum=TOP_LEFT -javafx.scene.layout.TilePane#hgap:Double=0.0 -javafx.scene.layout.TilePane#orientation:Enum=HORIZONTAL -javafx.scene.layout.TilePane#prefColumns:Integer=5 -javafx.scene.layout.TilePane#prefRows:Integer=5 -javafx.scene.layout.TilePane#prefTileHeight:Double=-1.0 -javafx.scene.layout.TilePane#prefTileWidth:Double=-1.0 -javafx.scene.layout.TilePane#tileAlignment:Enum=CENTER -javafx.scene.layout.TilePane#vgap:Double=0.0 -javafx.scene.layout.VBox#alignment:Enum=TOP_LEFT -javafx.scene.layout.VBox#fillWidth:Boolean=true -javafx.scene.layout.VBox#spacing:Double=0.0 -javafx.scene.media.EqualizerBand#bandwidth:Double=0.0 -javafx.scene.media.EqualizerBand#centerFrequency:Double=0.0 -javafx.scene.media.EqualizerBand#gain:Double=0.0 -javafx.scene.media.MediaView#fitHeight:Double=0.0 -javafx.scene.media.MediaView#fitWidth:Double=0.0 -javafx.scene.media.MediaView#preserveRatio:Boolean=true -javafx.scene.media.MediaView#smooth:Boolean=true -javafx.scene.media.MediaView#x:Double=0.0 -javafx.scene.media.MediaView#y:Double=0.0 -javafx.scene.paint.PhongMaterial#specularPower:Double=32.0 -javafx.scene.shape.Arc#centerX:Double=0.0 -javafx.scene.shape.Arc#centerY:Double=0.0 -javafx.scene.shape.Arc#length:Double=0.0 -javafx.scene.shape.Arc#radiusX:Double=0.0 -javafx.scene.shape.Arc#radiusY:Double=0.0 -javafx.scene.shape.Arc#startAngle:Double=0.0 -javafx.scene.shape.Arc#type:Enum=OPEN -javafx.scene.shape.ArcTo#XAxisRotation:Double=0.0 -javafx.scene.shape.ArcTo#largeArcFlag:Boolean=false -javafx.scene.shape.ArcTo#radiusX:Double=0.0 -javafx.scene.shape.ArcTo#radiusY:Double=0.0 -javafx.scene.shape.ArcTo#sweepFlag:Boolean=false -javafx.scene.shape.ArcTo#x:Double=0.0 -javafx.scene.shape.ArcTo#y:Double=0.0 -javafx.scene.shape.Box#depth:Double=2.0 -javafx.scene.shape.Box#height:Double=2.0 -javafx.scene.shape.Box#width:Double=2.0 -javafx.scene.shape.Circle#centerX:Double=0.0 -javafx.scene.shape.Circle#centerY:Double=0.0 -javafx.scene.shape.Circle#radius:Double=0.0 -javafx.scene.shape.CubicCurve#controlX1:Double=0.0 -javafx.scene.shape.CubicCurve#controlX2:Double=0.0 -javafx.scene.shape.CubicCurve#controlY1:Double=0.0 -javafx.scene.shape.CubicCurve#controlY2:Double=0.0 -javafx.scene.shape.CubicCurve#endX:Double=0.0 -javafx.scene.shape.CubicCurve#endY:Double=0.0 -javafx.scene.shape.CubicCurve#startX:Double=0.0 -javafx.scene.shape.CubicCurve#startY:Double=0.0 -javafx.scene.shape.CubicCurveTo#controlX1:Double=0.0 -javafx.scene.shape.CubicCurveTo#controlX2:Double=0.0 -javafx.scene.shape.CubicCurveTo#controlY1:Double=0.0 -javafx.scene.shape.CubicCurveTo#controlY2:Double=0.0 -javafx.scene.shape.CubicCurveTo#x:Double=0.0 -javafx.scene.shape.CubicCurveTo#y:Double=0.0 -javafx.scene.shape.Cylinder#height:Double=2.0 -javafx.scene.shape.Cylinder#radius:Double=1.0 -javafx.scene.shape.Ellipse#centerX:Double=0.0 -javafx.scene.shape.Ellipse#centerY:Double=0.0 -javafx.scene.shape.Ellipse#radiusX:Double=0.0 -javafx.scene.shape.Ellipse#radiusY:Double=0.0 -javafx.scene.shape.HLineTo#x:Double=0.0 -javafx.scene.shape.Line#endX:Double=0.0 -javafx.scene.shape.Line#endY:Double=0.0 -javafx.scene.shape.Line#startX:Double=0.0 -javafx.scene.shape.Line#startY:Double=0.0 -javafx.scene.shape.LineTo#x:Double=0.0 -javafx.scene.shape.LineTo#y:Double=0.0 -javafx.scene.shape.MoveTo#x:Double=0.0 -javafx.scene.shape.MoveTo#y:Double=0.0 -javafx.scene.shape.Path#fillRule:Enum=NON_ZERO -javafx.scene.shape.PathElement#absolute:Boolean=true -javafx.scene.shape.QuadCurve#controlX:Double=0.0 -javafx.scene.shape.QuadCurve#controlY:Double=0.0 -javafx.scene.shape.QuadCurve#endX:Double=0.0 -javafx.scene.shape.QuadCurve#endY:Double=0.0 -javafx.scene.shape.QuadCurve#startX:Double=0.0 -javafx.scene.shape.QuadCurve#startY:Double=0.0 -javafx.scene.shape.QuadCurveTo#controlX:Double=0.0 -javafx.scene.shape.QuadCurveTo#controlY:Double=0.0 -javafx.scene.shape.QuadCurveTo#x:Double=0.0 -javafx.scene.shape.QuadCurveTo#y:Double=0.0 -javafx.scene.shape.Rectangle#arcHeight:Double=0.0 -javafx.scene.shape.Rectangle#arcWidth:Double=0.0 -javafx.scene.shape.Rectangle#height:Double=0.0 -javafx.scene.shape.Rectangle#width:Double=0.0 -javafx.scene.shape.Rectangle#x:Double=0.0 -javafx.scene.shape.Rectangle#y:Double=0.0 -javafx.scene.shape.SVGPath#content:String= -javafx.scene.shape.SVGPath#fillRule:Enum=NON_ZERO -javafx.scene.shape.Shape#smooth:Boolean=true -javafx.scene.shape.Shape#strokeDashOffset:Double=0.0 -javafx.scene.shape.Shape#strokeLineCap:Enum=SQUARE -javafx.scene.shape.Shape#strokeLineJoin:Enum=MITER -javafx.scene.shape.Shape#strokeMiterLimit:Double=10.0 -javafx.scene.shape.Shape#strokeType:Enum=CENTERED -javafx.scene.shape.Shape#strokeWidth:Double=1.0 -javafx.scene.shape.Shape3D#cullFace:Enum=BACK -javafx.scene.shape.Shape3D#drawMode:Enum=FILL -javafx.scene.shape.Sphere#radius:Double=1.0 -javafx.scene.shape.VLineTo#y:Double=0.0 -javafx.scene.text.Text#boundsType:Enum=LOGICAL -javafx.scene.text.Text#fontSmoothingType:Enum=GRAY -javafx.scene.text.Text#impl_caretBias:Boolean=true -javafx.scene.text.Text#impl_caretPosition:Integer=-1 -javafx.scene.text.Text#impl_selectionEnd:Integer=-1 -javafx.scene.text.Text#impl_selectionStart:Integer=-1 -javafx.scene.text.Text#lineSpacing:Double=0.0 -javafx.scene.text.Text#strikethrough:Boolean=false -javafx.scene.text.Text#text:String= -javafx.scene.text.Text#textAlignment:Enum=LEFT -javafx.scene.text.Text#textOrigin:Enum=BASELINE -javafx.scene.text.Text#underline:Boolean=false -javafx.scene.text.Text#wrappingWidth:Double=0.0 -javafx.scene.text.Text#x:Double=0.0 -javafx.scene.text.Text#y:Double=0.0 -javafx.scene.text.TextFlow#lineSpacing:Double=0.0 -javafx.scene.text.TextFlow#textAlignment:Enum=LEFT -javafx.scene.transform.Affine#mxx:Double=1.0 -javafx.scene.transform.Affine#mxy:Double=0.0 -javafx.scene.transform.Affine#mxz:Double=0.0 -javafx.scene.transform.Affine#myx:Double=0.0 -javafx.scene.transform.Affine#myy:Double=1.0 -javafx.scene.transform.Affine#myz:Double=0.0 -javafx.scene.transform.Affine#mzx:Double=0.0 -javafx.scene.transform.Affine#mzy:Double=0.0 -javafx.scene.transform.Affine#mzz:Double=1.0 -javafx.scene.transform.Affine#tx:Double=0.0 -javafx.scene.transform.Affine#ty:Double=0.0 -javafx.scene.transform.Affine#tz:Double=0.0 -javafx.scene.transform.Rotate#angle:Double=0.0 -javafx.scene.transform.Rotate#pivotX:Double=0.0 -javafx.scene.transform.Rotate#pivotY:Double=0.0 -javafx.scene.transform.Rotate#pivotZ:Double=0.0 -javafx.scene.transform.Scale#pivotX:Double=0.0 -javafx.scene.transform.Scale#pivotY:Double=0.0 -javafx.scene.transform.Scale#pivotZ:Double=0.0 -javafx.scene.transform.Scale#x:Double=1.0 -javafx.scene.transform.Scale#y:Double=1.0 -javafx.scene.transform.Scale#z:Double=1.0 -javafx.scene.transform.Shear#pivotX:Double=0.0 -javafx.scene.transform.Shear#pivotY:Double=0.0 -javafx.scene.transform.Shear#x:Double=0.0 -javafx.scene.transform.Shear#y:Double=0.0 -javafx.scene.transform.Translate#x:Double=0.0 -javafx.scene.transform.Translate#y:Double=0.0 -javafx.scene.transform.Translate#z:Double=0.0 -javafx.scene.web.WebEngine#javaScriptEnabled:Boolean=true -javafx.scene.web.WebView#contextMenuEnabled:Boolean=true -javafx.scene.web.WebView#fontScale:Double=1.0 -javafx.scene.web.WebView#fontSmoothingType:Enum=LCD -javafx.scene.web.WebView#maxHeight:Double=1.7976931348623157E308 -javafx.scene.web.WebView#maxWidth:Double=1.7976931348623157E308 -javafx.scene.web.WebView#minHeight:Double=0.0 -javafx.scene.web.WebView#minWidth:Double=0.0 -javafx.scene.web.WebView#prefHeight:Double=600.0 -javafx.scene.web.WebView#prefWidth:Double=800.0 -javafx.scene.web.WebView#zoom:Double=1.0 -javafx.stage.PopupWindow#autoFix:Boolean=true -javafx.stage.PopupWindow#hideOnEscape:Boolean=true -javafx.stage.Stage#maxHeight:Double=1.7976931348623157E308 -javafx.stage.Stage#maxWidth:Double=1.7976931348623157E308 -javafx.stage.Stage#minHeight:Double=0.0 -javafx.stage.Stage#minWidth:Double=0.0 -javafx.stage.Stage#resizable:Boolean=true -javafx.stage.Window#opacity:Double=1.0 +javafx.animation.Animation#autoReverse=false +javafx.animation.Animation#cycleCount=1 +javafx.animation.Animation#rate=1.0 +javafx.animation.FadeTransition#byValue=0.0 +javafx.animation.FadeTransition#fromValue=NaN +javafx.animation.FadeTransition#toValue=NaN +javafx.animation.PathTransition#orientation=NONE +javafx.animation.RotateTransition#byAngle=0.0 +javafx.animation.RotateTransition#fromAngle=NaN +javafx.animation.RotateTransition#toAngle=NaN +javafx.animation.ScaleTransition#byX=0.0 +javafx.animation.ScaleTransition#byY=0.0 +javafx.animation.ScaleTransition#byZ=0.0 +javafx.animation.ScaleTransition#fromX=NaN +javafx.animation.ScaleTransition#fromY=NaN +javafx.animation.ScaleTransition#fromZ=NaN +javafx.animation.ScaleTransition#toX=NaN +javafx.animation.ScaleTransition#toY=NaN +javafx.animation.ScaleTransition#toZ=NaN +javafx.animation.TranslateTransition#byX=0.0 +javafx.animation.TranslateTransition#byY=0.0 +javafx.animation.TranslateTransition#byZ=0.0 +javafx.animation.TranslateTransition#fromX=NaN +javafx.animation.TranslateTransition#fromY=NaN +javafx.animation.TranslateTransition#fromZ=NaN +javafx.animation.TranslateTransition#toX=NaN +javafx.animation.TranslateTransition#toY=NaN +javafx.animation.TranslateTransition#toZ=NaN +javafx.scene.Camera#farClip=100.0 +javafx.scene.Camera#nearClip=0.1 +javafx.scene.Group#autoSizeChildren=true +javafx.scene.LightBase#lightOn=true +javafx.scene.Node#cache=false +javafx.scene.Node#cacheHint=DEFAULT +javafx.scene.Node#depthTest=INHERIT +javafx.scene.Node#disable=false +javafx.scene.Node#layoutX=0.0 +javafx.scene.Node#layoutY=0.0 +javafx.scene.Node#managed=true +javafx.scene.Node#mouseTransparent=false +javafx.scene.Node#opacity=1.0 +javafx.scene.Node#rotate=0.0 +javafx.scene.Node#scaleX=1.0 +javafx.scene.Node#scaleY=1.0 +javafx.scene.Node#scaleZ=1.0 +javafx.scene.Node#style= +javafx.scene.Node#translateX=0.0 +javafx.scene.Node#translateY=0.0 +javafx.scene.Node#translateZ=0.0 +javafx.scene.Node#visible=true +javafx.scene.PerspectiveCamera#fieldOfView=30.0 +javafx.scene.PerspectiveCamera#verticalFieldOfView=true +javafx.scene.canvas.Canvas#height=0.0 +javafx.scene.canvas.Canvas#width=0.0 +javafx.scene.chart.Axis#animated=true +javafx.scene.chart.Axis#autoRanging=true +javafx.scene.chart.Axis#tickLabelGap=3.0 +javafx.scene.chart.Axis#tickLabelRotation=0.0 +javafx.scene.chart.Axis#tickLabelsVisible=true +javafx.scene.chart.Axis#tickLength=8.0 +javafx.scene.chart.Axis#tickMarkVisible=true +javafx.scene.chart.Axis$TickMark#position=0.0 +javafx.scene.chart.CategoryAxis#endMargin=5.0 +javafx.scene.chart.CategoryAxis#gapStartAndEnd=true +javafx.scene.chart.CategoryAxis#startMargin=5.0 +javafx.scene.chart.Chart#animated=true +javafx.scene.chart.Chart#legendSide=BOTTOM +javafx.scene.chart.Chart#legendVisible=true +javafx.scene.chart.Chart#titleSide=TOP +javafx.scene.chart.NumberAxis#forceZeroInRange=true +javafx.scene.chart.NumberAxis#tickUnit=5.0 +javafx.scene.chart.PieChart#clockwise=true +javafx.scene.chart.PieChart#labelLineLength=20.0 +javafx.scene.chart.PieChart#labelsVisible=true +javafx.scene.chart.PieChart#startAngle=0.0 +javafx.scene.chart.ValueAxis#lowerBound=0.0 +javafx.scene.chart.ValueAxis#minorTickCount=5 +javafx.scene.chart.ValueAxis#minorTickLength=5.0 +javafx.scene.chart.ValueAxis#minorTickVisible=true +javafx.scene.chart.ValueAxis#upperBound=100.0 +javafx.scene.control.Button#cancelButton=false +javafx.scene.control.Button#defaultButton=false +javafx.scene.control.ButtonBar#buttonMinWidth=85.0 +javafx.scene.control.Cell#editable=true +javafx.scene.control.CheckBox#allowIndeterminate=false +javafx.scene.control.CheckBox#indeterminate=false +javafx.scene.control.CheckBox#selected=false +javafx.scene.control.CheckBoxTreeItem#independent=false +javafx.scene.control.CheckBoxTreeItem#indeterminate=false +javafx.scene.control.CheckBoxTreeItem#selected=false +javafx.scene.control.CheckMenuItem#selected=false +javafx.scene.control.ComboBox#visibleRowCount=10 +javafx.scene.control.ComboBoxBase#promptText= +javafx.scene.control.ContextMenu#impl_showRelativeToWindow=false +javafx.scene.control.DatePicker#showWeekNumbers=false +javafx.scene.control.Dialog#headerText=Confirmation +javafx.scene.control.Dialog#resizable=false +javafx.scene.control.Dialog#title=Confirmation +javafx.scene.control.DialogPane#expanded=false +javafx.scene.control.Hyperlink#visited=false +javafx.scene.control.Labeled#contentDisplay=LEFT +javafx.scene.control.Labeled#ellipsisString=... +javafx.scene.control.Labeled#graphicTextGap=4.0 +javafx.scene.control.Labeled#lineSpacing=0.0 +javafx.scene.control.Labeled#text= +javafx.scene.control.Labeled#textAlignment=LEFT +javafx.scene.control.Labeled#textOverrun=ELLIPSIS +javafx.scene.control.Labeled#underline=false +javafx.scene.control.Labeled#wrapText=false +javafx.scene.control.ListView#editable=false +javafx.scene.control.ListView#fixedCellSize=-1.0 +javafx.scene.control.ListView#orientation=VERTICAL +javafx.scene.control.MenuBar#useSystemMenuBar=false +javafx.scene.control.MenuButton#popupSide=BOTTOM +javafx.scene.control.MenuItem#disable=false +javafx.scene.control.MenuItem#mnemonicParsing=true +javafx.scene.control.MenuItem#text= +javafx.scene.control.MenuItem#visible=true +javafx.scene.control.Pagination#currentPageIndex=0 +javafx.scene.control.Pagination#maxPageIndicatorCount=10 +javafx.scene.control.Pagination#pageCount=2147483647 +javafx.scene.control.PopupControl#maxHeight=-1.0 +javafx.scene.control.PopupControl#maxWidth=-1.0 +javafx.scene.control.PopupControl#minHeight=-1.0 +javafx.scene.control.PopupControl#minWidth=-1.0 +javafx.scene.control.PopupControl#prefHeight=-1.0 +javafx.scene.control.PopupControl#prefWidth=-1.0 +javafx.scene.control.PopupControl#style= +javafx.scene.control.ProgressIndicator#progress=-1.0 +javafx.scene.control.RadioMenuItem#selected=false +javafx.scene.control.ScrollBar#blockIncrement=10.0 +javafx.scene.control.ScrollBar#max=100.0 +javafx.scene.control.ScrollBar#min=0.0 +javafx.scene.control.ScrollBar#orientation=HORIZONTAL +javafx.scene.control.ScrollBar#unitIncrement=1.0 +javafx.scene.control.ScrollBar#value=0.0 +javafx.scene.control.ScrollBar#visibleAmount=15.0 +javafx.scene.control.ScrollPane#fitToHeight=false +javafx.scene.control.ScrollPane#fitToWidth=false +javafx.scene.control.ScrollPane#hbarPolicy=AS_NEEDED +javafx.scene.control.ScrollPane#hmax=1.0 +javafx.scene.control.ScrollPane#hmin=0.0 +javafx.scene.control.ScrollPane#hvalue=0.0 +javafx.scene.control.ScrollPane#minViewportHeight=0.0 +javafx.scene.control.ScrollPane#minViewportWidth=0.0 +javafx.scene.control.ScrollPane#pannable=false +javafx.scene.control.ScrollPane#prefViewportHeight=0.0 +javafx.scene.control.ScrollPane#prefViewportWidth=0.0 +javafx.scene.control.ScrollPane#vbarPolicy=AS_NEEDED +javafx.scene.control.ScrollPane#vmax=1.0 +javafx.scene.control.ScrollPane#vmin=0.0 +javafx.scene.control.ScrollPane#vvalue=0.0 +javafx.scene.control.Separator#halignment=CENTER +javafx.scene.control.Separator#orientation=HORIZONTAL +javafx.scene.control.Separator#valignment=CENTER +javafx.scene.control.Slider#blockIncrement=10.0 +javafx.scene.control.Slider#majorTickUnit=25.0 +javafx.scene.control.Slider#max=100.0 +javafx.scene.control.Slider#min=0.0 +javafx.scene.control.Slider#minorTickCount=3 +javafx.scene.control.Slider#orientation=HORIZONTAL +javafx.scene.control.Slider#showTickLabels=false +javafx.scene.control.Slider#showTickMarks=false +javafx.scene.control.Slider#snapToTicks=false +javafx.scene.control.Slider#value=0.0 +javafx.scene.control.Slider#valueChanging=false +javafx.scene.control.Spinner#editable=false +javafx.scene.control.SplitPane#orientation=HORIZONTAL +javafx.scene.control.SplitPane$Divider#position=0.5 +javafx.scene.control.Tab#closable=true +javafx.scene.control.Tab#disable=false +javafx.scene.control.TabPane#rotateGraphic=false +javafx.scene.control.TabPane#side=TOP +javafx.scene.control.TabPane#tabClosingPolicy=SELECTED_TAB +javafx.scene.control.TabPane#tabMaxHeight=1.7976931348623157E308 +javafx.scene.control.TabPane#tabMaxWidth=1.7976931348623157E308 +javafx.scene.control.TabPane#tabMinHeight=0.0 +javafx.scene.control.TabPane#tabMinWidth=0.0 +javafx.scene.control.TableColumn#sortType=ASCENDING +javafx.scene.control.TableColumnBase#editable=true +javafx.scene.control.TableColumnBase#maxWidth=5000.0 +javafx.scene.control.TableColumnBase#minWidth=10.0 +javafx.scene.control.TableColumnBase#prefWidth=80.0 +javafx.scene.control.TableColumnBase#resizable=true +javafx.scene.control.TableColumnBase#sortable=true +javafx.scene.control.TableColumnBase#style= +javafx.scene.control.TableColumnBase#text= +javafx.scene.control.TableColumnBase#visible=true +javafx.scene.control.TableView#editable=false +javafx.scene.control.TableView#fixedCellSize=-1.0 +javafx.scene.control.TableView#tableMenuButtonVisible=false +javafx.scene.control.TextArea#prefColumnCount=40 +javafx.scene.control.TextArea#prefRowCount=10 +javafx.scene.control.TextArea#scrollLeft=0.0 +javafx.scene.control.TextArea#scrollTop=0.0 +javafx.scene.control.TextArea#wrapText=false +javafx.scene.control.TextField#alignment=CENTER_LEFT +javafx.scene.control.TextField#prefColumnCount=12 +javafx.scene.control.TextInputControl#editable=true +javafx.scene.control.TextInputControl#promptText= +javafx.scene.control.TextInputControl#text= +javafx.scene.control.TitledPane#animated=true +javafx.scene.control.TitledPane#collapsible=true +javafx.scene.control.TitledPane#expanded=true +javafx.scene.control.ToggleButton#selected=false +javafx.scene.control.ToolBar#orientation=HORIZONTAL +javafx.scene.control.Tooltip#contentDisplay=LEFT +javafx.scene.control.Tooltip#graphicTextGap=4.0 +javafx.scene.control.Tooltip#text= +javafx.scene.control.Tooltip#textAlignment=LEFT +javafx.scene.control.Tooltip#textOverrun=ELLIPSIS +javafx.scene.control.Tooltip#wrapText=false +javafx.scene.control.TreeItem#expanded=false +javafx.scene.control.TreeTableColumn#sortType=ASCENDING +javafx.scene.control.TreeTableView#editable=false +javafx.scene.control.TreeTableView#fixedCellSize=-1.0 +javafx.scene.control.TreeTableView#showRoot=true +javafx.scene.control.TreeTableView#sortMode=ALL_DESCENDANTS +javafx.scene.control.TreeTableView#tableMenuButtonVisible=false +javafx.scene.control.TreeView#editable=false +javafx.scene.control.TreeView#fixedCellSize=-1.0 +javafx.scene.control.TreeView#showRoot=true +javafx.scene.control.cell.ComboBoxListCell#comboBoxEditable=false +javafx.scene.control.cell.ComboBoxTableCell#comboBoxEditable=false +javafx.scene.control.cell.ComboBoxTreeCell#comboBoxEditable=false +javafx.scene.control.cell.ComboBoxTreeTableCell#comboBoxEditable=false +javafx.scene.effect.Blend#mode=SRC_OVER +javafx.scene.effect.Blend#opacity=1.0 +javafx.scene.effect.Bloom#threshold=0.3 +javafx.scene.effect.BoxBlur#height=5.0 +javafx.scene.effect.BoxBlur#iterations=1 +javafx.scene.effect.BoxBlur#width=5.0 +javafx.scene.effect.ColorAdjust#brightness=0.0 +javafx.scene.effect.ColorAdjust#contrast=0.0 +javafx.scene.effect.ColorAdjust#hue=0.0 +javafx.scene.effect.ColorAdjust#saturation=0.0 +javafx.scene.effect.ColorInput#height=0.0 +javafx.scene.effect.ColorInput#width=0.0 +javafx.scene.effect.ColorInput#x=0.0 +javafx.scene.effect.ColorInput#y=0.0 +javafx.scene.effect.DisplacementMap#offsetX=0.0 +javafx.scene.effect.DisplacementMap#offsetY=0.0 +javafx.scene.effect.DisplacementMap#scaleX=1.0 +javafx.scene.effect.DisplacementMap#scaleY=1.0 +javafx.scene.effect.DisplacementMap#wrap=false +javafx.scene.effect.DropShadow#blurType=THREE_PASS_BOX +javafx.scene.effect.DropShadow#height=21.0 +javafx.scene.effect.DropShadow#offsetX=0.0 +javafx.scene.effect.DropShadow#offsetY=0.0 +javafx.scene.effect.DropShadow#radius=10.0 +javafx.scene.effect.DropShadow#spread=0.0 +javafx.scene.effect.DropShadow#width=21.0 +javafx.scene.effect.FloatMap#height=1 +javafx.scene.effect.FloatMap#width=1 +javafx.scene.effect.GaussianBlur#radius=10.0 +javafx.scene.effect.Glow#level=0.3 +javafx.scene.effect.ImageInput#x=0.0 +javafx.scene.effect.ImageInput#y=0.0 +javafx.scene.effect.InnerShadow#blurType=THREE_PASS_BOX +javafx.scene.effect.InnerShadow#choke=0.0 +javafx.scene.effect.InnerShadow#height=21.0 +javafx.scene.effect.InnerShadow#offsetX=0.0 +javafx.scene.effect.InnerShadow#offsetY=0.0 +javafx.scene.effect.InnerShadow#radius=10.0 +javafx.scene.effect.InnerShadow#width=21.0 +javafx.scene.effect.Light$Distant#azimuth=45.0 +javafx.scene.effect.Light$Distant#elevation=45.0 +javafx.scene.effect.Light$Point#x=0.0 +javafx.scene.effect.Light$Point#y=0.0 +javafx.scene.effect.Light$Point#z=0.0 +javafx.scene.effect.Light$Spot#pointsAtX=0.0 +javafx.scene.effect.Light$Spot#pointsAtY=0.0 +javafx.scene.effect.Light$Spot#pointsAtZ=0.0 +javafx.scene.effect.Light$Spot#specularExponent=1.0 +javafx.scene.effect.Lighting#diffuseConstant=1.0 +javafx.scene.effect.Lighting#specularConstant=0.3 +javafx.scene.effect.Lighting#specularExponent=20.0 +javafx.scene.effect.Lighting#surfaceScale=1.5 +javafx.scene.effect.MotionBlur#angle=0.0 +javafx.scene.effect.MotionBlur#radius=10.0 +javafx.scene.effect.PerspectiveTransform#llx=0.0 +javafx.scene.effect.PerspectiveTransform#lly=0.0 +javafx.scene.effect.PerspectiveTransform#lrx=0.0 +javafx.scene.effect.PerspectiveTransform#lry=0.0 +javafx.scene.effect.PerspectiveTransform#ulx=0.0 +javafx.scene.effect.PerspectiveTransform#uly=0.0 +javafx.scene.effect.PerspectiveTransform#urx=0.0 +javafx.scene.effect.PerspectiveTransform#ury=0.0 +javafx.scene.effect.Reflection#bottomOpacity=0.0 +javafx.scene.effect.Reflection#fraction=0.75 +javafx.scene.effect.Reflection#topOffset=0.0 +javafx.scene.effect.Reflection#topOpacity=0.5 +javafx.scene.effect.SepiaTone#level=1.0 +javafx.scene.effect.Shadow#blurType=THREE_PASS_BOX +javafx.scene.effect.Shadow#height=21.0 +javafx.scene.effect.Shadow#radius=10.0 +javafx.scene.effect.Shadow#width=21.0 +javafx.scene.image.ImageView#fitHeight=0.0 +javafx.scene.image.ImageView#fitWidth=0.0 +javafx.scene.image.ImageView#preserveRatio=false +javafx.scene.image.ImageView#smooth=true +javafx.scene.image.ImageView#x=0.0 +javafx.scene.image.ImageView#y=0.0 +javafx.scene.layout.ColumnConstraints#fillWidth=true +javafx.scene.layout.ColumnConstraints#maxWidth=-1.0 +javafx.scene.layout.ColumnConstraints#minWidth=-1.0 +javafx.scene.layout.ColumnConstraints#percentWidth=-1.0 +javafx.scene.layout.ColumnConstraints#prefWidth=-1.0 +javafx.scene.layout.FlowPane#alignment=TOP_LEFT +javafx.scene.layout.FlowPane#columnHalignment=LEFT +javafx.scene.layout.FlowPane#hgap=0.0 +javafx.scene.layout.FlowPane#orientation=HORIZONTAL +javafx.scene.layout.FlowPane#prefWrapLength=400.0 +javafx.scene.layout.FlowPane#rowValignment=CENTER +javafx.scene.layout.FlowPane#vgap=0.0 +javafx.scene.layout.GridPane#alignment=TOP_LEFT +javafx.scene.layout.GridPane#gridLinesVisible=false +javafx.scene.layout.GridPane#hgap=0.0 +javafx.scene.layout.GridPane#vgap=0.0 +javafx.scene.layout.HBox#alignment=TOP_LEFT +javafx.scene.layout.HBox#fillHeight=true +javafx.scene.layout.HBox#spacing=0.0 +javafx.scene.layout.Region#cacheShape=true +javafx.scene.layout.Region#centerShape=true +javafx.scene.layout.Region#maxHeight=-1.0 +javafx.scene.layout.Region#maxWidth=-1.0 +javafx.scene.layout.Region#minHeight=-1.0 +javafx.scene.layout.Region#minWidth=-1.0 +javafx.scene.layout.Region#prefHeight=-1.0 +javafx.scene.layout.Region#prefWidth=-1.0 +javafx.scene.layout.Region#scaleShape=true +javafx.scene.layout.Region#snapToPixel=true +javafx.scene.layout.RowConstraints#fillHeight=true +javafx.scene.layout.RowConstraints#maxHeight=-1.0 +javafx.scene.layout.RowConstraints#minHeight=-1.0 +javafx.scene.layout.RowConstraints#percentHeight=-1.0 +javafx.scene.layout.RowConstraints#prefHeight=-1.0 +javafx.scene.layout.StackPane#alignment=CENTER +javafx.scene.layout.TilePane#alignment=TOP_LEFT +javafx.scene.layout.TilePane#hgap=0.0 +javafx.scene.layout.TilePane#orientation=HORIZONTAL +javafx.scene.layout.TilePane#prefColumns=5 +javafx.scene.layout.TilePane#prefRows=5 +javafx.scene.layout.TilePane#prefTileHeight=-1.0 +javafx.scene.layout.TilePane#prefTileWidth=-1.0 +javafx.scene.layout.TilePane#tileAlignment=CENTER +javafx.scene.layout.TilePane#vgap=0.0 +javafx.scene.layout.VBox#alignment=TOP_LEFT +javafx.scene.layout.VBox#fillWidth=true +javafx.scene.layout.VBox#spacing=0.0 +javafx.scene.media.EqualizerBand#bandwidth=0.0 +javafx.scene.media.EqualizerBand#centerFrequency=0.0 +javafx.scene.media.EqualizerBand#gain=0.0 +javafx.scene.media.MediaView#fitHeight=0.0 +javafx.scene.media.MediaView#fitWidth=0.0 +javafx.scene.media.MediaView#preserveRatio=true +javafx.scene.media.MediaView#smooth=true +javafx.scene.media.MediaView#x=0.0 +javafx.scene.media.MediaView#y=0.0 +javafx.scene.paint.PhongMaterial#specularPower=32.0 +javafx.scene.shape.Arc#centerX=0.0 +javafx.scene.shape.Arc#centerY=0.0 +javafx.scene.shape.Arc#length=0.0 +javafx.scene.shape.Arc#radiusX=0.0 +javafx.scene.shape.Arc#radiusY=0.0 +javafx.scene.shape.Arc#startAngle=0.0 +javafx.scene.shape.Arc#type=OPEN +javafx.scene.shape.ArcTo#XAxisRotation=0.0 +javafx.scene.shape.ArcTo#largeArcFlag=false +javafx.scene.shape.ArcTo#radiusX=0.0 +javafx.scene.shape.ArcTo#radiusY=0.0 +javafx.scene.shape.ArcTo#sweepFlag=false +javafx.scene.shape.ArcTo#x=0.0 +javafx.scene.shape.ArcTo#y=0.0 +javafx.scene.shape.Box#depth=2.0 +javafx.scene.shape.Box#height=2.0 +javafx.scene.shape.Box#width=2.0 +javafx.scene.shape.Circle#centerX=0.0 +javafx.scene.shape.Circle#centerY=0.0 +javafx.scene.shape.Circle#radius=0.0 +javafx.scene.shape.CubicCurve#controlX1=0.0 +javafx.scene.shape.CubicCurve#controlX2=0.0 +javafx.scene.shape.CubicCurve#controlY1=0.0 +javafx.scene.shape.CubicCurve#controlY2=0.0 +javafx.scene.shape.CubicCurve#endX=0.0 +javafx.scene.shape.CubicCurve#endY=0.0 +javafx.scene.shape.CubicCurve#startX=0.0 +javafx.scene.shape.CubicCurve#startY=0.0 +javafx.scene.shape.CubicCurveTo#controlX1=0.0 +javafx.scene.shape.CubicCurveTo#controlX2=0.0 +javafx.scene.shape.CubicCurveTo#controlY1=0.0 +javafx.scene.shape.CubicCurveTo#controlY2=0.0 +javafx.scene.shape.CubicCurveTo#x=0.0 +javafx.scene.shape.CubicCurveTo#y=0.0 +javafx.scene.shape.Cylinder#height=2.0 +javafx.scene.shape.Cylinder#radius=1.0 +javafx.scene.shape.Ellipse#centerX=0.0 +javafx.scene.shape.Ellipse#centerY=0.0 +javafx.scene.shape.Ellipse#radiusX=0.0 +javafx.scene.shape.Ellipse#radiusY=0.0 +javafx.scene.shape.HLineTo#x=0.0 +javafx.scene.shape.Line#endX=0.0 +javafx.scene.shape.Line#endY=0.0 +javafx.scene.shape.Line#startX=0.0 +javafx.scene.shape.Line#startY=0.0 +javafx.scene.shape.LineTo#x=0.0 +javafx.scene.shape.LineTo#y=0.0 +javafx.scene.shape.MoveTo#x=0.0 +javafx.scene.shape.MoveTo#y=0.0 +javafx.scene.shape.Path#fillRule=NON_ZERO +javafx.scene.shape.PathElement#absolute=true +javafx.scene.shape.QuadCurve#controlX=0.0 +javafx.scene.shape.QuadCurve#controlY=0.0 +javafx.scene.shape.QuadCurve#endX=0.0 +javafx.scene.shape.QuadCurve#endY=0.0 +javafx.scene.shape.QuadCurve#startX=0.0 +javafx.scene.shape.QuadCurve#startY=0.0 +javafx.scene.shape.QuadCurveTo#controlX=0.0 +javafx.scene.shape.QuadCurveTo#controlY=0.0 +javafx.scene.shape.QuadCurveTo#x=0.0 +javafx.scene.shape.QuadCurveTo#y=0.0 +javafx.scene.shape.Rectangle#arcHeight=0.0 +javafx.scene.shape.Rectangle#arcWidth=0.0 +javafx.scene.shape.Rectangle#height=0.0 +javafx.scene.shape.Rectangle#width=0.0 +javafx.scene.shape.Rectangle#x=0.0 +javafx.scene.shape.Rectangle#y=0.0 +javafx.scene.shape.SVGPath#content= +javafx.scene.shape.SVGPath#fillRule=NON_ZERO +javafx.scene.shape.Shape#smooth=true +javafx.scene.shape.Shape#strokeDashOffset=0.0 +javafx.scene.shape.Shape#strokeLineCap=SQUARE +javafx.scene.shape.Shape#strokeLineJoin=MITER +javafx.scene.shape.Shape#strokeMiterLimit=10.0 +javafx.scene.shape.Shape#strokeType=CENTERED +javafx.scene.shape.Shape#strokeWidth=1.0 +javafx.scene.shape.Shape3D#cullFace=BACK +javafx.scene.shape.Shape3D#drawMode=FILL +javafx.scene.shape.Sphere#radius=1.0 +javafx.scene.shape.VLineTo#y=0.0 +javafx.scene.text.Text#boundsType=LOGICAL +javafx.scene.text.Text#fontSmoothingType=GRAY +javafx.scene.text.Text#impl_caretBias=true +javafx.scene.text.Text#impl_caretPosition=-1 +javafx.scene.text.Text#impl_selectionEnd=-1 +javafx.scene.text.Text#impl_selectionStart=-1 +javafx.scene.text.Text#lineSpacing=0.0 +javafx.scene.text.Text#strikethrough=false +javafx.scene.text.Text#text= +javafx.scene.text.Text#textAlignment=LEFT +javafx.scene.text.Text#textOrigin=BASELINE +javafx.scene.text.Text#underline=false +javafx.scene.text.Text#wrappingWidth=0.0 +javafx.scene.text.Text#x=0.0 +javafx.scene.text.Text#y=0.0 +javafx.scene.text.TextFlow#lineSpacing=0.0 +javafx.scene.text.TextFlow#textAlignment=LEFT +javafx.scene.transform.Affine#mxx=1.0 +javafx.scene.transform.Affine#mxy=0.0 +javafx.scene.transform.Affine#mxz=0.0 +javafx.scene.transform.Affine#myx=0.0 +javafx.scene.transform.Affine#myy=1.0 +javafx.scene.transform.Affine#myz=0.0 +javafx.scene.transform.Affine#mzx=0.0 +javafx.scene.transform.Affine#mzy=0.0 +javafx.scene.transform.Affine#mzz=1.0 +javafx.scene.transform.Affine#tx=0.0 +javafx.scene.transform.Affine#ty=0.0 +javafx.scene.transform.Affine#tz=0.0 +javafx.scene.transform.Rotate#angle=0.0 +javafx.scene.transform.Rotate#pivotX=0.0 +javafx.scene.transform.Rotate#pivotY=0.0 +javafx.scene.transform.Rotate#pivotZ=0.0 +javafx.scene.transform.Scale#pivotX=0.0 +javafx.scene.transform.Scale#pivotY=0.0 +javafx.scene.transform.Scale#pivotZ=0.0 +javafx.scene.transform.Scale#x=1.0 +javafx.scene.transform.Scale#y=1.0 +javafx.scene.transform.Scale#z=1.0 +javafx.scene.transform.Shear#pivotX=0.0 +javafx.scene.transform.Shear#pivotY=0.0 +javafx.scene.transform.Shear#x=0.0 +javafx.scene.transform.Shear#y=0.0 +javafx.scene.transform.Translate#x=0.0 +javafx.scene.transform.Translate#y=0.0 +javafx.scene.transform.Translate#z=0.0 +javafx.scene.web.WebEngine#javaScriptEnabled=true +javafx.scene.web.WebView#contextMenuEnabled=true +javafx.scene.web.WebView#fontScale=1.0 +javafx.scene.web.WebView#fontSmoothingType=LCD +javafx.scene.web.WebView#maxHeight=1.7976931348623157E308 +javafx.scene.web.WebView#maxWidth=1.7976931348623157E308 +javafx.scene.web.WebView#minHeight=0.0 +javafx.scene.web.WebView#minWidth=0.0 +javafx.scene.web.WebView#prefHeight=600.0 +javafx.scene.web.WebView#prefWidth=800.0 +javafx.scene.web.WebView#zoom=1.0 +javafx.stage.PopupWindow#autoFix=true +javafx.stage.PopupWindow#hideOnEscape=true +javafx.stage.Stage#maxHeight=1.7976931348623157E308 +javafx.stage.Stage#maxWidth=1.7976931348623157E308 +javafx.stage.Stage#minHeight=0.0 +javafx.stage.Stage#minWidth=0.0 +javafx.stage.Stage#resizable=true +javafx.stage.Window#opacity=1.0 -------- Overridden in subclass --------- -javafx.embed.swing.SwingNode#focusTraversable:Boolean=true -javafx.scene.Group#accessibleRole:Enum=PARENT -javafx.scene.canvas.Canvas#nodeOrientation:Enum=LEFT_TO_RIGHT -javafx.scene.control.Button#accessibleRole:Enum=BUTTON -javafx.scene.control.Button#focusTraversable:Boolean=true -javafx.scene.control.Button#mnemonicParsing:Boolean=true -javafx.scene.control.CheckBox#accessibleRole:Enum=CHECK_BOX -javafx.scene.control.CheckBox#focusTraversable:Boolean=true -javafx.scene.control.CheckBox#mnemonicParsing:Boolean=true -javafx.scene.control.ChoiceBox#accessibleRole:Enum=COMBO_BOX -javafx.scene.control.ChoiceBox#focusTraversable:Boolean=true -javafx.scene.control.ColorPicker#focusTraversable:Boolean=true -javafx.scene.control.ComboBox#accessibleRole:Enum=COMBO_BOX -javafx.scene.control.ComboBox#focusTraversable:Boolean=true -javafx.scene.control.ContextMenu#autoHide:Boolean=true -javafx.scene.control.ContextMenu#consumeAutoHidingEvents:Boolean=false -javafx.scene.control.DatePicker#accessibleRole:Enum=DATE_PICKER -javafx.scene.control.DatePicker#editable:Boolean=true -javafx.scene.control.DatePicker#focusTraversable:Boolean=true -javafx.scene.control.Hyperlink#accessibleRole:Enum=HYPERLINK -javafx.scene.control.Hyperlink#focusTraversable:Boolean=true -javafx.scene.control.Label#accessibleRole:Enum=TEXT -javafx.scene.control.ListCell#accessibleRole:Enum=LIST_ITEM -javafx.scene.control.ListView#accessibleRole:Enum=LIST_VIEW -javafx.scene.control.ListView#focusTraversable:Boolean=true -javafx.scene.control.MenuBar#accessibleRole:Enum=MENU_BAR -javafx.scene.control.MenuButton#accessibleRole:Enum=MENU_BUTTON -javafx.scene.control.MenuButton#focusTraversable:Boolean=true -javafx.scene.control.MenuButton#mnemonicParsing:Boolean=true -javafx.scene.control.Pagination#accessibleRole:Enum=PAGINATION -javafx.scene.control.Pagination#focusTraversable:Boolean=true -javafx.scene.control.PasswordField#accessibleRole:Enum=PASSWORD_FIELD -javafx.scene.control.PopupControl#anchorLocation:Enum=CONTENT_TOP_LEFT -javafx.scene.control.ProgressIndicator#accessibleRole:Enum=PROGRESS_INDICATOR -javafx.scene.control.RadioButton#accessibleRole:Enum=RADIO_BUTTON -javafx.scene.control.RadioButton#alignment:Enum=CENTER_LEFT -javafx.scene.control.ScrollBar#accessibleRole:Enum=SCROLL_BAR -javafx.scene.control.ScrollPane#accessibleRole:Enum=SCROLL_PANE -javafx.scene.control.SeparatorMenuItem#hideOnClick:Boolean=false -javafx.scene.control.Slider#accessibleRole:Enum=SLIDER -javafx.scene.control.Slider#focusTraversable:Boolean=true -javafx.scene.control.Spinner#accessibleRole:Enum=SPINNER -javafx.scene.control.Spinner#focusTraversable:Boolean=true -javafx.scene.control.SplitMenuButton#accessibleRole:Enum=SPLIT_MENU_BUTTON -javafx.scene.control.TabPane#accessibleRole:Enum=TAB_PANE -javafx.scene.control.TabPane#focusTraversable:Boolean=true -javafx.scene.control.TableCell#accessibleRole:Enum=TABLE_CELL -javafx.scene.control.TableRow#accessibleRole:Enum=TABLE_ROW -javafx.scene.control.TableView#accessibleRole:Enum=TABLE_VIEW -javafx.scene.control.TableView#focusTraversable:Boolean=true -javafx.scene.control.TextArea#accessibleRole:Enum=TEXT_AREA -javafx.scene.control.TextArea#focusTraversable:Boolean=true -javafx.scene.control.TextField#accessibleRole:Enum=TEXT_FIELD -javafx.scene.control.TextField#focusTraversable:Boolean=true -javafx.scene.control.TitledPane#accessibleRole:Enum=TITLED_PANE -javafx.scene.control.TitledPane#focusTraversable:Boolean=true -javafx.scene.control.ToggleButton#accessibleRole:Enum=TOGGLE_BUTTON -javafx.scene.control.ToggleButton#alignment:Enum=CENTER -javafx.scene.control.ToggleButton#focusTraversable:Boolean=true -javafx.scene.control.ToggleButton#mnemonicParsing:Boolean=true -javafx.scene.control.ToolBar#accessibleRole:Enum=TOOL_BAR -javafx.scene.control.TreeCell#accessibleRole:Enum=TREE_ITEM -javafx.scene.control.TreeTableCell#accessibleRole:Enum=TREE_TABLE_CELL -javafx.scene.control.TreeTableRow#accessibleRole:Enum=TREE_TABLE_ROW -javafx.scene.control.TreeTableView#accessibleRole:Enum=TREE_TABLE_VIEW -javafx.scene.control.TreeTableView#focusTraversable:Boolean=true -javafx.scene.control.TreeView#accessibleRole:Enum=TREE_VIEW -javafx.scene.control.TreeView#focusTraversable:Boolean=true -javafx.scene.control.cell.CheckBoxTreeCell#accessibleRole:Enum=TREE_ITEM -javafx.scene.control.cell.CheckBoxTreeCell#alignment:Enum=CENTER_LEFT -javafx.scene.control.cell.CheckBoxTreeCell#focusTraversable:Boolean=false -javafx.scene.control.cell.CheckBoxTreeCell#mnemonicParsing:Boolean=false -javafx.scene.control.cell.CheckBoxTreeCell#nodeOrientation:Enum=INHERIT -javafx.scene.control.cell.CheckBoxTreeCell#pickOnBounds:Boolean=true -javafx.scene.control.cell.ChoiceBoxTreeCell#accessibleRole:Enum=TREE_ITEM -javafx.scene.control.cell.ChoiceBoxTreeCell#alignment:Enum=CENTER_LEFT -javafx.scene.control.cell.ChoiceBoxTreeCell#focusTraversable:Boolean=false -javafx.scene.control.cell.ChoiceBoxTreeCell#mnemonicParsing:Boolean=false -javafx.scene.control.cell.ChoiceBoxTreeCell#nodeOrientation:Enum=INHERIT -javafx.scene.control.cell.ChoiceBoxTreeCell#pickOnBounds:Boolean=true -javafx.scene.control.cell.ComboBoxTreeCell#accessibleRole:Enum=TREE_ITEM -javafx.scene.control.cell.ComboBoxTreeCell#alignment:Enum=CENTER_LEFT -javafx.scene.control.cell.ComboBoxTreeCell#focusTraversable:Boolean=false -javafx.scene.control.cell.ComboBoxTreeCell#mnemonicParsing:Boolean=false -javafx.scene.control.cell.ComboBoxTreeCell#nodeOrientation:Enum=INHERIT -javafx.scene.control.cell.ComboBoxTreeCell#pickOnBounds:Boolean=true -javafx.scene.control.cell.TextFieldTreeCell#accessibleRole:Enum=TREE_ITEM -javafx.scene.control.cell.TextFieldTreeCell#alignment:Enum=CENTER_LEFT -javafx.scene.control.cell.TextFieldTreeCell#focusTraversable:Boolean=false -javafx.scene.control.cell.TextFieldTreeCell#mnemonicParsing:Boolean=false -javafx.scene.control.cell.TextFieldTreeCell#nodeOrientation:Enum=INHERIT -javafx.scene.control.cell.TextFieldTreeCell#pickOnBounds:Boolean=true -javafx.scene.image.ImageView#accessibleRole:Enum=IMAGE_VIEW -javafx.scene.image.ImageView#nodeOrientation:Enum=LEFT_TO_RIGHT -javafx.scene.layout.Region#accessibleRole:Enum=PARENT -javafx.scene.layout.Region#pickOnBounds:Boolean=true -javafx.scene.media.MediaView#nodeOrientation:Enum=LEFT_TO_RIGHT -javafx.scene.text.Text#accessibleRole:Enum=TEXT -javafx.scene.text.Text#pickOnBounds:Boolean=true -javafx.scene.text.TextFlow#accessibleRole:Enum=TEXT -javafx.scene.web.HTMLEditor#focusTraversable:Boolean=true -javafx.scene.web.WebView#accessibleRole:Enum=PARENT -javafx.scene.web.WebView#focusTraversable:Boolean=true -javafx.scene.web.WebView#nodeOrientation:Enum=LEFT_TO_RIGHT +javafx.embed.swing.SwingNode#focusTraversable=true +javafx.scene.Group#accessibleRole=PARENT +javafx.scene.canvas.Canvas#nodeOrientation=LEFT_TO_RIGHT +javafx.scene.control.Button#accessibleRole=BUTTON +javafx.scene.control.Button#focusTraversable=true +javafx.scene.control.Button#mnemonicParsing=true +javafx.scene.control.CheckBox#accessibleRole=CHECK_BOX +javafx.scene.control.CheckBox#focusTraversable=true +javafx.scene.control.CheckBox#mnemonicParsing=true +javafx.scene.control.ChoiceBox#accessibleRole=COMBO_BOX +javafx.scene.control.ChoiceBox#focusTraversable=true +javafx.scene.control.ColorPicker#focusTraversable=true +javafx.scene.control.ComboBox#accessibleRole=COMBO_BOX +javafx.scene.control.ComboBox#focusTraversable=true +javafx.scene.control.ContextMenu#autoHide=true +javafx.scene.control.ContextMenu#consumeAutoHidingEvents=false +javafx.scene.control.DatePicker#accessibleRole=DATE_PICKER +javafx.scene.control.DatePicker#editable=true +javafx.scene.control.DatePicker#focusTraversable=true +javafx.scene.control.Hyperlink#accessibleRole=HYPERLINK +javafx.scene.control.Hyperlink#focusTraversable=true +javafx.scene.control.Label#accessibleRole=TEXT +javafx.scene.control.ListCell#accessibleRole=LIST_ITEM +javafx.scene.control.ListView#accessibleRole=LIST_VIEW +javafx.scene.control.ListView#focusTraversable=true +javafx.scene.control.MenuBar#accessibleRole=MENU_BAR +javafx.scene.control.MenuButton#accessibleRole=MENU_BUTTON +javafx.scene.control.MenuButton#focusTraversable=true +javafx.scene.control.MenuButton#mnemonicParsing=true +javafx.scene.control.Pagination#accessibleRole=PAGINATION +javafx.scene.control.Pagination#focusTraversable=true +javafx.scene.control.PasswordField#accessibleRole=PASSWORD_FIELD +javafx.scene.control.PopupControl#anchorLocation=CONTENT_TOP_LEFT +javafx.scene.control.ProgressIndicator#accessibleRole=PROGRESS_INDICATOR +javafx.scene.control.RadioButton#accessibleRole=RADIO_BUTTON +javafx.scene.control.RadioButton#alignment=CENTER_LEFT +javafx.scene.control.ScrollBar#accessibleRole=SCROLL_BAR +javafx.scene.control.ScrollPane#accessibleRole=SCROLL_PANE +javafx.scene.control.SeparatorMenuItem#hideOnClick=false +javafx.scene.control.Slider#accessibleRole=SLIDER +javafx.scene.control.Slider#focusTraversable=true +javafx.scene.control.Spinner#accessibleRole=SPINNER +javafx.scene.control.Spinner#focusTraversable=true +javafx.scene.control.SplitMenuButton#accessibleRole=SPLIT_MENU_BUTTON +javafx.scene.control.TabPane#accessibleRole=TAB_PANE +javafx.scene.control.TabPane#focusTraversable=true +javafx.scene.control.TableCell#accessibleRole=TABLE_CELL +javafx.scene.control.TableRow#accessibleRole=TABLE_ROW +javafx.scene.control.TableView#accessibleRole=TABLE_VIEW +javafx.scene.control.TableView#focusTraversable=true +javafx.scene.control.TextArea#accessibleRole=TEXT_AREA +javafx.scene.control.TextArea#focusTraversable=true +javafx.scene.control.TextField#accessibleRole=TEXT_FIELD +javafx.scene.control.TextField#focusTraversable=true +javafx.scene.control.TitledPane#accessibleRole=TITLED_PANE +javafx.scene.control.TitledPane#focusTraversable=true +javafx.scene.control.ToggleButton#accessibleRole=TOGGLE_BUTTON +javafx.scene.control.ToggleButton#alignment=CENTER +javafx.scene.control.ToggleButton#focusTraversable=true +javafx.scene.control.ToggleButton#mnemonicParsing=true +javafx.scene.control.ToolBar#accessibleRole=TOOL_BAR +javafx.scene.control.TreeCell#accessibleRole=TREE_ITEM +javafx.scene.control.TreeTableCell#accessibleRole=TREE_TABLE_CELL +javafx.scene.control.TreeTableRow#accessibleRole=TREE_TABLE_ROW +javafx.scene.control.TreeTableView#accessibleRole=TREE_TABLE_VIEW +javafx.scene.control.TreeTableView#focusTraversable=true +javafx.scene.control.TreeView#accessibleRole=TREE_VIEW +javafx.scene.control.TreeView#focusTraversable=true +javafx.scene.control.cell.CheckBoxTreeCell#accessibleRole=TREE_ITEM +javafx.scene.control.cell.CheckBoxTreeCell#alignment=CENTER_LEFT +javafx.scene.control.cell.CheckBoxTreeCell#focusTraversable=false +javafx.scene.control.cell.CheckBoxTreeCell#mnemonicParsing=false +javafx.scene.control.cell.CheckBoxTreeCell#nodeOrientation=INHERIT +javafx.scene.control.cell.CheckBoxTreeCell#pickOnBounds=true +javafx.scene.control.cell.ChoiceBoxTreeCell#accessibleRole=TREE_ITEM +javafx.scene.control.cell.ChoiceBoxTreeCell#alignment=CENTER_LEFT +javafx.scene.control.cell.ChoiceBoxTreeCell#focusTraversable=false +javafx.scene.control.cell.ChoiceBoxTreeCell#mnemonicParsing=false +javafx.scene.control.cell.ChoiceBoxTreeCell#nodeOrientation=INHERIT +javafx.scene.control.cell.ChoiceBoxTreeCell#pickOnBounds=true +javafx.scene.control.cell.ComboBoxTreeCell#accessibleRole=TREE_ITEM +javafx.scene.control.cell.ComboBoxTreeCell#alignment=CENTER_LEFT +javafx.scene.control.cell.ComboBoxTreeCell#focusTraversable=false +javafx.scene.control.cell.ComboBoxTreeCell#mnemonicParsing=false +javafx.scene.control.cell.ComboBoxTreeCell#nodeOrientation=INHERIT +javafx.scene.control.cell.ComboBoxTreeCell#pickOnBounds=true +javafx.scene.control.cell.TextFieldTreeCell#accessibleRole=TREE_ITEM +javafx.scene.control.cell.TextFieldTreeCell#alignment=CENTER_LEFT +javafx.scene.control.cell.TextFieldTreeCell#focusTraversable=false +javafx.scene.control.cell.TextFieldTreeCell#mnemonicParsing=false +javafx.scene.control.cell.TextFieldTreeCell#nodeOrientation=INHERIT +javafx.scene.control.cell.TextFieldTreeCell#pickOnBounds=true +javafx.scene.image.ImageView#accessibleRole=IMAGE_VIEW +javafx.scene.image.ImageView#nodeOrientation=LEFT_TO_RIGHT +javafx.scene.layout.Region#accessibleRole=PARENT +javafx.scene.layout.Region#pickOnBounds=true +javafx.scene.media.MediaView#nodeOrientation=LEFT_TO_RIGHT +javafx.scene.text.Text#accessibleRole=TEXT +javafx.scene.text.Text#pickOnBounds=true +javafx.scene.text.TextFlow#accessibleRole=TEXT +javafx.scene.web.HTMLEditor#focusTraversable=true +javafx.scene.web.WebView#accessibleRole=PARENT +javafx.scene.web.WebView#focusTraversable=true +javafx.scene.web.WebView#nodeOrientation=LEFT_TO_RIGHT -------- Overridden properties' values --------- -- javafx.scene.Node#accessibleRole[BUTTON, CHECK_BOX, COMBO_BOX, DATE_PICKER, HYPERLINK, IMAGE_VIEW, LIST_ITEM, LIST_VIEW, MENU_BAR, MENU_BUTTON, NODE, PAGINATION, PARENT, PASSWORD_FIELD, PROGRESS_INDICATOR, RADIO_BUTTON, SCROLL_BAR, SCROLL_PANE, SLIDER, SPINNER, SPLIT_MENU_BUTTON, TABLE_CELL, TABLE_ROW, TABLE_VIEW, TAB_PANE, TEXT, TEXT_AREA, TEXT_FIELD, TITLED_PANE, TOGGLE_BUTTON, TOOL_BAR, TREE_ITEM, TREE_TABLE_CELL, TREE_TABLE_ROW, TREE_TABLE_VIEW, TREE_VIEW] -- javafx.scene.Node#focusTraversable[false, true] diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java index 2f7a7d800c7b..9f52ae28df19 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java @@ -87,7 +87,7 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript return ArrayUtil.toStringArray(enumConstants); } - final String propertyQName = getBoxedPropertyType(getDeclaration()); + final String propertyQName = JavaFxPsiUtil.getBoxedPropertyType(getDeclaration()); if (CommonClassNames.JAVA_LANG_FLOAT.equals(propertyQName) || CommonClassNames.JAVA_LANG_DOUBLE.equals(propertyQName)) { return new String[] {"Infinity", "-Infinity", "NaN", "-NaN"}; } else if (CommonClassNames.JAVA_LANG_BOOLEAN.equals(propertyQName)) { @@ -193,7 +193,7 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript final PsiElement declaration = attributeDescriptor.getDeclaration(); final String boxedQName; if (declaration != null) { - boxedQName = getBoxedPropertyType(declaration); + boxedQName = JavaFxPsiUtil.getBoxedPropertyType(declaration); } else { final PsiClass tagClass = JavaFxPsiUtil.getTagClass((XmlAttributeValue)context); @@ -236,20 +236,6 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript return null; } - @Nullable - private static String getBoxedPropertyType(PsiElement declaration) { - PsiType attrType = JavaFxPsiUtil.getWritablePropertyType(declaration); - - String boxedQName = null; - if (attrType instanceof PsiPrimitiveType) { - boxedQName = ((PsiPrimitiveType)attrType).getBoxedTypeName(); - } else if (PsiPrimitiveType.getUnboxedType(attrType) != null) { - final PsiClass attrClass = PsiUtil.resolveClassInType(attrType); - boxedQName = attrClass != null ? attrClass.getQualifiedName() : null; - } - return boxedQName; - } - @Override public PsiElement getDeclaration() { if (myPsiClass != null) {