diff --git a/examples/swing.panda b/examples/swing.panda index c1d130863..a52806464 100644 --- a/examples/swing.panda +++ b/examples/swing.panda @@ -7,7 +7,7 @@ main { type Window : Runnable { - override run() { + override run () -> PrimitiveVoid { JFrame frame = new JFrame('MonkaS') frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setSize(720, 380) diff --git a/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/generator/ClassGenerator.java b/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/generator/ClassGenerator.java index 628270046..89809052c 100644 --- a/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/generator/ClassGenerator.java +++ b/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/generator/ClassGenerator.java @@ -64,9 +64,12 @@ public final class ClassGenerator { public CtClass allocate(Type type) { String javaName = type.getName() .replace("/", "$") + .replace(".", "$") .replace("@", "$") .replace("::", "$") - .replace(":", "_") + .replace(":", "") + .replace("<", "") + .replace(">", "") + "_" + ID.incrementAndGet(); CtClass javaType = Kind.isInterface(type) @@ -161,7 +164,7 @@ public void generate(Type type) throws CannotCompileException, NotFoundException Map methods = new HashMap<>(); for (TypeMethod method : type.getMethods().getDeclaredProperties()) { - String generatedName = "_" + method.getSimpleName().replaceAll("[^A-Za-z0-9]", ""); + String generatedName = (method.isOverriding() ? "" : "_") + method.getSimpleName().replaceAll("[^A-Za-z0-9_$]", ""); CtClass[] parameters = ClassPoolUtils.toCt(ParameterUtils.parametersToClasses(method.getParameters())); CtMethod javaMethod = new CtMethod(getCtClass(method.getReturnType().getKnownType()), generatedName, parameters, javaType); diff --git a/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/PandaMethod.java b/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/PandaMethod.java index a37943ca1..43b8a770f 100644 --- a/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/PandaMethod.java +++ b/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/PandaMethod.java @@ -28,6 +28,7 @@ public final class PandaMethod extends AbstractParametrizedMember im private final boolean isAbstract; private final boolean isStatic; private final boolean isNative; + private final boolean isOverriding; protected PandaMethod(PandaMethodBuilder builder) { super(builder); @@ -36,6 +37,7 @@ protected PandaMethod(PandaMethodBuilder builder) { this.isAbstract = builder.isAbstract; this.isNative = builder.isNative; this.isStatic = builder.isStatic; + this.isOverriding = builder.isOverriding; } @Override @@ -58,6 +60,11 @@ public boolean isStatic() { return isStatic; } + @Override + public boolean isOverriding() { + return isOverriding; + } + @Override public String getName() { return getType() + "#" + getSimpleName() + "(" + ParameterUtils.toString(getParameters()) + ") → " + getReturnType(); @@ -73,6 +80,7 @@ public static final class PandaMethodBuilder extends PandaParametrizedExecutable protected boolean isAbstract; protected boolean isStatic; protected boolean isNative; + protected boolean isOverriding; private PandaMethodBuilder() { } @@ -90,6 +98,11 @@ public PandaMethodBuilder isAbstract(boolean isAbstract) { return this; } + public PandaMethodBuilder isOverriding(boolean isOverriding) { + this.isOverriding = isOverriding; + return this; + } + public PandaMethodBuilder isStatic(boolean isStatic) { this.isStatic = isStatic; return this; diff --git a/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/TypeMethod.java b/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/TypeMethod.java index 89a3b6230..d5b16fe31 100644 --- a/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/TypeMethod.java +++ b/panda-framework/src/main/java/org/panda_lang/framework/architecture/type/member/method/TypeMethod.java @@ -38,6 +38,8 @@ public interface TypeMethod extends ParametrizedMember { */ boolean isNative(); + boolean isOverriding(); + /** * Check if method is static * diff --git a/panda/src/test/groovy/org/panda_lang/panda/examples/SwingExample.groovy b/panda/src/test/groovy/org/panda_lang/panda/examples/SwingExample.groovy index 508b96baf..3d3aa04e3 100644 --- a/panda/src/test/groovy/org/panda_lang/panda/examples/SwingExample.groovy +++ b/panda/src/test/groovy/org/panda_lang/panda/examples/SwingExample.groovy @@ -17,11 +17,13 @@ package org.panda_lang.panda.examples import groovy.transform.CompileStatic +import org.junit.jupiter.api.Test @CompileStatic final class SwingExample extends PandaTestSpecification { - static void main(String[] args) { + @Test + void 'should compile and handle swing bindings' () { launch '/', 'swing.panda' } diff --git a/pom.xml b/pom.xml index 78ead88d4..630f1f935 100644 --- a/pom.xml +++ b/pom.xml @@ -300,7 +300,11 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.0.0-M5 + + + +