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 2017/10/25 14:37:21 UTC
[isis] 07/08: ISIS-1632: adds initial support for @Meta annotation.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-1632-meta-annotations
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 2861102ec9994b552b08e07491530ee7d265633e
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 23 17:31:22 2017 +0100
ISIS-1632: adds initial support for @Meta annotation.
However, these are not recursive, and does not merge in multiple definitions of various attributes at different levels.
---
.../java/org/apache/isis/applib/AppManifest.java | 13 ++-
.../org/apache/isis/applib/annotation/Action.java | 2 +-
.../isis/applib/annotation/ActionLayout.java | 2 +-
.../apache/isis/applib/annotation/Collection.java | 2 +-
.../isis/applib/annotation/CollectionLayout.java | 2 +-
.../isis/applib/annotation/DomainObject.java | 2 +-
.../isis/applib/annotation/DomainObjectLayout.java | 2 +-
.../isis/applib/annotation/DomainService.java | 2 +-
.../applib/annotation/DomainServiceLayout.java | 2 +-
.../isis/applib/annotation/MemberGroupLayout.java | 2 +-
.../org/apache/isis/applib/annotation/Meta.java | 34 +++++++
.../apache/isis/applib/annotation/Parameter.java | 2 +-
.../isis/applib/annotation/ParameterLayout.java | 2 +-
.../apache/isis/applib/annotation/Property.java | 4 +-
.../isis/applib/annotation/PropertyLayout.java | 2 +-
.../apache/isis/applib/annotation/ViewModel.java | 2 +-
.../isis/applib/annotation/ViewModelLayout.java | 2 +-
.../isis/core/metamodel/facets/Annotations.java | 103 ++++++++++++++++++++-
.../param/layout/ParameterLayoutFacetFactory.java | 5 +-
.../IsisComponentProvider.java | 4 +
20 files changed, 171 insertions(+), 20 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index 22c4fe4..cc7ccd6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -20,6 +20,7 @@
package org.apache.isis.applib;
import java.io.UnsupportedEncodingException;
+import java.lang.annotation.Annotation;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLDecoder;
@@ -32,7 +33,6 @@ import java.util.Set;
import javax.jdo.annotations.PersistenceCapable;
import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import org.reflections.vfs.SystemDir;
import org.reflections.vfs.Vfs;
@@ -224,6 +224,17 @@ public interface AppManifest {
}
//endregion
+ //region > metaAnnotationTypes
+ private Set<Class<? extends Annotation>> metaAnnotationTypes;
+
+ public Set<Class<? extends Annotation>> getMetaAnnotationTypes() {
+ return metaAnnotationTypes;
+ }
+ public void setMetaAnnotationTypes(final Set<Class<? extends Annotation>> metaAnnotationTypes) {
+ this.metaAnnotationTypes = metaAnnotationTypes;
+ }
+ //endregion
+
//region > domainServiceTypes
private Set<Class<?>> domainServiceTypes;
/**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
index 9e4e3a3..11ab9f8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
* Domain semantics for domain object collection.
*/
@Inherited
-@Target({ ElementType.METHOD })
+@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Action {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index 3c91af5..67f54b1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -31,7 +31,7 @@ import javax.xml.bind.annotation.XmlType;
* Layout hints for actions.
*/
@Inherited
-@Target({ ElementType.METHOD })
+@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
index 50b8f95..a9085b0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Collection.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
* Domain semantics for domain object collection.
*/
@Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Collection {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
index 336d7e1..fcfa6f1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
@@ -30,7 +30,7 @@ import java.util.Comparator;
* Layout hints for collections.
*/
@Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface CollectionLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
index 23fc34d..afee19d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObject.java
@@ -36,7 +36,7 @@ import org.apache.isis.applib.services.eventbus.ObjectUpdatingEvent;
* Domain semantics for domain objects (entities and view models; for services see {@link org.apache.isis.applib.annotation.DomainService}).
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface DomainObject {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
index 84a8fca..377efdf 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.services.eventbus.TitleUiEvent;
* Layout hints for domain objects.
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface DomainObjectLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
index 7005d37..e92b1f6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
@@ -29,7 +29,7 @@ import java.lang.annotation.*;
* </p>
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface DomainService {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
index 66bbd5a..d79d007 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
@@ -33,7 +33,7 @@ import java.lang.annotation.Target;
* </p>
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface DomainServiceLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
index 96a5ce8..5721a1d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
@@ -47,7 +47,7 @@ import com.google.common.collect.Lists;
* </p>
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface MemberGroupLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Meta.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Meta.java
new file mode 100644
index 0000000..b5cbb81
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Meta.java
@@ -0,0 +1,34 @@
+/*
+ * 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.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Inherited
+@Target({ ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Meta {
+
+
+}
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
index 209c076..abafa88 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.value.Clob;
* Domain semantics for domain object collection.
*/
@Inherited
-@Target({ ElementType.PARAMETER })
+@Target({ ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Parameter {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java
index 54cd96d..2fec7b2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ParameterLayout.java
@@ -31,7 +31,7 @@ import java.lang.annotation.Target;
* @see org.apache.isis.applib.annotation.PropertyLayout
*/
@Inherited
-@Target({ ElementType.PARAMETER })
+@Target({ ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ParameterLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index d4377ee..e7bd6fb 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -36,7 +36,7 @@ import org.apache.isis.applib.value.Clob;
* Domain semantics for domain object property.
*/
@Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Property {
@@ -127,7 +127,7 @@ public @interface Property {
* Whether the property edit should be published.
*
* <p>
- * Requires that an implementation of the {@link org.apache.isis.applib.services.publish.PublishingService}
+ * Requires that an implementation of the {@link org.apache.isis.applib.services.publish.PublisherService}
* or {@link org.apache.isis.applib.services.publish.PublisherService} is registered with the framework.
* </p>
*/
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index e7d0328..d719648 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -27,7 +27,7 @@ import java.lang.annotation.*;
* @see org.apache.isis.applib.annotation.ParameterLayout
*/
@Inherited
-@Target({ ElementType.METHOD, ElementType.FIELD })
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface PropertyLayout {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
index f27c4df..5816721 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
@@ -44,7 +44,7 @@ import javax.xml.bind.annotation.XmlRootElement;
* @see ViewModel
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewModel {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
index bbc0c22..5f2daff 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
@@ -41,7 +41,7 @@ import java.lang.annotation.Target;
* </p>
*/
@Inherited
-@Target({ ElementType.TYPE })
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewModelLayout {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 737ce0a..f8c487a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -26,15 +26,20 @@ import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;
+import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.annotation.Collection;
import org.apache.isis.applib.annotation.CollectionLayout;
import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Meta;
import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.PropertyLayout;
import org.apache.isis.applib.annotation.Title;
@@ -84,6 +89,19 @@ public final class Annotations {
return annotation;
}
+ // meta annotations
+ final Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+ final Annotation[] clsAnnotations = cls.getAnnotations();
+ for (final Annotation clsAnnotation : clsAnnotations) {
+ final Class<? extends Annotation> annotationType = clsAnnotation.annotationType();
+ if(metaAnnotationTypes.contains(annotationType)) {
+ final T annotationOnMetaAnnotation = annotationType.getAnnotation(annotationClass);
+ if(annotationOnMetaAnnotation != null) {
+ return annotationOnMetaAnnotation;
+ }
+ }
+ }
+
// search superclasses
final Class<?> superclass = cls.getSuperclass();
if (superclass != null) {
@@ -130,7 +148,7 @@ public final class Annotations {
// search for field
if ( shouldSearchForField(annotationClass) ) {
- List<String> fieldNameCandidates = fieldNameCandidatesFor(methodName);
+ final List<String> fieldNameCandidates = fieldNameCandidatesFor(methodName);
for (String fieldNameCandidate : fieldNameCandidates) {
try {
final Field field = methodDeclaringClass.getDeclaredField(fieldNameCandidate);
@@ -144,6 +162,44 @@ public final class Annotations {
}
}
+ // meta annotations
+ final Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+
+ // search for annotation on a meta-annotation on the method
+ final Annotation[] annotations = method.getAnnotations();
+ for (Annotation methodAnnotation : annotations) {
+ Class<? extends Annotation> annotationType = methodAnnotation.annotationType();
+ if(metaAnnotationTypes.contains(annotationType)) {
+ final T annotationOnMetaAnnotation = annotationType.getAnnotation(annotationClass);
+ if(annotationOnMetaAnnotation != null) {
+ return annotationOnMetaAnnotation;
+ }
+ }
+ }
+
+ // search for annotation on a meta-annotation on the field
+ if ( shouldSearchForField(annotationClass) ) {
+
+ List<String> fieldNameCandidates = fieldNameCandidatesFor(methodName);
+ for (String fieldNameCandidate : fieldNameCandidates) {
+ try {
+ final Field field = methodDeclaringClass.getDeclaredField(fieldNameCandidate);
+ final Annotation[] fieldAnnotations = field.getAnnotations();
+ for (Annotation fieldAnnotation : fieldAnnotations) {
+ final Class<? extends Annotation> annotationType = fieldAnnotation.annotationType();
+ if(metaAnnotationTypes.contains(annotationType)) {
+ final T annotationOnMetaAnnotation = annotationType.getAnnotation(annotationClass);
+ if(annotationOnMetaAnnotation != null) {
+ return annotationOnMetaAnnotation;
+ }
+ }
+ }
+ } catch (NoSuchFieldException e) {
+ // fall through
+ }
+ }
+ }
+
// search superclasses
final Class<?> superclass = methodDeclaringClass.getSuperclass();
if (superclass != null) {
@@ -382,7 +438,7 @@ public final class Annotations {
}
}
if (foundAnnotationsForAnyParameter) {
- return allParamAnnotations;
+ return expandMeta(allParamAnnotations);
}
final Class<?> methodDeclaringClass = method.getDeclaringClass();
@@ -412,6 +468,49 @@ public final class Annotations {
return noParamAnnotationsFor(method);
}
+ static Annotation[][] expandMeta(final Annotation[][] allParamAnnotations) {
+ Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+ if(metaAnnotationTypes.isEmpty()) {
+ return allParamAnnotations;
+ }
+ List<Annotation[]> allParamAnnotationList = Lists.newArrayList();
+ for (Annotation[] allParamAnnotation : allParamAnnotations) {
+ List<Annotation> expandedParamAnnotations = Lists.newArrayList();
+ for (Annotation paramAnnotation : allParamAnnotation) {
+ append(paramAnnotation, expandedParamAnnotations);
+ }
+ allParamAnnotationList.add(expandedParamAnnotations.toArray(new Annotation[]{}));
+ }
+ return allParamAnnotationList.toArray(new Annotation[][]{});
+ }
+
+ static void append(final Annotation annotation, final List<Annotation> annotationsToAppendTo) {
+ Set<Class<? extends Annotation>> metaAnnotationTypes = AppManifest.Registry.instance().getMetaAnnotationTypes();
+ expandMeta(annotation, metaAnnotationTypes, annotationsToAppendTo);
+ }
+
+ static void expandMeta(
+ final Annotation annotation,
+ final Set<Class<? extends Annotation>> metaAnnotationTypes,
+ final List<Annotation> annotationsToAppendTo) {
+ final Class<? extends Annotation> annotationType = annotation.annotationType();
+ if(metaAnnotationTypes.contains(annotationType)) {
+ Annotation[] annotations = annotationType.getAnnotations();
+ annotationsToAppendTo.addAll(FluentIterable.from(Arrays.asList(annotations)).filter(
+ new Predicate<Annotation>() {
+ @Override
+ public boolean apply(final Annotation annotation) {
+ Class<? extends Annotation> annotType = annotation.annotationType();
+ return annotType != null &&
+ annotType.getName().startsWith("org.apache.isis") &&
+ annotType != Meta.class;
+ }
+ }).toList());
+ } else {
+ annotationsToAppendTo.add(annotation);
+ }
+ }
+
private static Annotation[][] noParamAnnotationsFor(final Method method) {
return new Annotation[method.getParameterTypes().length][0];
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
index 37363f4..a9f1353 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/ParameterLayoutFacetFactory.java
@@ -20,6 +20,9 @@
package org.apache.isis.core.metamodel.facets.param.layout;
import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -40,7 +43,7 @@ public class ParameterLayoutFacetFactory extends FacetFactoryAbstract {
// ignore
return;
}
-
+
final Annotation[] parameterAnnotations = Annotations.getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
for (final Annotation parameterAnnotation : parameterAnnotations) {
if (parameterAnnotation instanceof ParameterLayout) {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 8275b92..72eb446 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.runtime.systemusinginstallers;
+import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -40,6 +41,7 @@ import org.reflections.vfs.Vfs;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Meta;
import org.apache.isis.applib.annotation.Mixin;
import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.fixturescripts.FixtureScript;
@@ -140,6 +142,7 @@ public abstract class IsisComponentProvider {
final Reflections reflections = new Reflections(packages);
final Set<Class<?>> domainServiceTypes = reflections.getTypesAnnotatedWith(DomainService.class);
+ final Set<Class<? extends Annotation>> annotationTypes = (Set)reflections.getTypesAnnotatedWith(Meta.class);
final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
@@ -160,6 +163,7 @@ public abstract class IsisComponentProvider {
registry.setDomainServiceTypes(domainServiceTypes);
registry.setPersistenceCapableTypes(persistenceCapableTypes);
registry.setFixtureScriptTypes(fixtureScriptTypes);
+ registry.setMetaAnnotationTypes(annotationTypes);
registry.setMixinTypes(mixinTypes);
}
--
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.