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