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 {
+}