Skip to content

Commit

Permalink
supplemental: refactor FinalClassCheck to ease update for checkstyle#…
Browse files Browse the repository at this point in the history
  • Loading branch information
pbludov committed Dec 21, 2021
1 parent 2e46a39 commit ed31153
Showing 1 changed file with 36 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,33 +153,17 @@ public void beginTree(DetailAST rootAST) {

@Override
public void visitToken(DetailAST ast) {
final DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS);

switch (ast.getType()) {
case TokenTypes.PACKAGE_DEF:
packageName = extractQualifiedName(ast.getFirstChild().getNextSibling());
break;

case TokenTypes.CLASS_DEF:
registerNestedSubclassToOuterSuperClasses(ast);

final boolean isFinal = modifiers.findFirstToken(TokenTypes.FINAL) != null;
final boolean isAbstract = modifiers.findFirstToken(TokenTypes.ABSTRACT) != null;

final String qualifiedClassName = getQualifiedClassName(ast);
classes.push(new ClassDesc(qualifiedClassName, isFinal, isAbstract));
visitClass(ast);
break;

case TokenTypes.CTOR_DEF:
if (!ScopeUtil.isInEnumBlock(ast) && !ScopeUtil.isInRecordBlock(ast)) {
final ClassDesc desc = classes.peek();
if (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) == null) {
desc.registerNonPrivateCtor();
}
else {
desc.registerPrivateCtor();
}
}
visitCtor(ast);
break;

case TokenTypes.LITERAL_NEW:
Expand All @@ -198,6 +182,40 @@ public void visitToken(DetailAST ast) {
}
}

/**
* Called to process a type definition.
*
* @param ast the token to process
*/
private void visitClass(DetailAST ast) {
final DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS);
registerNestedSubclassToOuterSuperClasses(ast);

final boolean isFinal = modifiers.findFirstToken(TokenTypes.FINAL) != null;
final boolean isAbstract = modifiers.findFirstToken(TokenTypes.ABSTRACT) != null;

final String qualifiedClassName = getQualifiedClassName(ast);
classes.push(new ClassDesc(qualifiedClassName, isFinal, isAbstract));
}

/**
* Called to process a constructor definition.
*
* @param ast the token to process
*/
private void visitCtor(DetailAST ast) {
if (!ScopeUtil.isInEnumBlock(ast) && !ScopeUtil.isInRecordBlock(ast)) {
final DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS);
final ClassDesc desc = classes.peek();
if (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) == null) {
desc.registerNonPrivateCtor();
}
else {
desc.registerPrivateCtor();
}
}
}

@Override
public void leaveToken(DetailAST ast) {
if (ast.getType() == TokenTypes.CLASS_DEF) {
Expand Down

0 comments on commit ed31153

Please sign in to comment.