Skip to content

Commit

Permalink
@StandardException feature working draft
Browse files Browse the repository at this point in the history
* move feature under experimental
* replace ProviderFor with Provides
* add doc material (to be completed)
* add author
  • Loading branch information
ttzn committed Mar 24, 2021
1 parent 63ea3db commit af16ba2
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 13 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ Lombok contributors in alphabetical order:

Adam Juraszek <juriad@gmail.com>
Aleksandr Zhelezniak <lekan1992@gmail.com>
Amine Touzani <ttzn.dev@gmail.com>
Andre Brait <andrebrait@gmail.com>
Bulgakov Alexander <buls@yandex.ru>
Caleb Brinkman <floralvikings@gmail.com>
Expand Down
8 changes: 3 additions & 5 deletions src/core/lombok/eclipse/handlers/HandleStandardException.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,16 @@

import lombok.AccessLevel;
import lombok.ConfigurationKeys;
import lombok.StandardException;
import lombok.experimental.StandardException;
import lombok.core.AST.Kind;
import lombok.core.AnnotationValues;
import lombok.eclipse.Eclipse;
import lombok.eclipse.EclipseAnnotationHandler;
import lombok.eclipse.EclipseNode;
import lombok.eclipse.handlers.EclipseHandlerUtil.*;
import lombok.spi.Provides;
import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.mangosdk.spi.ProviderFor;

import java.lang.reflect.Modifier;
import java.util.*;
Expand All @@ -42,7 +42,7 @@
import static lombok.eclipse.Eclipse.pos;
import static lombok.eclipse.handlers.EclipseHandlerUtil.*;

@ProviderFor(EclipseAnnotationHandler.class)
@Provides
public class HandleStandardException extends EclipseAnnotationHandler<StandardException> {
private static final String NAME = StandardException.class.getSimpleName();

Expand Down Expand Up @@ -175,12 +175,10 @@ public static Annotation[] createConstructorProperties(ASTNode source, Collectio

@SuppressWarnings("deprecation") public static ConstructorDeclaration createConstructor(
AccessLevel level, EclipseNode type, Collection<SuperParameter> parameters, EclipseNode sourceNode) {

ASTNode source = sourceNode.get();
TypeDeclaration typeDeclaration = ((TypeDeclaration) type.get());

boolean isEnum = (((TypeDeclaration) type.get()).modifiers & ClassFileConstants.AccEnum) != 0;

if (isEnum) level = AccessLevel.PRIVATE;

boolean addConstructorProperties;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package lombok;
package lombok.experimental;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
Expand Down
9 changes: 4 additions & 5 deletions src/core/lombok/javac/handlers/HandleStandardException.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import com.sun.tools.javac.util.Name;
import lombok.AccessLevel;
import lombok.ConfigurationKeys;
import lombok.StandardException;
import lombok.experimental.StandardException;
import lombok.core.AST.Kind;
import lombok.core.AnnotationValues;
import lombok.delombok.LombokOptionsFactory;
Expand All @@ -39,13 +39,13 @@
import lombok.javac.JavacNode;
import lombok.javac.JavacTreeMaker;
import lombok.javac.handlers.JavacHandlerUtil.*;
import org.mangosdk.spi.ProviderFor;
import lombok.spi.Provides;

import static lombok.core.handlers.HandlerUtil.handleFlagUsage;
import static lombok.javac.Javac.CTC_VOID;
import static lombok.javac.handlers.JavacHandlerUtil.*;

@ProviderFor(JavacAnnotationHandler.class)
@Provides
public class HandleStandardException extends JavacAnnotationHandler<StandardException> {
private static final String NAME = StandardException.class.getSimpleName();

Expand Down Expand Up @@ -161,7 +161,6 @@ public static void addConstructorProperties(JCModifiers mods, JavacNode node, Li
if (isEnum) level = AccessLevel.PRIVATE;

boolean addConstructorProperties;

if (fieldsToParam.isEmpty()) {
addConstructorProperties = false;
} else {
Expand Down Expand Up @@ -194,7 +193,7 @@ public static void addConstructorProperties(JCModifiers mods, JavacNode node, Li
}
return recursiveSetGeneratedBy(maker.MethodDef(mods, typeNode.toName("<init>"),
null, List.<JCTypeParameter>nil(), params.toList(), List.<JCExpression>nil(),
maker.Block(0L, statements.toList()), null), source.get(), typeNode.getContext());
maker.Block(0L, statements.toList()), null), source);
}

public static boolean isLocalType(JavacNode type) {
Expand Down
6 changes: 4 additions & 2 deletions test/transform/resource/before/StandardExceptions.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
@lombok.StandardException class EmptyException extends Exception {
import lombok.experimental.StandardException;

@StandardException class EmptyException extends Exception {
}
@lombok.StandardException class NoArgsException extends Exception {
@StandardException class NoArgsException extends Exception {
public NoArgsException() {
}
}
36 changes: 36 additions & 0 deletions website/templates/features/experimental/StandardException.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<#import "../_features.html" as f>

<@f.scaffold title="@StandardException"
logline="TODO">
<@f.history>
<p>
<code>@StandardException</code> was introduced as an experimental feature in lombok v1.18.21.
</p>
</@f.history>

<@f.overview>
<p>
This annotation is intended to be used on subclasses of <code>java.util.Throwable</code>. For each of the four constructors in <code>Throwable</code>, it will generate a corresponding constructor in the target class, that simply forwards its argument to its super-counterpart.
</p><p>
If any of those constructors is manually overriden, it is simply skipped. This allows applying special treatment such as annotations.
</p>
</@f.overview>

<@f.snippets name="StandardException" />

<@f.confKeys>
<dt>
<code>lombok.standardException.addConstructorProperties</code> = [<code>true</code> | <code>false</code>] (default: <code>false</code>)
</dt><dt>
<code>lombok.standardException.flagUsage</code> = [<code>warning</code> | <code>error</code>] (default: not set)
</dt><dd>
Lombok will flag any usage of <code>@StandardException</code> as a warning or error if configured.
</dd>
</@f.confKeys>

<@f.smallPrint>
<p>
Although such situation is unlikely to occur, this annotation can technically be applied to any class for which all four expected constructors are defined in a superclass.
</p>
</@f.smallPrint>
</@f.scaffold>
4 changes: 4 additions & 0 deletions website/templates/features/experimental/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@
<@main.feature title="@Jacksonized" href="Jacksonized">
Bob, meet Jackson. Lets make sure you become fast friends.
</@main.feature>

<@main.feature title="@StandardException" href="StandardException">
TODO
</@main.feature>
</div>

<@f.confKeys>
Expand Down
16 changes: 16 additions & 0 deletions website/usageExamples/StandardExceptionExample_post.jpage
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
public class ExampleException extends Exception {
public ExampleException() {
}

public ExampleException(String message) {
super(message);
}

public ExampleException(Throwable cause) {
super(cause);
}

public ExampleException(String message, Throwable cause) {
super(message, cause);
}
}
5 changes: 5 additions & 0 deletions website/usageExamples/StandardExceptionExample_pre.jpage
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import lombok.experimental.StandardException;

@StandardException
public class ExampleException extends Exception {
}

0 comments on commit af16ba2

Please sign in to comment.