You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/04/30 00:56:36 UTC
svn commit: r1098011 - in /tapestry/tapestry5/trunk/plastic/src:
main/java/org/apache/tapestry5/internal/plastic/ClassInstantiatorImpl.java
test/groovy/org/apache/tapestry5/plastic/ObtainPlasticClass.groovy
test/java/testsubjects/AbstractSubject.java
Author: hlship
Date: Fri Apr 29 22:56:36 2011
New Revision: 1098011
URL: http://svn.apache.org/viewvc?rev=1098011&view=rev
Log:
TAP5-853: Add a check that class to instantiate is not abstract
Added:
tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/AbstractSubject.java
Modified:
tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/ClassInstantiatorImpl.java
tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/ObtainPlasticClass.groovy
Modified: tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/ClassInstantiatorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/ClassInstantiatorImpl.java?rev=1098011&r1=1098010&r2=1098011&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/ClassInstantiatorImpl.java (original)
+++ tapestry/tapestry5/trunk/plastic/src/main/java/org/apache/tapestry5/internal/plastic/ClassInstantiatorImpl.java Fri Apr 29 22:56:36 2011
@@ -15,6 +15,7 @@
package org.apache.tapestry5.internal.plastic;
import java.lang.reflect.Constructor;
+import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
@@ -84,6 +85,10 @@ public class ClassInstantiatorImpl<T> im
public T newInstance()
{
+ if (Modifier.isAbstract(clazz.getModifiers()))
+ throw new IllegalStateException(String.format("Class %s is abstract and can not be instantiated.",
+ clazz.getName()));
+
try
{
return ctor.newInstance(staticContext, this);
Modified: tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/ObtainPlasticClass.groovy
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/ObtainPlasticClass.groovy?rev=1098011&r1=1098010&r2=1098011&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/ObtainPlasticClass.groovy (original)
+++ tapestry/tapestry5/trunk/plastic/src/test/groovy/org/apache/tapestry5/plastic/ObtainPlasticClass.groovy Fri Apr 29 22:56:36 2011
@@ -24,6 +24,21 @@ class ObtainPlasticClass extends Specifi
{
def mgr = new PlasticManager()
+ def "abstract classes may not be instantiated"()
+ {
+ def pc = mgr.getPlasticClass("testsubjects.AbstractSubject")
+
+ when:
+
+ pc.createInstantiator().newInstance()
+
+ then:
+
+ def e = thrown(IllegalStateException)
+
+ assert e.message == "Class testsubjects.AbstractSubject is abstract and can not be instantiated."
+ }
+
def "access to simple empty class"() {
setup:
def pc = mgr.getPlasticClass("testsubjects.Empty")
Added: tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/AbstractSubject.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/AbstractSubject.java?rev=1098011&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/AbstractSubject.java (added)
+++ tapestry/tapestry5/trunk/plastic/src/test/java/testsubjects/AbstractSubject.java Fri Apr 29 22:56:36 2011
@@ -0,0 +1,6 @@
+package testsubjects;
+
+public abstract class AbstractSubject
+{
+
+}