private int getTypeCount(ParameterizedQualifiedTypeReference typeReference) { TypeReference[][] typeArguments = typeReference.typeArguments; int value = 0; org.eclipse.jdt.internal.compiler.ast.Annotation[][] typeAnnotations = typeReference.annotations; int length = typeReference.tokens.length; for (int i = 0; i < length; ++i) { if (value != 0 || (typeArguments != null && typeArguments[i] != null) || (typeAnnotations != null && typeAnnotations[i] != null )) { value++; } } return value; }
private int nodeSourceStart(Binding field, ASTNode node, int index) { if (node instanceof FieldReference) { FieldReference fieldReference = (FieldReference) node; return (int) (fieldReference.nameSourcePosition >> 32); } else if (node instanceof QualifiedNameReference) { QualifiedNameReference ref = (QualifiedNameReference) node; if (ref.binding == field) { if (index == 0) { return (int) (ref.sourcePositions[ref.indexOfFirstFieldBinding-1] >> 32); } else { return (int) (ref.sourcePositions[index] >> 32); } } FieldBinding[] otherFields = ref.otherBindings; if (otherFields != null) { int offset = ref.indexOfFirstFieldBinding; if (index != 0) { for (int i = 0, length = otherFields.length; i < length; i++) { if ((otherFields[i] == field) && (i + offset == index)) { return (int) (ref.sourcePositions[i + offset] >> 32); } } } else { for (int i = 0, length = otherFields.length; i < length; i++) { if (otherFields[i] == field) { return (int) (ref.sourcePositions[i + offset] >> 32); } } } } } else if (node instanceof ParameterizedQualifiedTypeReference) { ParameterizedQualifiedTypeReference reference = (ParameterizedQualifiedTypeReference) node; return (int) (reference.sourcePositions[0]>>>32); } return node.sourceStart; }
private int getTypeArguments(ParameterizedQualifiedTypeReference typeReference) { TypeReference[][] typeArguments = typeReference.typeArguments; int value = 0; for (int i = 0, max = typeArguments.length; i < max; i++) { if ((typeArguments[i] != null) || (value != 0)) { value++; } } return value; }
/** * Returns the explicitly requested singular annotation on this node (field * or parameter), or null if there's no {@code @Singular} annotation on it. * * @param node The node (field or method param) to inspect for its name and potential {@code @Singular} annotation. */ private SingularData getSingularData(EclipseNode node, ASTNode source) { for (EclipseNode child : node.down()) { if (!annotationTypeMatches(Singular.class, child)) continue; char[] pluralName = node.getKind() == Kind.FIELD ? removePrefixFromField(node) : ((AbstractVariableDeclaration) node.get()).name; AnnotationValues<Singular> ann = createAnnotation(Singular.class, child); String explicitSingular = ann.getInstance().value(); if (explicitSingular.isEmpty()) { if (Boolean.FALSE.equals(node.getAst().readConfiguration(ConfigurationKeys.SINGULAR_AUTO))) { node.addError("The singular must be specified explicitly (e.g. @Singular(\"task\")) because auto singularization is disabled."); explicitSingular = new String(pluralName); } else { explicitSingular = autoSingularize(new String(pluralName)); if (explicitSingular == null) { node.addError("Can't singularize this name; please specify the singular explicitly (i.e. @Singular(\"sheep\"))"); explicitSingular = new String(pluralName); } } } char[] singularName = explicitSingular.toCharArray(); TypeReference type = ((AbstractVariableDeclaration) node.get()).type; TypeReference[] typeArgs = null; String typeName; if (type instanceof ParameterizedSingleTypeReference) { typeArgs = ((ParameterizedSingleTypeReference) type).typeArguments; typeName = new String(((ParameterizedSingleTypeReference) type).token); } else if (type instanceof ParameterizedQualifiedTypeReference) { TypeReference[][] tr = ((ParameterizedQualifiedTypeReference) type).typeArguments; if (tr != null) typeArgs = tr[tr.length - 1]; char[][] tokens = ((ParameterizedQualifiedTypeReference) type).tokens; StringBuilder sb = new StringBuilder(); for (int i = 0; i < tokens.length; i++) { if (i > 0) sb.append("."); sb.append(tokens[i]); } typeName = sb.toString(); } else { typeName = type.toString(); } String targetFqn = EclipseSingularsRecipes.get().toQualified(typeName); EclipseSingularizer singularizer = EclipseSingularsRecipes.get().getSingularizer(targetFqn); if (singularizer == null) { node.addError("Lombok does not know how to create the singular-form builder methods for type '" + typeName + "'; they won't be generated."); return null; } return new SingularData(child, singularName, pluralName, typeArgs == null ? Collections.<TypeReference>emptyList() : Arrays.asList(typeArgs), targetFqn, singularizer, source); } return null; }
@Override public boolean visit(ParameterizedQualifiedTypeReference node, BlockScope scope) { fixPositions(setGeneratedBy(node, source)); return super.visit(node, scope); }
@Override public boolean visit(ParameterizedQualifiedTypeReference node, ClassScope scope) { fixPositions(setGeneratedBy(node, source)); return super.visit(node, scope); }
/** * Returns the explicitly requested singular annotation on this node (field * or parameter), or null if there's no {@code @Singular} annotation on it. * * @param node The node (field or method param) to inspect for its name and potential {@code @Singular} annotation. */ private SingularData getSingularData(EclipseNode node, ASTNode source) { for (EclipseNode child : node.down()) { if (child.getKind() == Kind.ANNOTATION && annotationTypeMatches(Singular.class, child)) { char[] pluralName = node.getKind() == Kind.FIELD ? removePrefixFromField(node) : ((AbstractVariableDeclaration) node.get()).name; AnnotationValues<Singular> ann = createAnnotation(Singular.class, child); String explicitSingular = ann.getInstance().value(); if (explicitSingular.isEmpty()) { if (Boolean.FALSE.equals(node.getAst().readConfiguration(ConfigurationKeys.SINGULAR_AUTO))) { node.addError("The singular must be specified explicitly (e.g. @Singular(\"task\")) because auto singularization is disabled."); explicitSingular = new String(pluralName); } else { explicitSingular = autoSingularize(node.getName()); if (explicitSingular == null) { node.addError("Can't singularize this name; please specify the singular explicitly (i.e. @Singular(\"sheep\"))"); explicitSingular = new String(pluralName); } } } char[] singularName = explicitSingular.toCharArray(); TypeReference type = ((AbstractVariableDeclaration) node.get()).type; TypeReference[] typeArgs = null; String typeName; if (type instanceof ParameterizedSingleTypeReference) { typeArgs = ((ParameterizedSingleTypeReference) type).typeArguments; typeName = new String(((ParameterizedSingleTypeReference) type).token); } else if (type instanceof ParameterizedQualifiedTypeReference) { TypeReference[][] tr = ((ParameterizedQualifiedTypeReference) type).typeArguments; if (tr != null) typeArgs = tr[tr.length - 1]; char[][] tokens = ((ParameterizedQualifiedTypeReference) type).tokens; StringBuilder sb = new StringBuilder(); for (int i = 0; i < tokens.length; i++) { if (i > 0) sb.append("."); sb.append(tokens[i]); } typeName = sb.toString(); } else { typeName = type.toString(); } String targetFqn = EclipseSingularsRecipes.get().toQualified(typeName); EclipseSingularizer singularizer = EclipseSingularsRecipes.get().getSingularizer(targetFqn); if (singularizer == null) { node.addError("Lombok does not know how to create the singular-form builder methods for type '" + typeName + "'; they won't be generated."); return null; } return new SingularData(child, singularName, pluralName, typeArgs == null ? Collections.<TypeReference>emptyList() : Arrays.asList(typeArgs), targetFqn, singularizer, source); } } return null; }
public boolean visit( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference, BlockScope scope) { final int numberOfParens = (parameterizedQualifiedTypeReference.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT; if (numberOfParens > 0) { manageOpeningParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments; int length = typeArguments.length; for (int i = 0; i < length; i++) { if (parameterizedQualifiedTypeReference.annotations != null) { formatInlineAnnotations(parameterizedQualifiedTypeReference.annotations[i], false); } this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier); TypeReference[] typeArgument = typeArguments[i]; if (typeArgument != null) { int typeArgumentLength = typeArgument.length; if (typeArgumentLength > 0) { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); if (this.preferences.insert_space_after_opening_angle_bracket_in_parameterized_type_reference) { this.scribe.space(); } for (int j = 0; j < typeArgumentLength - 1; j++) { typeArgument[j].traverse(this, scope); this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_parameterized_type_reference); if (this.preferences.insert_space_after_comma_in_parameterized_type_reference) { this.scribe.space(); } } typeArgument[typeArgumentLength - 1].traverse(this, scope); if (isClosingGenericToken()) { this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS, this.preferences.insert_space_before_closing_angle_bracket_in_parameterized_type_reference); } } else { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS); } } if (i < length - 1) { this.scribe.printNextToken(TerminalTokens.TokenNameDOT); } } formatLeadingDimensions(parameterizedQualifiedTypeReference); if (numberOfParens > 0) { manageClosingParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } return false; }
public boolean visit( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference, ClassScope scope) { final int numberOfParens = (parameterizedQualifiedTypeReference.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT; if (numberOfParens > 0) { manageOpeningParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments; int length = typeArguments.length; for (int i = 0; i < length; i++) { if (parameterizedQualifiedTypeReference.annotations != null) { formatInlineAnnotations(parameterizedQualifiedTypeReference.annotations[i], false); } this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier); TypeReference[] typeArgument = typeArguments[i]; if (typeArgument != null) { int typeArgumentLength = typeArgument.length; if (typeArgumentLength > 0) { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); if (this.preferences.insert_space_after_opening_angle_bracket_in_parameterized_type_reference) { this.scribe.space(); } for (int j = 0; j < typeArgumentLength - 1; j++) { typeArgument[j].traverse(this, scope); this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_parameterized_type_reference); if (this.preferences.insert_space_after_comma_in_parameterized_type_reference) { this.scribe.space(); } } typeArgument[typeArgumentLength - 1].traverse(this, scope); if (isClosingGenericToken()) { this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS, this.preferences.insert_space_before_closing_angle_bracket_in_parameterized_type_reference); } } else { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS); } } if (i < length - 1) { this.scribe.printNextToken(TerminalTokens.TokenNameDOT); } } formatLeadingDimensions(parameterizedQualifiedTypeReference); if (numberOfParens > 0) { manageClosingParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } return false; }
public boolean visit( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference, BlockScope scope) { final int numberOfParens = (parameterizedQualifiedTypeReference.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT; if (numberOfParens > 0) { manageOpeningParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments; int length = typeArguments.length; for (int i = 0; i < length; i++) { this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier); TypeReference[] typeArgument = typeArguments[i]; if (typeArgument != null) { int typeArgumentLength = typeArgument.length; if (typeArgumentLength > 0) { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); if (this.preferences.insert_space_after_opening_angle_bracket_in_parameterized_type_reference) { this.scribe.space(); } for (int j = 0; j < typeArgumentLength - 1; j++) { typeArgument[j].traverse(this, scope); this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_parameterized_type_reference); if (this.preferences.insert_space_after_comma_in_parameterized_type_reference) { this.scribe.space(); } } typeArgument[typeArgumentLength - 1].traverse(this, scope); if (isClosingGenericToken()) { this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS, this.preferences.insert_space_before_closing_angle_bracket_in_parameterized_type_reference); } } else { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS); } } if (i < length - 1) { this.scribe.printNextToken(TerminalTokens.TokenNameDOT); } } int dimensions = getDimensions(); if (dimensions != 0 && dimensions <= parameterizedQualifiedTypeReference.dimensions()) { if (this.preferences.insert_space_before_opening_bracket_in_array_type_reference) { this.scribe.space(); } for (int i = 0; i < dimensions; i++) { this.scribe.printNextToken(TerminalTokens.TokenNameLBRACKET); if (this.preferences.insert_space_between_brackets_in_array_type_reference) { this.scribe.space(); } this.scribe.printNextToken(TerminalTokens.TokenNameRBRACKET); } } if (numberOfParens > 0) { manageClosingParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } return false; }
public boolean visit( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference, ClassScope scope) { final int numberOfParens = (parameterizedQualifiedTypeReference.bits & ASTNode.ParenthesizedMASK) >> ASTNode.ParenthesizedSHIFT; if (numberOfParens > 0) { manageOpeningParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } TypeReference[][] typeArguments = parameterizedQualifiedTypeReference.typeArguments; int length = typeArguments.length; for (int i = 0; i < length; i++) { this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier); TypeReference[] typeArgument = typeArguments[i]; if (typeArgument != null) { int typeArgumentLength = typeArgument.length; if (typeArgumentLength > 0) { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); if (this.preferences.insert_space_after_opening_angle_bracket_in_parameterized_type_reference) { this.scribe.space(); } for (int j = 0; j < typeArgumentLength - 1; j++) { typeArgument[j].traverse(this, scope); this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_parameterized_type_reference); if (this.preferences.insert_space_after_comma_in_parameterized_type_reference) { this.scribe.space(); } } typeArgument[typeArgumentLength - 1].traverse(this, scope); if (isClosingGenericToken()) { this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS, this.preferences.insert_space_before_closing_angle_bracket_in_parameterized_type_reference); } } else { this.scribe.printNextToken(TerminalTokens.TokenNameLESS, this.preferences.insert_space_before_opening_angle_bracket_in_parameterized_type_reference); this.scribe.printNextToken(CLOSING_GENERICS_EXPECTEDTOKENS); } } if (i < length - 1) { this.scribe.printNextToken(TerminalTokens.TokenNameDOT); } } int dimensions = getDimensions(); if (dimensions != 0 && dimensions <= parameterizedQualifiedTypeReference.dimensions()) { if (this.preferences.insert_space_before_opening_bracket_in_array_type_reference) { this.scribe.space(); } for (int i = 0; i < dimensions; i++) { this.scribe.printNextToken(TerminalTokens.TokenNameLBRACKET); if (this.preferences.insert_space_between_brackets_in_array_type_reference) { this.scribe.space(); } this.scribe.printNextToken(TerminalTokens.TokenNameRBRACKET); } } if (numberOfParens > 0) { manageClosingParenthesizedExpression(parameterizedQualifiedTypeReference, numberOfParens); } return false; }
@Override public boolean visit(ParameterizedQualifiedTypeReference node, BlockScope scope) { setGeneratedBy(node, source); applyOffsetQualifiedTypeReference(node); return super.visit(node, scope); }
@Override public boolean visit(ParameterizedQualifiedTypeReference node, ClassScope scope) { setGeneratedBy(node, source); applyOffsetQualifiedTypeReference(node); return super.visit(node, scope); }