/** * Check if a methodTree is overriden. * * @return true if overriden, null if it cannot be decided (method symbol not resolved or lack of bytecode for super types). */ @CheckForNull public Boolean isOverriding() { if (isStatic() || isPrivate()) { return false; } if (isAnnotatedOverride()) { return true; } if (symbol == null) { return null; } return symbol.isOverriden(); }
public MethodTreeImpl completeGenericMethodOrConstructorDeclaration(TypeParameterListTreeImpl typeParameters, MethodTreeImpl partial) { partial.prependChildren((AstNode) typeParameters); return partial.completeWithTypeParameters(typeParameters); }
public boolean isEqualsMethod() { boolean hasEqualsSignature = isNamed("equals") && returnsBoolean() && hasObjectParameter(); return isPublic() && !isStatic() && hasEqualsSignature; }
public boolean isMainMethod() { return isPublicStatic() && isNamed("main") && returnsVoid() && hasStringArrayParameter(); }
public boolean isHashCodeMethod() { boolean hasHashCodeSignature = isNamed("hashCode") && parameters.isEmpty() && returnsInt(); return isPublic() && !isStatic() && hasHashCodeSignature; }
public boolean isToStringMethod() { boolean hasToStringSignature = isNamed("toString") && parameters.isEmpty() && returnsString(); return isPublic() && !isStatic() && hasToStringSignature; }
private boolean isNamed(String name) { return name.equals(simpleName().name()); }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } ClassTree classTree = (ClassTree) tree; for (Tree member : classTree.members()) { if (member.is(Tree.Kind.METHOD)) { MethodTreeImpl methodTree = (MethodTreeImpl) member; if (methodTree.isMainMethod()) { checkMainMethodArgsUsage(methodTree); } else if ("run".equals(methodTree.simpleName().name())) { checkArgs4J(methodTree.simpleName(), classTree); } } } }
private void checkMember(Tree member) { if (member.is(Kind.VARIABLE)) { VariableTree variableTree = (VariableTree) member; checkMemberModifier(variableTree.modifiers(), variableTree); } else if (member.is(Kind.METHOD)) { MethodTreeImpl methodTree = (MethodTreeImpl) member; if (BooleanUtils.isFalse(methodTree.isOverriding())) { checkMemberModifier(methodTree.modifiers(), methodTree.simpleName()); } } }
public JavaTree completeMember(ModifiersTreeImpl modifiers, JavaTree partial) { if (partial instanceof ClassTreeImpl) { ((ClassTreeImpl) partial).completeModifiers(modifiers); } else if (partial instanceof VariableDeclaratorListTreeImpl) { for (VariableTreeImpl variable : (VariableDeclaratorListTreeImpl) partial) { variable.completeModifiers(modifiers); } } else if (partial instanceof MethodTreeImpl) { ((MethodTreeImpl) partial).completeWithModifiers(modifiers); } else { throw new IllegalArgumentException(); } return partial; }
public MethodTreeImpl newAnnotationTypeMethod(InternalSyntaxToken openParenToken, InternalSyntaxToken closeParenToken, Optional<Tuple<InternalSyntaxToken, ExpressionTree>> defaultValue) { FormalParametersListTreeImpl parameters = new FormalParametersListTreeImpl(openParenToken, closeParenToken); InternalSyntaxToken defaultToken = null; ExpressionTree defaultExpression = null; if (defaultValue.isPresent()) { defaultToken = defaultValue.get().first(); defaultExpression = defaultValue.get().second(); } return new MethodTreeImpl(parameters, defaultToken, defaultExpression); }
private boolean hasStringArrayParameter() { return parameters.size() == 1 && isParameterStringArray(); }
public MethodTreeImpl completeAnnotationMethod(TypeTree type, InternalSyntaxToken identifierToken, MethodTreeImpl partial, InternalSyntaxToken semiToken) { partial.complete(type, new IdentifierTreeImpl(identifierToken), semiToken); return partial; }
public MethodTreeImpl completeGenericMethodOrConstructorDeclaration(TypeParameterListTreeImpl typeParameters, MethodTreeImpl partial) { return partial.completeWithTypeParameters(typeParameters); }
@Override public void visitNode(Tree tree) { MethodTreeImpl methodTree = (MethodTreeImpl) tree; if(isOverriding(methodTree) && !methodTree.isAnnotatedOverride()){ addIssue(tree, "Add the \"@Override\" annotation above this method signature"); } }
MethodTreeImpl result = new MethodTreeImpl( actualType, identifier, result.prependChildren(children);
public boolean isHashCodeMethod() { boolean hasHashCodeSignature = isNamed("hashCode") && parameters.isEmpty() && returnsInt(); return isPublic() && !isStatic() && hasHashCodeSignature; }
public boolean isToStringMethod() { boolean hasToStringSignature = isNamed("toString") && parameters.isEmpty() && returnsString(); return isPublic() && !isStatic() && hasToStringSignature; }
public boolean isMainMethod() { return isPublicStatic() && isNamed("main") && returnsVoid() && hasStringArrayParameter(); }