You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by cb...@apache.org on 2016/07/20 12:07:33 UTC
svn commit: r1753491 - in /velocity/engine/trunk: ./
velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/
velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/
Author: cbrisson
Date: Wed Jul 20 12:07:33 2016
New Revision: 1753491
URL: http://svn.apache.org/viewvc?rev=1753491&view=rev
Log:
[engine] borrow the DeprecatedCheckUberspector from the XWiki project
Added:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java
- copied, changed from r1753137, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java
Modified:
velocity/engine/trunk/NOTICE
Modified: velocity/engine/trunk/NOTICE
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/NOTICE?rev=1753491&r1=1753490&r2=1753491&view=diff
==============================================================================
--- velocity/engine/trunk/NOTICE (original)
+++ velocity/engine/trunk/NOTICE Wed Jul 20 12:07:33 2016
@@ -9,3 +9,6 @@ The files
- velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java
- velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java
are Copyright 2006 Sun Microsystems, Inc., and licenced under a BSD-like licence.
+
+The file velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
+is originating from the xwiki project, and licenced under the LGPL licence.
Added: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java?rev=1753491&view=auto
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java (added)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java Wed Jul 20 12:07:33 2016
@@ -0,0 +1,111 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.apache.velocity.util.introspection;
+
+import java.lang.reflect.Method;
+
+/**
+ * Chainable Uberspector that checks for deprecated method calls. It does that by checking if the returned
+ * method has a Deprecated annotation. Because this is a chainable uberspector, it has to re-get the method using a
+ * default introspector, which is not safe; future uberspectors might not be able to return a precise method name, or a
+ * method of the original target object.
+ *
+ * Borrowed from the XWiki project.
+ *
+ * @since 2.0
+ * @version $Id:$
+ * @see ChainableUberspector
+ */
+public class DeprecatedCheckUberspector extends AbstractChainableUberspector implements Uberspect, UberspectLoggable
+{
+ @Override
+ public void init()
+ {
+ super.init();
+ this.introspector = new Introspector(this.log);
+ }
+
+ @Override
+ public VelMethod getMethod(Object obj, String methodName, Object[] args, Info i)
+ {
+ VelMethod method = super.getMethod(obj, methodName, args, i);
+ if (method != null) {
+ Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), args);
+ if (m != null
+ && (m.isAnnotationPresent(Deprecated.class)
+ || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
+ || obj.getClass().isAnnotationPresent(Deprecated.class))) {
+ logWarning("method", obj, method.getMethodName(), i);
+ }
+ }
+
+ return method;
+ }
+
+ @Override
+ public VelPropertyGet getPropertyGet(Object obj, String identifier, Info i)
+ {
+ VelPropertyGet method = super.getPropertyGet(obj, identifier, i);
+ if (method != null) {
+ Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), new Object[] {});
+ if (m != null
+ && (m.isAnnotationPresent(Deprecated.class)
+ || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
+ || obj.getClass().isAnnotationPresent(Deprecated.class))) {
+ logWarning("getter", obj, method.getMethodName(), i);
+ }
+ }
+
+ return method;
+ }
+
+ @Override
+ public VelPropertySet getPropertySet(Object obj, String identifier, Object arg, Info i)
+ {
+ // TODO Auto-generated method stub
+ VelPropertySet method = super.getPropertySet(obj, identifier, arg, i);
+ if (method != null) {
+ Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), new Object[] { arg });
+ if (m != null
+ && (m.isAnnotationPresent(Deprecated.class)
+ || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
+ || obj.getClass().isAnnotationPresent(Deprecated.class))) {
+ logWarning("setter", obj, method.getMethodName(), i);
+ }
+ }
+
+ return method;
+ }
+
+ /**
+ * Helper method to log a warning when a deprecation has been found.
+ *
+ * @param deprecationType the type of deprecation (eg "getter", "setter", "method")
+ * @param object the object that has a deprecation
+ * @param methodName the deprecated method's name
+ * @param info a Velocity {@link org.apache.velocity.util.introspection.Info} object containing information about
+ * where the deprecation was located in the Velocity template file
+ */
+ private void logWarning(String deprecationType, Object object, String methodName, Info info)
+ {
+ this.log.warn("Deprecated usage of {} [{}] in {}@{},{}", deprecationType, object.getClass()
+ .getCanonicalName() + "." + methodName, info.getTemplateName(), info.getLine(), info.getColumn());
+ }
+}
Copied: velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java (from r1753137, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java)
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java?p2=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java&p1=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java&r1=1753137&r2=1753491&rev=1753491&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java Wed Jul 20 12:07:33 2016
@@ -23,6 +23,7 @@ import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.test.BaseTestCase;
import org.apache.velocity.test.misc.TestLogger;
import org.apache.velocity.util.introspection.AbstractChainableUberspector;
@@ -32,13 +33,14 @@ import org.apache.velocity.util.introspe
import org.apache.velocity.util.introspection.VelPropertySet;
import java.io.StringWriter;
+import java.util.ArrayList;
/**
- * Tests uberspectors chaining
+ * Tests DeprecatedCheckUberspector
*/
-public class ChainedUberspectorsTestCase extends BaseTestCase {
+public class DeprecatedCheckUberspectorsTestCase extends BaseTestCase {
- public ChainedUberspectorsTestCase(String name)
+ public DeprecatedCheckUberspectorsTestCase(String name)
throws Exception
{
super(name);
@@ -46,72 +48,64 @@ public class ChainedUberspectorsTestCase
public static Test suite()
{
- return new TestSuite(ChainedUberspectorsTestCase.class);
+ return new TestSuite(DeprecatedCheckUberspectorsTestCase.class);
}
- public void setUp()
- throws Exception
+ protected void setUpEngine(VelocityEngine engine)
{
- Velocity.reset();
- Velocity.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger());
- Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.util.introspection.UberspectImpl");
- Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.test.util.introspection.ChainedUberspectorsTestCase$ChainedUberspector");
- Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.test.util.introspection.ChainedUberspectorsTestCase$LinkedUberspector");
- Velocity.init();
+ engine.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger(false, true));
+ engine.addProperty(Velocity.UBERSPECT_CLASSNAME, "org.apache.velocity.util.introspection.UberspectImpl");
+ engine.addProperty(Velocity.UBERSPECT_CLASSNAME, "org.apache.velocity.util.introspection.DeprecatedCheckUberspector");
}
- public void tearDown()
+ protected void setUpContext(VelocityContext context)
{
+ context.put("obj1", new StandardObject());
+ context.put("obj2", new DeprecatedObject());
}
- public void testChaining()
+ public void testDeprecatedCheck()
throws Exception
{
- VelocityContext context = new VelocityContext();
- context.put("foo",new Foo());
+ engine.init(); // make sure the engine is initialized, so that we get the logger we configured
+ TestLogger logger =(TestLogger)engine.getLog();
+ logger.startCapture(); // reset log capture
StringWriter writer = new StringWriter();
-
- Velocity.evaluate(context,writer,"test","$foo.zeMethod()");
- assertEquals(writer.toString(),"ok");
-
- Velocity.evaluate(context,writer,"test","#set($foo.foo = 'someValue')");
-
- writer = new StringWriter();
- Velocity.evaluate(context,writer,"test","$foo.bar");
- assertEquals(writer.toString(),"someValue");
-
- writer = new StringWriter();
- Velocity.evaluate(context,writer,"test","$foo.foo");
- assertEquals(writer.toString(),"someValue");
+ engine.evaluate(context, writer, "test", "$obj1.foo() $obj1.bar $obj2.foo() $obj2.bar");
+ String log = logger.getLog();
+ String lines[] = log.split("\\r?\\n");
+ assertEquals(lines[0], " [info] Deprecated usage of method [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.StandardObject.foo] in test@1,7");
+ assertEquals(lines[1], " [info] Deprecated usage of getter [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.StandardObject.getBar] in test@1,19");
+ assertEquals(lines[2], " [info] Deprecated usage of method [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.DeprecatedObject.foo] in test@1,29");
+ assertEquals(lines[3], " [info] Deprecated usage of getter [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.DeprecatedObject.getBar] in test@1,41");
}
- // replaces getFoo by getBar
- public static class ChainedUberspector extends AbstractChainableUberspector
+ public static class StandardObject
{
- public VelPropertySet getPropertySet(Object obj, String identifier, Object arg, Info info)
+ @Deprecated
+ public String foo()
{
- identifier = identifier.replaceAll("foo","bar");
- return inner.getPropertySet(obj,identifier,arg,info);
+ return "foo";
}
- }
- // replaces setFoo by setBar
- public static class LinkedUberspector extends UberspectImpl
- {
- public VelPropertyGet getPropertyGet(Object obj, String identifier, Info info)
+ @Deprecated
+ public String getBar()
{
- identifier = identifier.replaceAll("foo","bar");
- return super.getPropertyGet(obj,identifier,info);
+ return "bar";
}
}
- public static class Foo
+ @Deprecated
+ public static class DeprecatedObject
{
- private String bar;
+ public String foo()
+ {
+ return "foo";
+ }
- public String zeMethod() { return "ok"; }
- public String getBar() { return bar; }
- public void setBar(String s) { bar = s; }
+ public String getBar()
+ {
+ return "bar";
+ }
}
-
}
Re: svn commit: r1753491 - in /velocity/engine/trunk: ./
velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/
velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/
Posted by Claude Brisson <cl...@renegat.net>.
Request sent to XWiki developers.
Thanks.
Claude
On 20/07/2016 20:55, Sergiu Dumitriu wrote:
> I don't think it's OK to use LGPL sources in an Apache-licensed project.
> Better ask the XWiki developers for permission to re-license that file.
> My memory is hazy, but I think I wrote the original file, with some
> later amendments from other developers.
>
> On 07/20/2016 08:07 AM, cbrisson@apache.org wrote:
>> Author: cbrisson
>> Date: Wed Jul 20 12:07:33 2016
>> New Revision: 1753491
>>
>> URL: http://svn.apache.org/viewvc?rev=1753491&view=rev
>> Log:
>> [engine] borrow the DeprecatedCheckUberspector from the XWiki project
>>
>> Added:
>> velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
>> velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java
>> - copied, changed from r1753137, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java
>> Modified:
>> velocity/engine/trunk/NOTICE
>>
>> Modified: velocity/engine/trunk/NOTICE
>> URL: http://svn.apache.org/viewvc/velocity/engine/trunk/NOTICE?rev=1753491&r1=1753490&r2=1753491&view=diff
>> ==============================================================================
>> --- velocity/engine/trunk/NOTICE (original)
>> +++ velocity/engine/trunk/NOTICE Wed Jul 20 12:07:33 2016
>> @@ -9,3 +9,6 @@ The files
>> - velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java
>> - velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java
>> are Copyright 2006 Sun Microsystems, Inc., and licenced under a BSD-like licence.
>> +
>> +The file velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
>> +is originating from the xwiki project, and licenced under the LGPL licence.
>>
>> Added: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
>> URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java?rev=1753491&view=auto
>> ==============================================================================
>> --- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java (added)
>> +++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java Wed Jul 20 12:07:33 2016
>> @@ -0,0 +1,111 @@
>> +/*
>> + * See the NOTICE file distributed with this work for additional
>> + * information regarding copyright ownership.
>> + *
>> + * This is free software; you can redistribute it and/or modify it
>> + * under the terms of the GNU Lesser General Public License as
>> + * published by the Free Software Foundation; either version 2.1 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This software is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this software; if not, write to the Free
>> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
>> + */
>> +package org.apache.velocity.util.introspection;
>> +
>> +import java.lang.reflect.Method;
>> +
>> +/**
>> + * Chainable Uberspector that checks for deprecated method calls. It does that by checking if the returned
>> + * method has a Deprecated annotation. Because this is a chainable uberspector, it has to re-get the method using a
>> + * default introspector, which is not safe; future uberspectors might not be able to return a precise method name, or a
>> + * method of the original target object.
>> + *
>> + * Borrowed from the XWiki project.
>> + *
>> + * @since 2.0
>> + * @version $Id:$
>> + * @see ChainableUberspector
>> + */
>> +public class DeprecatedCheckUberspector extends AbstractChainableUberspector implements Uberspect, UberspectLoggable
>> +{
>> + @Override
>> + public void init()
>> + {
>> + super.init();
>> + this.introspector = new Introspector(this.log);
>> + }
>> +
>> + @Override
>> + public VelMethod getMethod(Object obj, String methodName, Object[] args, Info i)
>> + {
>> + VelMethod method = super.getMethod(obj, methodName, args, i);
>> + if (method != null) {
>> + Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), args);
>> + if (m != null
>> + && (m.isAnnotationPresent(Deprecated.class)
>> + || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
>> + || obj.getClass().isAnnotationPresent(Deprecated.class))) {
>> + logWarning("method", obj, method.getMethodName(), i);
>> + }
>> + }
>> +
>> + return method;
>> + }
>> +
>> + @Override
>> + public VelPropertyGet getPropertyGet(Object obj, String identifier, Info i)
>> + {
>> + VelPropertyGet method = super.getPropertyGet(obj, identifier, i);
>> + if (method != null) {
>> + Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), new Object[] {});
>> + if (m != null
>> + && (m.isAnnotationPresent(Deprecated.class)
>> + || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
>> + || obj.getClass().isAnnotationPresent(Deprecated.class))) {
>> + logWarning("getter", obj, method.getMethodName(), i);
>> + }
>> + }
>> +
>> + return method;
>> + }
>> +
>> + @Override
>> + public VelPropertySet getPropertySet(Object obj, String identifier, Object arg, Info i)
>> + {
>> + // TODO Auto-generated method stub
>> + VelPropertySet method = super.getPropertySet(obj, identifier, arg, i);
>> + if (method != null) {
>> + Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), new Object[] { arg });
>> + if (m != null
>> + && (m.isAnnotationPresent(Deprecated.class)
>> + || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
>> + || obj.getClass().isAnnotationPresent(Deprecated.class))) {
>> + logWarning("setter", obj, method.getMethodName(), i);
>> + }
>> + }
>> +
>> + return method;
>> + }
>> +
>> + /**
>> + * Helper method to log a warning when a deprecation has been found.
>> + *
>> + * @param deprecationType the type of deprecation (eg "getter", "setter", "method")
>> + * @param object the object that has a deprecation
>> + * @param methodName the deprecated method's name
>> + * @param info a Velocity {@link org.apache.velocity.util.introspection.Info} object containing information about
>> + * where the deprecation was located in the Velocity template file
>> + */
>> + private void logWarning(String deprecationType, Object object, String methodName, Info info)
>> + {
>> + this.log.warn("Deprecated usage of {} [{}] in {}@{},{}", deprecationType, object.getClass()
>> + .getCanonicalName() + "." + methodName, info.getTemplateName(), info.getLine(), info.getColumn());
>> + }
>> +}
>>
>> Copied: velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java (from r1753137, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java)
>> URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java?p2=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java&p1=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java&r1=1753137&r2=1753491&rev=1753491&view=diff
>> ==============================================================================
>> --- velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java (original)
>> +++ velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java Wed Jul 20 12:07:33 2016
>> @@ -23,6 +23,7 @@ import junit.framework.Test;
>> import junit.framework.TestSuite;
>> import org.apache.velocity.VelocityContext;
>> import org.apache.velocity.app.Velocity;
>> +import org.apache.velocity.app.VelocityEngine;
>> import org.apache.velocity.test.BaseTestCase;
>> import org.apache.velocity.test.misc.TestLogger;
>> import org.apache.velocity.util.introspection.AbstractChainableUberspector;
>> @@ -32,13 +33,14 @@ import org.apache.velocity.util.introspe
>> import org.apache.velocity.util.introspection.VelPropertySet;
>>
>> import java.io.StringWriter;
>> +import java.util.ArrayList;
>>
>> /**
>> - * Tests uberspectors chaining
>> + * Tests DeprecatedCheckUberspector
>> */
>> -public class ChainedUberspectorsTestCase extends BaseTestCase {
>> +public class DeprecatedCheckUberspectorsTestCase extends BaseTestCase {
>>
>> - public ChainedUberspectorsTestCase(String name)
>> + public DeprecatedCheckUberspectorsTestCase(String name)
>> throws Exception
>> {
>> super(name);
>> @@ -46,72 +48,64 @@ public class ChainedUberspectorsTestCase
>>
>> public static Test suite()
>> {
>> - return new TestSuite(ChainedUberspectorsTestCase.class);
>> + return new TestSuite(DeprecatedCheckUberspectorsTestCase.class);
>> }
>>
>> - public void setUp()
>> - throws Exception
>> + protected void setUpEngine(VelocityEngine engine)
>> {
>> - Velocity.reset();
>> - Velocity.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger());
>> - Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.util.introspection.UberspectImpl");
>> - Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.test.util.introspection.ChainedUberspectorsTestCase$ChainedUberspector");
>> - Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.test.util.introspection.ChainedUberspectorsTestCase$LinkedUberspector");
>> - Velocity.init();
>> + engine.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger(false, true));
>> + engine.addProperty(Velocity.UBERSPECT_CLASSNAME, "org.apache.velocity.util.introspection.UberspectImpl");
>> + engine.addProperty(Velocity.UBERSPECT_CLASSNAME, "org.apache.velocity.util.introspection.DeprecatedCheckUberspector");
>> }
>>
>> - public void tearDown()
>> + protected void setUpContext(VelocityContext context)
>> {
>> + context.put("obj1", new StandardObject());
>> + context.put("obj2", new DeprecatedObject());
>> }
>>
>> - public void testChaining()
>> + public void testDeprecatedCheck()
>> throws Exception
>> {
>> - VelocityContext context = new VelocityContext();
>> - context.put("foo",new Foo());
>> + engine.init(); // make sure the engine is initialized, so that we get the logger we configured
>> + TestLogger logger =(TestLogger)engine.getLog();
>> + logger.startCapture(); // reset log capture
>> StringWriter writer = new StringWriter();
>> -
>> - Velocity.evaluate(context,writer,"test","$foo.zeMethod()");
>> - assertEquals(writer.toString(),"ok");
>> -
>> - Velocity.evaluate(context,writer,"test","#set($foo.foo = 'someValue')");
>> -
>> - writer = new StringWriter();
>> - Velocity.evaluate(context,writer,"test","$foo.bar");
>> - assertEquals(writer.toString(),"someValue");
>> -
>> - writer = new StringWriter();
>> - Velocity.evaluate(context,writer,"test","$foo.foo");
>> - assertEquals(writer.toString(),"someValue");
>> + engine.evaluate(context, writer, "test", "$obj1.foo() $obj1.bar $obj2.foo() $obj2.bar");
>> + String log = logger.getLog();
>> + String lines[] = log.split("\\r?\\n");
>> + assertEquals(lines[0], " [info] Deprecated usage of method [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.StandardObject.foo] in test@1,7");
>> + assertEquals(lines[1], " [info] Deprecated usage of getter [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.StandardObject.getBar] in test@1,19");
>> + assertEquals(lines[2], " [info] Deprecated usage of method [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.DeprecatedObject.foo] in test@1,29");
>> + assertEquals(lines[3], " [info] Deprecated usage of getter [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.DeprecatedObject.getBar] in test@1,41");
>> }
>>
>> - // replaces getFoo by getBar
>> - public static class ChainedUberspector extends AbstractChainableUberspector
>> + public static class StandardObject
>> {
>> - public VelPropertySet getPropertySet(Object obj, String identifier, Object arg, Info info)
>> + @Deprecated
>> + public String foo()
>> {
>> - identifier = identifier.replaceAll("foo","bar");
>> - return inner.getPropertySet(obj,identifier,arg,info);
>> + return "foo";
>> }
>> - }
>>
>> - // replaces setFoo by setBar
>> - public static class LinkedUberspector extends UberspectImpl
>> - {
>> - public VelPropertyGet getPropertyGet(Object obj, String identifier, Info info)
>> + @Deprecated
>> + public String getBar()
>> {
>> - identifier = identifier.replaceAll("foo","bar");
>> - return super.getPropertyGet(obj,identifier,info);
>> + return "bar";
>> }
>> }
>>
>> - public static class Foo
>> + @Deprecated
>> + public static class DeprecatedObject
>> {
>> - private String bar;
>> + public String foo()
>> + {
>> + return "foo";
>> + }
>>
>> - public String zeMethod() { return "ok"; }
>> - public String getBar() { return bar; }
>> - public void setBar(String s) { bar = s; }
>> + public String getBar()
>> + {
>> + return "bar";
>> + }
>> }
>> -
>> }
>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org
Re: svn commit: r1753491 - in /velocity/engine/trunk: ./
velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/
velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/
Posted by Sergiu Dumitriu <se...@gmail.com>.
I don't think it's OK to use LGPL sources in an Apache-licensed project.
Better ask the XWiki developers for permission to re-license that file.
My memory is hazy, but I think I wrote the original file, with some
later amendments from other developers.
On 07/20/2016 08:07 AM, cbrisson@apache.org wrote:
> Author: cbrisson
> Date: Wed Jul 20 12:07:33 2016
> New Revision: 1753491
>
> URL: http://svn.apache.org/viewvc?rev=1753491&view=rev
> Log:
> [engine] borrow the DeprecatedCheckUberspector from the XWiki project
>
> Added:
> velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
> velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java
> - copied, changed from r1753137, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java
> Modified:
> velocity/engine/trunk/NOTICE
>
> Modified: velocity/engine/trunk/NOTICE
> URL: http://svn.apache.org/viewvc/velocity/engine/trunk/NOTICE?rev=1753491&r1=1753490&r2=1753491&view=diff
> ==============================================================================
> --- velocity/engine/trunk/NOTICE (original)
> +++ velocity/engine/trunk/NOTICE Wed Jul 20 12:07:33 2016
> @@ -9,3 +9,6 @@ The files
> - velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngine.java
> - velocity-engine-scripting/src/main/java/org/apache/velocity/script/VelocityScriptEngineFactory.java
> are Copyright 2006 Sun Microsystems, Inc., and licenced under a BSD-like licence.
> +
> +The file velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
> +is originating from the xwiki project, and licenced under the LGPL licence.
>
> Added: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java
> URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java?rev=1753491&view=auto
> ==============================================================================
> --- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java (added)
> +++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/DeprecatedCheckUberspector.java Wed Jul 20 12:07:33 2016
> @@ -0,0 +1,111 @@
> +/*
> + * See the NOTICE file distributed with this work for additional
> + * information regarding copyright ownership.
> + *
> + * This is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU Lesser General Public License as
> + * published by the Free Software Foundation; either version 2.1 of
> + * the License, or (at your option) any later version.
> + *
> + * This software is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this software; if not, write to the Free
> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
> + */
> +package org.apache.velocity.util.introspection;
> +
> +import java.lang.reflect.Method;
> +
> +/**
> + * Chainable Uberspector that checks for deprecated method calls. It does that by checking if the returned
> + * method has a Deprecated annotation. Because this is a chainable uberspector, it has to re-get the method using a
> + * default introspector, which is not safe; future uberspectors might not be able to return a precise method name, or a
> + * method of the original target object.
> + *
> + * Borrowed from the XWiki project.
> + *
> + * @since 2.0
> + * @version $Id:$
> + * @see ChainableUberspector
> + */
> +public class DeprecatedCheckUberspector extends AbstractChainableUberspector implements Uberspect, UberspectLoggable
> +{
> + @Override
> + public void init()
> + {
> + super.init();
> + this.introspector = new Introspector(this.log);
> + }
> +
> + @Override
> + public VelMethod getMethod(Object obj, String methodName, Object[] args, Info i)
> + {
> + VelMethod method = super.getMethod(obj, methodName, args, i);
> + if (method != null) {
> + Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), args);
> + if (m != null
> + && (m.isAnnotationPresent(Deprecated.class)
> + || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
> + || obj.getClass().isAnnotationPresent(Deprecated.class))) {
> + logWarning("method", obj, method.getMethodName(), i);
> + }
> + }
> +
> + return method;
> + }
> +
> + @Override
> + public VelPropertyGet getPropertyGet(Object obj, String identifier, Info i)
> + {
> + VelPropertyGet method = super.getPropertyGet(obj, identifier, i);
> + if (method != null) {
> + Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), new Object[] {});
> + if (m != null
> + && (m.isAnnotationPresent(Deprecated.class)
> + || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
> + || obj.getClass().isAnnotationPresent(Deprecated.class))) {
> + logWarning("getter", obj, method.getMethodName(), i);
> + }
> + }
> +
> + return method;
> + }
> +
> + @Override
> + public VelPropertySet getPropertySet(Object obj, String identifier, Object arg, Info i)
> + {
> + // TODO Auto-generated method stub
> + VelPropertySet method = super.getPropertySet(obj, identifier, arg, i);
> + if (method != null) {
> + Method m = this.introspector.getMethod(obj.getClass(), method.getMethodName(), new Object[] { arg });
> + if (m != null
> + && (m.isAnnotationPresent(Deprecated.class)
> + || m.getDeclaringClass().isAnnotationPresent(Deprecated.class)
> + || obj.getClass().isAnnotationPresent(Deprecated.class))) {
> + logWarning("setter", obj, method.getMethodName(), i);
> + }
> + }
> +
> + return method;
> + }
> +
> + /**
> + * Helper method to log a warning when a deprecation has been found.
> + *
> + * @param deprecationType the type of deprecation (eg "getter", "setter", "method")
> + * @param object the object that has a deprecation
> + * @param methodName the deprecated method's name
> + * @param info a Velocity {@link org.apache.velocity.util.introspection.Info} object containing information about
> + * where the deprecation was located in the Velocity template file
> + */
> + private void logWarning(String deprecationType, Object object, String methodName, Info info)
> + {
> + this.log.warn("Deprecated usage of {} [{}] in {}@{},{}", deprecationType, object.getClass()
> + .getCanonicalName() + "." + methodName, info.getTemplateName(), info.getLine(), info.getColumn());
> + }
> +}
>
> Copied: velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java (from r1753137, velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java)
> URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java?p2=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java&p1=velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java&r1=1753137&r2=1753491&rev=1753491&view=diff
> ==============================================================================
> --- velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/ChainedUberspectorsTestCase.java (original)
> +++ velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/util/introspection/DeprecatedCheckUberspectorsTestCase.java Wed Jul 20 12:07:33 2016
> @@ -23,6 +23,7 @@ import junit.framework.Test;
> import junit.framework.TestSuite;
> import org.apache.velocity.VelocityContext;
> import org.apache.velocity.app.Velocity;
> +import org.apache.velocity.app.VelocityEngine;
> import org.apache.velocity.test.BaseTestCase;
> import org.apache.velocity.test.misc.TestLogger;
> import org.apache.velocity.util.introspection.AbstractChainableUberspector;
> @@ -32,13 +33,14 @@ import org.apache.velocity.util.introspe
> import org.apache.velocity.util.introspection.VelPropertySet;
>
> import java.io.StringWriter;
> +import java.util.ArrayList;
>
> /**
> - * Tests uberspectors chaining
> + * Tests DeprecatedCheckUberspector
> */
> -public class ChainedUberspectorsTestCase extends BaseTestCase {
> +public class DeprecatedCheckUberspectorsTestCase extends BaseTestCase {
>
> - public ChainedUberspectorsTestCase(String name)
> + public DeprecatedCheckUberspectorsTestCase(String name)
> throws Exception
> {
> super(name);
> @@ -46,72 +48,64 @@ public class ChainedUberspectorsTestCase
>
> public static Test suite()
> {
> - return new TestSuite(ChainedUberspectorsTestCase.class);
> + return new TestSuite(DeprecatedCheckUberspectorsTestCase.class);
> }
>
> - public void setUp()
> - throws Exception
> + protected void setUpEngine(VelocityEngine engine)
> {
> - Velocity.reset();
> - Velocity.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger());
> - Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.util.introspection.UberspectImpl");
> - Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.test.util.introspection.ChainedUberspectorsTestCase$ChainedUberspector");
> - Velocity.addProperty(Velocity.UBERSPECT_CLASSNAME,"org.apache.velocity.test.util.introspection.ChainedUberspectorsTestCase$LinkedUberspector");
> - Velocity.init();
> + engine.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger(false, true));
> + engine.addProperty(Velocity.UBERSPECT_CLASSNAME, "org.apache.velocity.util.introspection.UberspectImpl");
> + engine.addProperty(Velocity.UBERSPECT_CLASSNAME, "org.apache.velocity.util.introspection.DeprecatedCheckUberspector");
> }
>
> - public void tearDown()
> + protected void setUpContext(VelocityContext context)
> {
> + context.put("obj1", new StandardObject());
> + context.put("obj2", new DeprecatedObject());
> }
>
> - public void testChaining()
> + public void testDeprecatedCheck()
> throws Exception
> {
> - VelocityContext context = new VelocityContext();
> - context.put("foo",new Foo());
> + engine.init(); // make sure the engine is initialized, so that we get the logger we configured
> + TestLogger logger =(TestLogger)engine.getLog();
> + logger.startCapture(); // reset log capture
> StringWriter writer = new StringWriter();
> -
> - Velocity.evaluate(context,writer,"test","$foo.zeMethod()");
> - assertEquals(writer.toString(),"ok");
> -
> - Velocity.evaluate(context,writer,"test","#set($foo.foo = 'someValue')");
> -
> - writer = new StringWriter();
> - Velocity.evaluate(context,writer,"test","$foo.bar");
> - assertEquals(writer.toString(),"someValue");
> -
> - writer = new StringWriter();
> - Velocity.evaluate(context,writer,"test","$foo.foo");
> - assertEquals(writer.toString(),"someValue");
> + engine.evaluate(context, writer, "test", "$obj1.foo() $obj1.bar $obj2.foo() $obj2.bar");
> + String log = logger.getLog();
> + String lines[] = log.split("\\r?\\n");
> + assertEquals(lines[0], " [info] Deprecated usage of method [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.StandardObject.foo] in test@1,7");
> + assertEquals(lines[1], " [info] Deprecated usage of getter [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.StandardObject.getBar] in test@1,19");
> + assertEquals(lines[2], " [info] Deprecated usage of method [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.DeprecatedObject.foo] in test@1,29");
> + assertEquals(lines[3], " [info] Deprecated usage of getter [org.apache.velocity.test.util.introspection.DeprecatedCheckUberspectorsTestCase.DeprecatedObject.getBar] in test@1,41");
> }
>
> - // replaces getFoo by getBar
> - public static class ChainedUberspector extends AbstractChainableUberspector
> + public static class StandardObject
> {
> - public VelPropertySet getPropertySet(Object obj, String identifier, Object arg, Info info)
> + @Deprecated
> + public String foo()
> {
> - identifier = identifier.replaceAll("foo","bar");
> - return inner.getPropertySet(obj,identifier,arg,info);
> + return "foo";
> }
> - }
>
> - // replaces setFoo by setBar
> - public static class LinkedUberspector extends UberspectImpl
> - {
> - public VelPropertyGet getPropertyGet(Object obj, String identifier, Info info)
> + @Deprecated
> + public String getBar()
> {
> - identifier = identifier.replaceAll("foo","bar");
> - return super.getPropertyGet(obj,identifier,info);
> + return "bar";
> }
> }
>
> - public static class Foo
> + @Deprecated
> + public static class DeprecatedObject
> {
> - private String bar;
> + public String foo()
> + {
> + return "foo";
> + }
>
> - public String zeMethod() { return "ok"; }
> - public String getBar() { return bar; }
> - public void setBar(String s) { bar = s; }
> + public String getBar()
> + {
> + return "bar";
> + }
> }
> -
> }
>
>
--
Sergiu Dumitriu
http://purl.org/net/sergiu/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org