// Path: src/test/java/org/hildan/fxgson/TestClassesSimple.java
// static class CustomObject {
// 
//     String name;
// 
//     CustomObject(String name) {
//         this.name = name;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         CustomObject that = (CustomObject) o;
//         return Objects.equals(name, that.name);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(name);
//     }
// }
// 
// Path: src/test/java/org/hildan/fxgson/TestClassesWithProp.java
// static class WithObsList {
//     ObservableList<CustomObject> list;
// 
//     WithObsList() {
//     }
// 
//     WithObsList(ObservableList<CustomObject> value) {
//         this.list = value;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         WithObsList that = (WithObsList) o;
//         return Objects.equals(list, that.list);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(list);
//     }
// }
// 
// Path: src/main/java/org/hildan/fxgson/adapters/properties/ListPropertyTypeAdapter.java
// public class ListPropertyTypeAdapter<T> extends PropertyTypeAdapter<ObservableList<T>, ListProperty<T>> {
// 
//     /**
//      * Creates a new ListPropertyTypeAdapter.
//      *
//      * @param delegate
//      *         a delegate adapter to use for the inner list value of the property
//      * @param throwOnNullProperty
//      *         if true, this adapter will throw {@link NullPropertyException} when given a null {@link Property} to
//      *         serialize
//      */
//     public ListPropertyTypeAdapter(TypeAdapter<ObservableList<T>> delegate, boolean throwOnNullProperty) {
//         super(delegate, throwOnNullProperty);
//     }
// 
//     @NotNull
//     @Override
//     protected ListProperty<T> createProperty(ObservableList<T> deserializedValue) {
//         return new SimpleListProperty<>(deserializedValue);
//     }
// }


import java.util.Objects;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.ObservableList;
import org.hildan.fxgson.TestClassesSimple.CustomObject;
import org.hildan.fxgson.TestClassesWithProp.WithObsList;
import org.hildan.fxgson.adapters.properties.ListPropertyTypeAdapter;
import org.jetbrains.annotations.NotNull;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
package org.hildan.fxgson;





class TestClassesCustom {

    static class CustomListProperty extends SimpleListProperty<CustomObject> {
        CustomListProperty() {
        }

        CustomListProperty(ObservableList<CustomObject> initialValue) {
            super(initialValue);
        }
    }

    static class WithCustomListProp {
        CustomListProperty prop = new CustomListProperty();

        WithCustomListProp() {
        }

        WithCustomListProp(CustomListProperty value) {
            this.prop = value;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
// Path: src/test/java/org/hildan/fxgson/TestClassesSimple.java
// static class CustomObject {
// 
//     String name;
// 
//     CustomObject(String name) {
//         this.name = name;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         CustomObject that = (CustomObject) o;
//         return Objects.equals(name, that.name);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(name);
//     }
// }
// 
// Path: src/test/java/org/hildan/fxgson/TestClassesWithProp.java
// static class WithObsList {
//     ObservableList<CustomObject> list;
// 
//     WithObsList() {
//     }
// 
//     WithObsList(ObservableList<CustomObject> value) {
//         this.list = value;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         WithObsList that = (WithObsList) o;
//         return Objects.equals(list, that.list);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(list);
//     }
// }
// 
// Path: src/main/java/org/hildan/fxgson/adapters/properties/ListPropertyTypeAdapter.java
// public class ListPropertyTypeAdapter<T> extends PropertyTypeAdapter<ObservableList<T>, ListProperty<T>> {
// 
//     /**
//      * Creates a new ListPropertyTypeAdapter.
//      *
//      * @param delegate
//      *         a delegate adapter to use for the inner list value of the property
//      * @param throwOnNullProperty
//      *         if true, this adapter will throw {@link NullPropertyException} when given a null {@link Property} to
//      *         serialize
//      */
//     public ListPropertyTypeAdapter(TypeAdapter<ObservableList<T>> delegate, boolean throwOnNullProperty) {
//         super(delegate, throwOnNullProperty);
//     }
// 
//     @NotNull
//     @Override
//     protected ListProperty<T> createProperty(ObservableList<T> deserializedValue) {
//         return new SimpleListProperty<>(deserializedValue);
//     }
// }


// Path: src/test/java/org/hildan/fxgson/TestClassesCustom.java
import java.util.Objects;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.ObservableList;
import org.hildan.fxgson.TestClassesSimple.CustomObject;
import org.hildan.fxgson.TestClassesWithProp.WithObsList;
import org.hildan.fxgson.adapters.properties.ListPropertyTypeAdapter;
import org.jetbrains.annotations.NotNull;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;

package org.hildan.fxgson;





class TestClassesCustom {

    static class CustomListProperty extends SimpleListProperty<CustomObject> {
        CustomListProperty() {
        }

        CustomListProperty(ObservableList<CustomObject> initialValue) {
            super(initialValue);
        }
    }

    static class WithCustomListProp {
        CustomListProperty prop = new CustomListProperty();

        WithCustomListProp() {
        }

        WithCustomListProp(CustomListProperty value) {
            this.prop = value;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
            WithObsList that = (WithObsList) o;