From 8e710598e2ccc6482f7cc14b5888537f1b576f85 Mon Sep 17 00:00:00 2001 From: kokorin <9crqUVAXd6Q17EY354lkbYeB> Date: Wed, 9 Dec 2020 10:12:47 +0200 Subject: [PATCH] Working MapStruct source presence check --- ...senceCheckerOnClassAlreadyPresentTest.java | 35 ------------------- .../PresenceCheckerWithMapStructTest.java | 19 +++++++--- .../javac/handlers/HandlePresenceChecker.java | 10 +++--- 3 files changed, 21 insertions(+), 43 deletions(-) delete mode 100644 lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerOnClassAlreadyPresentTest.java diff --git a/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerOnClassAlreadyPresentTest.java b/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerOnClassAlreadyPresentTest.java deleted file mode 100644 index 72f057a..0000000 --- a/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerOnClassAlreadyPresentTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.kokorin.lombok; - -import lombok.Getter; -import lombok.Setter; -import org.junit.Assert; -import org.junit.Test; - -@PresenceChecker -@Getter -@Setter -public class PresenceCheckerOnClassAlreadyPresentTest { - private boolean hasName = false; - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - this.hasName = true; - } - - public boolean hasName() { - return hasName; - } - - @Test - public void noErrorsDuringCompilation() { - Assert.assertFalse(this.hasName()); - this.setName("any"); - Assert.assertTrue(this.hasName()); - } - -} diff --git a/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerWithMapStructTest.java b/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerWithMapStructTest.java index a6e79b8..9c4fd3c 100644 --- a/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerWithMapStructTest.java +++ b/lombok-presence-checker-test/src/test/java/com/github/kokorin/lombok/PresenceCheckerWithMapStructTest.java @@ -17,18 +17,29 @@ public void test() { user.setName("to_be_updated"); user.setValue(42); + UserMapper mapper = Mappers.getMapper(UserMapper.class); UserDto dto = new UserDto(); + + Assert.assertFalse(dto.hasName()); + Assert.assertFalse(dto.hasValue()); + + mapper.updateUser(dto, user); + + Assert.assertEquals("to_be_updated", user.getName()); + Assert.assertEquals(42, user.getValue()); + dto.setName("updated_name"); + dto.setValue(146); Assert.assertTrue(dto.hasName()); - Assert.assertFalse(dto.hasValue()); + Assert.assertTrue(dto.hasValue()); - Mappers.getMapper(UserMapper.class).updateUser(dto, user); + mapper.updateUser(dto, user); Assert.assertEquals("updated_name", user.getName()); - Assert.assertEquals(42, user.getValue()); + Assert.assertEquals(146, user.getValue()); } - @Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) + @Mapper public interface UserMapper { void updateUser(UserDto dto, @MappingTarget User user); } diff --git a/lombok-presence-checker/src/main/java/com/github/kokorin/lombok/javac/handlers/HandlePresenceChecker.java b/lombok-presence-checker/src/main/java/com/github/kokorin/lombok/javac/handlers/HandlePresenceChecker.java index cfa91d0..1db46b6 100644 --- a/lombok-presence-checker/src/main/java/com/github/kokorin/lombok/javac/handlers/HandlePresenceChecker.java +++ b/lombok-presence-checker/src/main/java/com/github/kokorin/lombok/javac/handlers/HandlePresenceChecker.java @@ -2,6 +2,7 @@ import com.github.kokorin.lombok.PresenceChecker; import com.sun.tools.javac.code.Flags; +import com.sun.tools.javac.code.Type; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.Name; @@ -115,9 +116,10 @@ private void createPresenceCheckerForField(JavacNode fieldNode) { JCTree.JCVariableDecl presenceCheckerFieldDecl = createPresenceCheckerField(fieldNode, treeMaker); JavacNode presenceCheckerField = injectField(fieldNode.up(), presenceCheckerFieldDecl); - + Type booleanType = treeMaker.Literal(false).type; JCTree.JCMethodDecl presenceCheckerMethod = createPresenceCheckerMethod(presenceCheckerField, treeMaker); - injectMethod(fieldNode.up(), presenceCheckerMethod); + injectMethod(fieldNode.up(), presenceCheckerMethod, List.nil(), booleanType); + //injectMethod(fieldNode.up(), presenceCheckerMethod, List.nil(), getMirrorForFieldType(fieldNode)); JCTree.JCMethodDecl setterMethodDecl = (JCTree.JCMethodDecl) setterMethod.get(); @@ -175,10 +177,10 @@ private JCTree.JCMethodDecl createPresenceCheckerMethod(long access, JavacNode p return decl; } - private JCTree.JCVariableDecl createPresenceCheckerField(JavacNode fieldNode, JavacTreeMaker maker) { + private JCTree.JCVariableDecl createPresenceCheckerField(JavacNode fieldNode, JavacTreeMaker treeMaker) { Name valueName = fieldNode.toName(toHasName(fieldNode)); - return maker.VarDef(maker.Modifiers(Flags.PRIVATE), valueName, maker.TypeIdent(CTC_BOOLEAN), null); + return treeMaker.VarDef(treeMaker.Modifiers(Flags.PRIVATE), valueName, treeMaker.TypeIdent(CTC_BOOLEAN), null); } private List createPresenceCheckerBody(JavacTreeMaker treeMaker, JavacNode field) {