From caa820ed62133f47bacba06ea931bf5d7c43dcd6 Mon Sep 17 00:00:00 2001 From: Roberto Araujo Date: Thu, 19 Oct 2017 19:51:22 -0200 Subject: Upgrade ASM to 6.0 (#600) --- .../src/org/jacoco/core/analysis/Analyzer.java | 7 +- .../src/org/jacoco/core/instr/Instrumenter.java | 13 +-- .../jacoco/core/internal/ContentTypeDetector.java | 2 +- .../src/org/jacoco/core/internal/InputStreams.java | 49 +++++++++ .../src/org/jacoco/core/internal/Java9Support.java | 112 --------------------- .../jacoco/core/internal/instr/InstrSupport.java | 2 +- .../core/runtime/ModifiedSystemClassRuntime.java | 3 +- 7 files changed, 58 insertions(+), 130 deletions(-) create mode 100644 org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java delete mode 100644 org.jacoco.core/src/org/jacoco/core/internal/Java9Support.java (limited to 'org.jacoco.core/src') diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java index 06c7ec2b..32384b86 100644 --- a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java +++ b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java @@ -23,7 +23,7 @@ import java.util.zip.ZipInputStream; import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; import org.jacoco.core.internal.ContentTypeDetector; -import org.jacoco.core.internal.Java9Support; +import org.jacoco.core.internal.InputStreams; import org.jacoco.core.internal.Pack200Streams; import org.jacoco.core.internal.analysis.ClassAnalyzer; import org.jacoco.core.internal.analysis.ClassCoverageImpl; @@ -124,8 +124,7 @@ public class Analyzer { public void analyzeClass(final byte[] buffer, final String location) throws IOException { try { - analyzeClass( - new ClassReader(Java9Support.downgradeIfRequired(buffer))); + analyzeClass(new ClassReader(buffer)); } catch (final RuntimeException cause) { throw analyzerError(location, cause); } @@ -146,7 +145,7 @@ public class Analyzer { throws IOException { final byte[] buffer; try { - buffer = Java9Support.readFully(input); + buffer = InputStreams.readFully(input); } catch (final IOException e) { throw analyzerError(location, e); } diff --git a/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java b/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java index 179861ca..5129f62a 100644 --- a/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java +++ b/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java @@ -22,7 +22,7 @@ import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import org.jacoco.core.internal.ContentTypeDetector; -import org.jacoco.core.internal.Java9Support; +import org.jacoco.core.internal.InputStreams; import org.jacoco.core.internal.Pack200Streams; import org.jacoco.core.internal.flow.ClassProbesAdapter; import org.jacoco.core.internal.instr.ClassInstrumenter; @@ -105,14 +105,7 @@ public class Instrumenter { public byte[] instrument(final byte[] buffer, final String name) throws IOException { try { - if (Java9Support.isPatchRequired(buffer)) { - final byte[] result = instrument( - new ClassReader(Java9Support.downgrade(buffer))); - Java9Support.upgrade(result); - return result; - } else { - return instrument(new ClassReader(buffer)); - } + return instrument(new ClassReader(buffer)); } catch (final RuntimeException e) { throw instrumentError(name, e); } @@ -135,7 +128,7 @@ public class Instrumenter { throws IOException { final byte[] bytes; try { - bytes = Java9Support.readFully(input); + bytes = InputStreams.readFully(input); } catch (final IOException e) { throw instrumentError(name, e); } diff --git a/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java b/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java index 2d7362b5..46992ad5 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java @@ -82,7 +82,7 @@ public class ContentTypeDetector { case Opcodes.V1_6: case Opcodes.V1_7: case Opcodes.V1_8: - case Java9Support.V1_9: + case Opcodes.V9: return CLASSFILE; } } diff --git a/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java b/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java new file mode 100644 index 00000000..463545df --- /dev/null +++ b/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Evgeny Mandrikov - initial API and implementation + * + *******************************************************************************/ +package org.jacoco.core.internal; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Utilities for {@link InputStream}s. + */ +public final class InputStreams { + + private InputStreams() { + } + + /** + * Reads all bytes from an input stream into a byte array. The provided + * {@link InputStream} is not closed by this method. + * + * @param is + * the input stream to read from + * @return a byte array containing all the bytes from the stream + * @throws IOException + * if an I/O error occurs + */ + public static byte[] readFully(final InputStream is) throws IOException { + final byte[] buf = new byte[1024]; + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + while (true) { + final int r = is.read(buf); + if (r == -1) { + break; + } + out.write(buf, 0, r); + } + return out.toByteArray(); + } + +} diff --git a/org.jacoco.core/src/org/jacoco/core/internal/Java9Support.java b/org.jacoco.core/src/org/jacoco/core/internal/Java9Support.java deleted file mode 100644 index 70a921bd..00000000 --- a/org.jacoco.core/src/org/jacoco/core/internal/Java9Support.java +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Evgeny Mandrikov - initial API and implementation - * - *******************************************************************************/ -package org.jacoco.core.internal; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.objectweb.asm.Opcodes; - -/** - * Patching for Java 9 classes, so that ASM can read them. - */ -public final class Java9Support { - - /** - * Version of the Java 9 class file format. - */ - public static final int V1_9 = Opcodes.V1_8 + 1; - - private Java9Support() { - } - - /** - * Reads all bytes from an input stream into a byte array. - * - * @param is - * the input stream to read from - * @return a byte array containing all the bytes from the stream - * @throws IOException - * if an I/O error occurs - */ - public static byte[] readFully(final InputStream is) - throws IOException { - final byte[] buf = new byte[1024]; - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - while (true) { - int r = is.read(buf); - if (r == -1) { - break; - } - out.write(buf, 0, r); - } - return out.toByteArray(); - } - - private static void putShort(byte[] b, int index, int s) { - b[index] = (byte) (s >>> 8); - b[index + 1] = (byte) s; - } - - private static short readShort(byte[] b, int index) { - return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF)); - } - - /** - * Determines whether class definition contains {@link #V1_9} version. - * - * @param buffer - * definition of the class - * @return true if class definition contains Java 9 version - */ - public static boolean isPatchRequired(byte[] buffer) { - return readShort(buffer, 6) == V1_9; - } - - /** - * Returns new definition of class with version {@link Opcodes#V1_8}, - * if it has version {@link #V1_9}. - * - * @param buffer - * definition of the class - * @return new definition of the class - */ - public static byte[] downgradeIfRequired(byte[] buffer) { - return isPatchRequired(buffer) ? downgrade(buffer) : buffer; - } - - /** - * Replaces version in the definition of class on {@link Opcodes#V1_8}. - * - * @param b - * definition of the class - * @return new definition of the class - */ - public static byte[] downgrade(byte[] b) { - byte[] result = new byte[b.length]; - System.arraycopy(b, 0, result, 0, b.length); - putShort(result, 6, Opcodes.V1_8); - return result; - } - - /** - * Replaces version in the definition of class on {@link #V1_9}. - * - * @param b - * definition of the class - */ - public static void upgrade(byte[] b) { - putShort(b, 6, V1_9); - } - -} diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java index c38094fa..7499c97b 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java @@ -25,7 +25,7 @@ public final class InstrSupport { } /** ASM API version */ - public static final int ASM_API_VERSION = Opcodes.ASM5; + public static final int ASM_API_VERSION = Opcodes.ASM6; // === Data Field === diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java index e4ec31b9..dd2c1d57 100644 --- a/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java +++ b/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java @@ -19,7 +19,6 @@ import java.lang.instrument.Instrumentation; import java.lang.reflect.Field; import java.security.ProtectionDomain; -import org.jacoco.core.internal.Java9Support; import org.jacoco.core.internal.instr.InstrSupport; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; @@ -154,7 +153,7 @@ public class ModifiedSystemClassRuntime extends AbstractRuntime { */ public static byte[] instrument(final byte[] source, final String accessFieldName) { - final ClassReader reader = new ClassReader(Java9Support.downgradeIfRequired(source)); + final ClassReader reader = new ClassReader(source); final ClassWriter writer = new ClassWriter(reader, 0); reader.accept(new ClassVisitor(InstrSupport.ASM_API_VERSION, writer) { -- cgit v1.2.3