diff --git a/src/main/java/com/speedment/component/DbmsHandlerComponent.java b/src/main/java/com/speedment/component/DbmsHandlerComponent.java index 44e041b58a..31f0831325 100644 --- a/src/main/java/com/speedment/component/DbmsHandlerComponent.java +++ b/src/main/java/com/speedment/component/DbmsHandlerComponent.java @@ -26,8 +26,8 @@ /** * This class is a pluggable factory that produces * {@link DbmsHandler DbmsHandlers} for a given Dbms. The DbmsHandler is - * obtained via the {@link #get(com.speedment.config.Dbms) } method and if an - * existing DbmsHandler can not be found, the {@link #make(com.speedment.config.Dbms) + * obtained via the {@link #get(com.speedment.config.db.Dbms) } method and if an + * existing DbmsHandler can not be found, the {@link #make(com.speedment.config.db.Dbms) * } method is called to provide a new instance. * * @author pemi @@ -38,10 +38,10 @@ public interface DbmsHandlerComponent extends Component { /** * Installs a new {@link DbmsType} so that handlers can be created using the - * {@link #make(com.speedment.config.Dbms) } method. + * {@link #make(com.speedment.config.db.Dbms) } method. *

* The type will be indexed by its name as returned by - * {@link DbmsType#getName()}. If multiple {@code DbmsTypes} share name, + * {@link DbmsType#getName() }. If multiple {@code DbmsTypes} share name, * only the most recently installed will be saved. * * @param dbmsType the type to install diff --git a/src/main/java/com/speedment/config/Document.java b/src/main/java/com/speedment/config/Document.java index 7e45c8a231..134f021dc2 100644 --- a/src/main/java/com/speedment/config/Document.java +++ b/src/main/java/com/speedment/config/Document.java @@ -20,6 +20,8 @@ import com.speedment.annotation.Api; import com.speedment.util.OptionalBoolean; import com.speedment.stream.MapStream; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -40,7 +42,7 @@ public interface Document { * Returns the parent of this Document or {@link Optional#empty()} if the * Document does not have a parent. * - * @return + * @return the parent */ Optional getParent(); @@ -74,21 +76,22 @@ default

