You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/05/30 14:18:12 UTC
[isis] branch master updated: ISIS-1957: fixes ServiceInjector
fails to handle Generic Types
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new dabee19 ISIS-1957: fixes ServiceInjector fails to handle Generic Types
dabee19 is described below
commit dabee1909c58869ca247d318133c564e09d0f7f0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 30 16:17:46 2018 +0200
ISIS-1957: fixes ServiceInjector fails to handle Generic Types
... in target fields of type List
Task-Url: https://issues.apache.org/jira/browse/ISIS-1957
---
.../applib/services/grid/GridSystemService.java | 6 ++--
.../commons/internal/collections/_Collections.java | 12 +++++--
.../core/metamodel/services/ServicesInjector.java | 2 +-
.../services/grid/GridServiceDefault.java | 38 ++++++++++------------
.../grid/bootstrap3/GridSystemServiceBS3.java | 2 +-
.../core/metamodel/services/grid/BS3GridTest.java | 2 +-
6 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
index 46e8209..553264d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
@@ -22,13 +22,13 @@ import org.apache.isis.applib.layout.grid.Grid;
/**
* Provides an implementation of {@link Grid}.
*/
-public interface GridSystemService<G extends org.apache.isis.applib.layout.grid.Grid> {
+public interface GridSystemService<G extends Grid> {
/**
* Which grid (implementation) is defined by this service.
*/
@Programmatic
- Class<? extends Grid> gridImplementation();
+ Class<G> gridImplementation();
@Programmatic
String tns();
@@ -37,7 +37,7 @@ public interface GridSystemService<G extends org.apache.isis.applib.layout.grid.
String schemaLocation();
@Programmatic
- Grid defaultGrid(Class<?> domainClass);
+ G defaultGrid(Class<?> domainClass);
/**
* Validate the grid, derive any missing object members, and overwrite any facets in the metamodel based on the
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
index 38d0725..364d635 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
@@ -277,11 +277,20 @@ public final class _Collections {
final ParameterizedType parameterizedType = (ParameterizedType) genericType;
final Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
if(actualTypeArguments.length == 1) {
+ // handle e.g. List<Sometype>
final Type actualTypeArgument = actualTypeArguments[0];
if(actualTypeArgument instanceof Class) {
final Class<?> actualType = (Class<?>) actualTypeArgument;
return actualType;
}
+ // also handle e.g. List<Sometype<T>>
+ if(actualTypeArgument instanceof ParameterizedType) {
+ final Type innerParameterizedType = ((ParameterizedType) actualTypeArgument).getRawType();
+ if(innerParameterizedType instanceof Class) {
+ final Class<?> actualType = (Class<?>) innerParameterizedType;
+ return actualType;
+ }
+ }
}
}
@@ -295,8 +304,7 @@ public final class _Collections {
* @return inferred type or null if inference fails
*/
public static @Nullable Class<?> inferElementTypeIfAny(@Nullable final Field field) {
-
- return inferElementTypeIfAny(field.getType(), field.getGenericType());
+ return inferElementTypeIfAny(field.getType(), field.getGenericType());
}
// --
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index ea21cb7..83423b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -445,7 +445,7 @@ public class ServicesInjector implements ApplicationScopedComponent {
// -- REFLECTIVE PREDICATES
private static final Predicate<Object> isOfType(final Class<?> cls) {
- return obj->cls.isAssignableFrom(obj.getClass());
+ return obj->cls.isAssignableFrom(obj.getClass());
}
private static final Predicate<Method> nameStartsWith(final String prefix) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
index 90a984f..09a294c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
@@ -20,14 +20,6 @@ import java.util.List;
import javax.annotation.Nullable;
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
@@ -35,6 +27,12 @@ import org.apache.isis.applib.layout.grid.Grid;
import org.apache.isis.applib.services.grid.GridLoaderService;
import org.apache.isis.applib.services.grid.GridService;
import org.apache.isis.applib.services.grid.GridSystemService;
+import org.apache.isis.commons.internal.base._Casts;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.Lists;
@DomainService(
nature = NatureOfService.DOMAIN,
@@ -42,7 +40,7 @@ import org.apache.isis.applib.services.grid.GridSystemService;
)
public class GridServiceDefault implements GridService {
- private static final Logger LOG = LoggerFactory.getLogger(GridServiceDefault.class);
+ //private static final Logger LOG = LoggerFactory.getLogger(GridServiceDefault.class);
public static final String COMPONENT_TNS = "http://isis.apache.org/applib/layout/component";
public static final String COMPONENT_SCHEMA_LOCATION = "http://isis.apache.org/applib/layout/component/component.xsd";
@@ -80,7 +78,7 @@ public class GridServiceDefault implements GridService {
@Programmatic
public Grid defaultGridFor(Class<?> domainClass) {
- for (GridSystemService gridSystemService : gridSystemServices()) {
+ for (GridSystemService<?> gridSystemService : gridSystemServices()) {
Grid grid = gridSystemService.defaultGrid(domainClass);
if(grid != null) {
return grid;
@@ -98,8 +96,8 @@ public class GridServiceDefault implements GridService {
final Class<?> domainClass = grid.getDomainClass();
- for (GridSystemService gridSystemService : gridSystemServices()) {
- gridSystemService.normalize(grid, domainClass);
+ for (GridSystemService<?> gridSystemService : gridSystemServices()) {
+ gridSystemService.normalize(_Casts.uncheckedCast(grid), domainClass);
}
final String tnsAndSchemaLocation = tnsAndSchemaLocation(grid);
@@ -115,8 +113,8 @@ public class GridServiceDefault implements GridService {
public Grid complete(final Grid grid) {
final Class<?> domainClass = grid.getDomainClass();
- for (GridSystemService gridSystemService : gridSystemServices()) {
- gridSystemService.complete(grid, domainClass);
+ for (GridSystemService<?> gridSystemService : gridSystemServices()) {
+ gridSystemService.complete(_Casts.uncheckedCast(grid), domainClass);
}
return grid;
@@ -127,8 +125,8 @@ public class GridServiceDefault implements GridService {
public Grid minimal(final Grid grid) {
final Class<?> domainClass = grid.getDomainClass();
- for (GridSystemService gridSystemService : gridSystemServices()) {
- gridSystemService.minimal(grid, domainClass);
+ for (GridSystemService<?> gridSystemService : gridSystemServices()) {
+ gridSystemService.minimal(_Casts.uncheckedCast(grid), domainClass);
}
return grid;
@@ -148,7 +146,7 @@ public class GridServiceDefault implements GridService {
parts.add(LINKS_TNS);
parts.add(LINKS_SCHEMA_LOCATION);
- for (GridSystemService gridSystemService : gridSystemServices) {
+ for (GridSystemService<?> gridSystemService : gridSystemServices) {
final Class<? extends Grid> gridImpl = gridSystemService.gridImplementation();
if(gridImpl.isAssignableFrom(grid.getClass())) {
parts.add(gridSystemService.tns());
@@ -177,8 +175,8 @@ public class GridServiceDefault implements GridService {
if (filteredGridSystemServices == null) {
List<GridSystemService<?>> services = Lists.newArrayList();
- for (GridSystemService gridSystemService : this.gridSystemServices) {
- final Class gridImplementation = gridSystemService.gridImplementation();
+ for (GridSystemService<?> gridSystemService : this.gridSystemServices) {
+ final Class<?> gridImplementation = gridSystemService.gridImplementation();
final boolean notSeenBefore = FluentIterable.from(services).filter(new Predicate<GridSystemService<?>>() {
@Override public boolean apply(@Nullable final GridSystemService<?> systemService) {
return systemService.gridImplementation() == gridImplementation;
@@ -203,6 +201,6 @@ public class GridServiceDefault implements GridService {
GridLoaderService gridLoaderService;
@javax.inject.Inject
- List<GridSystemService> gridSystemServices;
+ List<GridSystemService<?>> gridSystemServices;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index ac7c725..5046de8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -83,7 +83,7 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
@Programmatic
@Override
- public Grid defaultGrid(final Class<?> domainClass) {
+ public BS3Grid defaultGrid(final Class<?> domainClass) {
final BS3Grid bs3Grid = new BS3Grid();
final ObjectSpecification objectSpec = specificationLoader.loadSpecification(domainClass);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
index 87e6fec..4cc59e3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
@@ -59,7 +59,7 @@ public class BS3GridTest {
jaxbService = new JaxbService.Simple();
gridServiceDefault = new GridServiceDefault();
gridSystemServiceBS3 = new GridSystemServiceBS3();
- gridServiceDefault.gridSystemServices = Arrays.<GridSystemService>asList(
+ gridServiceDefault.gridSystemServices = Arrays.<GridSystemService<?>>asList(
gridSystemServiceBS3);
}
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.