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";
> +        }
>      }
> -
>  }
> 
> 


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to