You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by th...@apache.org on 2015/06/19 04:51:36 UTC

[1/5] tapestry-5 git commit: Partial fix for TAP5-2029.

Repository: tapestry-5
Updated Branches:
  refs/heads/master 766c16bd8 -> d61eee730


Partial fix for TAP5-2029.

Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/177dc5c3
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/177dc5c3
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/177dc5c3

Branch: refs/heads/master
Commit: 177dc5c3acc600d20796ae0bbd7d5226d76bbe21
Parents: 32e7ecc
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Fri May 29 22:30:00 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Fri May 29 22:30:00 2015 -0300

----------------------------------------------------------------------
 .../internal/plastic/PlasticClassImpl.java      | 169 +++++++++++--------
 1 file changed, 101 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/177dc5c3/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
----------------------------------------------------------------------
diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
index c07bcaf..97a9639 100644
--- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
+++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
@@ -335,89 +335,122 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal
 
         return annotationAccess.getAnnotation(annotationType);
     }
+    
+    private static void addMethodAndParameterAnnotationsFromExistingClass(MethodNode methodNode, MethodNode implementationMethodNode)
+    {
+        // visits the method attributes
+        int i, j, n;
+        if (implementationMethodNode.annotationDefault != null)
+        {
+            AnnotationVisitor av = methodNode.visitAnnotationDefault();
+            AnnotationNode.accept(av, null, implementationMethodNode.annotationDefault);
+            if (av != null)
+            {
+                av.visitEnd();
+            }
+        }
+        n = implementationMethodNode.visibleAnnotations == null ? 0 : implementationMethodNode.visibleAnnotations.size();
+        for (i = 0; i < n; ++i)
+        {
+            AnnotationNode an = implementationMethodNode.visibleAnnotations.get(i);
+            an.accept(methodNode.visitAnnotation(an.desc, true));
+        }
+        n = implementationMethodNode.invisibleAnnotations == null ? 0 : implementationMethodNode.invisibleAnnotations.size();
+        for (i = 0; i < n; ++i)
+        {
+            AnnotationNode an = implementationMethodNode.invisibleAnnotations.get(i);
+            an.accept(methodNode.visitAnnotation(an.desc, false));
+        }
+        n = implementationMethodNode.visibleParameterAnnotations == null
+                ? 0
+                : implementationMethodNode.visibleParameterAnnotations.length;
+        for (i = 0; i < n; ++i)
+        {
+            List<?> l = implementationMethodNode.visibleParameterAnnotations[i];
+            if (l == null)
+            {
+                continue;
+            }
+            for (j = 0; j < l.size(); ++j)
+            {
+                AnnotationNode an = (AnnotationNode) l.get(j);
+                an.accept(methodNode.visitParameterAnnotation(i, an.desc, true));
+            }
+        }
+        n = implementationMethodNode.invisibleParameterAnnotations == null
+                ? 0
+                : implementationMethodNode.invisibleParameterAnnotations.length;
+        for (i = 0; i < n; ++i)
+        {
+            List<?> l = implementationMethodNode.invisibleParameterAnnotations[i];
+            if (l == null)
+            {
+                continue;
+            }
+            for (j = 0; j < l.size(); ++j)
+            {
+                AnnotationNode an = (AnnotationNode) l.get(j);
+                an.accept(methodNode.visitParameterAnnotation(i, an.desc, false));
+            }
+        }
+
+        methodNode.visitEnd();
+
+    }
+    
 
     private static void addMethodAndParameterAnnotationsFromExistingClass(MethodNode methodNode, ClassNode source)
     {
         if (source != null)
         {
 
-            for (MethodNode implementationNode : source.methods)
+        	MethodNode candidate = null;
+
+            for (MethodNode implementationMethodNode : source.methods)
             {
-                // Find corresponding method in the implementation class MethodNode
-                if (methodNode.name.equals(implementationNode.name) && methodNode.desc.equals(implementationNode.desc))
+            	
+                // Find corresponding methods in the implementation class MethodNode
+                if (methodNode.name.equals(implementationMethodNode.name) && 
+//                		methodNode.parameters.size() == implementationMethodNode.parameters.size() &&
+                		// We don't want synthetic methods.
+                		((implementationMethodNode.access & Opcodes.ACC_SYNTHETIC) == 0) 
+                		/*methodNode.desc.equals(implementationMethodNode.desc)*/)
                 {
-
-                    // Copied and adapted from MethodNode.accept(). We want annotation info, but not code nor attributes
-                    // Otherwise, we get ClassFormatError (Illegal exception table range) later
-
-                    // visits the method attributes
-                    int i, j, n;
-                    if (implementationNode.annotationDefault != null)
-                    {
-                        AnnotationVisitor av = methodNode.visitAnnotationDefault();
-                        AnnotationNode.accept(av, null, implementationNode.annotationDefault);
-                        if (av != null)
-                        {
-                            av.visitEnd();
-                        }
-                    }
-                    n = implementationNode.visibleAnnotations == null ? 0 : implementationNode.visibleAnnotations.size();
-                    for (i = 0; i < n; ++i)
-                    {
-                        AnnotationNode an = implementationNode.visibleAnnotations.get(i);
-                        an.accept(methodNode.visitAnnotation(an.desc, true));
-                    }
-                    n = implementationNode.invisibleAnnotations == null ? 0 : implementationNode.invisibleAnnotations.size();
-                    for (i = 0; i < n; ++i)
-                    {
-                        AnnotationNode an = implementationNode.invisibleAnnotations.get(i);
-                        an.accept(methodNode.visitAnnotation(an.desc, false));
-                    }
-                    n = implementationNode.visibleParameterAnnotations == null
-                            ? 0
-                            : implementationNode.visibleParameterAnnotations.length;
-                    for (i = 0; i < n; ++i)
-                    {
-                        List<?> l = implementationNode.visibleParameterAnnotations[i];
-                        if (l == null)
-                        {
-                            continue;
-                        }
-                        for (j = 0; j < l.size(); ++j)
-                        {
-                            AnnotationNode an = (AnnotationNode) l.get(j);
-                            an.accept(methodNode.visitParameterAnnotation(i, an.desc, true));
-                        }
-                    }
-                    n = implementationNode.invisibleParameterAnnotations == null
-                            ? 0
-                            : implementationNode.invisibleParameterAnnotations.length;
-                    for (i = 0; i < n; ++i)
-                    {
-                        List<?> l = implementationNode.invisibleParameterAnnotations[i];
-                        if (l == null)
-                        {
-                            continue;
-                        }
-                        for (j = 0; j < l.size(); ++j)
-                        {
-                            AnnotationNode an = (AnnotationNode) l.get(j);
-                            an.accept(methodNode.visitParameterAnnotation(i, an.desc, false));
-                        }
-                    }
-
-                    methodNode.visitEnd();
-
-                    break;
-
+                	if (candidate == null)
+                	{
+                		candidate = implementationMethodNode;
+                	}
+                	// Generics implementation. Two methods with same name: The one which isn't a bridge is the one we're looking for.
+                	else 
+                	{
+                		if (isBridge(candidate))
+                		{
+                			candidate = implementationMethodNode;
+                		}
+                	}
+                	
                 }
 
             }
-
+            
+            if (candidate != null)
+            {
+            	addMethodAndParameterAnnotationsFromExistingClass(methodNode, candidate);
+            }
+            
         }
 
     }
 
