You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/10/30 14:59:20 UTC
[4/8] git commit: ISIS-939: simplified SpecificationTraverser.
ISIS-939: simplified SpecificationTraverser.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/d7165724
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/d7165724
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/d7165724
Branch: refs/heads/master
Commit: d7165724afb442d09fb240e0e5113f9c7023b605
Parents: 51562c5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 29 08:20:46 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 29 08:20:46 2014 +0000
----------------------------------------------------------------------
.../isis/core/metamodel/app/IsisMetaModel.java | 3 +-
.../specloader/ObjectReflectorDefault.java | 15 +---
.../traverser/SpecificationTraverser.java | 21 +++--
.../SpecificationTraverserDefault.java | 89 --------------------
.../progmodels/dflt/JavaReflectorHelper.java | 3 +-
...cIdFacetDerivedFromClassNameFactoryTest.java | 26 ++----
.../ObjectReflectorDefaultTestAbstract.java | 4 +-
.../dom/CustomerAsProxiedByDataNucleus.java | 24 ++++++
8 files changed, 49 insertions(+), 136 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
index 3615b45..acdd5f6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
@@ -36,7 +36,6 @@ import org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault;
import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
-import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
@@ -119,7 +118,7 @@ public class IsisMetaModel implements ApplicationScopedComponent {
this.classSubstitutor = new ClassSubstitutor();
this.collectionTypeRegistry = new CollectionTypeRegistry();
- setSpecificationTraverser(new SpecificationTraverserDefault());
+ this.specificationTraverser = new SpecificationTraverser();
setFacetDecorators(new TreeSet<FacetDecorator>());
setProgrammingModelFacets(programmingModel);
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 5af8824..f5808d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -233,7 +233,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
// initialize subcomponents
facetDecoratorSet.init();
- specificationTraverser.init();
programmingModel.init();
facetProcessor.init();
metaModelValidator.init();
@@ -271,7 +270,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
}
private void loadAllSpecifications() {
- List<Class<?>> newlyDiscoveredClasses = newlyDiscoveredClasses();
+ List<Class<?>> newlyDiscoveredClasses = Lists.newArrayList();
while (newlyDiscoveredClasses.size() > 0) {
for (final Class<?> newClass : newlyDiscoveredClasses) {
@@ -282,17 +281,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
}
private List<Class<?>> newlyDiscoveredClasses() {
- final List<Class<?>> newlyDiscoveredClasses = new ArrayList<Class<?>>();
-
- final Collection<ObjectSpecification> noSpecs = allSpecifications();
- try {
- for (final ObjectSpecification noSpec : noSpecs) {
- getSpecificationTraverser().traverseReferencedClasses(noSpec, newlyDiscoveredClasses);
- }
- } catch (final ClassNotFoundException ex) {
- throw new IsisException(ex);
- }
- return newlyDiscoveredClasses;
+ return Lists.newArrayList();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverser.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverser.java
index 78c8097..4e25b78 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverser.java
@@ -22,13 +22,20 @@ package org.apache.isis.core.metamodel.specloader.traverser;
import java.lang.reflect.Method;
import java.util.List;
-import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+public class SpecificationTraverser {
-public interface SpecificationTraverser extends ApplicationScopedComponent {
-
- void traverseTypes(Method method, List<Class<?>> discoveredTypes);
-
- void traverseReferencedClasses(ObjectSpecification noSpec, List<Class<?>> discoveredTypes) throws ClassNotFoundException;
+ /**
+ * Traverses the return types of each method.
+ *
+ * <p>
+ * It's possible for there to be multiple return types: the generic type,
+ * and the parameterized type.
+ */
+ public void traverseTypes(final Method method, final List<Class<?>> discoveredTypes) {
+ final TypeExtractorMethodReturn returnTypes = new TypeExtractorMethodReturn(method);
+ for (final Class<?> returnType : returnTypes) {
+ discoveredTypes.add(returnType);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverserDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverserDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverserDefault.java
deleted file mode 100644
index fa0695a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/traverser/SpecificationTraverserDefault.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.metamodel.specloader.traverser;
-
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
-
-public class SpecificationTraverserDefault implements SpecificationTraverser, SpecificationLoaderSpiAware {
-
- private SpecificationLoaderSpi specificationLoaderSpi;
-
- // ////////////////////////////////////////////////////////////////////
- // init, shutdown
- // ////////////////////////////////////////////////////////////////////
-
- @Override
- public void init() {
- ensureThatState(specificationLoaderSpi, is(notNullValue()));
- }
-
- @Override
- public void shutdown() {
- }
-
- // ////////////////////////////////////////////////////////////////////
- // Traverse API
- // ////////////////////////////////////////////////////////////////////
-
- /**
- * Traverses the return types of each method.
- *
- * <p>
- * It's possible for there to be multiple return types: the generic type,
- * and the parameterized type.
- */
- @Override
- public void traverseTypes(final Method method, final List<Class<?>> discoveredTypes) {
- final TypeExtractorMethodReturn returnTypes = new TypeExtractorMethodReturn(method);
- for (final Class<?> returnType : returnTypes) {
- discoveredTypes.add(returnType);
- }
- }
-
- /**
- * Does nothing.
- */
- @Override
- public void traverseReferencedClasses(final ObjectSpecification noSpec, final List<Class<?>> discoveredTypes) throws ClassNotFoundException {
- }
-
- // ////////////////////////////////////////////////////////////////////
- // Dependencies (due to *Aware)
- // ////////////////////////////////////////////////////////////////////
-
- public SpecificationLoaderSpi getSpecificationLoaderSpi() {
- return specificationLoaderSpi;
- }
-
- @Override
- public void setSpecificationLoaderSpi(final SpecificationLoaderSpi specificationLoader) {
- this.specificationLoaderSpi = specificationLoader;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
index 30d8b32..8294088 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault;
import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
-import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
@@ -48,7 +47,7 @@ public final class JavaReflectorHelper {
final MetaModelValidator mmv,
final IsisConfiguration configuration) {
- final SpecificationTraverser specificationTraverser = new SpecificationTraverserDefault();
+ final SpecificationTraverser specificationTraverser = new SpecificationTraverser();
MetaModelValidatorComposite metaModelValidator = MetaModelValidatorComposite.asComposite(mmv);
for (MetaModelRefiner metaModelRefiner : metaModelRefiners) {
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
index ce5bd98..1e7b8df 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/objectspecid/ObjectSpecIdFacetDerivedFromClassNameFactoryTest.java
@@ -19,8 +19,7 @@
package org.apache.isis.core.metamodel.facets.object.objectspecid;
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
+import org.datanucleus.testing.dom.CustomerAsProxiedByDataNucleus;
import org.junit.Before;
import org.junit.Test;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
@@ -28,16 +27,12 @@ import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassName;
import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassNameFactory;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
public class ObjectSpecIdFacetDerivedFromClassNameFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
- @Mock
- private ClassSubstitutor mockClassSubstitutor;
-
private ObjectSpecIdFacetDerivedFromClassNameFactory facetFactory;
@Before
@@ -46,25 +41,14 @@ public class ObjectSpecIdFacetDerivedFromClassNameFactoryTest extends AbstractFa
facetFactory.setSpecificationLookup(mockSpecificationLoaderSpi);
}
- static class Customer {
- }
-
- static class CustomerAsManufacturedByCglibByteCodeEnhancer extends Customer {
+ public static class Customer {
}
@Test
- public void installsFacet_andDelegatesToClassSubstitutor() {
-
-
+ public void installsFacet_passedThroughClassSubstitutor() {
expectNoMethodsRemoved();
- context.checking(new Expectations() {
- {
- one(mockClassSubstitutor).getClass(CustomerAsManufacturedByCglibByteCodeEnhancer.class);
- will(returnValue(Customer.class));
- }
- });
-
- facetFactory.process(new ProcessClassContext(CustomerAsManufacturedByCglibByteCodeEnhancer.class, mockMethodRemover, facetHolderImpl));
+
+ facetFactory.process(new ProcessClassContext(CustomerAsProxiedByDataNucleus.class, mockMethodRemover, facetHolderImpl));
final ObjectSpecIdFacet facet = facetHolderImpl.getFacet(ObjectSpecIdFacet.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
index 038afc2..a24afcf 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
@@ -40,7 +40,7 @@ import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
+import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
import org.apache.isis.core.unittestsupport.jmocking.InjectIntoJMockAction;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
@@ -76,7 +76,7 @@ public abstract class ObjectReflectorDefaultTestAbstract {
final ObjectReflectorDefault reflector =
new ObjectReflectorDefault(
mockConfiguration,
- new SpecificationTraverserDefault(),
+ new SpecificationTraverser(),
new ProgrammingModelFacetsJava5(),
new HashSet<FacetDecorator>(),
new MetaModelValidatorDefault());
http://git-wip-us.apache.org/repos/asf/isis/blob/d7165724/core/metamodel/src/test/java/org/datanucleus/testing/dom/CustomerAsProxiedByDataNucleus.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/datanucleus/testing/dom/CustomerAsProxiedByDataNucleus.java b/core/metamodel/src/test/java/org/datanucleus/testing/dom/CustomerAsProxiedByDataNucleus.java
new file mode 100644
index 0000000..6a97209
--- /dev/null
+++ b/core/metamodel/src/test/java/org/datanucleus/testing/dom/CustomerAsProxiedByDataNucleus.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.datanucleus.testing.dom;
+
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacetDerivedFromClassNameFactoryTest;
+
+public class CustomerAsProxiedByDataNucleus extends ObjectSpecIdFacetDerivedFromClassNameFactoryTest.Customer {
+}