73
73
import static org .objectweb .asm .Opcodes .ACC_STATIC ;
74
74
import static org .objectweb .asm .Opcodes .ACC_STRICT ;
75
75
import static org .objectweb .asm .Opcodes .ACC_SYNCHRONIZED ;
76
+ import static org .objectweb .asm .Opcodes .ACC_SYNTHETIC ;
76
77
import static org .objectweb .asm .Opcodes .ACC_TRANSIENT ;
77
78
import static org .objectweb .asm .Opcodes .ACC_VOLATILE ;
78
79
/**
@@ -368,38 +369,39 @@ private static boolean isConstructor(MethodNode method) {
368
369
369
370
private void checkMethodsForOverridingFinal (ClassNode cn ) {
370
371
for (MethodNode method : cn .getMethods ()) {
372
+ if ((method .getModifiers () & ACC_SYNTHETIC ) != 0 ) continue ; // GROOVY-11579: bridge method
373
+
374
+ ClassNode sc = cn .getSuperClass ();
371
375
Parameter [] params = method .getParameters ();
372
- for (MethodNode superMethod : cn .getSuperClass ().getMethods (method .getName ())) {
373
- Parameter [] superParams = superMethod .getParameters ();
374
- if (!hasEqualParameterTypes (params , superParams )) continue ;
375
- if (!superMethod .isFinal ()) break ;
376
- addInvalidUseOfFinalError (method , params , superMethod .getDeclaringClass ());
377
- return ;
376
+ for (MethodNode superMethod : sc .getMethods (method .getName ())) {
377
+ if (superMethod .isFinal ()
378
+ && hasEqualParameterTypes (params , superMethod .getParameters ())) {
379
+ StringBuilder sb = new StringBuilder ();
380
+ sb .append ("You are not allowed to override the final method " );
381
+ sb .append (method .getName ());
382
+ appendParamsDescription (params , sb );
383
+ sb .append (" from " );
384
+ sb .append (getDescription (sc ));
385
+ sb .append ("." );
386
+
387
+ addError (sb .toString (), method .getLineNumber () > 0 ? method : cn );
388
+ }
378
389
}
379
390
}
380
391
}
381
392
382
- private void addInvalidUseOfFinalError (MethodNode method , Parameter [] parameters , ClassNode superCN ) {
383
- StringBuilder msg = new StringBuilder ();
384
- msg .append ("You are not allowed to override the final method " ).append (method .getName ());
385
- appendParamsDescription (parameters , msg );
386
- msg .append (" from " ).append (getDescription (superCN ));
387
- msg .append ("." );
388
- addError (msg .toString (), method );
389
- }
390
-
391
393
private void appendParamsDescription (Parameter [] parameters , StringBuilder msg ) {
392
- msg .append ("(" );
394
+ msg .append ('(' );
393
395
boolean needsComma = false ;
394
396
for (Parameter parameter : parameters ) {
395
397
if (needsComma ) {
396
- msg .append ("," );
398
+ msg .append (',' );
397
399
} else {
398
400
needsComma = true ;
399
401
}
400
402
msg .append (parameter .getType ());
401
403
}
402
- msg .append (")" );
404
+ msg .append (')' );
403
405
}
404
406
405
407
private void addWeakerAccessError (ClassNode cn , MethodNode method , Parameter [] parameters , MethodNode superMethod ) {
@@ -414,6 +416,7 @@ private void addWeakerAccessError(ClassNode cn, MethodNode method, Parameter[] p
414
416
msg .append (superMethod .getDeclaringClass ().getName ());
415
417
msg .append ("; attempting to assign weaker access privileges; was " );
416
418
msg .append (superMethod .isPublic () ? "public" : (superMethod .isProtected () ? "protected" : "package-private" ));
419
+
417
420
addError (msg .toString (), method );
418
421
}
419
422
0 commit comments