+    /** 
+     * Tells whether a given method is a bridge one or not.
+     * Notice the flag for bridge method is the same as volatile field. Java 6 doesn't have
+     * Modifiers.isBridge(), so we use a workaround.
+     */
+	private static boolean isBridge(MethodNode methodNode) {
+		return Modifier.isVolatile(methodNode.access);
+	}
+
     @Override
     public PlasticClass proxyInterface(Class interfaceType, PlasticField field)
     {


[2/5] tapestry-5 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5

Posted by th...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/76e69ad3
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/76e69ad3
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/76e69ad3

Branch: refs/heads/master
Commit: 76e69ad3777a7800f8378dda9d3269b22c9b4050
Parents: 177dc5c 450b36a
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Fri May 29 22:30:39 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Fri May 29 22:30:39 2015 -0300

----------------------------------------------------------------------
 54_RELEASE_NOTES.md                             |    60 +-
 .../apache/tapestry5/beaneditor/BeanModel.java  |     8 +-
 .../beaneditor/BeanModelSourceBuilder.java      |    16 +-
 .../tapestry5/beaneditor/PropertyModel.java     |     6 +-
 .../tapestry5/services/BeanModelSource.java     |     6 +-
 .../services/PropertyConduitSource.java         |     4 +-
 build.gradle                                    |   118 +-
 buildSrc/build.gradle                           |     9 +-
 .../org/apache/tapestry5/ioc/Configuration.java |     8 +-
 .../tapestry5/ioc/MappedConfiguration.java      |     6 +-
 .../org/apache/tapestry5/ioc/ObjectLocator.java |    13 +-
 .../tapestry5/ioc/OrderedConfiguration.java     |    10 +-
 .../java/org/apache/tapestry5/ioc/Resource.java |    10 +-
 .../ioc/internal/BasicTypeCoercions.java        |     4 +-
 .../ioc/internal/services/TypeCoercerImpl.java  |     8 +-
 .../ioc/internal/util/CollectionFactory.java    |    10 +-
 .../ioc/internal/util/GenericsUtils.java        |    28 +-
 .../ioc/internal/util/InheritanceSearch.java    |    14 +-
 .../ioc/services/ClassPropertyAdapter.java      |     6 +-
 .../tapestry5/ioc/services/PropertyAccess.java  |     6 +-
 .../tapestry5/ioc/services/PropertyAdapter.java |     4 +-
 .../tapestry5/ioc/services/TypeCoercer.java     |     6 +-
 .../tapestry5/ioc/util/CaseInsensitiveMap.java  |    73 +-
 .../apache/tapestry5/ioc/util/TimeInterval.java |    14 +-
 .../tapestry5/services/DataTypeAnalyzer.java    |     8 +-
 .../services/InvalidationEventHub.java          |     4 +-
 .../tapestry5/util/StringToEnumCoercion.java    |     8 +-
 gradle/wrapper/gradle-wrapper.jar               |   Bin 51017 -> 52266 bytes
 gradle/wrapper/gradle-wrapper.properties        |     4 +-
 plastic/build.gradle                            |     1 -
 .../internal/plastic/asm/MethodWriter.java      |     4 +-
 .../plastic/asm/commons/AdviceAdapter.java      |    10 +-
 .../internal/plastic/asm/util/ASMifier.java     |    12 +-
 .../plastic/asm/util/CheckClassAdapter.java     |    32 +-
 .../internal/plastic/asm/util/Textifier.java    |    15 +-
 .../plastic/asm/util/TraceClassVisitor.java     |    16 +-
 .../internal/plastic/asm/xml/Processor.java     |    48 +-
 .../internal/plastic/InheritanceData.java       |    10 +-
 .../internal/plastic/MethodAdviceManager.java   |     2 +-
 .../internal/plastic/PlasticClassImpl.java      |     2 +-
 .../internal/plastic/PlasticClassPool.java      |     2 +-
 .../internal/plastic/PlasticInternalUtils.java  |    38 +-
 .../apache/tapestry5/plastic/FieldConduit.java  |     6 +-
 .../tapestry5/plastic/InstructionBuilder.java   |     8 +-
 .../tapestry5/plastic/MethodDescription.java    |    12 +-
 .../tapestry5/plastic/MethodInvocation.java     |     4 +-
 .../apache/tapestry5/plastic/PlasticClass.java  |    16 +-
 .../plastic/PlasticClassTransformation.java     |     4 +-
 .../tapestry5/plastic/PlasticConstants.java     |    29 +
 .../apache/tapestry5/plastic/PlasticField.java  |     6 +-
 .../tapestry5/plastic/PlasticManager.java       |    12 +-
 .../apache/tapestry5/plastic/PlasticMethod.java |    10 +-
 .../apache/tapestry5/plastic/PlasticUtils.java  |     4 +-
 .../apache/tapestry5/plastic/TryCatchBlock.java |     4 +-
 .../plastic/FieldPropertyMethodCreation.groovy  |    15 +
 .../AccessorsAlreadyExistSubject2.java          |    15 +
 .../filtered/archetype-resources/build.gradle   |    23 +-
 quickstart/filtered/archetype-resources/pom.xml |    18 +-
 .../src/main/java/components/Layout.java        |    60 +-
 .../src/main/java/pages/About.java              |    16 +-
 .../src/main/java/pages/Index.java              |    78 +-
 .../src/main/java/pages/Login.java              |    69 +-
 .../src/main/java/services/AppModule.java       |    58 +-
 .../src/main/resources/components/Layout.tml    |    30 +-
 .../src/main/resources/pages/About.tml          |     2 +-
 .../src/main/resources/pages/Contact.tml        |     2 +-
 .../src/main/resources/pages/Error404.tml       |     2 +-
 .../src/main/resources/pages/Index.tml          |    12 +-
 .../src/main/resources/pages/Login.tml          |    10 +-
 .../mybootstrap/css/bootstrap-responsive.css    |  1109 --
 .../webapp/mybootstrap/css/bootstrap-theme.css  |   476 +
 .../main/webapp/mybootstrap/css/bootstrap.css   | 11735 ++++++++---------
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   288 +
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../img/glyphicons-halflings-white.png          |   Bin 8777 -> 0 bytes
 .../mybootstrap/img/glyphicons-halflings.png    |   Bin 12799 -> 0 bytes
 .../src/main/webapp/mybootstrap/js/affix.js     |   162 +
 .../src/main/webapp/mybootstrap/js/alert.js     |    94 +
 .../src/main/webapp/mybootstrap/js/bootstrap.js |  2280 ----
 .../src/main/webapp/mybootstrap/js/button.js    |   116 +
 .../src/main/webapp/mybootstrap/js/carousel.js  |   237 +
 .../src/main/webapp/mybootstrap/js/collapse.js  |   211 +
 .../src/main/webapp/mybootstrap/js/dropdown.js  |   161 +
 .../src/main/webapp/mybootstrap/js/modal.js     |   339 +
 .../src/main/webapp/mybootstrap/js/popover.js   |   108 +
 .../src/main/webapp/mybootstrap/js/scrollspy.js |   172 +
 .../src/main/webapp/mybootstrap/js/tab.js       |   153 +
 .../src/main/webapp/mybootstrap/js/tooltip.js   |   476 +
 .../main/webapp/mybootstrap/js/transition.js    |    59 +
 tapestry-beanvalidator/build.gradle             |     2 +
 .../ClientConstraintDescriptor.java             |     4 +-
 tapestry-clojure/build.gradle                   |     1 -
 .../LICENSE-typeahead.js-bootstrap3.less.txt    |    21 +
 tapestry-core/NOTICE.txt                        |     3 +
 tapestry-core/build.gradle                      |     6 +-
 .../modules/t5/core/autocomplete.coffee         |    30 +-
 .../META-INF/modules/t5/core/console.coffee     |    39 +-
 .../META-INF/modules/t5/core/events.coffee      |     3 +
 .../META-INF/modules/t5/core/forms.coffee       |     4 +
 .../META-INF/modules/t5/core/pageinit.coffee    |    36 +-
 .../META-INF/modules/t5/core/validation.coffee  |    25 +-
 .../modules/t5/core/zone-refresh.coffee         |     5 +-
 .../META-INF/modules/t5/core/zone.coffee        |    13 +-
 .../main/java/org/apache/tapestry5/Asset.java   |    12 +-
 .../BaseOptimizedSessionPersistedObject.java    |     6 +-
 .../main/java/org/apache/tapestry5/Binding.java |     4 +-
 .../main/java/org/apache/tapestry5/Block.java   |     4 +-
 .../org/apache/tapestry5/ClientElement.java     |     4 +-
 .../org/apache/tapestry5/ComponentAction.java   |     6 +-
 .../tapestry5/ComponentEventCallback.java       |     4 +-
 .../apache/tapestry5/ComponentResources.java    |     4 +-
 .../tapestry5/ComponentResourcesCommon.java     |    64 +-
 .../java/org/apache/tapestry5/ContentType.java  |     2 +-
 .../org/apache/tapestry5/EventConstants.java    |     7 +-
 .../main/java/org/apache/tapestry5/Field.java   |     7 +-
 .../main/java/org/apache/tapestry5/Link.java    |    14 +-
 .../java/org/apache/tapestry5/MarkupWriter.java |     4 +-
 .../OptimizedSessionPersistedObject.java        |     4 +-
 .../java/org/apache/tapestry5/PageCallback.java |     8 +-
 .../java/org/apache/tapestry5/SelectModel.java  |     4 +-
 .../org/apache/tapestry5/SymbolConstants.java   |    38 +-
 .../org/apache/tapestry5/TapestryConstants.java |     4 +-
 .../org/apache/tapestry5/TapestryFilter.java    |     8 +-
 .../TrackableComponentEventCallback.java        |     8 +-
 .../apache/tapestry5/ValidationDecorator.java   |     6 +-
 .../org/apache/tapestry5/ValidationTracker.java |    10 +-
 .../apache/tapestry5/ValidationTrackerImpl.java |    20 +-
 .../java/org/apache/tapestry5/Validator.java    |     4 +-
 .../java/org/apache/tapestry5/ValueEncoder.java |    10 +-
 .../java/org/apache/tapestry5/VersionUtils.java |     4 +-
 .../apache/tapestry5/ajax/MultiZoneUpdate.java  |     4 +-
 .../annotations/ActivationRequestParameter.java |    24 +-
 .../tapestry5/annotations/BeforeRenderBody.java |    13 +-
 .../tapestry5/annotations/BeginRender.java      |    13 +-
 .../tapestry5/annotations/BindParameter.java    |    12 +-
 .../apache/tapestry5/annotations/Cached.java    |    11 +-
 .../tapestry5/annotations/Environmental.java    |    16 +-
 .../annotations/HeartbeatDeferred.java          |    18 +-
 .../apache/tapestry5/annotations/Import.java    |     8 +-
 .../apache/tapestry5/annotations/OnEvent.java   |    17 +-
 .../annotations/PageActivationContext.java      |    11 +-
 .../tapestry5/annotations/PageAttached.java     |     4 +-
 .../tapestry5/annotations/PageDetached.java     |     4 +-
 .../tapestry5/annotations/PageLoaded.java       |    11 +-
 .../apache/tapestry5/annotations/PageReset.java |    18 +-
 .../apache/tapestry5/annotations/Persist.java   |    12 +-
 .../apache/tapestry5/annotations/Property.java  |    11 +-
 .../tapestry5/annotations/RequestParameter.java |    19 +-
 .../apache/tapestry5/annotations/Retain.java    |    13 +-
 .../apache/tapestry5/annotations/Secure.java    |    11 +-
 .../tapestry5/annotations/SessionState.java     |    13 +-
 .../tapestry5/annotations/SetupRender.java      |     2 +-
 .../annotations/WhitelistAccessOnly.java        |     4 +-
 .../corelib/base/AbstractConditional.java       |     6 +-
 .../tapestry5/corelib/base/AbstractField.java   |     8 +-
 .../corelib/base/AbstractPropertyOutput.java    |     2 +-
 .../corelib/base/AbstractTextField.java         |    10 +-
 .../corelib/components/AjaxFormLoop.java        |     8 +-
 .../tapestry5/corelib/components/Alerts.java    |     3 +-
 .../tapestry5/corelib/components/Any.java       |    11 +-
 .../corelib/components/BeanDisplay.java         |     6 +-
 .../corelib/components/BeanEditForm.java        |     6 +-
 .../corelib/components/BeanEditor.java          |     4 -
 .../tapestry5/corelib/components/Checklist.java |     8 +-
 .../tapestry5/corelib/components/DateField.java |    39 +-
 .../tapestry5/corelib/components/Delegate.java  |     6 +-
 .../tapestry5/corelib/components/DevTool.java   |     6 +-
 .../tapestry5/corelib/components/Dynamic.java   |     6 +-
 .../tapestry5/corelib/components/Error.java     |     6 +-
 .../tapestry5/corelib/components/Errors.java    |     2 +-
 .../tapestry5/corelib/components/EventLink.java |     8 +-
 .../tapestry5/corelib/components/Form.java      |    40 +-
 .../corelib/components/FormFragment.java        |     4 +-
 .../tapestry5/corelib/components/Grid.java      |    27 +-
 .../tapestry5/corelib/components/GridRows.java  |     6 +-
 .../tapestry5/corelib/components/Hidden.java    |     4 +-
 .../tapestry5/corelib/components/Label.java     |     4 +-
 .../tapestry5/corelib/components/LocalDate.java |     6 +-
 .../tapestry5/corelib/components/Loop.java      |    28 +-
 .../tapestry5/corelib/components/PageLink.java  |     4 +-
 .../tapestry5/corelib/components/Palette.java   |    22 +-
 .../corelib/components/PasswordField.java       |     4 +-
 .../corelib/components/ProgressiveDisplay.java  |     4 +-
 .../tapestry5/corelib/components/Radio.java     |     4 +-
 .../corelib/components/RadioGroup.java          |     5 +
 .../tapestry5/corelib/components/Select.java    |     2 +-
 .../tapestry5/corelib/components/TextArea.java  |     4 +-
 .../tapestry5/corelib/components/TextField.java |     4 +-
 .../corelib/components/TimeInterval.java        |     6 +-
 .../tapestry5/corelib/components/Tree.java      |     4 +-
 .../tapestry5/corelib/components/Zone.java      |    12 +-
 .../tapestry5/corelib/data/SecureOption.java    |     7 +-
 .../corelib/internal/FormSupportImpl.java       |     4 +-
 .../tapestry5/corelib/mixins/Autocomplete.java  |    11 +-
 .../tapestry5/corelib/mixins/Confirm.java       |    26 +-
 .../corelib/mixins/FormFieldFocus.java          |     5 +-
 .../tapestry5/corelib/mixins/FormGroup.java     |    14 +-
 .../tapestry5/corelib/mixins/NotEmpty.java      |     4 +-
 .../corelib/mixins/OverrideFieldFocus.java      |     7 +-
 .../corelib/mixins/RenderClientId.java          |     8 +-
 .../corelib/mixins/RenderInformals.java         |    14 +-
 .../tapestry5/corelib/mixins/ZoneRefresh.java   |    16 +-
 .../corelib/pages/ExceptionReport.java          |    99 +-
 .../tapestry5/corelib/pages/ServiceStatus.java  |     4 +-
 .../java/org/apache/tapestry5/dom/Element.java  |     4 +-
 .../internal/BeanValidationContext.java         |     2 -
 .../internal/BeanValidationContextImpl.java     |     2 -
 .../InternalComponentResourcesCommon.java       |     4 +-
 .../tapestry5/internal/InternalSymbols.java     |     2 +-
 .../internal/TapestryAppInitializer.java        |     6 +-
 .../internal/TapestryInternalUtils.java         |     2 +-
 .../internal/bindings/LiteralBinding.java       |     6 +-
 .../internal/bindings/PropBindingFactory.java   |     4 +-
 .../pageload/EmbeddedComponentAssembler.java    |     6 +-
 .../internal/pageload/PageLoaderImpl.java       |     4 +-
 .../services/BlockInjectionProvider.java        |     4 +-
 .../services/ComponentClassResolverImpl.java    |    12 +-
 .../services/ComponentInstantiatorSource.java   |     8 +-
 .../internal/services/ComponentModelSource.java |     4 +-
 .../services/ComponentResourcesOperation.java   |     4 +-
 .../services/ComponentTemplateSource.java       |     6 +-
 .../services/ComponentTemplateSourceImpl.java   |     2 +-
 .../DefaultRequestExceptionHandler.java         |     9 +-
 .../internal/services/DocumentLinker.java       |     4 +-
 .../services/FormControlNameManager.java        |     2 -
 .../tapestry5/internal/services/LinkSource.java |    35 +-
 .../internal/services/MessagesSourceImpl.java   |     6 +-
 .../internal/services/PageRenderQueue.java      |     6 +-
 .../internal/services/RequestPageCache.java     |     6 +-
 .../services/ResourceDigestManager.java         |     8 +-
 .../internal/services/SaxTemplateParser.java    |    24 +-
 ...sionApplicationStatePersistenceStrategy.java |     4 +-
 .../SessionPersistentFieldStrategy.java         |     4 +-
 .../UnknownActivationContextHandler.java        |     4 +-
 .../services/assets/CSSURLRewriter.java         |    20 +-
 .../assets/CompressionAnalyzerImpl.java         |    20 +-
 .../assets/JavaScriptStackAssembler.java        |     2 +-
 .../exceptions/ExceptionReportWriterImpl.java   |   313 +
 .../exceptions/ExceptionReporterImpl.java       |   251 +-
 .../structure/ComponentPageElementImpl.java     |    21 +-
 .../InternalComponentResourcesImpl.java         |    16 -
 .../tapestry5/internal/structure/Page.java      |    12 +-
 .../tapestry5/internal/structure/PageImpl.java  |    19 +-
 .../EventHandlerMethodParameterProvider.java    |     4 +-
 .../internal/transform/ImportWorker.java        |     4 +-
 .../internal/transform/InjectPageWorker.java    |    16 +-
 .../internal/transform/InjectWorker.java        |     4 +-
 .../internal/transform/ParameterConduit.java    |     6 +-
 .../tapestry5/internal/util/LocaleUtils.java    |    12 +-
 .../tapestry5/internal/util/NamedSet.java       |     2 +-
 .../apache/tapestry5/model/ComponentModel.java  |    25 +-
 .../tapestry5/model/MutableComponentModel.java  |     4 +-
 .../apache/tapestry5/modules/AssetsModule.java  |     3 +
 .../tapestry5/modules/InternalModule.java       |     3 +-
 .../tapestry5/modules/JavaScriptModule.java     |     8 +-
 .../tapestry5/modules/TapestryModule.java       |    36 +-
 .../org/apache/tapestry5/runtime/Component.java |     6 +-
 .../apache/tapestry5/runtime/RenderCommand.java |     4 +-
 .../services/ApplicationStateManager.java       |     6 +-
 .../apache/tapestry5/services/AssetFactory.java |    10 +-
 .../tapestry5/services/AssetPathConverter.java  |     4 +-
 .../apache/tapestry5/services/AssetSource.java  |     8 +-
 .../services/BeanBlockOverrideSource.java       |     6 +-
 .../tapestry5/services/BeanBlockSource.java     |     6 +-
 .../tapestry5/services/BindingFactory.java      |     4 +-
 .../tapestry5/services/BindingSource.java       |     4 +-
 .../services/ClasspathAssetAliasManager.java    |    10 +-
 .../services/ClientBehaviorSupport.java         |     8 +-
 .../tapestry5/services/ClientDataEncoder.java   |     4 +-
 .../services/ComponentClassResolver.java        |    10 +-
 .../services/ComponentEventLinkEncoder.java     |    12 +-
 .../services/ComponentEventRequestHandler.java  |     6 +-
 .../services/ComponentEventResultProcessor.java |     6 +-
 .../tapestry5/services/ComponentOverride.java   |     2 +-
 .../apache/tapestry5/services/Environment.java  |     4 +-
 .../services/ExceptionReportWriter.java         |    38 +
 .../tapestry5/services/ExceptionReporter.java   |    10 +-
 .../services/FieldValidatorSource.java          |     8 +-
 .../apache/tapestry5/services/Heartbeat.java    |     4 +-
 .../services/HiddenFieldLocationRules.java      |     4 +-
 .../tapestry5/services/LibraryMapping.java      |    14 +-
 .../tapestry5/services/LocalizationSetter.java  |    12 +-
 .../tapestry5/services/MarkupRenderer.java      |     4 +-
 .../tapestry5/services/MetaDataLocator.java     |     4 +-
 .../tapestry5/services/ObjectRenderer.java      |     4 +-
 .../services/PageRenderLinkSource.java          |    28 +-
 .../services/PageRenderRequestHandler.java      |     4 +-
 .../services/PartialMarkupRenderer.java         |     6 +-
 .../services/PartialTemplateRenderer.java       |    24 +-
 .../org/apache/tapestry5/services/Request.java  |     8 +-
 .../services/RequestExceptionHandler.java       |     8 +-
 .../services/ResourceDigestGenerator.java       |     8 +-
 .../org/apache/tapestry5/services/Response.java |     8 +-
 .../SessionPersistedObjectAnalyzer.java         |     8 +-
 .../tapestry5/services/StreamPageContent.java   |     6 +-
 .../tapestry5/services/TransformConstants.java  |     4 +-
 .../services/TranslatorAlternatesSource.java    |     8 +-
 .../tapestry5/services/TranslatorSource.java    |     8 +-
 .../services/ajax/AjaxResponseRenderer.java     |     2 +-
 .../services/assets/AssetRequestHandler.java    |     6 +-
 .../services/assets/CompressionAnalyzer.java    |     4 +-
 .../services/assets/ContentTypeAnalyzer.java    |     4 +-
 .../services/assets/ResourceMinimizer.java      |     8 +-
 .../tapestry5/services/assets/package-info.java |     4 +-
 .../services/compatibility/Compatibility.java   |     4 +-
 .../tapestry5/services/compatibility/Trait.java |    10 +-
 .../services/javascript/AMDWrapper.java         |    24 +-
 .../javascript/ExtensibleJavaScriptStack.java   |     2 +-
 .../services/javascript/Initialization.java     |     4 +-
 .../javascript/InitializationPriority.java      |     4 +-
 .../JavaScriptModuleConfiguration.java          |     8 +-
 .../services/javascript/JavaScriptStack.java    |     6 +-
 .../services/javascript/JavaScriptSupport.java  |    18 +-
 .../javascript/ModuleConfigurationCallback.java |     6 +-
 .../services/javascript/ModuleManager.java      |     4 +-
 .../services/javascript/StackExtensionType.java |     4 +-
 .../services/javascript/StylesheetLink.java     |     2 +-
 .../services/javascript/StylesheetOptions.java  |     2 +-
 .../ComponentEventLinkTransformer.java          |     6 +-
 .../PageRenderLinkTransformer.java              |     6 +-
 .../services/pageload/PagePreloader.java        |     4 +-
 .../templates/ComponentTemplateLocator.java     |     4 +-
 .../ComponentClassTransformWorker2.java         |     4 +-
 .../services/transform/InjectionProvider2.java  |     4 +-
 .../org/apache/tapestry5/test/PageTester.java   |     4 +-
 .../apache/tapestry5/tree/DefaultTreeModel.java |     4 +-
 .../tapestry5/tree/TreeSelectionModel.java      |     4 +-
 .../org/apache/tapestry5/validator/Email.java   |    13 +-
 .../org/apache/tapestry5/validator/Regexp.java  |     2 +-
 .../org/apache/tapestry5/t5-core-dom.coffee     |     6 +-
 .../META-INF/assets/core/Autocomplete.css       |    56 -
 .../META-INF/assets/core/ExceptionReport.css    |     4 +
 .../assets/core/typeahead-bootstrap3.css        |   189 +
 .../tapestry5/bootstrap/css/bootstrap-theme.css |    10 +-
 .../tapestry5/bootstrap/css/bootstrap.css       |   326 +-
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 20335 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   487 +-
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 41280 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 23320 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../assets/tapestry5/bootstrap/js/affix.js      |    14 +-
 .../assets/tapestry5/bootstrap/js/alert.js      |     6 +-
 .../assets/tapestry5/bootstrap/js/button.js     |     6 +-
 .../assets/tapestry5/bootstrap/js/carousel.js   |    25 +-
 .../assets/tapestry5/bootstrap/js/collapse.js   |    18 +-
 .../assets/tapestry5/bootstrap/js/dropdown.js   |     8 +-
 .../assets/tapestry5/bootstrap/js/modal.js      |    69 +-
 .../assets/tapestry5/bootstrap/js/popover.js    |    29 +-
 .../assets/tapestry5/bootstrap/js/scrollspy.js  |    39 +-
 .../assets/tapestry5/bootstrap/js/tab.js        |     8 +-
 .../assets/tapestry5/bootstrap/js/tooltip.js    |    54 +-
 .../assets/tapestry5/bootstrap/js/transition.js |     4 +-
 .../META-INF/assets/tapestry5/jquery.js         |    13 +-
 .../META-INF/assets/tapestry5/moment-2.10.3.js  |  9737 ++++++++++++++
 .../META-INF/assets/tapestry5/moment-2.8.4.js   |  9394 -------------
 .../META-INF/assets/tapestry5/require.js        |    95 +-
 .../assets/tapestry5/typeahead-0.9.3.js         |  1139 --
 .../META-INF/assets/tapestry5/typeahead.js      |  1782 +++
 .../assets/tapestry5/underscore-1.7.0.js        |  1416 --
 .../assets/tapestry5/underscore-1.8.3.js        |  1548 +++
 .../org/apache/tapestry5/core_fr.properties     |     2 +-
 .../tapestry5/corelib/pages/ExceptionReport.tml |    48 +-
 .../src/test/app1/AutocompleteDemo.tml          |     3 +-
 tapestry-core/src/test/app1/DisabledFields.tml  |     6 +
 .../src/test/app1/GridEarlyPagingDemo.tml       |    10 +
 .../app1/GridFormWithInitialSortMixinDemo.tml   |    38 +
 tapestry-core/src/test/app1/GridInLoopDemo.tml  |    20 +
 .../src/test/app1/ValidateInErrorEvent.tml      |     6 +
 .../META-INF/modules/validate-in-error.coffee   |     7 +
 .../integration/app1/AjaxGroovyTests.groovy     |    12 +
 .../integration/app1/AlertsTests.groovy         |     8 +-
 .../integration/app1/pages/LogoSubclass.groovy  |     7 +
 .../integration/app1/pages/LogoSubclass.java    |     7 -
 .../integration/app1/pages/ZoneFormDemo.groovy  |    65 +
 .../services/DocumentLinkerImplTest.groovy      |     2 +-
 .../services/assets/CSSURLRewriterTests.groovy  |    35 +
 .../assets/CompressionAnalyzerImplTests.groovy  |     7 +
 .../tapestry5/pagetester/PageTesterTest.java    |    31 -
 .../tapestry5/integration/app1/AjaxTests.java   |    19 +-
 .../integration/app1/CoreBehaviorsTests.java    |     2 +-
 .../tapestry5/integration/app1/FormTests.java   |    75 +-
 .../tapestry5/integration/app1/GridTests.java   |    66 +-
 .../integration/app1/components/Border.java     |    12 +-
 .../integration/app1/components/Count.java      |     4 +-
 .../integration/app1/mixins/InitialSort.java    |    31 +
 .../app1/pages/ActionViaLinkDemo.java           |    11 +-
 .../app1/pages/AutocompleteDemo.java            |    14 +-
 .../integration/app1/pages/DisabledFields.java  |    10 +
 .../app1/pages/GridEarlyPagingDemo.java         |    44 +
 .../pages/GridFormWithInitialSortMixinDemo.java |    19 +
 .../integration/app1/pages/GridInLoopDemo.java  |    37 +
 .../tapestry5/integration/app1/pages/Index.java |    30 +-
 .../app1/pages/InplaceGridInLoopDemo.java       |     2 +-
 .../integration/app1/pages/PageLinkContext.java |     8 +-
 .../integration/app1/pages/ReturnTypes.java     |    23 +-
 .../app1/pages/ValidateInErrorEvent.java        |    10 +
 .../tapestry5/integration/pagelevel/IfTest.java |     1 +
 .../internal/services/URLEncoderImplTest.java   |     3 +-
 .../internal/util/LocaleUtilsTest.java          |     8 +-
 .../tapestry5/pagetester/PageTesterTest.java    |    31 +
 .../tapestry5/services/SyncCostBench.java       |    11 +-
 .../integration/app1/components/Border.tml      |     2 +-
 .../integration/app1/pages/ZoneFormDemo.tml     |    24 +
 .../integration/app2/pages/TestPageForIf.tml    |     6 +
 .../main/java/org/apache/tapestry5/func/F.java  |     6 +-
 .../java/org/apache/tapestry5/func/Flow.java    |    16 +-
 .../apache/tapestry5/func/FlowOperations.java   |    14 +-
 .../java/org/apache/tapestry5/func/Mapper.java  |     4 +-
 .../java/org/apache/tapestry5/func/Mapper2.java |     4 +-
 .../org/apache/tapestry5/func/Predicate.java    |     6 +-
 .../java/org/apache/tapestry5/func/Reducer.java |     7 +-
 .../HibernateEntityPackageManager.java          |     4 +-
 .../hibernate/HibernateSessionManager.java      |     6 +-
 .../hibernate/HibernateSessionSource.java       |     4 +-
 .../HibernateTransactionDecorator.java          |     4 +-
 .../hibernate/HibernateGridDataSource.java      |    10 +-
 tapestry-ioc-jcache/build.gradle                |    63 +-
 .../tapestry5/jcache/module/JCacheModule.java   |    35 +-
 .../jcache/internal/AbstractTestExcluder.java   |     4 +-
 .../ioc/junit/TapestryIOCJUnit4ClassRunner.java |    14 +-
 tapestry-ioc/build.gradle                       |     3 +-
 .../org/apache/tapestry5/ioc/AdvisorDef.java    |     4 +-
 .../org/apache/tapestry5/ioc/IOCSymbols.java    |     4 +-
 .../org/apache/tapestry5/ioc/IdMatcher.java     |     6 +-
 .../tapestry5/ioc/ModuleBuilderSource.java      |     6 +-
 .../apache/tapestry5/ioc/ObjectProvider.java    |     6 +-
 .../apache/tapestry5/ioc/RegistryBuilder.java   |     2 +-
 .../org/apache/tapestry5/ioc/ReloadAware.java   |     4 +-
 .../apache/tapestry5/ioc/ScopeConstants.java    |     6 +-
 .../tapestry5/ioc/ServiceBindingOptions.java    |     3 -
 .../tapestry5/ioc/annotations/EagerLoad.java    |     4 +-
 .../tapestry5/ioc/annotations/Marker.java       |     4 +-
 .../apache/tapestry5/ioc/annotations/Match.java |    11 +-
 .../annotations/PreventServiceDecoration.java   |    10 +-
 .../apache/tapestry5/ioc/annotations/Scope.java |     9 +-
 .../tapestry5/ioc/def/ContributionDef.java      |     4 +-
 .../apache/tapestry5/ioc/def/DecoratorDef.java  |    10 +-
 .../org/apache/tapestry5/ioc/def/ModuleDef.java |     4 +-
 .../apache/tapestry5/ioc/def/ServiceDef.java    |     4 +-
 .../tapestry5/ioc/internal/RegistryImpl.java    |    20 +-
 .../ValidatingMappedConfigurationWrapper.java   |    10 +-
 .../ioc/internal/services/BridgeBuilder.java    |     4 +-
 .../services/ExceptionAnalyzerImpl.java         |     2 +-
 .../ioc/internal/services/MethodSignature.java  |     4 +-
 .../services/PerThreadServiceLifecycle.java     |     2 +-
 .../services/SystemEnvSymbolProvider.java       |     4 +-
 .../internal/services/cron/CronExpression.java  |    67 +-
 .../services/cron/PeriodicExecutorImpl.java     |    21 +-
 .../ioc/internal/util/AbstractResource.java     |    20 +-
 .../ioc/internal/util/ConcurrentBarrier.java    |     6 +-
 .../ioc/internal/util/InternalUtils.java        |     2 +-
 .../ioc/modules/TapestryIOCModule.java          |     5 +-
 .../tapestry5/ioc/services/ChainBuilder.java    |     8 +-
 .../ioc/services/ExceptionAnalysis.java         |     4 +-
 .../tapestry5/ioc/services/LazyAdvisor.java     |     8 +-
 .../ioc/services/LoggingDecorator.java          |     4 +-
 .../ioc/services/MasterObjectProvider.java      |     8 +-
 .../ioc/services/PerthreadManager.java          |     8 +-
 .../tapestry5/ioc/services/PipelineBuilder.java |     8 +-
 .../ioc/services/PropertyShadowBuilder.java     |     4 +-
 .../ioc/services/ServiceLifecycleSource.java    |     4 +-
 .../tapestry5/ioc/services/ServiceOverride.java |     4 +-
 .../tapestry5/ioc/services/StrategyBuilder.java |     8 +-
 .../tapestry5/ioc/services/SymbolProvider.java  |     4 +-
 .../tapestry5/ioc/services/SymbolSource.java    |     4 +-
 .../ioc/services/ThreadCleanupListener.java     |     4 +-
 .../tapestry5/ioc/services/cron/Schedule.java   |     4 +-
 .../apache/tapestry5/ioc/util/IdAllocator.java  |    17 +-
 .../ioc/util/LocalizedNameGenerator.java        |    10 +-
 .../tapestry5/services/UpdateListener.java      |     4 +-
 .../tapestry5/services/UpdateListenerHub.java   |     8 +-
 .../ioc/specs/CaseInsensitiveMapSpec.groovy     |    23 +
 .../ioc/specs/ClasspathResourceSpec.groovy      |    27 +
 .../ioc/specs/ClasspathScannerImplSpec.groovy   |    43 +-
 .../groovy/ioc/specs/MethodSignatureSpec.groovy |     2 +-
 .../ioc/specs/PeriodicExecutorSpec.groovy       |    30 +
 tapestry-javadoc/build.gradle                   |     2 -
 .../tapestry5/jpa/EntityManagerManager.java     |    13 +-
 .../tapestry5/jpa/EntityManagerSource.java      |    15 +-
 .../tapestry5/jpa/JpaEntityPackageManager.java  |     8 +-
 .../apache/tapestry5/jpa/JpaGridDataSource.java |    13 +-
 tapestry-json/build.gradle                      |     1 -
 .../org/apache/tapestry5/json/JSONArray.java    |    12 +-
 .../apache/tapestry5/json/JSONCollection.java   |     6 +-
 .../org/apache/tapestry5/json/JSONObject.java   |    29 +-
 .../org/apache/tapestry5/json/JSONTokener.java  |     6 +-
 .../org/apache/tapestry5/json/package-info.java |     4 +-
 .../kaptcha/components/KaptchaImage.java        |     2 +-
 tapestry-mongodb/build.gradle                   |     2 -
 .../apache/tapestry5/ioc/test/MockTester.java   |     4 +-
 .../org/apache/tapestry5/ioc/test/TestBase.java |    12 +-
 .../apache/tapestry5/ioc/test/TestUtils.java    |     4 +-
 .../apache/tapestry5/test/SeleniumTestCase.java |    13 +-
 tapestry-upload/build.gradle                    |     2 +-
 .../tapestry5/upload/components/Upload.java     |     2 +-
 tapestry-webresources/build.gradle              |     7 +-
 .../ResourceTransformerFactory.java             |     5 +-
 .../webresources/internal/coffee-script.js      |    12 +-
 .../webresources/tests/WebResourcesSpec.groovy  |     2 +-
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 20335 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   487 +-
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 41280 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 23320 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../src/test/webapp/bootstrap/js/affix.js       |    14 +-
 .../src/test/webapp/bootstrap/js/alert.js       |     6 +-
 .../src/test/webapp/bootstrap/js/button.js      |     6 +-
 .../src/test/webapp/bootstrap/js/carousel.js    |    25 +-
 .../src/test/webapp/bootstrap/js/collapse.js    |    18 +-
 .../src/test/webapp/bootstrap/js/dropdown.js    |     8 +-
 .../src/test/webapp/bootstrap/js/modal.js       |    69 +-
 .../src/test/webapp/bootstrap/js/popover.js     |    29 +-
 .../src/test/webapp/bootstrap/js/scrollspy.js   |    39 +-
 .../src/test/webapp/bootstrap/js/tab.js         |     8 +-
 .../src/test/webapp/bootstrap/js/tooltip.js     |    54 +-
 .../src/test/webapp/bootstrap/js/transition.js  |     4 +-
 .../src/test/webapp/bootstrap/less/alerts.less  |     5 +
 .../src/test/webapp/bootstrap/less/badges.less  |     7 +-
 .../webapp/bootstrap/less/button-groups.less    |     4 +-
 .../src/test/webapp/bootstrap/less/buttons.less |     2 +-
 .../test/webapp/bootstrap/less/carousel.less    |    14 +-
 .../src/test/webapp/bootstrap/less/close.less   |     1 +
 .../bootstrap/less/component-animations.less    |     3 +-
 .../test/webapp/bootstrap/less/dropdowns.less   |     5 +-
 .../src/test/webapp/bootstrap/less/forms.less   |    74 +-
 .../test/webapp/bootstrap/less/glyphicons.less  |    71 +
 .../test/webapp/bootstrap/less/jumbotron.less   |     1 +
 .../src/test/webapp/bootstrap/less/media.less   |    14 +
 .../bootstrap/less/mixins/vendor-prefixes.less  |     2 +-
 .../src/test/webapp/bootstrap/less/modals.less  |     4 +-
 .../src/test/webapp/bootstrap/less/navbar.less  |     2 +-
 .../src/test/webapp/bootstrap/less/navs.less    |     2 -
 .../src/test/webapp/bootstrap/less/panels.less  |     6 +-
 .../test/webapp/bootstrap/less/popovers.less    |     2 +-
 .../webapp/bootstrap/less/responsive-embed.less |    16 +-
 .../test/webapp/bootstrap/less/scaffolding.less |    12 +
 .../src/test/webapp/bootstrap/less/tables.less  |     6 +-
 .../src/test/webapp/bootstrap/less/theme.less   |     5 +-
 .../src/test/webapp/bootstrap/less/tooltip.less |     3 +-
 .../src/test/webapp/bootstrap/less/type.less    |     2 +-
 .../test/webapp/bootstrap/less/utilities.less   |     1 -
 .../test/webapp/bootstrap/less/variables.less   |    11 +-
 .../apache/tapestry5/beaneditor/Translate.java  |    13 +-
 .../apache/tapestry5/beaneditor/Validate.java   |    13 +-
 .../org/apache/tapestry5/beaneditor/Width.java  |     9 +-
 .../tapestry5/ioc/annotations/Inject.java       |    18 +-
 .../ioc/annotations/InjectResource.java         |     4 +-
 .../ioc/annotations/InjectService.java          |     9 +-
 .../ioc/annotations/PostInjection.java          |     4 +-
 .../tapestry5/ioc/annotations/Symbol.java       |     6 +-
 .../annotations/UsesMappedConfiguration.java    |     6 +-
 554 files changed, 26513 insertions(+), 24985 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/76e69ad3/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
----------------------------------------------------------------------


[5/5] tapestry-5 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5

Posted by th...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/d61eee73
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/d61eee73
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/d61eee73

Branch: refs/heads/master
Commit: d61eee730bf3154e42adb2e1afc99b25e5eb106c
Parents: 72334aa 766c16b
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Thu Jun 18 23:50:47 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Thu Jun 18 23:50:47 2015 -0300

----------------------------------------------------------------------
 54_RELEASE_NOTES.md                             |   2 +-
 build.gradle                                    |   4 +-
 .../main/java/org/apache/tapestry5/Field.java   |   3 -
 .../tapestry5/bootstrap/css/bootstrap-theme.css | 139 ++++++-
 .../tapestry5/bootstrap/css/bootstrap.css       | 368 +++++++++++++++----
 .../assets/tapestry5/bootstrap/js/affix.js      |   6 +-
 .../assets/tapestry5/bootstrap/js/alert.js      |   4 +-
 .../assets/tapestry5/bootstrap/js/button.js     |  22 +-
 .../assets/tapestry5/bootstrap/js/carousel.js   |   4 +-
 .../assets/tapestry5/bootstrap/js/collapse.js   |   4 +-
 .../assets/tapestry5/bootstrap/js/dropdown.js   |  88 ++---
 .../assets/tapestry5/bootstrap/js/modal.js      |  12 +-
 .../assets/tapestry5/bootstrap/js/popover.js    |   4 +-
 .../assets/tapestry5/bootstrap/js/scrollspy.js  |   4 +-
 .../assets/tapestry5/bootstrap/js/tab.js        |   8 +-
 .../assets/tapestry5/bootstrap/js/tooltip.js    |  78 +++-
 .../assets/tapestry5/bootstrap/js/transition.js |   2 +-
 .../src/test/webapp/bootstrap/js/affix.js       |   6 +-
 .../src/test/webapp/bootstrap/js/alert.js       |   4 +-
 .../src/test/webapp/bootstrap/js/button.js      |  22 +-
 .../src/test/webapp/bootstrap/js/carousel.js    |   4 +-
 .../src/test/webapp/bootstrap/js/collapse.js    |   4 +-
 .../src/test/webapp/bootstrap/js/dropdown.js    |  88 ++---
 .../src/test/webapp/bootstrap/js/modal.js       |  12 +-
 .../src/test/webapp/bootstrap/js/popover.js     |   4 +-
 .../src/test/webapp/bootstrap/js/scrollspy.js   |   4 +-
 .../src/test/webapp/bootstrap/js/tab.js         |   8 +-
 .../src/test/webapp/bootstrap/js/tooltip.js     |  78 +++-
 .../src/test/webapp/bootstrap/js/transition.js  |   2 +-
 .../src/test/webapp/bootstrap/less/badges.less  |   2 +-
 .../test/webapp/bootstrap/less/bootstrap.less   |   6 +
 .../webapp/bootstrap/less/button-groups.less    |   5 +-
 .../src/test/webapp/bootstrap/less/buttons.less |  16 +-
 .../test/webapp/bootstrap/less/carousel.less    |   4 +-
 .../test/webapp/bootstrap/less/dropdowns.less   |   4 +-
 .../src/test/webapp/bootstrap/less/forms.less   |  55 ++-
 .../webapp/bootstrap/less/input-groups.less     |   1 +
 .../test/webapp/bootstrap/less/jumbotron.less   |   8 +-
 .../test/webapp/bootstrap/less/list-group.less  |  12 +-
 .../src/test/webapp/bootstrap/less/media.less   |   5 +
 .../src/test/webapp/bootstrap/less/mixins.less  |   1 +
 .../less/mixins/background-variant.less         |   3 +-
 .../webapp/bootstrap/less/mixins/buttons.less   |  20 +-
 .../bootstrap/less/mixins/grid-framework.less   |   4 +-
 .../test/webapp/bootstrap/less/mixins/grid.less |   4 +-
 .../webapp/bootstrap/less/mixins/hide-text.less |   2 +-
 .../bootstrap/less/mixins/list-group.less       |   3 +-
 .../bootstrap/less/mixins/pagination.less       |   3 +-
 .../bootstrap/less/mixins/reset-text.less       |  18 +
 .../less/mixins/responsive-visibility.less      |   2 +-
 .../bootstrap/less/mixins/text-emphasis.less    |   3 +-
 .../test/webapp/bootstrap/less/normalize.less   |  19 +-
 .../test/webapp/bootstrap/less/pagination.less  |   5 +-
 .../src/test/webapp/bootstrap/less/panels.less  |   6 +
 .../test/webapp/bootstrap/less/popovers.less    |  12 +-
 .../src/test/webapp/bootstrap/less/print.less   |   6 -
 .../test/webapp/bootstrap/less/scaffolding.less |   3 +-
 .../src/test/webapp/bootstrap/less/theme.less   |  28 +-
 .../src/test/webapp/bootstrap/less/tooltip.less |   9 +-
 .../test/webapp/bootstrap/less/variables.less   |   8 +-
 60 files changed, 899 insertions(+), 366 deletions(-)
----------------------------------------------------------------------



[3/5] tapestry-5 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5

Posted by th...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8c8a13a1
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8c8a13a1
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8c8a13a1

Branch: refs/heads/master
Commit: 8c8a13a1b562844a0c29eb145d00b26050b5f632
Parents: 76e69ad 94cd5b5
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Wed Jun 3 22:17:54 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Wed Jun 3 22:17:54 2015 -0300

----------------------------------------------------------------------
 beanmodel/build.gradle                          |  58 +---------
 .../internal/plastic/MethodAdviceManager.java   |  23 ++--
 .../internal/plastic/PlasticClassPool.java      | 105 +++++++++++++------
 .../tapestry5/plastic/MethodAdviceTests.groovy  |  44 ++++++++
 .../java/testsubjects/DeclaredExceptions.java   |  21 ++++
 tapestry-core/build.gradle                      |   1 -
 .../modules/t5/core/confirm-click.coffee        |   5 +-
 .../modules/t5/core/exception-frame.coffee      |  79 +++++++-------
 .../modules/t5/core/form-fragment.coffee        |  43 +++++---
 .../apache/tapestry5/ContextAwareException.java |  10 +-
 .../tapestry5/ExceptionHandlerAssistant.java    |  26 ++++-
 .../corelib/components/FormFragment.java        |  18 ++--
 .../tapestry5/corelib/mixins/Confirm.java       |  18 +++-
 .../internal/services/AssetSourceImpl.java      |  59 +++++++----
 .../DefaultRequestExceptionHandler.java         |   2 +-
 .../internal/services/SaxTemplateParser.java    |   2 +
 .../services/RequestExceptionHandler.java       |  11 +-
 .../org/apache/tapestry5/core.properties        |   4 +-
 .../services/TemplateParserImplTest.java        |  22 ++++
 .../tapestry5/internal/services/TAP5-2109.tml   |   7 ++
 .../webresources/GoogleClosureMinimizer.java    |  11 +-
 .../webresources/WebResourcesSymbols.java       |   9 ++
 .../modules/WebResourcesModule.java             |   2 +
 23 files changed, 383 insertions(+), 197 deletions(-)
----------------------------------------------------------------------



[3/5] tapestry-5 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5

Posted by th...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8c8a13a1
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8c8a13a1
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8c8a13a1

Branch: refs/heads/master
Commit: 8c8a13a1b562844a0c29eb145d00b26050b5f632
Parents: 76e69ad 94cd5b5
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Wed Jun 3 22:17:54 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Wed Jun 3 22:17:54 2015 -0300

----------------------------------------------------------------------
 beanmodel/build.gradle                          |  58 +---------
 .../internal/plastic/MethodAdviceManager.java   |  23 ++--
 .../internal/plastic/PlasticClassPool.java      | 105 +++++++++++++------
 .../tapestry5/plastic/MethodAdviceTests.groovy  |  44 ++++++++
 .../java/testsubjects/DeclaredExceptions.java   |  21 ++++
 tapestry-core/build.gradle                      |   1 -
 .../modules/t5/core/confirm-click.coffee        |   5 +-
 .../modules/t5/core/exception-frame.coffee      |  79 +++++++-------
 .../modules/t5/core/form-fragment.coffee        |  43 +++++---
 .../apache/tapestry5/ContextAwareException.java |  10 +-
 .../tapestry5/ExceptionHandlerAssistant.java    |  26 ++++-
 .../corelib/components/FormFragment.java        |  18 ++--
 .../tapestry5/corelib/mixins/Confirm.java       |  18 +++-
 .../internal/services/AssetSourceImpl.java      |  59 +++++++----
 .../DefaultRequestExceptionHandler.java         |   2 +-
 .../internal/services/SaxTemplateParser.java    |   2 +
 .../services/RequestExceptionHandler.java       |  11 +-
 .../org/apache/tapestry5/core.properties        |   4 +-
 .../services/TemplateParserImplTest.java        |  22 ++++
 .../tapestry5/internal/services/TAP5-2109.tml   |   7 ++
 .../webresources/GoogleClosureMinimizer.java    |  11 +-
 .../webresources/WebResourcesSymbols.java       |   9 ++
 .../modules/WebResourcesModule.java             |   2 +
 23 files changed, 383 insertions(+), 197 deletions(-)
----------------------------------------------------------------------



[2/5] tapestry-5 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5

Posted by th...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/76e69ad3
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/76e69ad3
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/76e69ad3

Branch: refs/heads/master
Commit: 76e69ad3777a7800f8378dda9d3269b22c9b4050
Parents: 177dc5c 450b36a
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Fri May 29 22:30:39 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Fri May 29 22:30:39 2015 -0300

----------------------------------------------------------------------
 54_RELEASE_NOTES.md                             |    60 +-
 .../apache/tapestry5/beaneditor/BeanModel.java  |     8 +-
 .../beaneditor/BeanModelSourceBuilder.java      |    16 +-
 .../tapestry5/beaneditor/PropertyModel.java     |     6 +-
 .../tapestry5/services/BeanModelSource.java     |     6 +-
 .../services/PropertyConduitSource.java         |     4 +-
 build.gradle                                    |   118 +-
 buildSrc/build.gradle                           |     9 +-
 .../org/apache/tapestry5/ioc/Configuration.java |     8 +-
 .../tapestry5/ioc/MappedConfiguration.java      |     6 +-
 .../org/apache/tapestry5/ioc/ObjectLocator.java |    13 +-
 .../tapestry5/ioc/OrderedConfiguration.java     |    10 +-
 .../java/org/apache/tapestry5/ioc/Resource.java |    10 +-
 .../ioc/internal/BasicTypeCoercions.java        |     4 +-
 .../ioc/internal/services/TypeCoercerImpl.java  |     8 +-
 .../ioc/internal/util/CollectionFactory.java    |    10 +-
 .../ioc/internal/util/GenericsUtils.java        |    28 +-
 .../ioc/internal/util/InheritanceSearch.java    |    14 +-
 .../ioc/services/ClassPropertyAdapter.java      |     6 +-
 .../tapestry5/ioc/services/PropertyAccess.java  |     6 +-
 .../tapestry5/ioc/services/PropertyAdapter.java |     4 +-
 .../tapestry5/ioc/services/TypeCoercer.java     |     6 +-
 .../tapestry5/ioc/util/CaseInsensitiveMap.java  |    73 +-
 .../apache/tapestry5/ioc/util/TimeInterval.java |    14 +-
 .../tapestry5/services/DataTypeAnalyzer.java    |     8 +-
 .../services/InvalidationEventHub.java          |     4 +-
 .../tapestry5/util/StringToEnumCoercion.java    |     8 +-
 gradle/wrapper/gradle-wrapper.jar               |   Bin 51017 -> 52266 bytes
 gradle/wrapper/gradle-wrapper.properties        |     4 +-
 plastic/build.gradle                            |     1 -
 .../internal/plastic/asm/MethodWriter.java      |     4 +-
 .../plastic/asm/commons/AdviceAdapter.java      |    10 +-
 .../internal/plastic/asm/util/ASMifier.java     |    12 +-
 .../plastic/asm/util/CheckClassAdapter.java     |    32 +-
 .../internal/plastic/asm/util/Textifier.java    |    15 +-
 .../plastic/asm/util/TraceClassVisitor.java     |    16 +-
 .../internal/plastic/asm/xml/Processor.java     |    48 +-
 .../internal/plastic/InheritanceData.java       |    10 +-
 .../internal/plastic/MethodAdviceManager.java   |     2 +-
 .../internal/plastic/PlasticClassImpl.java      |     2 +-
 .../internal/plastic/PlasticClassPool.java      |     2 +-
 .../internal/plastic/PlasticInternalUtils.java  |    38 +-
 .../apache/tapestry5/plastic/FieldConduit.java  |     6 +-
 .../tapestry5/plastic/InstructionBuilder.java   |     8 +-
 .../tapestry5/plastic/MethodDescription.java    |    12 +-
 .../tapestry5/plastic/MethodInvocation.java     |     4 +-
 .../apache/tapestry5/plastic/PlasticClass.java  |    16 +-
 .../plastic/PlasticClassTransformation.java     |     4 +-
 .../tapestry5/plastic/PlasticConstants.java     |    29 +
 .../apache/tapestry5/plastic/PlasticField.java  |     6 +-
 .../tapestry5/plastic/PlasticManager.java       |    12 +-
 .../apache/tapestry5/plastic/PlasticMethod.java |    10 +-
 .../apache/tapestry5/plastic/PlasticUtils.java  |     4 +-
 .../apache/tapestry5/plastic/TryCatchBlock.java |     4 +-
 .../plastic/FieldPropertyMethodCreation.groovy  |    15 +
 .../AccessorsAlreadyExistSubject2.java          |    15 +
 .../filtered/archetype-resources/build.gradle   |    23 +-
 quickstart/filtered/archetype-resources/pom.xml |    18 +-
 .../src/main/java/components/Layout.java        |    60 +-
 .../src/main/java/pages/About.java              |    16 +-
 .../src/main/java/pages/Index.java              |    78 +-
 .../src/main/java/pages/Login.java              |    69 +-
 .../src/main/java/services/AppModule.java       |    58 +-
 .../src/main/resources/components/Layout.tml    |    30 +-
 .../src/main/resources/pages/About.tml          |     2 +-
 .../src/main/resources/pages/Contact.tml        |     2 +-
 .../src/main/resources/pages/Error404.tml       |     2 +-
 .../src/main/resources/pages/Index.tml          |    12 +-
 .../src/main/resources/pages/Login.tml          |    10 +-
 .../mybootstrap/css/bootstrap-responsive.css    |  1109 --
 .../webapp/mybootstrap/css/bootstrap-theme.css  |   476 +
 .../main/webapp/mybootstrap/css/bootstrap.css   | 11735 ++++++++---------
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   288 +
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../img/glyphicons-halflings-white.png          |   Bin 8777 -> 0 bytes
 .../mybootstrap/img/glyphicons-halflings.png    |   Bin 12799 -> 0 bytes
 .../src/main/webapp/mybootstrap/js/affix.js     |   162 +
 .../src/main/webapp/mybootstrap/js/alert.js     |    94 +
 .../src/main/webapp/mybootstrap/js/bootstrap.js |  2280 ----
 .../src/main/webapp/mybootstrap/js/button.js    |   116 +
 .../src/main/webapp/mybootstrap/js/carousel.js  |   237 +
 .../src/main/webapp/mybootstrap/js/collapse.js  |   211 +
 .../src/main/webapp/mybootstrap/js/dropdown.js  |   161 +
 .../src/main/webapp/mybootstrap/js/modal.js     |   339 +
 .../src/main/webapp/mybootstrap/js/popover.js   |   108 +
 .../src/main/webapp/mybootstrap/js/scrollspy.js |   172 +
 .../src/main/webapp/mybootstrap/js/tab.js       |   153 +
 .../src/main/webapp/mybootstrap/js/tooltip.js   |   476 +
 .../main/webapp/mybootstrap/js/transition.js    |    59 +
 tapestry-beanvalidator/build.gradle             |     2 +
 .../ClientConstraintDescriptor.java             |     4 +-
 tapestry-clojure/build.gradle                   |     1 -
 .../LICENSE-typeahead.js-bootstrap3.less.txt    |    21 +
 tapestry-core/NOTICE.txt                        |     3 +
 tapestry-core/build.gradle                      |     6 +-
 .../modules/t5/core/autocomplete.coffee         |    30 +-
 .../META-INF/modules/t5/core/console.coffee     |    39 +-
 .../META-INF/modules/t5/core/events.coffee      |     3 +
 .../META-INF/modules/t5/core/forms.coffee       |     4 +
 .../META-INF/modules/t5/core/pageinit.coffee    |    36 +-
 .../META-INF/modules/t5/core/validation.coffee  |    25 +-
 .../modules/t5/core/zone-refresh.coffee         |     5 +-
 .../META-INF/modules/t5/core/zone.coffee        |    13 +-
 .../main/java/org/apache/tapestry5/Asset.java   |    12 +-
 .../BaseOptimizedSessionPersistedObject.java    |     6 +-
 .../main/java/org/apache/tapestry5/Binding.java |     4 +-
 .../main/java/org/apache/tapestry5/Block.java   |     4 +-
 .../org/apache/tapestry5/ClientElement.java     |     4 +-
 .../org/apache/tapestry5/ComponentAction.java   |     6 +-
 .../tapestry5/ComponentEventCallback.java       |     4 +-
 .../apache/tapestry5/ComponentResources.java    |     4 +-
 .../tapestry5/ComponentResourcesCommon.java     |    64 +-
 .../java/org/apache/tapestry5/ContentType.java  |     2 +-
 .../org/apache/tapestry5/EventConstants.java    |     7 +-
 .../main/java/org/apache/tapestry5/Field.java   |     7 +-
 .../main/java/org/apache/tapestry5/Link.java    |    14 +-
 .../java/org/apache/tapestry5/MarkupWriter.java |     4 +-
 .../OptimizedSessionPersistedObject.java        |     4 +-
 .../java/org/apache/tapestry5/PageCallback.java |     8 +-
 .../java/org/apache/tapestry5/SelectModel.java  |     4 +-
 .../org/apache/tapestry5/SymbolConstants.java   |    38 +-
 .../org/apache/tapestry5/TapestryConstants.java |     4 +-
 .../org/apache/tapestry5/TapestryFilter.java    |     8 +-
 .../TrackableComponentEventCallback.java        |     8 +-
 .../apache/tapestry5/ValidationDecorator.java   |     6 +-
 .../org/apache/tapestry5/ValidationTracker.java |    10 +-
 .../apache/tapestry5/ValidationTrackerImpl.java |    20 +-
 .../java/org/apache/tapestry5/Validator.java    |     4 +-
 .../java/org/apache/tapestry5/ValueEncoder.java |    10 +-
 .../java/org/apache/tapestry5/VersionUtils.java |     4 +-
 .../apache/tapestry5/ajax/MultiZoneUpdate.java  |     4 +-
 .../annotations/ActivationRequestParameter.java |    24 +-
 .../tapestry5/annotations/BeforeRenderBody.java |    13 +-
 .../tapestry5/annotations/BeginRender.java      |    13 +-
 .../tapestry5/annotations/BindParameter.java    |    12 +-
 .../apache/tapestry5/annotations/Cached.java    |    11 +-
 .../tapestry5/annotations/Environmental.java    |    16 +-
 .../annotations/HeartbeatDeferred.java          |    18 +-
 .../apache/tapestry5/annotations/Import.java    |     8 +-
 .../apache/tapestry5/annotations/OnEvent.java   |    17 +-
 .../annotations/PageActivationContext.java      |    11 +-
 .../tapestry5/annotations/PageAttached.java     |     4 +-
 .../tapestry5/annotations/PageDetached.java     |     4 +-
 .../tapestry5/annotations/PageLoaded.java       |    11 +-
 .../apache/tapestry5/annotations/PageReset.java |    18 +-
 .../apache/tapestry5/annotations/Persist.java   |    12 +-
 .../apache/tapestry5/annotations/Property.java  |    11 +-
 .../tapestry5/annotations/RequestParameter.java |    19 +-
 .../apache/tapestry5/annotations/Retain.java    |    13 +-
 .../apache/tapestry5/annotations/Secure.java    |    11 +-
 .../tapestry5/annotations/SessionState.java     |    13 +-
 .../tapestry5/annotations/SetupRender.java      |     2 +-
 .../annotations/WhitelistAccessOnly.java        |     4 +-
 .../corelib/base/AbstractConditional.java       |     6 +-
 .../tapestry5/corelib/base/AbstractField.java   |     8 +-
 .../corelib/base/AbstractPropertyOutput.java    |     2 +-
 .../corelib/base/AbstractTextField.java         |    10 +-
 .../corelib/components/AjaxFormLoop.java        |     8 +-
 .../tapestry5/corelib/components/Alerts.java    |     3 +-
 .../tapestry5/corelib/components/Any.java       |    11 +-
 .../corelib/components/BeanDisplay.java         |     6 +-
 .../corelib/components/BeanEditForm.java        |     6 +-
 .../corelib/components/BeanEditor.java          |     4 -
 .../tapestry5/corelib/components/Checklist.java |     8 +-
 .../tapestry5/corelib/components/DateField.java |    39 +-
 .../tapestry5/corelib/components/Delegate.java  |     6 +-
 .../tapestry5/corelib/components/DevTool.java   |     6 +-
 .../tapestry5/corelib/components/Dynamic.java   |     6 +-
 .../tapestry5/corelib/components/Error.java     |     6 +-
 .../tapestry5/corelib/components/Errors.java    |     2 +-
 .../tapestry5/corelib/components/EventLink.java |     8 +-
 .../tapestry5/corelib/components/Form.java      |    40 +-
 .../corelib/components/FormFragment.java        |     4 +-
 .../tapestry5/corelib/components/Grid.java      |    27 +-
 .../tapestry5/corelib/components/GridRows.java  |     6 +-
 .../tapestry5/corelib/components/Hidden.java    |     4 +-
 .../tapestry5/corelib/components/Label.java     |     4 +-
 .../tapestry5/corelib/components/LocalDate.java |     6 +-
 .../tapestry5/corelib/components/Loop.java      |    28 +-
 .../tapestry5/corelib/components/PageLink.java  |     4 +-
 .../tapestry5/corelib/components/Palette.java   |    22 +-
 .../corelib/components/PasswordField.java       |     4 +-
 .../corelib/components/ProgressiveDisplay.java  |     4 +-
 .../tapestry5/corelib/components/Radio.java     |     4 +-
 .../corelib/components/RadioGroup.java          |     5 +
 .../tapestry5/corelib/components/Select.java    |     2 +-
 .../tapestry5/corelib/components/TextArea.java  |     4 +-
 .../tapestry5/corelib/components/TextField.java |     4 +-
 .../corelib/components/TimeInterval.java        |     6 +-
 .../tapestry5/corelib/components/Tree.java      |     4 +-
 .../tapestry5/corelib/components/Zone.java      |    12 +-
 .../tapestry5/corelib/data/SecureOption.java    |     7 +-
 .../corelib/internal/FormSupportImpl.java       |     4 +-
 .../tapestry5/corelib/mixins/Autocomplete.java  |    11 +-
 .../tapestry5/corelib/mixins/Confirm.java       |    26 +-
 .../corelib/mixins/FormFieldFocus.java          |     5 +-
 .../tapestry5/corelib/mixins/FormGroup.java     |    14 +-
 .../tapestry5/corelib/mixins/NotEmpty.java      |     4 +-
 .../corelib/mixins/OverrideFieldFocus.java      |     7 +-
 .../corelib/mixins/RenderClientId.java          |     8 +-
 .../corelib/mixins/RenderInformals.java         |    14 +-
 .../tapestry5/corelib/mixins/ZoneRefresh.java   |    16 +-
 .../corelib/pages/ExceptionReport.java          |    99 +-
 .../tapestry5/corelib/pages/ServiceStatus.java  |     4 +-
 .../java/org/apache/tapestry5/dom/Element.java  |     4 +-
 .../internal/BeanValidationContext.java         |     2 -
 .../internal/BeanValidationContextImpl.java     |     2 -
 .../InternalComponentResourcesCommon.java       |     4 +-
 .../tapestry5/internal/InternalSymbols.java     |     2 +-
 .../internal/TapestryAppInitializer.java        |     6 +-
 .../internal/TapestryInternalUtils.java         |     2 +-
 .../internal/bindings/LiteralBinding.java       |     6 +-
 .../internal/bindings/PropBindingFactory.java   |     4 +-
 .../pageload/EmbeddedComponentAssembler.java    |     6 +-
 .../internal/pageload/PageLoaderImpl.java       |     4 +-
 .../services/BlockInjectionProvider.java        |     4 +-
 .../services/ComponentClassResolverImpl.java    |    12 +-
 .../services/ComponentInstantiatorSource.java   |     8 +-
 .../internal/services/ComponentModelSource.java |     4 +-
 .../services/ComponentResourcesOperation.java   |     4 +-
 .../services/ComponentTemplateSource.java       |     6 +-
 .../services/ComponentTemplateSourceImpl.java   |     2 +-
 .../DefaultRequestExceptionHandler.java         |     9 +-
 .../internal/services/DocumentLinker.java       |     4 +-
 .../services/FormControlNameManager.java        |     2 -
 .../tapestry5/internal/services/LinkSource.java |    35 +-
 .../internal/services/MessagesSourceImpl.java   |     6 +-
 .../internal/services/PageRenderQueue.java      |     6 +-
 .../internal/services/RequestPageCache.java     |     6 +-
 .../services/ResourceDigestManager.java         |     8 +-
 .../internal/services/SaxTemplateParser.java    |    24 +-
 ...sionApplicationStatePersistenceStrategy.java |     4 +-
 .../SessionPersistentFieldStrategy.java         |     4 +-
 .../UnknownActivationContextHandler.java        |     4 +-
 .../services/assets/CSSURLRewriter.java         |    20 +-
 .../assets/CompressionAnalyzerImpl.java         |    20 +-
 .../assets/JavaScriptStackAssembler.java        |     2 +-
 .../exceptions/ExceptionReportWriterImpl.java   |   313 +
 .../exceptions/ExceptionReporterImpl.java       |   251 +-
 .../structure/ComponentPageElementImpl.java     |    21 +-
 .../InternalComponentResourcesImpl.java         |    16 -
 .../tapestry5/internal/structure/Page.java      |    12 +-
 .../tapestry5/internal/structure/PageImpl.java  |    19 +-
 .../EventHandlerMethodParameterProvider.java    |     4 +-
 .../internal/transform/ImportWorker.java        |     4 +-
 .../internal/transform/InjectPageWorker.java    |    16 +-
 .../internal/transform/InjectWorker.java        |     4 +-
 .../internal/transform/ParameterConduit.java    |     6 +-
 .../tapestry5/internal/util/LocaleUtils.java    |    12 +-
 .../tapestry5/internal/util/NamedSet.java       |     2 +-
 .../apache/tapestry5/model/ComponentModel.java  |    25 +-
 .../tapestry5/model/MutableComponentModel.java  |     4 +-
 .../apache/tapestry5/modules/AssetsModule.java  |     3 +
 .../tapestry5/modules/InternalModule.java       |     3 +-
 .../tapestry5/modules/JavaScriptModule.java     |     8 +-
 .../tapestry5/modules/TapestryModule.java       |    36 +-
 .../org/apache/tapestry5/runtime/Component.java |     6 +-
 .../apache/tapestry5/runtime/RenderCommand.java |     4 +-
 .../services/ApplicationStateManager.java       |     6 +-
 .../apache/tapestry5/services/AssetFactory.java |    10 +-
 .../tapestry5/services/AssetPathConverter.java  |     4 +-
 .../apache/tapestry5/services/AssetSource.java  |     8 +-
 .../services/BeanBlockOverrideSource.java       |     6 +-
 .../tapestry5/services/BeanBlockSource.java     |     6 +-
 .../tapestry5/services/BindingFactory.java      |     4 +-
 .../tapestry5/services/BindingSource.java       |     4 +-
 .../services/ClasspathAssetAliasManager.java    |    10 +-
 .../services/ClientBehaviorSupport.java         |     8 +-
 .../tapestry5/services/ClientDataEncoder.java   |     4 +-
 .../services/ComponentClassResolver.java        |    10 +-
 .../services/ComponentEventLinkEncoder.java     |    12 +-
 .../services/ComponentEventRequestHandler.java  |     6 +-
 .../services/ComponentEventResultProcessor.java |     6 +-
 .../tapestry5/services/ComponentOverride.java   |     2 +-
 .../apache/tapestry5/services/Environment.java  |     4 +-
 .../services/ExceptionReportWriter.java         |    38 +
 .../tapestry5/services/ExceptionReporter.java   |    10 +-
 .../services/FieldValidatorSource.java          |     8 +-
 .../apache/tapestry5/services/Heartbeat.java    |     4 +-
 .../services/HiddenFieldLocationRules.java      |     4 +-
 .../tapestry5/services/LibraryMapping.java      |    14 +-
 .../tapestry5/services/LocalizationSetter.java  |    12 +-
 .../tapestry5/services/MarkupRenderer.java      |     4 +-
 .../tapestry5/services/MetaDataLocator.java     |     4 +-
 .../tapestry5/services/ObjectRenderer.java      |     4 +-
 .../services/PageRenderLinkSource.java          |    28 +-
 .../services/PageRenderRequestHandler.java      |     4 +-
 .../services/PartialMarkupRenderer.java         |     6 +-
 .../services/PartialTemplateRenderer.java       |    24 +-
 .../org/apache/tapestry5/services/Request.java  |     8 +-
 .../services/RequestExceptionHandler.java       |     8 +-
 .../services/ResourceDigestGenerator.java       |     8 +-
 .../org/apache/tapestry5/services/Response.java |     8 +-
 .../SessionPersistedObjectAnalyzer.java         |     8 +-
 .../tapestry5/services/StreamPageContent.java   |     6 +-
 .../tapestry5/services/TransformConstants.java  |     4 +-
 .../services/TranslatorAlternatesSource.java    |     8 +-
 .../tapestry5/services/TranslatorSource.java    |     8 +-
 .../services/ajax/AjaxResponseRenderer.java     |     2 +-
 .../services/assets/AssetRequestHandler.java    |     6 +-
 .../services/assets/CompressionAnalyzer.java    |     4 +-
 .../services/assets/ContentTypeAnalyzer.java    |     4 +-
 .../services/assets/ResourceMinimizer.java      |     8 +-
 .../tapestry5/services/assets/package-info.java |     4 +-
 .../services/compatibility/Compatibility.java   |     4 +-
 .../tapestry5/services/compatibility/Trait.java |    10 +-
 .../services/javascript/AMDWrapper.java         |    24 +-
 .../javascript/ExtensibleJavaScriptStack.java   |     2 +-
 .../services/javascript/Initialization.java     |     4 +-
 .../javascript/InitializationPriority.java      |     4 +-
 .../JavaScriptModuleConfiguration.java          |     8 +-
 .../services/javascript/JavaScriptStack.java    |     6 +-
 .../services/javascript/JavaScriptSupport.java  |    18 +-
 .../javascript/ModuleConfigurationCallback.java |     6 +-
 .../services/javascript/ModuleManager.java      |     4 +-
 .../services/javascript/StackExtensionType.java |     4 +-
 .../services/javascript/StylesheetLink.java     |     2 +-
 .../services/javascript/StylesheetOptions.java  |     2 +-
 .../ComponentEventLinkTransformer.java          |     6 +-
 .../PageRenderLinkTransformer.java              |     6 +-
 .../services/pageload/PagePreloader.java        |     4 +-
 .../templates/ComponentTemplateLocator.java     |     4 +-
 .../ComponentClassTransformWorker2.java         |     4 +-
 .../services/transform/InjectionProvider2.java  |     4 +-
 .../org/apache/tapestry5/test/PageTester.java   |     4 +-
 .../apache/tapestry5/tree/DefaultTreeModel.java |     4 +-
 .../tapestry5/tree/TreeSelectionModel.java      |     4 +-
 .../org/apache/tapestry5/validator/Email.java   |    13 +-
 .../org/apache/tapestry5/validator/Regexp.java  |     2 +-
 .../org/apache/tapestry5/t5-core-dom.coffee     |     6 +-
 .../META-INF/assets/core/Autocomplete.css       |    56 -
 .../META-INF/assets/core/ExceptionReport.css    |     4 +
 .../assets/core/typeahead-bootstrap3.css        |   189 +
 .../tapestry5/bootstrap/css/bootstrap-theme.css |    10 +-
 .../tapestry5/bootstrap/css/bootstrap.css       |   326 +-
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 20335 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   487 +-
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 41280 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 23320 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../assets/tapestry5/bootstrap/js/affix.js      |    14 +-
 .../assets/tapestry5/bootstrap/js/alert.js      |     6 +-
 .../assets/tapestry5/bootstrap/js/button.js     |     6 +-
 .../assets/tapestry5/bootstrap/js/carousel.js   |    25 +-
 .../assets/tapestry5/bootstrap/js/collapse.js   |    18 +-
 .../assets/tapestry5/bootstrap/js/dropdown.js   |     8 +-
 .../assets/tapestry5/bootstrap/js/modal.js      |    69 +-
 .../assets/tapestry5/bootstrap/js/popover.js    |    29 +-
 .../assets/tapestry5/bootstrap/js/scrollspy.js  |    39 +-
 .../assets/tapestry5/bootstrap/js/tab.js        |     8 +-
 .../assets/tapestry5/bootstrap/js/tooltip.js    |    54 +-
 .../assets/tapestry5/bootstrap/js/transition.js |     4 +-
 .../META-INF/assets/tapestry5/jquery.js         |    13 +-
 .../META-INF/assets/tapestry5/moment-2.10.3.js  |  9737 ++++++++++++++
 .../META-INF/assets/tapestry5/moment-2.8.4.js   |  9394 -------------
 .../META-INF/assets/tapestry5/require.js        |    95 +-
 .../assets/tapestry5/typeahead-0.9.3.js         |  1139 --
 .../META-INF/assets/tapestry5/typeahead.js      |  1782 +++
 .../assets/tapestry5/underscore-1.7.0.js        |  1416 --
 .../assets/tapestry5/underscore-1.8.3.js        |  1548 +++
 .../org/apache/tapestry5/core_fr.properties     |     2 +-
 .../tapestry5/corelib/pages/ExceptionReport.tml |    48 +-
 .../src/test/app1/AutocompleteDemo.tml          |     3 +-
 tapestry-core/src/test/app1/DisabledFields.tml  |     6 +
 .../src/test/app1/GridEarlyPagingDemo.tml       |    10 +
 .../app1/GridFormWithInitialSortMixinDemo.tml   |    38 +
 tapestry-core/src/test/app1/GridInLoopDemo.tml  |    20 +
 .../src/test/app1/ValidateInErrorEvent.tml      |     6 +
 .../META-INF/modules/validate-in-error.coffee   |     7 +
 .../integration/app1/AjaxGroovyTests.groovy     |    12 +
 .../integration/app1/AlertsTests.groovy         |     8 +-
 .../integration/app1/pages/LogoSubclass.groovy  |     7 +
 .../integration/app1/pages/LogoSubclass.java    |     7 -
 .../integration/app1/pages/ZoneFormDemo.groovy  |    65 +
 .../services/DocumentLinkerImplTest.groovy      |     2 +-
 .../services/assets/CSSURLRewriterTests.groovy  |    35 +
 .../assets/CompressionAnalyzerImplTests.groovy  |     7 +
 .../tapestry5/pagetester/PageTesterTest.java    |    31 -
 .../tapestry5/integration/app1/AjaxTests.java   |    19 +-
 .../integration/app1/CoreBehaviorsTests.java    |     2 +-
 .../tapestry5/integration/app1/FormTests.java   |    75 +-
 .../tapestry5/integration/app1/GridTests.java   |    66 +-
 .../integration/app1/components/Border.java     |    12 +-
 .../integration/app1/components/Count.java      |     4 +-
 .../integration/app1/mixins/InitialSort.java    |    31 +
 .../app1/pages/ActionViaLinkDemo.java           |    11 +-
 .../app1/pages/AutocompleteDemo.java            |    14 +-
 .../integration/app1/pages/DisabledFields.java  |    10 +
 .../app1/pages/GridEarlyPagingDemo.java         |    44 +
 .../pages/GridFormWithInitialSortMixinDemo.java |    19 +
 .../integration/app1/pages/GridInLoopDemo.java  |    37 +
 .../tapestry5/integration/app1/pages/Index.java |    30 +-
 .../app1/pages/InplaceGridInLoopDemo.java       |     2 +-
 .../integration/app1/pages/PageLinkContext.java |     8 +-
 .../integration/app1/pages/ReturnTypes.java     |    23 +-
 .../app1/pages/ValidateInErrorEvent.java        |    10 +
 .../tapestry5/integration/pagelevel/IfTest.java |     1 +
 .../internal/services/URLEncoderImplTest.java   |     3 +-
 .../internal/util/LocaleUtilsTest.java          |     8 +-
 .../tapestry5/pagetester/PageTesterTest.java    |    31 +
 .../tapestry5/services/SyncCostBench.java       |    11 +-
 .../integration/app1/components/Border.tml      |     2 +-
 .../integration/app1/pages/ZoneFormDemo.tml     |    24 +
 .../integration/app2/pages/TestPageForIf.tml    |     6 +
 .../main/java/org/apache/tapestry5/func/F.java  |     6 +-
 .../java/org/apache/tapestry5/func/Flow.java    |    16 +-
 .../apache/tapestry5/func/FlowOperations.java   |    14 +-
 .../java/org/apache/tapestry5/func/Mapper.java  |     4 +-
 .../java/org/apache/tapestry5/func/Mapper2.java |     4 +-
 .../org/apache/tapestry5/func/Predicate.java    |     6 +-
 .../java/org/apache/tapestry5/func/Reducer.java |     7 +-
 .../HibernateEntityPackageManager.java          |     4 +-
 .../hibernate/HibernateSessionManager.java      |     6 +-
 .../hibernate/HibernateSessionSource.java       |     4 +-
 .../HibernateTransactionDecorator.java          |     4 +-
 .../hibernate/HibernateGridDataSource.java      |    10 +-
 tapestry-ioc-jcache/build.gradle                |    63 +-
 .../tapestry5/jcache/module/JCacheModule.java   |    35 +-
 .../jcache/internal/AbstractTestExcluder.java   |     4 +-
 .../ioc/junit/TapestryIOCJUnit4ClassRunner.java |    14 +-
 tapestry-ioc/build.gradle                       |     3 +-
 .../org/apache/tapestry5/ioc/AdvisorDef.java    |     4 +-
 .../org/apache/tapestry5/ioc/IOCSymbols.java    |     4 +-
 .../org/apache/tapestry5/ioc/IdMatcher.java     |     6 +-
 .../tapestry5/ioc/ModuleBuilderSource.java      |     6 +-
 .../apache/tapestry5/ioc/ObjectProvider.java    |     6 +-
 .../apache/tapestry5/ioc/RegistryBuilder.java   |     2 +-
 .../org/apache/tapestry5/ioc/ReloadAware.java   |     4 +-
 .../apache/tapestry5/ioc/ScopeConstants.java    |     6 +-
 .../tapestry5/ioc/ServiceBindingOptions.java    |     3 -
 .../tapestry5/ioc/annotations/EagerLoad.java    |     4 +-
 .../tapestry5/ioc/annotations/Marker.java       |     4 +-
 .../apache/tapestry5/ioc/annotations/Match.java |    11 +-
 .../annotations/PreventServiceDecoration.java   |    10 +-
 .../apache/tapestry5/ioc/annotations/Scope.java |     9 +-
 .../tapestry5/ioc/def/ContributionDef.java      |     4 +-
 .../apache/tapestry5/ioc/def/DecoratorDef.java  |    10 +-
 .../org/apache/tapestry5/ioc/def/ModuleDef.java |     4 +-
 .../apache/tapestry5/ioc/def/ServiceDef.java    |     4 +-
 .../tapestry5/ioc/internal/RegistryImpl.java    |    20 +-
 .../ValidatingMappedConfigurationWrapper.java   |    10 +-
 .../ioc/internal/services/BridgeBuilder.java    |     4 +-
 .../services/ExceptionAnalyzerImpl.java         |     2 +-
 .../ioc/internal/services/MethodSignature.java  |     4 +-
 .../services/PerThreadServiceLifecycle.java     |     2 +-
 .../services/SystemEnvSymbolProvider.java       |     4 +-
 .../internal/services/cron/CronExpression.java  |    67 +-
 .../services/cron/PeriodicExecutorImpl.java     |    21 +-
 .../ioc/internal/util/AbstractResource.java     |    20 +-
 .../ioc/internal/util/ConcurrentBarrier.java    |     6 +-
 .../ioc/internal/util/InternalUtils.java        |     2 +-
 .../ioc/modules/TapestryIOCModule.java          |     5 +-
 .../tapestry5/ioc/services/ChainBuilder.java    |     8 +-
 .../ioc/services/ExceptionAnalysis.java         |     4 +-
 .../tapestry5/ioc/services/LazyAdvisor.java     |     8 +-
 .../ioc/services/LoggingDecorator.java          |     4 +-
 .../ioc/services/MasterObjectProvider.java      |     8 +-
 .../ioc/services/PerthreadManager.java          |     8 +-
 .../tapestry5/ioc/services/PipelineBuilder.java |     8 +-
 .../ioc/services/PropertyShadowBuilder.java     |     4 +-
 .../ioc/services/ServiceLifecycleSource.java    |     4 +-
 .../tapestry5/ioc/services/ServiceOverride.java |     4 +-
 .../tapestry5/ioc/services/StrategyBuilder.java |     8 +-
 .../tapestry5/ioc/services/SymbolProvider.java  |     4 +-
 .../tapestry5/ioc/services/SymbolSource.java    |     4 +-
 .../ioc/services/ThreadCleanupListener.java     |     4 +-
 .../tapestry5/ioc/services/cron/Schedule.java   |     4 +-
 .../apache/tapestry5/ioc/util/IdAllocator.java  |    17 +-
 .../ioc/util/LocalizedNameGenerator.java        |    10 +-
 .../tapestry5/services/UpdateListener.java      |     4 +-
 .../tapestry5/services/UpdateListenerHub.java   |     8 +-
 .../ioc/specs/CaseInsensitiveMapSpec.groovy     |    23 +
 .../ioc/specs/ClasspathResourceSpec.groovy      |    27 +
 .../ioc/specs/ClasspathScannerImplSpec.groovy   |    43 +-
 .../groovy/ioc/specs/MethodSignatureSpec.groovy |     2 +-
 .../ioc/specs/PeriodicExecutorSpec.groovy       |    30 +
 tapestry-javadoc/build.gradle                   |     2 -
 .../tapestry5/jpa/EntityManagerManager.java     |    13 +-
 .../tapestry5/jpa/EntityManagerSource.java      |    15 +-
 .../tapestry5/jpa/JpaEntityPackageManager.java  |     8 +-
 .../apache/tapestry5/jpa/JpaGridDataSource.java |    13 +-
 tapestry-json/build.gradle                      |     1 -
 .../org/apache/tapestry5/json/JSONArray.java    |    12 +-
 .../apache/tapestry5/json/JSONCollection.java   |     6 +-
 .../org/apache/tapestry5/json/JSONObject.java   |    29 +-
 .../org/apache/tapestry5/json/JSONTokener.java  |     6 +-
 .../org/apache/tapestry5/json/package-info.java |     4 +-
 .../kaptcha/components/KaptchaImage.java        |     2 +-
 tapestry-mongodb/build.gradle                   |     2 -
 .../apache/tapestry5/ioc/test/MockTester.java   |     4 +-
 .../org/apache/tapestry5/ioc/test/TestBase.java |    12 +-
 .../apache/tapestry5/ioc/test/TestUtils.java    |     4 +-
 .../apache/tapestry5/test/SeleniumTestCase.java |    13 +-
 tapestry-upload/build.gradle                    |     2 +-
 .../tapestry5/upload/components/Upload.java     |     2 +-
 tapestry-webresources/build.gradle              |     7 +-
 .../ResourceTransformerFactory.java             |     5 +-
 .../webresources/internal/coffee-script.js      |    12 +-
 .../webresources/tests/WebResourcesSpec.groovy  |     2 +-
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 20335 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   487 +-
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 41280 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 23320 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../src/test/webapp/bootstrap/js/affix.js       |    14 +-
 .../src/test/webapp/bootstrap/js/alert.js       |     6 +-
 .../src/test/webapp/bootstrap/js/button.js      |     6 +-
 .../src/test/webapp/bootstrap/js/carousel.js    |    25 +-
 .../src/test/webapp/bootstrap/js/collapse.js    |    18 +-
 .../src/test/webapp/bootstrap/js/dropdown.js    |     8 +-
 .../src/test/webapp/bootstrap/js/modal.js       |    69 +-
 .../src/test/webapp/bootstrap/js/popover.js     |    29 +-
 .../src/test/webapp/bootstrap/js/scrollspy.js   |    39 +-
 .../src/test/webapp/bootstrap/js/tab.js         |     8 +-
 .../src/test/webapp/bootstrap/js/tooltip.js     |    54 +-
 .../src/test/webapp/bootstrap/js/transition.js  |     4 +-
 .../src/test/webapp/bootstrap/less/alerts.less  |     5 +
 .../src/test/webapp/bootstrap/less/badges.less  |     7 +-
 .../webapp/bootstrap/less/button-groups.less    |     4 +-
 .../src/test/webapp/bootstrap/less/buttons.less |     2 +-
 .../test/webapp/bootstrap/less/carousel.less    |    14 +-
 .../src/test/webapp/bootstrap/less/close.less   |     1 +
 .../bootstrap/less/component-animations.less    |     3 +-
 .../test/webapp/bootstrap/less/dropdowns.less   |     5 +-
 .../src/test/webapp/bootstrap/less/forms.less   |    74 +-
 .../test/webapp/bootstrap/less/glyphicons.less  |    71 +
 .../test/webapp/bootstrap/less/jumbotron.less   |     1 +
 .../src/test/webapp/bootstrap/less/media.less   |    14 +
 .../bootstrap/less/mixins/vendor-prefixes.less  |     2 +-
 .../src/test/webapp/bootstrap/less/modals.less  |     4 +-
 .../src/test/webapp/bootstrap/less/navbar.less  |     2 +-
 .../src/test/webapp/bootstrap/less/navs.less    |     2 -
 .../src/test/webapp/bootstrap/less/panels.less  |     6 +-
 .../test/webapp/bootstrap/less/popovers.less    |     2 +-
 .../webapp/bootstrap/less/responsive-embed.less |    16 +-
 .../test/webapp/bootstrap/less/scaffolding.less |    12 +
 .../src/test/webapp/bootstrap/less/tables.less  |     6 +-
 .../src/test/webapp/bootstrap/less/theme.less   |     5 +-
 .../src/test/webapp/bootstrap/less/tooltip.less |     3 +-
 .../src/test/webapp/bootstrap/less/type.less    |     2 +-
 .../test/webapp/bootstrap/less/utilities.less   |     1 -
 .../test/webapp/bootstrap/less/variables.less   |    11 +-
 .../apache/tapestry5/beaneditor/Translate.java  |    13 +-
 .../apache/tapestry5/beaneditor/Validate.java   |    13 +-
 .../org/apache/tapestry5/beaneditor/Width.java  |     9 +-
 .../tapestry5/ioc/annotations/Inject.java       |    18 +-
 .../ioc/annotations/InjectResource.java         |     4 +-
 .../ioc/annotations/InjectService.java          |     9 +-
 .../ioc/annotations/PostInjection.java          |     4 +-
 .../tapestry5/ioc/annotations/Symbol.java       |     6 +-
 .../annotations/UsesMappedConfiguration.java    |     6 +-
 554 files changed, 26513 insertions(+), 24985 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/76e69ad3/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
----------------------------------------------------------------------


[4/5] tapestry-5 git commit: TAP5-2029: a best-effort attempt to deal with generic methods and their annotations in service proxies.

Posted by th...@apache.org.
TAP5-2029: a best-effort attempt to deal with generic methods and their
annotations in service proxies.

Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/72334aa6
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/72334aa6
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/72334aa6

Branch: refs/heads/master
Commit: 72334aa632d6ccade195af45014f7903fc0765fa
Parents: 8c8a13a
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Thu Jun 18 23:50:12 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Thu Jun 18 23:50:12 2015 -0300

----------------------------------------------------------------------
 .../internal/plastic/asm/tree/MethodNode.java   |   8 ++
 .../internal/plastic/PlasticClassImpl.java      | 136 +++++++++++++++----
 .../MethodInvocationGetAnnotationSpec.groovy    |  46 ++++++-
 .../tapestry5/ioc/internal/AdviceModule.java    |   7 +
 4 files changed, 168 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
----------------------------------------------------------------------
diff --git a/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java b/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
index ce959df..48115c2 100644
--- a/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
+++ b/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
@@ -29,6 +29,7 @@
  */
 package org.apache.tapestry5.internal.plastic.asm.tree;
 
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -835,4 +836,11 @@ public class MethodNode extends MethodVisitor {
         }
         mv.visitEnd();
     }
