Previous, it only supports java 6 (as you can tell from the previous code
visit(Opcodes.V1_6, ...), so I don't think anyone use it (the weving code
has been around for a couple of years. No one asks for weaving at java5).

For caching, it is a good idea. I have committed the change.
Thanks
Emily

On Fri, Feb 17, 2012 at 11:50 AM, Timothy Ward <[email protected]>wrote:

>
> Hi,
>
> Have I missed something here? The weaving code should support Java 5 as
> well as Java 6 and 7, but there's no version code for it in the util that's
> just been committed.
>
> Also this value can be calculated and cached in a static init block so
> that the method can just return a constant value. This may sound like
> overkill, but we've had a number of people ask for every clock cycle we can
> save!
>
> Regards,
>
> Tim Ward
> -------------------
> Apache Aries PMC member & Enterprise OSGi advocate
> Enterprise OSGi in Action (http://www.manning.com/cummins)
> -------------------
>
>
> > Subject: svn commit: r1245223 - in
> /aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl:
> ProxyUtils.java gen/ProxySubclassAdapter.java
> interfaces/InterfaceCombiningClassAdapter.java
> > Date: Thu, 16 Feb 2012 22:38:28 +0000
> > To: [email protected]
> > From: [email protected]
> >
> > Author: ejiang
> > Date: Thu Feb 16 22:38:27 2012
> > New Revision: 1245223
> >
> > URL: http://svn.apache.org/viewvc?rev=1245223&view=rev
> > Log:
> > ARIES-817: ASM4 for Java7 support
> >
> > Added:
> >
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
> > Modified:
> >
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
> >
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
> >
> > Added:
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
> > URL:
> http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java?rev=1245223&view=auto
> >
> ==============================================================================
> > ---
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
> (added)
> > +++
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/ProxyUtils.java
> Thu Feb 16 22:38:27 2012
> > @@ -0,0 +1,45 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one
> > + * or more contributor license agreements.  See the NOTICE file
> > + * distributed with this work for additional information
> > + * regarding copyright ownership.  The ASF licenses this file
> > + * to you under the Apache License, Version 2.0 (the
> > + * "License"); you may not use this file except in compliance
> > + * with the License.  You may obtain a copy of the License at
> > + *
> > + *   http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> > + * software distributed under the License is distributed on an
> > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> > + * KIND, either express or implied.  See the License for the
> > + * specific language governing permissions and limitations
> > + * under the License.
> > + */
> > +package org.apache.aries.proxy.impl;
> > +
> > +import java.math.BigDecimal;
> > +
> > +import org.objectweb.asm.Opcodes;
> > +import org.slf4j.Logger;
> > +import org.slf4j.LoggerFactory;
> > +
> > +public class ProxyUtils
> > +{
> > +  private static Logger LOGGER =
> LoggerFactory.getLogger(ProxyUtils.class);
> > +  /**
> > +   * Get the java version to be woven at.
> > +   * @return
> > +   */
> > +  public static int getWeavingJavaVersion() {
> > +    int javaClassVersion = new
> BigDecimal(System.getProperty("java.class.version")).intValue();
> > +    if (javaClassVersion >= Opcodes.V1_7) {
> > +      LOGGER.debug("Weaving to Java 7");
> > +      return Opcodes.V1_7;
> > +    } else {
> > +      LOGGER.debug("Weaving to Java 6");
> > +      return Opcodes.V1_6;
> > +    }
> > +
> > +  }
> > +}
> >
> > Modified:
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
> > URL:
> http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java?rev=1245223&r1=1245222&r2=1245223&view=diff
> >
> ==============================================================================
> > ---
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
> (original)
> > +++
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java
> Thu Feb 16 22:38:27 2012
> > @@ -21,6 +21,7 @@ package org.apache.aries.proxy.impl.gen;
> >  import java.io.IOException;
> >  import java.lang.reflect.InvocationHandler;
> >
> > +import org.apache.aries.proxy.impl.ProxyUtils;
> >  import org.objectweb.asm.AnnotationVisitor;
> >  import org.objectweb.asm.Attribute;
> >  import org.objectweb.asm.ClassReader;
> > @@ -107,9 +108,7 @@ public class ProxySubclassAdapter extend
> >        throw new TypeNotPresentException(superclassBinaryName, cnfe);
> >      }
> >
> > -    // move the existing class name to become the superclass
> > -    // modify the version of the dynamic subclass to be Java 1.6
> > -    int newVersion = Opcodes.V1_6;
> > +
> >      // keep the same access and signature as the superclass (unless
> it's abstract)
> >      // remove all the superclass interfaces because they will be
> inherited
> >      // from the superclass anyway
> > @@ -117,7 +116,7 @@ public class ProxySubclassAdapter extend
> >        //If the super was abstract the subclass should not be!
> >        access &= ~ACC_ABSTRACT;
> >      }
> > -    cv.visit(newVersion, access, newClassName, signature, name, null);
> > +    cv.visit(ProxyUtils.getWeavingJavaVersion(), access, newClassName,
> signature, name, null);
> >
> >      // add a private field for the invocation handler
> >      // this isn't static in case we have multiple instances of the same
> >
> > Modified:
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
> > URL:
> http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java?rev=1245223&r1=1245222&r2=1245223&view=diff
> >
> ==============================================================================
> > ---
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
> (original)
> > +++
> aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java
> Thu Feb 16 22:38:27 2012
> > @@ -25,6 +25,7 @@ import java.util.Collection;
> >  import java.util.List;
> >
> >  import org.apache.aries.proxy.UnableToProxyException;
> > +import org.apache.aries.proxy.impl.ProxyUtils;
> >  import org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter;
> >  import org.apache.aries.proxy.impl.common.OSGiFriendlyClassVisitor;
> >  import org.apache.aries.proxy.impl.common.OSGiFriendlyClassWriter;
> > @@ -75,7 +76,7 @@ final class InterfaceCombiningClassAdapt
> >        i++;
> >      }
> >
> > -    adapter.visit(V1_6, ACC_PUBLIC | ACC_SYNTHETIC, className, null,
> > +    adapter.visit(ProxyUtils.getWeavingJavaVersion(), ACC_PUBLIC |
> ACC_SYNTHETIC, className, null,
> >          (superclass == null) ?
> AbstractWovenProxyAdapter.OBJECT_TYPE.getInternalName() :
> >            Type.getInternalName(superclass), interfaceNames);
> >    }
> >
> >
>
>



-- 
Thanks
Emily
=================
Emily Jiang
[email protected]

Reply via email to