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