+
+	@Override
+	public String toString() {
+		return "MethodNode [name=" + name + ", bridge=" + Modifier.isVolatile(access)
+				+ ", desc=" + desc + "]";
+	}
+    
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
----------------------------------------------------------------------
diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
index 1bb08f1..e224bd1 100644
--- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
+++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
@@ -20,10 +20,13 @@ import org.apache.tapestry5.plastic.*;
 
 import java.io.IOException;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 @SuppressWarnings("all")
 public class PlasticClassImpl extends Lockable implements PlasticClass, InternalPlasticClassTransformation, Opcodes
@@ -398,40 +401,121 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal
 
     }
     
+    private static String getParametersDesc(MethodNode methodNode) {
+        return methodNode.desc.substring(methodNode.desc.indexOf('(') + 1, methodNode.desc.lastIndexOf(')'));
+    }
 
-    private static void addMethodAndParameterAnnotationsFromExistingClass(MethodNode methodNode, ClassNode source)
-    {
-        if (source != null)
+    private static MethodNode findExactMatchMethod(MethodNode methodNode, ClassNode source) {
+
+    	MethodNode found = null;
+    	
+    	final String methodDescription = getParametersDesc(methodNode);
+    	
+        for (MethodNode implementationMethodNode : source.methods)
         {
+        	
+            final String implementationMethodDescription = getParametersDesc(implementationMethodNode);
+            if (methodNode.name.equals(implementationMethodNode.name) && 
+            		// We don't want synthetic methods.
+            		((implementationMethodNode.access & Opcodes.ACC_SYNTHETIC) == 0)
+            		&& (methodDescription.equals(implementationMethodDescription))) 
+            {
+            	found = implementationMethodNode;
+            	break;
+            }
+        }
+        
+        return found;
 
-        	MethodNode candidate = null;
+    }
+    
+    private static List<Class> getJavaParameterTypes(MethodNode methodNode) {
+        final ClassLoader classLoader = PlasticInternalUtils.class.getClassLoader();
+        Type[] parameterTypes = Type.getArgumentTypes(methodNode.desc);
+    	List<Class> list = new ArrayList<Class>();
+    	for (Type type : parameterTypes)
+        {
+            try
+            {
+                list.add(PlasticInternalUtils.toClass(classLoader, type.getClassName()));
+            }
+            catch (ClassNotFoundException e)
+            {
+                throw new RuntimeException(e); // shouldn't happen anyway
+            }
+        }
+    	return list;
+    }
+    
+    /**
+     * Returns the first method which matches the given methodNode.
+     * FIXME: this may not find the correct method if the correct one is declared after
+     * another in which all parameters are supertypes of the parameters of methodNode.
+     * To solve this, we would need to dig way deeper than we have time for this.
+     * @param methodNode
+     * @param classNode
+     * @return
+     */
+    private static MethodNode findGenericMethod(MethodNode methodNode, ClassNode classNode)
+    {
+
+        MethodNode found = null;
+
+        List<Class> parameterTypes = getJavaParameterTypes(methodNode);
+
+        for (MethodNode implementationMethodNode : classNode.methods)
+        {
 
-            for (MethodNode implementationMethodNode : source.methods)
+            if (methodNode.name.equals(implementationMethodNode.name))
             {
-            	
-                // Find corresponding methods in the implementation class MethodNode
-                if (methodNode.name.equals(implementationMethodNode.name) && 
-//                		methodNode.parameters.size() == implementationMethodNode.parameters.size() &&
-                		// We don't want synthetic methods.
-                		((implementationMethodNode.access & Opcodes.ACC_SYNTHETIC) == 0) 
-                		/*methodNode.desc.equals(implementationMethodNode.desc)*/)
+
+                final List<Class> implementationParameterTypes = getJavaParameterTypes(implementationMethodNode);
+
+                if (parameterTypes.size() == implementationParameterTypes.size())
                 {
-                	if (candidate == null)
-                	{
-                		candidate = implementationMethodNode;
-                	}
-                	// Generics implementation. Two methods with same name: The one which isn't a bridge is the one we're looking for.
-                	else 
-                	{
-                		if (isBridge(candidate))
-                		{
-                			candidate = implementationMethodNode;
-                		}
-                	}
-                	
+
+                    boolean matches = true;
+                    for (int i = 0; i < parameterTypes.size(); i++)
+                    {
+                        final Class implementationParameterType = implementationParameterTypes.get(i);
+						final Class parameterType = parameterTypes.get(i);
+						if (!parameterType.isAssignableFrom(implementationParameterType)) {
+                            matches = false;
+                            break;
+                        }
+                        
+                    }
+
+                    if (matches && !isBridge(implementationMethodNode))
+                    {
+                        found = implementationMethodNode;
+                        break;
+                    }
+                    
                 }
 
             }
+
+        }
+
+        return found;
+
+    }
+
+    private static void addMethodAndParameterAnnotationsFromExistingClass(MethodNode methodNode, ClassNode source)
+    {
+        if (source != null)
+        {
+
+        	MethodNode candidate = findExactMatchMethod(methodNode, source);
+
+        	final String parametersDesc = getParametersDesc(methodNode);
+        	
+        	// candidate will be null when the method has generic parameters
+        	if (candidate == null && parametersDesc.trim().length() > 0) 
+        	{
+        		candidate = findGenericMethod(methodNode, source);
+        	}
             
             if (candidate != null)
             {
@@ -843,8 +927,8 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal
 
         if (!isOverride)
         {
+        	addMethodAndParameterAnnotationsFromExistingClass(methodNode, implementationClassNode);
             addMethodAndParameterAnnotationsFromExistingClass(methodNode, interfaceClassNode);
-            addMethodAndParameterAnnotationsFromExistingClass(methodNode, implementationClassNode);
         }
 
         if (isOverride)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
index b4e4c0e..b1f00b5 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
@@ -5,6 +5,7 @@ import org.apache.tapestry5.ioc.annotations.Advise
 import org.apache.tapestry5.ioc.internal.AdviceModule
 import org.apache.tapestry5.ioc.internal.AnnotatedServiceInterface
 import org.apache.tapestry5.ioc.internal.DecoratorModule
+import org.apache.tapestry5.ioc.internal.NonAnnotatedGenericSetServiceInterface
 import org.apache.tapestry5.ioc.internal.NonAnnotatedServiceInterface
 import org.apache.tapestry5.ioc.internal.TestAdvice
 
@@ -16,7 +17,7 @@ import org.apache.tapestry5.ioc.internal.TestAdvice
  * @see TestAdvice
  */
 class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
-
+    
   def "MethodAdvice.getAnnotation() and getMethod() in service decoration"() {
     when:
 
@@ -62,11 +63,27 @@ class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
     def annotatedService = registry.getService AnnotatedServiceInterface
     def annotatedResult = annotatedService.execute(0);
     def annotatedMethod = annotatedService.getClass().getMethod("execute", int.class);
+
+    def nonAnnotatedGenSetService = registry.getService NonAnnotatedGenericSetServiceInterface.class
     
+    def nonAnnotatedGenSetResult1 = nonAnnotatedGenSetService.execute1(0)
+    def nonAnnotatedGenSetMethod1 = nonAnnotatedGenSetService.getClass().getMethod("execute1", int.class)
+    
+    def nonAnnotatedGenSetResult2 = nonAnnotatedGenSetService.execute2("execute2")
+    // We need to look for a method that accept Object instead of string (maybe because of generics...)
+    def nonAnnotatedGenSetMethod2 = nonAnnotatedGenSetService.getClass().getMethod("execute2", Object.class)
+    
+    def nonAnnotatedGenSetResult3 = nonAnnotatedGenSetService.execute3(0)
+    def nonAnnotatedGenSetMethod3 = nonAnnotatedGenSetService.getClass().getMethod("execute3", int.class)
+
+    def nonAnnotatedGenSetResult4 = nonAnnotatedGenSetService.execute2("execute2")
+    // We need to look for a method that accept Object instead of string (maybe because of generics...)
+    def nonAnnotatedGenSetMethod4 = nonAnnotatedGenSetService.getClass().getMethod("execute2", Object.class, String.class)
+
     then:
     nonAnnotatedMethod != null
     nonAnnotatedMethod.getAnnotation(Advise.class) != null
-    nonAnnotatedMethod.getAnnotation(Advise.class).id().equals("id")
+    nonAnnotatedMethod.getAnnotation(Advise.class).id() == "id"
     nonAnnotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
     nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class) != null
     nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
@@ -77,9 +94,32 @@ class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
     annotatedMethod.getAnnotation(Advise.class).id().equals("id")
     annotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
     annotatedService.getClass().getAnnotation(ReorderProperties.class) != null
-    annotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
+    annotatedService.getClass().getAnnotation(ReorderProperties.class).value() == "reorder"
     annotatedResult == TestAdvice.ANNOTATION_FOUND
 
+    nonAnnotatedGenSetMethod1 != null
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult1 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod2 != null
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult2 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod3 != null
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult3 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod4 != null
+    nonAnnotatedGenSetMethod4.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod4.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod4.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult4 == TestAdvice.ANNOTATION_FOUND
   }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
index 466b528..0e0a186 100644
--- a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
+++ b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
@@ -24,6 +24,8 @@ public class AdviceModule
     {
         binder.bind(NonAnnotatedServiceInterface.class, NonAnnotatedServiceInterfaceImpl.class);
         binder.bind(AnnotatedServiceInterface.class, AnnotatedServiceInterfaceImpl.class);
+        binder.bind(NonAnnotatedGenericSetServiceInterface.class,
+                NonAnnotatedGenericSetServiceImpl.class);
     }
 
     @Advise(serviceInterface = NonAnnotatedServiceInterface.class)
@@ -38,4 +40,9 @@ public class AdviceModule
         methodAdviceReceiver.adviseAllMethods(new TestAdvice());
     }
 
+    @Advise(serviceInterface = NonAnnotatedGenericSetServiceInterface.class)
+    public static void adviseNonAnnotatedGenericSetServiceInterface(
+            final MethodAdviceReceiver methodAdviceReceiver) {
+        methodAdviceReceiver.adviseAllMethods(new TestAdvice());
+    }
 }


[4/5] tapestry-5 git commit: TAP5-2029: a best-effort attempt to deal with generic methods and their annotations in service proxies.

Posted by th...@apache.org.
TAP5-2029: a best-effort attempt to deal with generic methods and their
annotations in service proxies.

Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/72334aa6
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/72334aa6
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/72334aa6

Branch: refs/heads/master
Commit: 72334aa632d6ccade195af45014f7903fc0765fa
Parents: 8c8a13a
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Thu Jun 18 23:50:12 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Thu Jun 18 23:50:12 2015 -0300

----------------------------------------------------------------------
 .../internal/plastic/asm/tree/MethodNode.java   |   8 ++
 .../internal/plastic/PlasticClassImpl.java      | 136 +++++++++++++++----
 .../MethodInvocationGetAnnotationSpec.groovy    |  46 ++++++-
 .../tapestry5/ioc/internal/AdviceModule.java    |   7 +
 4 files changed, 168 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
----------------------------------------------------------------------
diff --git a/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java b/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
index ce959df..48115c2 100644
--- a/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
+++ b/plastic/src/external/java/org/apache/tapestry5/internal/plastic/asm/tree/MethodNode.java
@@ -29,6 +29,7 @@
  */
 package org.apache.tapestry5.internal.plastic.asm.tree;
 
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -835,4 +836,11 @@ public class MethodNode extends MethodVisitor {
         }
         mv.visitEnd();
     }