Stream children( if (list == null) { return Stream.empty(); } else { - return list.stream().map(map -> constructor.apply((P) this, map)); + @SuppressWarnings("unchecked") + final P thizz = (P)this; + return list.stream().map(map -> constructor.apply(thizz, map)); } } Stream children(); default Stream ancestors() { - final Stream.Builder stream = Stream.builder(); + final List ancestors = new ArrayList<>(); Document parent = this; - while ((parent = parent.getParent().orElse(null)) != null) { - stream.add(parent); + ancestors.add(parent); } - - return stream.build(); + Collections.reverse(ancestors); + return ancestors.stream(); } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/speedment/config/db/ForeignKeyColumn.java b/src/main/java/com/speedment/config/db/ForeignKeyColumn.java index 8658c2c1ec..c5fbe6647c 100644 --- a/src/main/java/com/speedment/config/db/ForeignKeyColumn.java +++ b/src/main/java/com/speedment/config/db/ForeignKeyColumn.java @@ -73,8 +73,9 @@ default String getForeignColumnName() { * @return the foreign {@link Table} referenced by this */ default Table findForeignTable() throws SpeedmentException { - final Schema schema = (Schema) ancestors() - .filter(doc -> Schema.class.isAssignableFrom(doc.getClass())) + final Schema schema = ancestors() + .filter(Schema.class::isInstance) + .map(Schema.class::cast) .findFirst() .orElseThrow(() -> new SpeedmentException( "A foreign key in the config tree references a table that " diff --git a/src/main/java/com/speedment/config/db/trait/HasColumn.java b/src/main/java/com/speedment/config/db/trait/HasColumn.java index 27f00e1422..79c2728bf5 100644 --- a/src/main/java/com/speedment/config/db/trait/HasColumn.java +++ b/src/main/java/com/speedment/config/db/trait/HasColumn.java @@ -27,21 +27,22 @@ */ @Api(version = "2.3") public interface HasColumn extends Document, HasName { - + default Column findColumn() { - final Table table = (Table) ancestors() - .filter(doc -> Table.class.isAssignableFrom(doc.getClass())) - .findFirst() - .orElseThrow(() -> new IllegalStateException( - "A node in the config tree that references a column is" + - "not located inside a table node." - )); - + final Table table = ancestors() + .filter(Table.class::isInstance) + .map(Table.class::cast) + .findFirst() + .orElseThrow(() -> new IllegalStateException( + "A node in the config tree that references a column is" + + "not located inside a table node." + )); + return table.columns() - .filter(col -> col.getName().equals(getName())) - .findAny() - .orElseThrow(() -> new IllegalStateException( - "A non-existing column '" + getName() + "' was referenced." - )); + .filter(col -> col.getName().equals(getName())) + .findAny() + .orElseThrow(() -> new IllegalStateException( + "A non-existing column '" + getName() + "' was referenced." + )); } -} \ No newline at end of file +} diff --git a/src/main/java/com/speedment/internal/core/code/Translator.java b/src/main/java/com/speedment/internal/core/code/Translator.java index 868e18d09f..c4b569ec65 100644 --- a/src/main/java/com/speedment/internal/core/code/Translator.java +++ b/src/main/java/com/speedment/internal/core/code/Translator.java @@ -46,6 +46,22 @@ import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; /** * A component that can translate a {@link Node} into something else. This @@ -184,7 +200,7 @@ default E getGenericConfigEntity(Class clazz) { return getNode() //.ancestor(clazz) .ancestors() - .filter(d -> clazz.isAssignableFrom(d.getClass())) + .filter(clazz::isInstance) .map(clazz::cast) .findAny() .orElseThrow(() -> new IllegalStateException( diff --git a/src/main/java/com/speedment/internal/core/config/AbstractChildDocument.java b/src/main/java/com/speedment/internal/core/config/AbstractChildDocument.java index 8d684c2b3c..d695ffedbb 100644 --- a/src/main/java/com/speedment/internal/core/config/AbstractChildDocument.java +++ b/src/main/java/com/speedment/internal/core/config/AbstractChildDocument.java @@ -32,6 +32,7 @@ public AbstractChildDocument(PARENT parent, Map data) { super(parent, data); } + @SuppressWarnings("unchecked") @Override public Optional getParent() { return (Optional) super.getParent(); diff --git a/src/main/java/com/speedment/internal/core/config/db/SchemaImpl.java b/src/main/java/com/speedment/internal/core/config/db/SchemaImpl.java index 324211e3ba..5af2de8843 100644 --- a/src/main/java/com/speedment/internal/core/config/db/SchemaImpl.java +++ b/src/main/java/com/speedment/internal/core/config/db/SchemaImpl.java @@ -29,7 +29,7 @@ */ public final class SchemaImpl extends AbstractChildDocument implements Schema { - public SchemaImpl(Dbms parent, Map data) { + public SchemaImpl(Dbms parent, Map data) { super(parent, data); } diff --git a/src/main/java/com/speedment/internal/core/config/db/immutable/ImmutableDocument.java b/src/main/java/com/speedment/internal/core/config/db/immutable/ImmutableDocument.java index 7bf7e4e073..0ec745e147 100644 --- a/src/main/java/com/speedment/internal/core/config/db/immutable/ImmutableDocument.java +++ b/src/main/java/com/speedment/internal/core/config/db/immutable/ImmutableDocument.java @@ -27,20 +27,21 @@ import java.util.function.BiFunction; import static java.util.stream.Collectors.toList; import java.util.stream.Stream; +import java.util.function.Function; /** * * @author Emil Forslund */ public class ImmutableDocument extends BaseDocument { - + private final transient Map> children; - + protected ImmutableDocument(Map data) { super(Collections.unmodifiableMap(data)); children = new ConcurrentHashMap<>(); } - + protected ImmutableDocument(ImmutableDocument parent, Map data) { super(parent, Collections.unmodifiableMap(data)); children = new ConcurrentHashMap<>(); @@ -58,23 +59,28 @@ public final void put(String key, Object value) { @Override public

Stream children(String key, BiFunction, T> constructor) { + + @SuppressWarnings("unchecked") + final Function typeMapper = d -> (T) d; + return children.computeIfAbsent(key, k -> { - final List> list = - (List>) get(k).orElse(null); + final List> list = get(k).map(DOCUMENT_LIST_TYPE::cast).orElse(null); if (list == null) { return new ArrayList<>(); } else { + @SuppressWarnings("unchecked") + final P thizz = (P) this; return list.stream() - .map(Collections::unmodifiableMap) - .map(data -> constructor.apply((P) this, data)) - .map(Document.class::cast) - .collect(toList()); + .map(Collections::unmodifiableMap) + .map(data -> constructor.apply(thizz, data)) + .map(Document.class::cast) + .collect(toList()); } - }).stream().map(c -> (T) c); + }).stream().map(typeMapper); } - + public static ImmutableDocument wrap(Document document) { return new ImmutableDocument(document.getData()); } -} \ No newline at end of file +} diff --git a/src/main/java/com/speedment/internal/core/config/db/mutator/ColumnMutator.java b/src/main/java/com/speedment/internal/core/config/db/mutator/ColumnMutator.java index 107256d0a0..20041f16d0 100644 --- a/src/main/java/com/speedment/internal/core/config/db/mutator/ColumnMutator.java +++ b/src/main/java/com/speedment/internal/core/config/db/mutator/ColumnMutator.java @@ -42,7 +42,7 @@ public void setAutoIncrement(Boolean autoIncrement) { put(AUTO_INCREMENT, autoIncrement); } - public void setTypeMapper(TypeMapper typeMapper) { + public void setTypeMapper(TypeMapper typeMapper) { put(TYPE_MAPPER, typeMapper.getClass().getName()); } diff --git a/src/main/java/com/speedment/internal/core/config/db/mutator/DocumentMutatorImpl.java b/src/main/java/com/speedment/internal/core/config/db/mutator/DocumentMutatorImpl.java index fff7a7d180..24b54847ed 100644 --- a/src/main/java/com/speedment/internal/core/config/db/mutator/DocumentMutatorImpl.java +++ b/src/main/java/com/speedment/internal/core/config/db/mutator/DocumentMutatorImpl.java @@ -18,6 +18,7 @@ import com.speedment.config.Document; import static java.util.Objects.requireNonNull; +import static java.util.Objects.requireNonNull; /** * diff --git a/src/main/java/com/speedment/internal/ui/UISession.java b/src/main/java/com/speedment/internal/ui/UISession.java index 6fe0e8b985..b00eb214ae 100644 --- a/src/main/java/com/speedment/internal/ui/UISession.java +++ b/src/main/java/com/speedment/internal/ui/UISession.java @@ -237,7 +237,7 @@ public > E reload() { if (schemaName.isPresent()) { project.dbmses() - .map(dbms -> (DbmsProperty) dbms) + .map(DbmsProperty.class::cast) .forEach(dbms -> loadFromDatabase(dbms, schemaName.get())); } else { showError( diff --git a/src/main/java/com/speedment/internal/ui/config/AbstractDocumentProperty.java b/src/main/java/com/speedment/internal/ui/config/AbstractDocumentProperty.java index 9b81221b37..1aff8d862a 100644 --- a/src/main/java/com/speedment/internal/ui/config/AbstractDocumentProperty.java +++ b/src/main/java/com/speedment/internal/ui/config/AbstractDocumentProperty.java @@ -19,7 +19,6 @@ import com.speedment.config.Document; import com.speedment.exception.SpeedmentException; import com.speedment.internal.ui.config.trait.HasExpandedProperty; -import com.speedment.stream.MapStream; import com.speedment.util.OptionalBoolean; import java.util.List; import java.util.Map; @@ -52,12 +51,12 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.beans.value.ObservableValue; -import static javafx.collections.FXCollections.observableList; import static javafx.collections.FXCollections.observableMap; import javafx.collections.ListChangeListener; import javafx.collections.MapChangeListener; import javafx.collections.ObservableList; import javafx.collections.ObservableMap; +import static javafx.collections.FXCollections.observableList; /** * @@ -77,7 +76,7 @@ public abstract class AbstractDocumentProperty implements DocumentProperty, HasE /** * An internal map of the properties that have been created by this class. * Two different properties must never be returned for the same key. A - * property in this map must be configered to listen for changes in the + * property in this map must be configured to listen for changes in the * raw map before being inserted into the map. */ private final transient Map> properties; @@ -136,7 +135,7 @@ protected AbstractDocumentProperty(Map data) { if (l == null) { final List children = addedList.stream() .filter(Map.class::isInstance) - .map(obj -> (Map) obj) + .map(DOCUMENT_TYPE::cast) .map(obj -> createDocument(change.getKey(), obj)) .collect(toList()); @@ -153,7 +152,7 @@ protected AbstractDocumentProperty(Map data) { } else { addedList.stream() .filter(Map.class::isInstance) - .map(obj -> (Map) obj) + .map(DOCUMENT_TYPE::cast) .map(obj -> createDocument(change.getKey(), obj)) .forEachOrdered(l::add); } @@ -186,7 +185,7 @@ protected AbstractDocumentProperty(Map data) { } else if (added instanceof Double) { newProperty = new SimpleDoubleProperty((Double) added); } else { - newProperty = new SimpleObjectProperty(added); + newProperty = new SimpleObjectProperty<>(added); } properties.put(change.getKey(), newProperty); @@ -266,6 +265,7 @@ public final BooleanProperty booleanPropertyOf(String key, BooleanSupplier ifEmp return (BooleanProperty) properties.computeIfAbsent(key, k -> prepare(k, new SimpleBooleanProperty(getAsBoolean(k).orElse(ifEmpty.getAsBoolean())))); } + @SuppressWarnings("unchecked") @Override public final ObjectProperty objectPropertyOf(String key, Class type, Supplier ifEmpty) { return (ObjectProperty) properties.computeIfAbsent(key, k -> prepare(k, new SimpleObjectProperty<>(type.cast(get(k).orElseGet(ifEmpty))))); @@ -295,7 +295,7 @@ public final

Observable return monitor.runWithoutGeneratingEvents(() -> { try { @SuppressWarnings("unchecked") - final List existing = ((List>) config.computeIfAbsent(key, k -> new CopyOnWriteArrayList<>())) + final List existing = DOCUMENT_LIST_TYPE.cast(config.computeIfAbsent(key, k -> new CopyOnWriteArrayList<>())) .stream().map(child -> constructor.apply((P) this, child)) .collect(toList()); @@ -325,11 +325,11 @@ protected DocumentProperty createDocument(String key, Map data) @Override public final Stream children() { return stream() - .filterValue(obj -> obj instanceof List) + .filterValue(List.class::isInstance) .mapValue(list -> (List) list) .flatMapValue(list -> list.stream()) .filterValue(obj -> obj instanceof Map) - .mapValue(map -> (Map) map) + .mapValue(DOCUMENT_TYPE::cast) .mapValue((key, value) -> createDocument(key, value)) .values(); } @@ -351,8 +351,7 @@ private ObservableList prepareListOnKey(String k list.addListener((ListChangeListener.Change change) -> { monitor.runWithoutGeneratingEvents(() -> { @SuppressWarnings("unchecked") - final List> rawList = - (List>) config.get(key); + final List> rawList = DOCUMENT_LIST_TYPE.cast(config.get(key)); while (change.next()) { if (change.wasAdded()) { diff --git a/src/main/java/com/speedment/internal/ui/config/SchemaProperty.java b/src/main/java/com/speedment/internal/ui/config/SchemaProperty.java index c07f9bff92..313d2447ee 100644 --- a/src/main/java/com/speedment/internal/ui/config/SchemaProperty.java +++ b/src/main/java/com/speedment/internal/ui/config/SchemaProperty.java @@ -38,7 +38,7 @@ public final class SchemaProperty extends AbstractChildDocumentProperty implements Schema, HasEnabledProperty, HasNameProperty, HasAliasProperty { - public SchemaProperty(Dbms parent, Map data) { + public SchemaProperty(Dbms parent, Map data) { super(parent, data); } diff --git a/src/main/java/com/speedment/internal/ui/config/trait/HasOrderTypeProperty.java b/src/main/java/com/speedment/internal/ui/config/trait/HasOrderTypeProperty.java index bdaaca228c..dd9fc66088 100644 --- a/src/main/java/com/speedment/internal/ui/config/trait/HasOrderTypeProperty.java +++ b/src/main/java/com/speedment/internal/ui/config/trait/HasOrderTypeProperty.java @@ -37,7 +37,7 @@ public interface HasOrderTypeProperty extends DocumentProperty, HasOrderType { default ObjectProperty orderTypeProperty() { final String defaultValue = HasOrderType.super.getOrderType().name(); final StringProperty strProperty = stringPropertyOf(HasOrderType.ORDER_TYPE, () -> defaultValue); - final ObjectProperty objProperty = new SimpleObjectProperty(OrderType.valueOf(defaultValue)); + final ObjectProperty objProperty = new SimpleObjectProperty<>(OrderType.valueOf(defaultValue)); strProperty.bindBidirectional(objProperty, new StringConverter() { @Override diff --git a/src/main/java/com/speedment/internal/ui/controller/ProjectTreeController.java b/src/main/java/com/speedment/internal/ui/controller/ProjectTreeController.java index 17596b39b0..37ad9c6ba8 100644 --- a/src/main/java/com/speedment/internal/ui/controller/ProjectTreeController.java +++ b/src/main/java/com/speedment/internal/ui/controller/ProjectTreeController.java @@ -108,11 +108,11 @@ private

TreeItem branch = new TreeItem<>(doc); branch.expandedProperty().bindBidirectional(doc.expandedProperty()); - + doc.children() - .filter(d -> d instanceof DocumentProperty) - .filter(d -> d instanceof HasExpandedProperty) - .map(d -> (P) d) + .filter(DocumentProperty.class::isInstance) + .filter(HasExpandedProperty.class::isInstance) + .map(d -> (DocumentProperty & HasExpandedProperty) d) .map(this::branch) .forEachOrdered(branch.getChildren()::add); diff --git a/src/main/java/com/speedment/internal/ui/property/AbstractPropertyItem.java b/src/main/java/com/speedment/internal/ui/property/AbstractPropertyItem.java index ab19a310e2..e9bfc051f0 100644 --- a/src/main/java/com/speedment/internal/ui/property/AbstractPropertyItem.java +++ b/src/main/java/com/speedment/internal/ui/property/AbstractPropertyItem.java @@ -48,7 +48,7 @@ protected AbstractPropertyItem(PROPERTY property, String name, String descriptio protected abstract PropertyEditor createUndecoratedEditor(); - public final PropertyEditor createEditor() { + public final PropertyEditor createEditor() { final PropertyEditor editor = createUndecoratedEditor(); decorator.accept(editor); return editor; diff --git a/src/main/java/com/speedment/internal/ui/util/EditorsUtil.java b/src/main/java/com/speedment/internal/ui/util/EditorsUtil.java index 85a7706dd9..1a69f8b952 100644 --- a/src/main/java/com/speedment/internal/ui/util/EditorsUtil.java +++ b/src/main/java/com/speedment/internal/ui/util/EditorsUtil.java @@ -57,7 +57,9 @@ public static PropertyEditor createChoiceEditorWithConverter(PropertyShee final ObservableList observable = observableArrayList(alternatives); final ChoiceBox choice = new ChoiceBox<>(labels); - choice.getSelectionModel().select(converter.apply((T) item.getValue())); + @SuppressWarnings("unchecked") + final T itemValue = (T)item.getValue(); + choice.getSelectionModel().select(converter.apply(itemValue)); return new AbstractPropertyEditor>(item, choice) { @Override diff --git a/src/main/java/com/speedment/internal/util/document/DocumentUtil.java b/src/main/java/com/speedment/internal/util/document/DocumentUtil.java index 3ef933da1f..50d10f268e 100644 --- a/src/main/java/com/speedment/internal/util/document/DocumentUtil.java +++ b/src/main/java/com/speedment/internal/util/document/DocumentUtil.java @@ -20,13 +20,9 @@ import com.speedment.config.db.trait.HasName; import com.speedment.internal.util.Cast; import com.speedment.internal.util.Trees; -import com.speedment.stream.MapStream; -import static com.speedment.util.NullUtil.requireNonNulls; import static com.speedment.util.StaticClassUtil.instanceNotAllowed; -import java.util.AbstractMap; import java.util.List; import java.util.Map; -import static java.util.Objects.requireNonNull; import java.util.Optional; import java.util.StringJoiner; import java.util.concurrent.ConcurrentHashMap; @@ -35,6 +31,8 @@ import java.util.function.Function; import static java.util.stream.Collectors.toList; import java.util.stream.Stream; +import static com.speedment.util.NullUtil.requireNonNulls; +import static java.util.Objects.requireNonNull; /** * @@ -55,8 +53,9 @@ public static Stream traverseOver(Document document) { public static Optional ancestor(Document document, final Class clazz) { requireNonNulls(document, clazz); return document.ancestors() - .filter(p -> clazz.isAssignableFrom(p.getClass())) - .map(p -> (E) p) + .filter(clazz::isInstance) + .map(clazz::cast) +// .map(p -> (E) p) .findFirst(); } @@ -73,7 +72,7 @@ public static Stream childrenOf(Document document public static Map newDocument(Document document, String key) { final List> children = document.get(key) - .map(list -> (List>) list) + .map(Document.DOCUMENT_LIST_TYPE::cast) .orElseGet(() -> { final List> list = new CopyOnWriteArrayList<>(); document.put(key, list); diff --git a/src/main/java/com/speedment/util/OptionalBoolean.java b/src/main/java/com/speedment/util/OptionalBoolean.java index 32e13b429e..c450337a1e 100644 --- a/src/main/java/com/speedment/util/OptionalBoolean.java +++ b/src/main/java/com/speedment/util/OptionalBoolean.java @@ -75,8 +75,9 @@ public boolean isPresent() { public void ifPresent(BooleanConsumer consumer) { switch (this) { - case FALSE : consumer.accept(false); - case TRUE : consumer.accept(true); + case FALSE : { consumer.accept(false); break;} + case TRUE : { consumer.accept(true); break;} + default: // do nothing } } } \ No newline at end of file diff --git a/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java b/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java index 98fc711a6d..cede3f415e 100644 --- a/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java +++ b/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java @@ -66,7 +66,7 @@ private String name(String s) { return quote(HasName.NAME) + " : " + quote(s); } - private String typeMapper(Class tmc) { + private String typeMapper(Class> tmc) { return quote(Column.TYPE_MAPPER) + " : " + quote(tmc.getName()); }