From 0d83c7c3ee5adbad3fc9d75f2b62026973cb1d08 Mon Sep 17 00:00:00 2001 From: Zelaux <58040045+Zelaux@users.noreply.github.com> Date: Thu, 27 Feb 2025 03:19:52 +0300 Subject: [PATCH] Added tests for auto impl --- .../lombok/autoimpl/ImplProcessor.java | 20 +++++++++- build.gradle.kts | 8 ++-- tests/setup-tests.gradle | 9 +++++ .../omaloon/annotation/test/AutoImplTest.java | 40 +++++++++++++++++++ .../omaloon/{ => test}/AlwaysTrueTrue.java | 2 +- .../{ => test}/math/CircleStuffTest.java | 3 +- 6 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 tests/test/omaloon/annotation/test/AutoImplTest.java rename tests/test/omaloon/{ => test}/AlwaysTrueTrue.java (86%) rename tests/test/omaloon/{ => test}/math/CircleStuffTest.java (92%) diff --git a/annotations/src/main/java/omaloon/annotations/lombok/autoimpl/ImplProcessor.java b/annotations/src/main/java/omaloon/annotations/lombok/autoimpl/ImplProcessor.java index a4e74182..f1f34d38 100644 --- a/annotations/src/main/java/omaloon/annotations/lombok/autoimpl/ImplProcessor.java +++ b/annotations/src/main/java/omaloon/annotations/lombok/autoimpl/ImplProcessor.java @@ -7,6 +7,7 @@ import com.sun.tools.javac.tree.*; import lombok.*; import lombok.core.*; +import lombok.core.AST.*; import lombok.javac.*; import lombok.javac.handlers.*; import omaloon.annotations.*; @@ -112,6 +113,20 @@ public void visitType(JavacNode typeNode, JCTree.JCClassDecl type){ return; } if(!autoImplClasses.contains(canonicalFullname(typeNode))) return; + ArrayList upNames = new ArrayList<>(); + TypeLibrary upNameLib = new TypeLibrary();//TODO better resolver + { + JavacNode node = typeNode.up(); + while(node != null && node != node.up()){ + for(JavacNode downNode : node.down()){ + if(downNode == typeNode || downNode.getKind() != Kind.TYPE) continue; + String e = canonicalFullname(downNode); + upNames.add(e); + upNameLib.addType(e); + } + node = node.up(); + } + } InfoAndPos[] interfaceInfos = StreamEx .ofNullable(type.implementing) @@ -119,7 +134,10 @@ public void visitType(JavacNode typeNode, JCTree.JCClassDecl type){ .mapToEntry(Function.identity()) .mapKeys(Object::toString) .filterKeys(string -> !string.contains("<")) //TODO Generic implement - .mapKeys(it -> Paths.fullifyName(typeNode, it, interfacesLibrary)) + .mapKeys(it -> { + String name = Paths.fullifyName(typeNode, it, interfacesLibrary); + return name != null ? name : upNameLib.toQualifieds(it).stream().findFirst().orElse(null);//TODO better searching + }) .mapKeys(CollectedHierarchyInfo::interfaceInfo) .nonNullKeys() .mapKeys(simpleInterfaceToAutoImpl::get) diff --git a/build.gradle.kts b/build.gradle.kts index 9b3f59a1..ba7db1af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -160,9 +160,11 @@ project(":") { options.isFork = true options.compilerArgs.add("-g") - options.forkOptions.jvmArgs!!.add( - "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5008" - ) + if(System.getenv("lombok.plugin.debug_sleep")!=null){ + options.forkOptions.jvmArgs!!.add( + "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5008" + ) + } } dependencies { compileOnly("org.projectlombok:lombok:1.18.32") diff --git a/tests/setup-tests.gradle b/tests/setup-tests.gradle index ae1a4815..0d2e425c 100644 --- a/tests/setup-tests.gradle +++ b/tests/setup-tests.gradle @@ -1,12 +1,21 @@ test { useJUnitPlatform() } +/*compileTestJava{ + options.debug = true + options.fork = true + options.compilerArgs.add("-g") + options.forkOptions.jvmArgs.add( + "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5008" + ) +}*/ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' testCompileOnly 'org.projectlombok:lombok:1.18.32' testAnnotationProcessor 'org.projectlombok:lombok:1.18.32' + testAnnotationProcessor project(":annotations") } \ No newline at end of file diff --git a/tests/test/omaloon/annotation/test/AutoImplTest.java b/tests/test/omaloon/annotation/test/AutoImplTest.java new file mode 100644 index 00000000..3c0fc371 --- /dev/null +++ b/tests/test/omaloon/annotation/test/AutoImplTest.java @@ -0,0 +1,40 @@ +package omaloon.annotation.test; + +import omaloon.annotations.*; +import org.junit.jupiter.api.*; + +import java.lang.reflect.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class AutoImplTest{ + @Test + void testField(){ + Field[] fields = TestClassWithImpl.class.getDeclaredFields(); + assertEquals(1,fields.length); + assertEquals("val",fields[0].getName()); + assertEquals(float.class,fields[0].getType()); + } + + @Test + void testGetAndSet(){ + TestClassWithImpl obj = new TestClassWithImpl(); + assertEquals(0,obj.value()); + obj.value(10); + assertEquals(10,obj.value()); + } + static class TestClassWithImpl implements ITest{ + + } + @AutoImplement + + interface ITest{ + public float val=0; + default float value(){ + return val; + } + default void value(float it){ + AutoImplement.Util.Param("__val__set","val = it"); + } + } +} diff --git a/tests/test/omaloon/AlwaysTrueTrue.java b/tests/test/omaloon/test/AlwaysTrueTrue.java similarity index 86% rename from tests/test/omaloon/AlwaysTrueTrue.java rename to tests/test/omaloon/test/AlwaysTrueTrue.java index 651bf058..0bae6bbf 100644 --- a/tests/test/omaloon/AlwaysTrueTrue.java +++ b/tests/test/omaloon/test/AlwaysTrueTrue.java @@ -1,4 +1,4 @@ -package omaloon; +package omaloon.test; import org.junit.jupiter.api.*; diff --git a/tests/test/omaloon/math/CircleStuffTest.java b/tests/test/omaloon/test/math/CircleStuffTest.java similarity index 92% rename from tests/test/omaloon/math/CircleStuffTest.java rename to tests/test/omaloon/test/math/CircleStuffTest.java index c0c41316..1118c73b 100644 --- a/tests/test/omaloon/math/CircleStuffTest.java +++ b/tests/test/omaloon/test/math/CircleStuffTest.java @@ -1,6 +1,7 @@ -package omaloon.math; +package omaloon.test.math; import arc.math.geom.*; +import omaloon.math.*; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*;