Import ASM 9.5 am: 09e8c429ce am: 8e71fe2ccd am: d0cf7f023e am: e3a486fb75 am: e5a92217fe

Original change: https://android-review.googlesource.com/c/platform/external/ow2-asm/+/2617250

Change-Id: I7b50b68b3e33b3d29e6fdb2bb9ecdaa21c30a759
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0cfedfd..fa32f61 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 0ba4240..6847721 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 3701472..b316d1c 100644
--- a/asm-test/src/resources/java/jdk3/DumpArtificialStructures.java
+++ b/asm-test/src/resources/java/jdk3/DumpArtificialStructures.java
@@ -47,7 +47,7 @@
  *   <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 @@
     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 8bb8712..8c0a1c6 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 @@
       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 28f960c..82e2b15 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 @@
     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 b675907..339af5d 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 @@
    * @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 e616042..252a7b5 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.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 @@
 
   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 6652d29..817d3d6 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 @@
     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 @@
         () -> 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 ae5c1aa..2f31e25 100644
--- a/asm-util/src/test/resources/jdk3.ArtificialStructures.txt
+++ b/asm-util/src/test/resources/jdk3.ArtificialStructures.txt
@@ -31,7 +31,7 @@
     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 7f0e4e7..2cfef45 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 @@
     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 @@
     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 @@
   }
 
   /**
+   * 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 07f256e..8919500 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 @@
             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 926f719..4bcf7c5 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 @@
   /** 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 @@
   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 @@
    * @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 @@
    */
   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 4a85a44..7202784 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 @@
   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 f2ca92a..54955c5 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 @@
       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 6b72491..8a47802 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 @@
      * @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 0e67ce8..ec26c10 100644
--- a/build.gradle
+++ b/build.gradle
@@ -31,10 +31,9 @@
   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 @@
   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-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 @@
   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 @@
     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 @@
   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 @@
     resultFormat = 'CSV'
     profilers = ['org.objectweb.asm.benchmarks.MemoryProfiler']
     if (rootProject.hasProperty('jmhInclude')) {
-      include = [jmhInclude]
+      includes = [jmhInclude]
     }
   }
 }
@@ -197,9 +200,9 @@
   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 @@
 // 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 @@
       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 @@
     }
   }
 
-  // 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 4462a0e..565bc3a 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 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 2e7ed7c..b2648ea 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"