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);
>    }
> 
> 
                                          

Reply via email to