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, cbris...@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-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to