Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace inefficient Javadoc Regex #3813

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/core/lombok/core/handlers/HandlerUtil.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2013-2024 The Project Lombok Authors.
* Copyright (C) 2013-2025 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -906,7 +906,7 @@ public enum JavadocTag {
private Pattern pattern;

JavadocTag(String regexpFragment) {
pattern = Pattern.compile("\\s?^[ \\t]*\\**[ \\t]*" + regexpFragment + "(\\S|\\s)*?(?=(\\s^\\s*\\**\\s*@|\\Z))", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
pattern = Pattern.compile("\\s?^[ \\t]*\\**[ \\t]*" + regexpFragment + ".*?(?=(\\s^\\s*\\**\\s*@|\\Z))", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
}
}

Expand Down Expand Up @@ -978,7 +978,7 @@ public static String addJavadocLine(String in, String line) {

public static String getParamJavadoc(String methodComment, String param) {
if (methodComment == null || methodComment.isEmpty()) return methodComment;
Pattern pattern = Pattern.compile("@param " + param + " (\\S|\\s)+?(?=^ ?@|\\z)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
Pattern pattern = Pattern.compile("@param " + param + " .+?(?=^ ?@|\\z)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher matcher = pattern.matcher(methodComment);
if (matcher.find()) {
return matcher.group();
Expand Down
6 changes: 3 additions & 3 deletions src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2024 The Project Lombok Authors.
* Copyright (C) 2009-2025 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -2799,8 +2799,8 @@ public static Annotation[][] getRecordFieldAnnotations(TypeDeclaration typeDecla
return annotations;
}

private static final Pattern JAVADOC_PATTERN = Pattern.compile("^\\s*\\/\\*\\*((?:\\S|\\s)*?)\\*\\/", Pattern.MULTILINE);
private static final Pattern LEADING_ASTERISKS_PATTERN = Pattern.compile("(?m)^\\s*\\* ?");
private static final Pattern JAVADOC_PATTERN = Pattern.compile("^\\s*\\/\\*\\*(.*?)\\*\\/", Pattern.MULTILINE | Pattern.DOTALL);
private static final Pattern LEADING_ASTERISKS_PATTERN = Pattern.compile("^\\s*\\* ?", Pattern.MULTILINE);

public static String getDocComment(EclipseNode eclipseNode) {
if (eclipseNode.getAst().getSource() == null) return null;
Expand Down
204 changes: 204 additions & 0 deletions test/transform/resource/after-delombok/GetterSetterJavadoc.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,3 +163,207 @@ public GetterSetterJavadoc5 fieldName(final int fieldName) {
return this;
}
}
class GetterSetterJavadocLong {
/**
* This field represents the unique identifier for a user in the system. It is used
* throughout the application to uniquely identify and retrieve user-related data.
* The ID is typically generated by the database and is guaranteed to be unique
* within the context of the system.
*
* <p>The ID is an integral part of various operations, including but not limited to:
* <ul>
* <li>Authenticating users during login processes.</li>
* <li>Associating user-specific preferences and settings.</li>
* <li>Tracking user activity and logs for auditing purposes.</li>
* <li>Facilitating relationships between users and other entities such as orders,
* messages, or roles within the system.</li>
* </ul>
*
* <p>Key characteristics of the {@code userId} field:
* <ul>
* <li><strong>Immutability:</strong> Once assigned, the ID must not be modified to
* ensure data integrity.</li>
* <li><strong>Security:</strong> Access to this field should be controlled to prevent
* unauthorized modifications or data leakage.</li>
* <li><strong>Uniqueness:</strong> The ID must be unique within the system. For
* distributed systems, consider using GUIDs or UUIDs to avoid collisions.</li>
* </ul>
*
* <p>Example usage:
* <pre>
* User user = userService.getUserById(userId);
* if (user != null) {
* System.out.println("User found: " + user.getName());
* } else {
* System.out.println("User not found.");
* }
* </pre>
*
* <p>Developers should ensure that the ID complies with constraints imposed by the
* database schema, such as length and format restrictions. Furthermore, it is
* recommended to validate the ID before persisting or using it in critical operations.
*
* <p>For methods or constructors that accept the {@code userId} as a parameter, the
* following guidelines should be followed:
* <ul>
* <li>Validate the format of the ID to ensure it adheres to system requirements.</li>
* <li>Handle null or empty values gracefully, providing appropriate error messages
* or default behavior where necessary.</li>
* </ul>
*/
private String userId;
@java.lang.SuppressWarnings("all")
@lombok.Generated
public GetterSetterJavadocLong() {
}
/**
* This field represents the unique identifier for a user in the system. It is used
* throughout the application to uniquely identify and retrieve user-related data.
* The ID is typically generated by the database and is guaranteed to be unique
* within the context of the system.
*
* <p>The ID is an integral part of various operations, including but not limited to:
* <ul>
* <li>Authenticating users during login processes.</li>
* <li>Associating user-specific preferences and settings.</li>
* <li>Tracking user activity and logs for auditing purposes.</li>
* <li>Facilitating relationships between users and other entities such as orders,
* messages, or roles within the system.</li>
* </ul>
*
* <p>Key characteristics of the {@code userId} field:
* <ul>
* <li><strong>Immutability:</strong> Once assigned, the ID must not be modified to
* ensure data integrity.</li>
* <li><strong>Security:</strong> Access to this field should be controlled to prevent
* unauthorized modifications or data leakage.</li>
* <li><strong>Uniqueness:</strong> The ID must be unique within the system. For
* distributed systems, consider using GUIDs or UUIDs to avoid collisions.</li>
* </ul>
*
* <p>Example usage:
* <pre>
* User user = userService.getUserById(userId);
* if (user != null) {
* System.out.println("User found: " + user.getName());
* } else {
* System.out.println("User not found.");
* }
* </pre>
*
* <p>Developers should ensure that the ID complies with constraints imposed by the
* database schema, such as length and format restrictions. Furthermore, it is
* recommended to validate the ID before persisting or using it in critical operations.
*
* <p>For methods or constructors that accept the {@code userId} as a parameter, the
* following guidelines should be followed:
* <ul>
* <li>Validate the format of the ID to ensure it adheres to system requirements.</li>
* <li>Handle null or empty values gracefully, providing appropriate error messages
* or default behavior where necessary.</li>
* </ul>
*/
@java.lang.SuppressWarnings("all")
@lombok.Generated
public String getUserId() {
return this.userId;
}
/**
* This field represents the unique identifier for a user in the system. It is used
* throughout the application to uniquely identify and retrieve user-related data.
* The ID is typically generated by the database and is guaranteed to be unique
* within the context of the system.
*
* <p>The ID is an integral part of various operations, including but not limited to:
* <ul>
* <li>Authenticating users during login processes.</li>
* <li>Associating user-specific preferences and settings.</li>
* <li>Tracking user activity and logs for auditing purposes.</li>
* <li>Facilitating relationships between users and other entities such as orders,
* messages, or roles within the system.</li>
* </ul>
*
* <p>Key characteristics of the {@code userId} field:
* <ul>
* <li><strong>Immutability:</strong> Once assigned, the ID must not be modified to
* ensure data integrity.</li>
* <li><strong>Security:</strong> Access to this field should be controlled to prevent
* unauthorized modifications or data leakage.</li>
* <li><strong>Uniqueness:</strong> The ID must be unique within the system. For
* distributed systems, consider using GUIDs or UUIDs to avoid collisions.</li>
* </ul>
*
* <p>Example usage:
* <pre>
* User user = userService.getUserById(userId);
* if (user != null) {
* System.out.println("User found: " + user.getName());
* } else {
* System.out.println("User not found.");
* }
* </pre>
*
* <p>Developers should ensure that the ID complies with constraints imposed by the
* database schema, such as length and format restrictions. Furthermore, it is
* recommended to validate the ID before persisting or using it in critical operations.
*
* <p>For methods or constructors that accept the {@code userId} as a parameter, the
* following guidelines should be followed:
* <ul>
* <li>Validate the format of the ID to ensure it adheres to system requirements.</li>
* <li>Handle null or empty values gracefully, providing appropriate error messages
* or default behavior where necessary.</li>
* </ul>
*
* @param userId the unique identifier assigned to a user. This value must be non-null
* and conform to the format defined by the system. Passing a null or
* invalid ID may result in an {@link IllegalArgumentException} or
* similar error.
* @param databaseConnection the connection to the database used for retrieving or
* persisting the user ID. This parameter is required for
* database-related operations and must be properly closed
* after use to prevent resource leaks.
* @param userRole the role associated with the user (e.g., "admin", "user", "guest").
* This parameter may influence access control and permissions
* granted to the user within the system.
*/
@java.lang.SuppressWarnings("all")
@lombok.Generated
public void setUserId(final String userId) {
this.userId = userId;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public boolean equals(final java.lang.Object o) {
if (o == this) return true;
if (!(o instanceof GetterSetterJavadocLong)) return false;
final GetterSetterJavadocLong other = (GetterSetterJavadocLong) o;
if (!other.canEqual((java.lang.Object) this)) return false;
final java.lang.Object this$userId = this.getUserId();
final java.lang.Object other$userId = other.getUserId();
if (this$userId == null ? other$userId != null : !this$userId.equals(other$userId)) return false;
return true;
}
@java.lang.SuppressWarnings("all")
@lombok.Generated
protected boolean canEqual(final java.lang.Object other) {
return other instanceof GetterSetterJavadocLong;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public int hashCode() {
final int PRIME = 59;
int result = 1;
final java.lang.Object $userId = this.getUserId();
result = result * PRIME + ($userId == null ? 43 : $userId.hashCode());
return result;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@lombok.Generated
public java.lang.String toString() {
return "GetterSetterJavadocLong(userId=" + this.getUserId() + ")";
}
}
Loading
Loading