/* * 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); public static final int JAVA_CLASS_VERSION = new BigDecimal(System.getProperty("java.class.version")).intValue(); private static int weavingJavaVersion = -1; // initialise an invalid number /** * Get the java version to be woven at. * @return */ public static int getWeavingJavaVersion() { if (weavingJavaVersion == -1 ) { //In order to avoid an inconsistent stack error the version of the woven byte code needs to match //the level of byte codes in the original class switch(JAVA_CLASS_VERSION) { case Opcodes.V1_9: LOGGER.debug("Weaving to Java 9"); weavingJavaVersion = Opcodes.V1_9; break; case Opcodes.V1_8: LOGGER.debug("Weaving to Java 8"); weavingJavaVersion = Opcodes.V1_8; break; case Opcodes.V1_7: LOGGER.debug("Weaving to Java 7"); weavingJavaVersion = Opcodes.V1_7; break; case Opcodes.V1_6: LOGGER.debug("Weaving to Java 6"); weavingJavaVersion = Opcodes.V1_6; break; case Opcodes.V1_5: LOGGER.debug("Weaving to Java 5"); weavingJavaVersion = Opcodes.V1_5; break; default: //aries should work with Java 5 or above - also will highlight when a higher level (and unsupported) level of Java is released throw new IllegalArgumentException("Invalid Java version " + JAVA_CLASS_VERSION); } } return weavingJavaVersion; } }