Skip to content

Commit

Permalink
Added tests for auto impl
Browse files Browse the repository at this point in the history
  • Loading branch information
Zelaux committed Feb 27, 2025
1 parent 5ef0861 commit 0d83c7c
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -112,14 +113,31 @@ public void visitType(JavacNode typeNode, JCTree.JCClassDecl type){
return;
}
if(!autoImplClasses.contains(canonicalFullname(typeNode))) return;
ArrayList<String> 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)
.flatMap(StreamEx::of)
.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)
Expand Down
8 changes: 5 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
9 changes: 9 additions & 0 deletions tests/setup-tests.gradle
Original file line number Diff line number Diff line change
@@ -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")


}
40 changes: 40 additions & 0 deletions tests/test/omaloon/annotation/test/AutoImplTest.java
Original file line number Diff line number Diff line change
@@ -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");
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package omaloon;
package omaloon.test;

import org.junit.jupiter.api.*;

Expand Down
Original file line number Diff line number Diff line change
@@ -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.*;
Expand Down

0 comments on commit 0d83c7c

Please sign in to comment.