summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Chang <vichang@google.com>2023-06-09 12:56:26 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-06-09 12:56:26 +0000
commit4ee844297fcb9443c0780747be0b782a8a58d29f (patch)
treea1a569767f442e842b70624189dcf18611a070da
parentee49a3fd0faa33d32248bfa3d2f29436f652b4da (diff)
parent9dbb2ba22751f017369fb200bfeeaf03626fbcd6 (diff)
downloadow2-asm-4ee844297fcb9443c0780747be0b782a8a58d29f.tar.gz
Import ASM 9.5 am: 09e8c429ce am: 8e71fe2ccd am: d0cf7f023e am: e3a486fb75 am: e5a92217fe am: 9dbb2ba227
Original change: https://android-review.googlesource.com/c/platform/external/ow2-asm/+/2617250 Change-Id: I66a69944f47af65fd1736768bf07d696946bebae Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--asm-test/src/main/resources/jdk3/ArtificialStructures.classbin771 -> 771 bytes
-rw-r--r--asm-test/src/resources/java/jdk3/DumpArtificialStructures.java4
-rw-r--r--asm-tree/src/main/java/org/objectweb/asm/tree/InvokeDynamicInsnNode.java4
-rw-r--r--asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java1
-rw-r--r--asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java6
-rw-r--r--asm-util/src/test/java/org/objectweb/asm/util/ASMifierTest.java5
-rw-r--r--asm-util/src/test/java/org/objectweb/asm/util/CheckMethodAdapterTest.java6
-rw-r--r--asm-util/src/test/resources/jdk3.ArtificialStructures.txt2
-rw-r--r--asm/src/main/java/org/objectweb/asm/ClassReader.java17
-rw-r--r--asm/src/main/java/org/objectweb/asm/Frame.java5
-rw-r--r--asm/src/main/java/org/objectweb/asm/Label.java14
-rw-r--r--asm/src/main/java/org/objectweb/asm/Opcodes.java1
-rw-r--r--asm/src/test/java/org/objectweb/asm/ConstantsTest.java1
-rw-r--r--benchmarks/src/jmh/java/org/objectweb/asm/benchmarks/Adapter.java7
-rw-r--r--build.gradle76
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--tools/checkstyle.xml2
18 files changed, 94 insertions, 61 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0cfedfd9..fa32f617 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: gradle:7.4.1-jdk11
+image: gradle:7.6-jdk11
variables:
# Set the location of the dependency cache to a local directory, so that it
diff --git a/asm-test/src/main/resources/jdk3/ArtificialStructures.class b/asm-test/src/main/resources/jdk3/ArtificialStructures.class
index 0ba4240b..68477215 100644
--- a/asm-test/src/main/resources/jdk3/ArtificialStructures.class
+++ b/asm-test/src/main/resources/jdk3/ArtificialStructures.class
Binary files differ
diff --git a/asm-test/src/resources/java/jdk3/DumpArtificialStructures.java b/asm-test/src/resources/java/jdk3/DumpArtificialStructures.java
index 3701472d..b316d1c0 100644
--- a/asm-test/src/resources/java/jdk3/DumpArtificialStructures.java
+++ b/asm-test/src/resources/java/jdk3/DumpArtificialStructures.java
@@ -47,7 +47,7 @@ import org.objectweb.asm.Opcodes;
* <li>non standard class, field, method and code attributes,
* <li>the nop and swap instructions,
* <li>some variants of the dup_x2 and dup2_x2 instructions,
- * <li>several line numbers per bytecode offset.
+ * <li>several line numbers per bytecode offset, and line numbers equal to 0.
* </ul>
*
* Ideally we should not use ASM to generate this class (which is later used to test ASM), but this
@@ -103,7 +103,7 @@ public class DumpArtificialStructures implements Opcodes {
Label endIfLabel = new Label();
methodVisitor.visitJumpInsn(GOTO, endIfLabel);
methodVisitor.visitLabel(elseLabel);
- methodVisitor.visitLineNumber(1, elseLabel);
+ methodVisitor.visitLineNumber(0, elseLabel);
methodVisitor.visitLineNumber(3, elseLabel);
methodVisitor.visitLdcInsn("0");
methodVisitor.visitLabel(endIfLabel);
diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/InvokeDynamicInsnNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
index 8bb87124..8c0a1c63 100644
--- a/asm-tree/src/main/java/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
+++ b/asm-tree/src/main/java/org/objectweb/asm/tree/InvokeDynamicInsnNode.java
@@ -66,12 +66,12 @@ public class InvokeDynamicInsnNode extends AbstractInsnNode {
final String name,
final String descriptor,
final Handle bootstrapMethodHandle,
- final Object... bootstrapMethodArguments) { // NOPMD(ArrayIsStoredDirectly): public field.
+ final Object... bootstrapMethodArguments) {
super(Opcodes.INVOKEDYNAMIC);
this.name = name;
this.desc = descriptor;
this.bsm = bootstrapMethodHandle;
- this.bsmArgs = bootstrapMethodArguments;
+ this.bsmArgs = bootstrapMethodArguments; // NOPMD(ArrayIsStoredDirectly): public field.
}
@Override
diff --git a/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java b/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java
index 28f960c0..82e2b15e 100644
--- a/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java
+++ b/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java
@@ -110,6 +110,7 @@ public class ASMifier extends Printer {
classVersions.put(Opcodes.V18, "V18");
classVersions.put(Opcodes.V19, "V19");
classVersions.put(Opcodes.V20, "V20");
+ classVersions.put(Opcodes.V21, "V21");
CLASS_VERSIONS = Collections.unmodifiableMap(classVersions);
}
diff --git a/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java b/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java
index b6759073..339af5d1 100644
--- a/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java
+++ b/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java
@@ -1101,9 +1101,13 @@ public class CheckMethodAdapter extends MethodVisitor {
* @param method the expected visit method.
*/
private static void checkOpcodeMethod(final int opcode, final Method method) {
- if (opcode < Opcodes.NOP || opcode > Opcodes.IFNONNULL || OPCODE_METHODS[opcode] != method) {
+ if (opcode < Opcodes.NOP || opcode > Opcodes.IFNONNULL) {
throw new IllegalArgumentException("Invalid opcode: " + opcode);
}
+ if (OPCODE_METHODS[opcode] != method) {
+ throw new IllegalArgumentException(
+ "Invalid combination of opcode and method: " + opcode + ", " + method);
+ }
}
/**
diff --git a/asm-util/src/test/java/org/objectweb/asm/util/ASMifierTest.java b/asm-util/src/test/java/org/objectweb/asm/util/ASMifierTest.java
index e616042f..252a7b59 100644
--- a/asm-util/src/test/java/org/objectweb/asm/util/ASMifierTest.java
+++ b/asm-util/src/test/java/org/objectweb/asm/util/ASMifierTest.java
@@ -40,6 +40,7 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
import java.net.URLClassLoader;
+import java.util.ArrayList;
import org.codehaus.commons.compiler.CompileException;
import org.codehaus.janino.ClassLoaderIClassLoader;
import org.codehaus.janino.IClassLoader;
@@ -108,10 +109,12 @@ class ASMifierTest extends AsmTest {
private static byte[] compile(final String name, final String source) throws IOException {
Parser parser = new Parser(new Scanner(name, new StringReader(source)));
+ ArrayList<org.codehaus.janino.util.ClassFile> generatedClassFiles = new ArrayList<>();
try {
UnitCompiler unitCompiler =
new UnitCompiler(parser.parseAbstractCompilationUnit(), ICLASS_LOADER);
- return unitCompiler.compileUnit(true, true, true)[0].toByteArray();
+ unitCompiler.compileUnit(true, true, true, generatedClassFiles);
+ return generatedClassFiles.get(0).toByteArray();
} catch (CompileException e) {
throw new AssertionError(source, e);
}
diff --git a/asm-util/src/test/java/org/objectweb/asm/util/CheckMethodAdapterTest.java b/asm-util/src/test/java/org/objectweb/asm/util/CheckMethodAdapterTest.java
index 6652d29b..817d3d65 100644
--- a/asm-util/src/test/java/org/objectweb/asm/util/CheckMethodAdapterTest.java
+++ b/asm-util/src/test/java/org/objectweb/asm/util/CheckMethodAdapterTest.java
@@ -434,7 +434,8 @@ class CheckMethodAdapterTest extends AsmTest implements Opcodes {
Executable visitMethodInsn = () -> checkMethodAdapter.visitMethodInsn(42, "o", "m", "()V");
Exception exception = assertThrows(IllegalArgumentException.class, visitMethodInsn);
- assertEquals("Invalid opcode: 42", exception.getMessage());
+ assertEquals(
+ "Invalid combination of opcode and method: 42, VISIT_METHOD_INSN", exception.getMessage());
}
@Test
@@ -445,7 +446,8 @@ class CheckMethodAdapterTest extends AsmTest implements Opcodes {
() -> checkMethodAdapter.visitMethodInsn(42, "o", "m", "()V", false);
Exception exception = assertThrows(IllegalArgumentException.class, visitMethodInsn);
- assertEquals("Invalid opcode: 42", exception.getMessage());
+ assertEquals(
+ "Invalid combination of opcode and method: 42, VISIT_METHOD_INSN", exception.getMessage());
}
@Test
diff --git a/asm-util/src/test/resources/jdk3.ArtificialStructures.txt b/asm-util/src/test/resources/jdk3.ArtificialStructures.txt
index ae5c1aa9..2f31e255 100644
--- a/asm-util/src/test/resources/jdk3.ArtificialStructures.txt
+++ b/asm-util/src/test/resources/jdk3.ArtificialStructures.txt
@@ -31,7 +31,7 @@ public class jdk3/ArtificialStructures {
LDC "1"
GOTO L1
L0
- LINENUMBER 1 L0
+ LINENUMBER 0 L0
LINENUMBER 3 L0
FRAME FULL [U I] [U]
LDC "0"
diff --git a/asm/src/main/java/org/objectweb/asm/ClassReader.java b/asm/src/main/java/org/objectweb/asm/ClassReader.java
index 7f0e4e72..2cfef457 100644
--- a/asm/src/main/java/org/objectweb/asm/ClassReader.java
+++ b/asm/src/main/java/org/objectweb/asm/ClassReader.java
@@ -194,7 +194,7 @@ public class ClassReader {
this.b = classFileBuffer;
// Check the class' major_version. This field is after the magic and minor_version fields, which
// use 4 and 2 bytes respectively.
- if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V20) {
+ if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V21) {
throw new IllegalArgumentException(
"Unsupported class file major version " + readShort(classFileOffset + 6));
}
@@ -2050,6 +2050,7 @@ public class ClassReader {
currentOffset = bytecodeStartOffset;
while (currentOffset < bytecodeEndOffset) {
final int currentBytecodeOffset = currentOffset - bytecodeStartOffset;
+ readBytecodeInstructionOffset(currentBytecodeOffset);
// Visit the label and the line number(s) for this bytecode offset, if any.
Label currentLabel = labels[currentBytecodeOffset];
@@ -2666,6 +2667,20 @@ public class ClassReader {
}
/**
+ * Handles the bytecode offset of the next instruction to be visited in {@link
+ * #accept(ClassVisitor,int)}. This method is called just before the instruction and before its
+ * associated label and stack map frame, if any. The default implementation of this method does
+ * nothing. Subclasses can override this method to store the argument in a mutable field, for
+ * instance, so that {@link MethodVisitor} instances can get the bytecode offset of each visited
+ * instruction (if so, the usual concurrency issues related to mutable data should be addressed).
+ *
+ * @param bytecodeOffset the bytecode offset of the next instruction to be visited.
+ */
+ protected void readBytecodeInstructionOffset(final int bytecodeOffset) {
+ // Do nothing by default.
+ }
+
+ /**
* Returns the label corresponding to the given bytecode offset. The default implementation of
* this method creates a label for the given offset if it has not been already created.
*
diff --git a/asm/src/main/java/org/objectweb/asm/Frame.java b/asm/src/main/java/org/objectweb/asm/Frame.java
index 07f256e5..89195006 100644
--- a/asm/src/main/java/org/objectweb/asm/Frame.java
+++ b/asm/src/main/java/org/objectweb/asm/Frame.java
@@ -367,11 +367,12 @@ class Frame {
typeValue = REFERENCE_KIND | symbolTable.addType(internalName);
break;
default:
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException(
+ "Invalid descriptor fragment: " + buffer.substring(elementDescriptorOffset));
}
return ((elementDescriptorOffset - offset) << DIM_SHIFT) | typeValue;
default:
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("Invalid descriptor: " + buffer.substring(offset));
}
}
diff --git a/asm/src/main/java/org/objectweb/asm/Label.java b/asm/src/main/java/org/objectweb/asm/Label.java
index 926f719e..4bcf7c56 100644
--- a/asm/src/main/java/org/objectweb/asm/Label.java
+++ b/asm/src/main/java/org/objectweb/asm/Label.java
@@ -81,6 +81,9 @@ public class Label {
/** A flag indicating that the basic block corresponding to a label is the end of a subroutine. */
static final int FLAG_SUBROUTINE_END = 64;
+ /** A flag indicating that this label has at least one associated line number. */
+ static final int FLAG_LINE_NUMBER = 128;
+
/**
* The number of elements to add to the {@link #otherLineNumbers} array when it needs to be
* resized to store a new source line number.
@@ -145,9 +148,9 @@ public class Label {
short flags;
/**
- * The source line number corresponding to this label, or 0. If there are several source line
- * numbers corresponding to this label, the first one is stored in this field, and the remaining
- * ones are stored in {@link #otherLineNumbers}.
+ * The source line number corresponding to this label, if {@link #FLAG_LINE_NUMBER} is set. If
+ * there are several source line numbers corresponding to this label, the first one is stored in
+ * this field, and the remaining ones are stored in {@link #otherLineNumbers}.
*/
private short lineNumber;
@@ -332,7 +335,8 @@ public class Label {
* @param lineNumber a source line number (which should be strictly positive).
*/
final void addLineNumber(final int lineNumber) {
- if (this.lineNumber == 0) {
+ if ((flags & FLAG_LINE_NUMBER) == 0) {
+ flags |= FLAG_LINE_NUMBER;
this.lineNumber = (short) lineNumber;
} else {
if (otherLineNumbers == null) {
@@ -356,7 +360,7 @@ public class Label {
*/
final void accept(final MethodVisitor methodVisitor, final boolean visitLineNumbers) {
methodVisitor.visitLabel(this);
- if (visitLineNumbers && lineNumber != 0) {
+ if (visitLineNumbers && (flags & FLAG_LINE_NUMBER) != 0) {
methodVisitor.visitLineNumber(lineNumber & 0xFFFF, this);
if (otherLineNumbers != null) {
for (int i = 1; i <= otherLineNumbers[0]; ++i) {
diff --git a/asm/src/main/java/org/objectweb/asm/Opcodes.java b/asm/src/main/java/org/objectweb/asm/Opcodes.java
index 4a85a445..7202784f 100644
--- a/asm/src/main/java/org/objectweb/asm/Opcodes.java
+++ b/asm/src/main/java/org/objectweb/asm/Opcodes.java
@@ -286,6 +286,7 @@ public interface Opcodes {
int V18 = 0 << 16 | 62;
int V19 = 0 << 16 | 63;
int V20 = 0 << 16 | 64;
+ int V21 = 0 << 16 | 65;
/**
* Version flag indicating that the class is using 'preview' features.
diff --git a/asm/src/test/java/org/objectweb/asm/ConstantsTest.java b/asm/src/test/java/org/objectweb/asm/ConstantsTest.java
index f2ca92a2..54955c54 100644
--- a/asm/src/test/java/org/objectweb/asm/ConstantsTest.java
+++ b/asm/src/test/java/org/objectweb/asm/ConstantsTest.java
@@ -253,6 +253,7 @@ class ConstantsTest {
case "V18":
case "V19":
case "V20":
+ case "V21":
return ConstantType.CLASS_VERSION;
case "ACC_PUBLIC":
case "ACC_PRIVATE":
diff --git a/benchmarks/src/jmh/java/org/objectweb/asm/benchmarks/Adapter.java b/benchmarks/src/jmh/java/org/objectweb/asm/benchmarks/Adapter.java
index 6b72491c..8a478027 100644
--- a/benchmarks/src/jmh/java/org/objectweb/asm/benchmarks/Adapter.java
+++ b/benchmarks/src/jmh/java/org/objectweb/asm/benchmarks/Adapter.java
@@ -134,14 +134,11 @@ public abstract class Adapter {
* @param interfaces the internal names of the class's interfaces
*/
public ClassInfo(
- final int access,
- final String name,
- final String superClass,
- final String[] interfaces) { // NOPMD(ArrayIsStoredDirectly): non public API.
+ final int access, final String name, final String superClass, final String[] interfaces) {
this.access = access;
this.name = name;
this.superClass = superClass;
- this.interfaces = interfaces;
+ this.interfaces = interfaces; // NOPMD(ArrayIsStoredDirectly): non public API.
}
}
}
diff --git a/build.gradle b/build.gradle
index 0e67ce83..ec26c104 100644
--- a/build.gradle
+++ b/build.gradle
@@ -31,10 +31,9 @@ buildscript {
dependencies { classpath 'org.netbeans.tools:sigtest-maven-plugin:1.5' }
}
-plugins { id 'biz.aQute.bnd.builder' version '6.2.0' apply false }
plugins { id 'com.github.sherter.google-java-format' version '0.9' apply false }
-plugins { id 'me.champeau.jmh' version '0.6.6' apply false }
-plugins { id 'org.sonarqube' version '3.3' apply false }
+plugins { id 'me.champeau.jmh' version '0.6.8' apply false }
+plugins { id 'org.sonarqube' version '3.5.0.2730' apply false }
description = 'ASM, a very small and fast Java bytecode manipulation framework'
@@ -61,8 +60,12 @@ subprojects {
ext.provides = [] // The provided java packages, e.g. ['org.objectweb.asm']
ext.requires = [] // The required Gradle projects, e.g. [':asm-test']
ext.transitiveRequires = { ->
- return requires.collect{p ->
- project(p).transitiveRequires().plus(project(p).provides[0])}.flatten()
+ return requires.collect{project(it)}
+ .collect{it.transitiveRequires().plus(it.provides[0])}.flatten() as Set
+ }
+ ext.transitiveImports = { ->
+ return requires.collect{project(it)}
+ .collect{it.transitiveImports().plus(it.provides)}.flatten() as Set
}
ext.depends = [] // The external dependencies, e.g. ['junit:junit:4.12']
// Some external dependencies (such as Jacoco) depend transitively on ASM, and
@@ -96,8 +99,8 @@ project(':asm-commons') {
project(':asm-test') {
description = "Utilities for testing ${parent.description}"
provides = ['org.objectweb.asm.test']
- depends = ['org.junit.jupiter:junit-jupiter-api:5.8.2',
- 'org.junit.jupiter:junit-jupiter-params:5.8.2']
+ depends = ['org.junit.jupiter:junit-jupiter-api:5.9.1',
+ 'org.junit.jupiter:junit-jupiter-params:5.9.1']
}
project(':asm-tree') {
@@ -110,7 +113,7 @@ project(':asm-util') {
description = "Utilities for ${parent.description}"
provides = ['org.objectweb.asm.util']
requires = [':asm', ':asm-tree', ':asm-analysis']
- dependencies { testImplementation 'org.codehaus.janino:janino:3.1.6' }
+ dependencies { testImplementation 'org.codehaus.janino:janino:3.1.9' }
}
// Use "gradle benchmarks:jmh [-PjmhInclude='<regex>']" to run the benchmarks.
@@ -136,7 +139,7 @@ project(':benchmarks') {
dependencies.add("asm${version}", "org.ow2.asm:asm:${version}@jar")
dependencies.add("asm${version}", "org.ow2.asm:asm-tree:${version}@jar")
task "asm${version}"(type: Copy) {
- from configurations."asm${version}".collect { zipTree(it) }
+ from configurations."asm${version}".collect{zipTree(it)}
into "${buildDir}/asm${version}"
duplicatesStrategy = DuplicatesStrategy.INCLUDE // module-info.class
}
@@ -145,7 +148,7 @@ project(':benchmarks') {
configurations.create('input-classes-java8')
dependencies.add('input-classes-java8', 'io.vavr:vavr:0.10.0@jar')
task copyInputClasses(type: Copy) {
- from configurations.'input-classes-java8'.collect { zipTree(it) }
+ from configurations.'input-classes-java8'.collect{zipTree(it)}
into "${buildDir}/input-classes-java8"
}
classes.dependsOn copyInputClasses
@@ -154,7 +157,7 @@ project(':benchmarks') {
resultFormat = 'CSV'
profilers = ['org.objectweb.asm.benchmarks.MemoryProfiler']
if (rootProject.hasProperty('jmhInclude')) {
- include = [jmhInclude]
+ includes = [jmhInclude]
}
}
}
@@ -197,9 +200,9 @@ subprojects {
dependencies {
requires.each { projectName -> api project(projectName) }
depends.each { artifactName -> api artifactName }
- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2',
- 'org.junit.jupiter:junit-jupiter-params:5.8.2'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1',
+ 'org.junit.jupiter:junit-jupiter-params:5.9.1'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.1'
testImplementation project(':asm-test')
}
@@ -215,7 +218,7 @@ subprojects {
// Configure the projects with a non-empty 'provides' property. They must be
// checked for code coverage and backward compatibility, retrofited to Java 1.5,
// and packaged with generated module-info classes.
-configure(subprojects.findAll { it.provides }) {
+configure(subprojects.findAll{it.provides}) {
// Code coverage configuration.
jacoco.toolVersion = '0.8.8'
jacocoTestReport {
@@ -238,8 +241,9 @@ configure(subprojects.findAll { it.provides }) {
def retrofitter =
loader.loadClass('org.objectweb.asm.tools.Retrofitter').newInstance()
def classes = sourceSets.main.output.classesDirs.singleFile
+ def requires = transitiveRequires() as List
retrofitter.retrofit(classes, "${version}")
- retrofitter.verify(classes, "${version}", provides, transitiveRequires())
+ retrofitter.verify(classes, "${version}", provides, requires)
}
}
@@ -281,31 +285,31 @@ configure(subprojects.findAll { it.provides }) {
}
}
- // Apply the biz.aQute.bnd plugin to package the project as an OSGi bundle.
- // Exclude the asm-test project (the DefaultPackage class prevents it from
- // being a proper bundle).
+ jar.manifest.attributes(
+ 'Implementation-Title': project.description,
+ 'Implementation-Version': "${version}")
+ // Package the project as an OSGi bundle. Exclude the asm-test project (the
+ // DefaultPackage class prevents it from being a proper bundle).
if (name != 'asm-test') {
- apply plugin: 'biz.aQute.bnd.builder'
+ def imports = transitiveImports()
jar.manifest.attributes(
- '-classpath': sourceSets.main.output.classesDirs.asPath,
- '-removeheaders': 'Bnd-LastModified,Build-By,Created-By,Include-Resource,\
- Require-Capability,Tool',
- 'Bundle-License': 'BSD-3-Clause;link=https://asm.ow2.io/LICENSE.txt',
'Bundle-DocURL': 'http://asm.ow2.org',
+ 'Bundle-License': 'BSD-3-Clause;link=https://asm.ow2.io/LICENSE.txt',
+ 'Bundle-ManifestVersion': 2,
+ 'Bundle-Name': provides[0],
'Bundle-RequiredExecutionEnvironment': 'J2SE-1.5',
'Bundle-SymbolicName': provides[0],
- 'Export-Package': provides.collect{"${it};version=${version}"}.join(','),
- 'Implementation-Title': project.description,
- 'Implementation-Version': "${version}",
- 'Module-Requires':
- requires
- .collect{"${project(it).provides[0]};transitive=true"}
- .join(',')
- )
- } else {
- jar.manifest.attributes(
- 'Implementation-Title': project.description,
- 'Implementation-Version': "${version}")
+ 'Bundle-Version': "${version}",
+ 'Export-Package':
+ provides.collect{"${it};version=\"${version}\""}.join(',') +
+ (imports ? ";uses:=\"${imports.join(',')}\"" : ""))
+ if (imports) {
+ jar.manifest.attributes(
+ 'Import-Package':
+ imports.collect{"${it};version=\"${version}\""}.join(','),
+ 'Module-Requires':
+ transitiveRequires().collect{"${it};transitive=true"}.join(','))
+ }
}
// Apply the SonarQube plugin to monitor the code quality of the project.
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 4462a0e4..565bc3a9 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
diff --git a/tools/checkstyle.xml b/tools/checkstyle.xml
index 2e7ed7cf..b2648ea5 100644
--- a/tools/checkstyle.xml
+++ b/tools/checkstyle.xml
@@ -84,7 +84,7 @@
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF" />
</module>
<module name="JavadocMethod">
- <property name="scope" value="public" />
+ <property name="accessModifiers" value="public" />
<property name="allowMissingParamTags" value="true" />
<property name="allowMissingReturnTag" value="true" />
<property name="allowedAnnotations"