+
+	@Override
+	public String toString() {
+		return "MethodNode [name=" + name + ", bridge=" + Modifier.isVolatile(access)
+				+ ", desc=" + desc + "]";
+	}
+    
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
----------------------------------------------------------------------
diff --git a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
index 1bb08f1..e224bd1 100644
--- a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
+++ b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/PlasticClassImpl.java
@@ -20,10 +20,13 @@ import org.apache.tapestry5.plastic.*;
 
 import java.io.IOException;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 @SuppressWarnings("all")
 public class PlasticClassImpl extends Lockable implements PlasticClass, InternalPlasticClassTransformation, Opcodes
@@ -398,40 +401,121 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal
 
     }
     
+    private static String getParametersDesc(MethodNode methodNode) {
+        return methodNode.desc.substring(methodNode.desc.indexOf('(') + 1, methodNode.desc.lastIndexOf(')'));
+    }
 
-    private static void addMethodAndParameterAnnotationsFromExistingClass(MethodNode methodNode, ClassNode source)
-    {
-        if (source != null)
+    private static MethodNode findExactMatchMethod(MethodNode methodNode, ClassNode source) {
+
+    	MethodNode found = null;
+    	
+    	final String methodDescription = getParametersDesc(methodNode);
+    	
+        for (MethodNode implementationMethodNode : source.methods)
         {
+        	
+            final String implementationMethodDescription = getParametersDesc(implementationMethodNode);
+            if (methodNode.name.equals(implementationMethodNode.name) && 
+            		// We don't want synthetic methods.
+            		((implementationMethodNode.access & Opcodes.ACC_SYNTHETIC) == 0)
+            		&& (methodDescription.equals(implementationMethodDescription))) 
+            {
+            	found = implementationMethodNode;
+            	break;
+            }
+        }
+        
+        return found;
 
-        	MethodNode candidate = null;
+    }
+    
+    private static List<Class> getJavaParameterTypes(MethodNode methodNode) {
+        final ClassLoader classLoader = PlasticInternalUtils.class.getClassLoader();
+        Type[] parameterTypes = Type.getArgumentTypes(methodNode.desc);
+    	List<Class> list = new ArrayList<Class>();
+    	for (Type type : parameterTypes)
+        {
+            try
+            {
+                list.add(PlasticInternalUtils.toClass(classLoader, type.getClassName()));
+            }
+            catch (ClassNotFoundException e)
+            {
+                throw new RuntimeException(e); // shouldn't happen anyway
+            }
+        }
+    	return list;
+    }
+    
+    /**
+     * Returns the first method which matches the given methodNode.
+     * FIXME: this may not find the correct method if the correct one is declared after
+     * another in which all parameters are supertypes of the parameters of methodNode.
+     * To solve this, we would need to dig way deeper than we have time for this.
+     * @param methodNode
+     * @param classNode
+     * @return
+     */
+    private static MethodNode findGenericMethod(MethodNode methodNode, ClassNode classNode)
+    {
+
+        MethodNode found = null;
+
+        List<Class> parameterTypes = getJavaParameterTypes(methodNode);
+
+        for (MethodNode implementationMethodNode : classNode.methods)
+        {
 
-            for (MethodNode implementationMethodNode : source.methods)
+            if (methodNode.name.equals(implementationMethodNode.name))
             {
-            	
-                // Find corresponding methods in the implementation class MethodNode
-                if (methodNode.name.equals(implementationMethodNode.name) && 
-//                		methodNode.parameters.size() == implementationMethodNode.parameters.size() &&
-                		// We don't want synthetic methods.
-                		((implementationMethodNode.access & Opcodes.ACC_SYNTHETIC) == 0) 
-                		/*methodNode.desc.equals(implementationMethodNode.desc)*/)
+
+                final List<Class> implementationParameterTypes = getJavaParameterTypes(implementationMethodNode);
+
+                if (parameterTypes.size() == implementationParameterTypes.size())
                 {
-                	if (candidate == null)
-                	{
-                		candidate = implementationMethodNode;
-                	}
-                	// Generics implementation. Two methods with same name: The one which isn't a bridge is the one we're looking for.
-                	else 
-                	{
-                		if (isBridge(candidate))
-                		{
-                			candidate = implementationMethodNode;
-                		}
-                	}
-                	
+
+                    boolean matches = true;
+                    for (int i = 0; i < parameterTypes.size(); i++)
+                    {
+                        final Class implementationParameterType = implementationParameterTypes.get(i);
+						final Class parameterType = parameterTypes.get(i);
+						if (!parameterType.isAssignableFrom(implementationParameterType)) {
+                            matches = false;
+                            break;
+                        }
+                        
+                    }
+
+                    if (matches && !isBridge(implementationMethodNode))
+                    {
+                        found = implementationMethodNode;
+                        break;
+                    }
+                    
                 }
 
             }
+
+        }
+
+        return found;
+
+    }
+
+    private static void addMethodAndParameterAnnotationsFromExistingClass(MethodNode methodNode, ClassNode source)
+    {
+        if (source != null)
+        {
+
+        	MethodNode candidate = findExactMatchMethod(methodNode, source);
+
+        	final String parametersDesc = getParametersDesc(methodNode);
+        	
+        	// candidate will be null when the method has generic parameters
+        	if (candidate == null && parametersDesc.trim().length() > 0) 
+        	{
+        		candidate = findGenericMethod(methodNode, source);
+        	}
             
             if (candidate != null)
             {
@@ -843,8 +927,8 @@ public class PlasticClassImpl extends Lockable implements PlasticClass, Internal
 
         if (!isOverride)
         {
+        	addMethodAndParameterAnnotationsFromExistingClass(methodNode, implementationClassNode);
             addMethodAndParameterAnnotationsFromExistingClass(methodNode, interfaceClassNode);
-            addMethodAndParameterAnnotationsFromExistingClass(methodNode, implementationClassNode);
         }
 
         if (isOverride)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
index b4e4c0e..b1f00b5 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/MethodInvocationGetAnnotationSpec.groovy
@@ -5,6 +5,7 @@ import org.apache.tapestry5.ioc.annotations.Advise
 import org.apache.tapestry5.ioc.internal.AdviceModule
 import org.apache.tapestry5.ioc.internal.AnnotatedServiceInterface
 import org.apache.tapestry5.ioc.internal.DecoratorModule
+import org.apache.tapestry5.ioc.internal.NonAnnotatedGenericSetServiceInterface
 import org.apache.tapestry5.ioc.internal.NonAnnotatedServiceInterface
 import org.apache.tapestry5.ioc.internal.TestAdvice
 
@@ -16,7 +17,7 @@ import org.apache.tapestry5.ioc.internal.TestAdvice
  * @see TestAdvice
  */
 class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
-
+    
   def "MethodAdvice.getAnnotation() and getMethod() in service decoration"() {
     when:
 
@@ -62,11 +63,27 @@ class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
     def annotatedService = registry.getService AnnotatedServiceInterface
     def annotatedResult = annotatedService.execute(0);
     def annotatedMethod = annotatedService.getClass().getMethod("execute", int.class);
+
+    def nonAnnotatedGenSetService = registry.getService NonAnnotatedGenericSetServiceInterface.class
     
+    def nonAnnotatedGenSetResult1 = nonAnnotatedGenSetService.execute1(0)
+    def nonAnnotatedGenSetMethod1 = nonAnnotatedGenSetService.getClass().getMethod("execute1", int.class)
+    
+    def nonAnnotatedGenSetResult2 = nonAnnotatedGenSetService.execute2("execute2")
+    // We need to look for a method that accept Object instead of string (maybe because of generics...)
+    def nonAnnotatedGenSetMethod2 = nonAnnotatedGenSetService.getClass().getMethod("execute2", Object.class)
+    
+    def nonAnnotatedGenSetResult3 = nonAnnotatedGenSetService.execute3(0)
+    def nonAnnotatedGenSetMethod3 = nonAnnotatedGenSetService.getClass().getMethod("execute3", int.class)
+
+    def nonAnnotatedGenSetResult4 = nonAnnotatedGenSetService.execute2("execute2")
+    // We need to look for a method that accept Object instead of string (maybe because of generics...)
+    def nonAnnotatedGenSetMethod4 = nonAnnotatedGenSetService.getClass().getMethod("execute2", Object.class, String.class)
+
     then:
     nonAnnotatedMethod != null
     nonAnnotatedMethod.getAnnotation(Advise.class) != null
-    nonAnnotatedMethod.getAnnotation(Advise.class).id().equals("id")
+    nonAnnotatedMethod.getAnnotation(Advise.class).id() == "id"
     nonAnnotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
     nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class) != null
     nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
@@ -77,9 +94,32 @@ class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
     annotatedMethod.getAnnotation(Advise.class).id().equals("id")
     annotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
     annotatedService.getClass().getAnnotation(ReorderProperties.class) != null
-    annotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
+    annotatedService.getClass().getAnnotation(ReorderProperties.class).value() == "reorder"
     annotatedResult == TestAdvice.ANNOTATION_FOUND
 
+    nonAnnotatedGenSetMethod1 != null
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod1.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult1 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod2 != null
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod2.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult2 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod3 != null
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod3.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult3 == TestAdvice.ANNOTATION_FOUND
+
+    nonAnnotatedGenSetMethod4 != null
+    nonAnnotatedGenSetMethod4.getAnnotation(Advise.class) != null
+    nonAnnotatedGenSetMethod4.getAnnotation(Advise.class).id() == "id"
+    nonAnnotatedGenSetMethod4.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
+    nonAnnotatedGenSetResult4 == TestAdvice.ANNOTATION_FOUND
   }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/72334aa6/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
index 466b528..0e0a186 100644
--- a/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
+++ b/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/AdviceModule.java
@@ -24,6 +24,8 @@ public class AdviceModule
     {
         binder.bind(NonAnnotatedServiceInterface.class, NonAnnotatedServiceInterfaceImpl.class);
         binder.bind(AnnotatedServiceInterface.class, AnnotatedServiceInterfaceImpl.class);
+        binder.bind(NonAnnotatedGenericSetServiceInterface.class,
+                NonAnnotatedGenericSetServiceImpl.class);
     }
 
     @Advise(serviceInterface = NonAnnotatedServiceInterface.class)
@@ -38,4 +40,9 @@ public class AdviceModule
         methodAdviceReceiver.adviseAllMethods(new TestAdvice());
     }
 
+    @Advise(serviceInterface = NonAnnotatedGenericSetServiceInterface.class)
+    public static void adviseNonAnnotatedGenericSetServiceInterface(
+            final MethodAdviceReceiver methodAdviceReceiver) {
+        methodAdviceReceiver.adviseAllMethods(new TestAdvice());
+    }
 }


[5/5] tapestry-5 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5

Posted by th...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tapestry-5


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/d61eee73
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/d61eee73
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/d61eee73

Branch: refs/heads/master
Commit: d61eee730bf3154e42adb2e1afc99b25e5eb106c
Parents: 72334aa 766c16b
Author: Thiago H. de Paula Figueiredo <th...@apache.org>
Authored: Thu Jun 18 23:50:47 2015 -0300
Committer: Thiago H. de Paula Figueiredo <th...@apache.org>
Committed: Thu Jun 18 23:50:47 2015 -0300

----------------------------------------------------------------------
 54_RELEASE_NOTES.md                             |   2 +-
 build.gradle                                    |   4 +-
 .../main/java/org/apache/tapestry5/Field.java   |   3 -
 .../tapestry5/bootstrap/css/bootstrap-theme.css | 139 ++++++-
 .../tapestry5/bootstrap/css/bootstrap.css       | 368 +++++++++++++++----
 .../assets/tapestry5/bootstrap/js/affix.js      |   6 +-
 .../assets/tapestry5/bootstrap/js/alert.js      |   4 +-
 .../assets/tapestry5/bootstrap/js/button.js     |  22 +-
 .../assets/tapestry5/bootstrap/js/carousel.js   |   4 +-
 .../assets/tapestry5/bootstrap/js/collapse.js   |   4 +-
 .../assets/tapestry5/bootstrap/js/dropdown.js   |  88 ++---
 .../assets/tapestry5/bootstrap/js/modal.js      |  12 +-
 .../assets/tapestry5/bootstrap/js/popover.js    |   4 +-
 .../assets/tapestry5/bootstrap/js/scrollspy.js  |   4 +-
 .../assets/tapestry5/bootstrap/js/tab.js        |   8 +-
 .../assets/tapestry5/bootstrap/js/tooltip.js    |  78 +++-
 .../assets/tapestry5/bootstrap/js/transition.js |   2 +-
 .../src/test/webapp/bootstrap/js/affix.js       |   6 +-
 .../src/test/webapp/bootstrap/js/alert.js       |   4 +-
 .../src/test/webapp/bootstrap/js/button.js      |  22 +-
 .../src/test/webapp/bootstrap/js/carousel.js    |   4 +-
 .../src/test/webapp/bootstrap/js/collapse.js    |   4 +-
 .../src/test/webapp/bootstrap/js/dropdown.js    |  88 ++---
 .../src/test/webapp/bootstrap/js/modal.js       |  12 +-
 .../src/test/webapp/bootstrap/js/popover.js     |   4 +-
 .../src/test/webapp/bootstrap/js/scrollspy.js   |   4 +-
 .../src/test/webapp/bootstrap/js/tab.js         |   8 +-
 .../src/test/webapp/bootstrap/js/tooltip.js     |  78 +++-
 .../src/test/webapp/bootstrap/js/transition.js  |   2 +-
 .../src/test/webapp/bootstrap/less/badges.less  |   2 +-
 .../test/webapp/bootstrap/less/bootstrap.less   |   6 +
 .../webapp/bootstrap/less/button-groups.less    |   5 +-
 .../src/test/webapp/bootstrap/less/buttons.less |  16 +-
 .../test/webapp/bootstrap/less/carousel.less    |   4 +-
 .../test/webapp/bootstrap/less/dropdowns.less   |   4 +-
 .../src/test/webapp/bootstrap/less/forms.less   |  55 ++-
 .../webapp/bootstrap/less/input-groups.less     |   1 +
 .../test/webapp/bootstrap/less/jumbotron.less   |   8 +-
 .../test/webapp/bootstrap/less/list-group.less  |  12 +-
 .../src/test/webapp/bootstrap/less/media.less   |   5 +
 .../src/test/webapp/bootstrap/less/mixins.less  |   1 +
 .../less/mixins/background-variant.less         |   3 +-
 .../webapp/bootstrap/less/mixins/buttons.less   |  20 +-
 .../bootstrap/less/mixins/grid-framework.less   |   4 +-
 .../test/webapp/bootstrap/less/mixins/grid.less |   4 +-
 .../webapp/bootstrap/less/mixins/hide-text.less |   2 +-
 .../bootstrap/less/mixins/list-group.less       |   3 +-
 .../bootstrap/less/mixins/pagination.less       |   3 +-
 .../bootstrap/less/mixins/reset-text.less       |  18 +
 .../less/mixins/responsive-visibility.less      |   2 +-
 .../bootstrap/less/mixins/text-emphasis.less    |   3 +-
 .../test/webapp/bootstrap/less/normalize.less   |  19 +-
 .../test/webapp/bootstrap/less/pagination.less  |   5 +-
 .../src/test/webapp/bootstrap/less/panels.less  |   6 +
 .../test/webapp/bootstrap/less/popovers.less    |  12 +-
 .../src/test/webapp/bootstrap/less/print.less   |   6 -
 .../test/webapp/bootstrap/less/scaffolding.less |   3 +-
 .../src/test/webapp/bootstrap/less/theme.less   |  28 +-
 .../src/test/webapp/bootstrap/less/tooltip.less |   9 +-
 .../test/webapp/bootstrap/less/variables.less   |   8 +-
 60 files changed, 899 insertions(+), 366 deletions(-)
----------------------------------------------------------------------