// Take into account the synthetic argument names
// This tracks JLS8, paragraph 8.8.9
boolean anonymousWithLocalSuper = declaringClass.isAnonymousType() && declaringClass.superclass().isLocalType();
boolean anonymousWithNestedSuper = declaringClass.isAnonymousType() && declaringClass.superclass().isNestedType();
boolean isImplicitlyDeclared = ((! declaringClass.isPrivate()) || declaringClass.isAnonymousType()) && !anonymousWithLocalSuper;
ReferenceBinding[] syntheticArgumentTypes = declaringClass.syntheticEnclosingInstanceTypes();
if (syntheticArgumentTypes != null) {
for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
// This behaviour tracks JLS 15.9.5.1
// This covers that the parameter ending up in a nested class must be mandated "on the way in", even if it
// isn't the first. The practical relevance of this is questionable, since the constructor call will be