Author: hlship
Date: Sun Dec  9 07:40:19 2007
New Revision: 602686

URL: http://svn.apache.org/viewvc?rev=602686&view=rev
Log:
TAPESTRY-1966: Non-private/non-static fields in a page should be an exception, 
not a warning

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java?rev=602686&r1=602685&r2=602686&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/InternalClassTransformationImpl.java
 Sun Dec  9 07:40:19 2007
@@ -230,7 +230,7 @@
         addMemberNames(_ctClass.getDeclaredMethods());
     }
 
-    public void verifyFields()
+    void verifyFields()
     {
         List<String> names = newList();
 
@@ -249,12 +249,7 @@
             names.add(name);
         }
 
-        if (!names.isEmpty())
-        {
-            Collections.sort(names);
-
-            _logger.error(ServicesMessages.nonPrivateFields(getClassName(), 
names));
-        }
+        if (!names.isEmpty()) throw new 
RuntimeException(ServicesMessages.nonPrivateFields(getClassName(), names));
     }
 
     private void addMemberNames(CtMember[] members)

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties?rev=602686&r1=602685&r2=602686&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/internal/services/ServicesStrings.properties
 Sun Dec  9 07:40:19 2007
@@ -31,8 +31,7 @@
 method-compile-error=Error compiling method %s (%s): %s
 render-queue-error=Render queue error in %s: %s
 read-only-field=Field %s.%s is read-only.
-non-private-fields=Class %s contains field(s) (%s) that are not private. 
Tapestry will ignore these fields, even if they \
-  have annotations. Runtime behavior, especially in production, may not be 
what you expect. \
+non-private-fields=Class %s contains field(s) (%s) that are not private. \
   You should change these fields to private, and add accessor methods if 
needed.  
 mixins-invalid-without-id-or-type=You may not specify mixins for element <%s> 
because it does not represent a component (which requires either an id 
attribute or a type attribute).
 comp-type-conflict=Embedded component '%s' provides a type attribute in the 
template ('%s') as well as in the component class ('%s'). \

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java?rev=602686&r1=602685&r2=602686&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/InternalClassTransformationImplTest.java
 Sun Dec  9 07:40:19 2007
@@ -41,7 +41,6 @@
 import java.lang.annotation.Target;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
-import java.util.Arrays;
 import static java.util.Arrays.asList;
 import java.util.List;
 import java.util.Map;
@@ -919,33 +918,27 @@
     }
 
     @Test
-    public void non_private_fields_log_an_error() throws Exception
+    public void non_private_fields_are_an_exception() throws Exception
     {
         Logger logger = mockLogger();
 
-        
logger.error(ServicesMessages.nonPrivateFields(VisibilityBean.class.getName(), 
Arrays
-                .asList("_$myPackagePrivate", "_$myProtected", "_$myPublic")));
 
         replay();
 
         InternalClassTransformation ct = 
createClassTransformation(VisibilityBean.class, logger);
 
-        List<String> names = ct.findFieldsWithAnnotation(Retain.class);
-
-        // Only _myLong shows up, because its the only private field
-
-        assertEquals(names, Arrays.asList("_$myLong"));
-
-        // However, all the fields are "reserved" via the IdAllocator ...
-
-        assertEquals(ct.newMemberName("_$myLong"), "_$myLong_0");
-        assertEquals(ct.newMemberName("_$myStatic"), "_$myStatic_0");
-        assertEquals(ct.newMemberName("_$myProtected"), "_$myProtected_0");
+        try
+        {
 
-        // The check for non-private fields has been moved from the ICTI 
constructor to the finish
-        // method.
+            ct.finish();
 
-        ct.finish();
+            unreachable();
+        }
+        catch (RuntimeException ex)
+        {
+            assertMessageContains(ex, "Class " + 
VisibilityBean.class.getName() + " contains field(s)",
+                                  "_$myPackagePrivate", "_$myProtected", 
"_$myPublic");
+        }
 
         verify();
     }


Reply via email to