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 extends Document> 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 extends Document> 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