From 3598ace9bfa4063eb751d6762be671e32d3cff44 Mon Sep 17 00:00:00 2001 From: Sander Hautvast Date: Mon, 16 Nov 2020 17:50:08 +0100 Subject: [PATCH] made API classes final --- .../nl/sander/beejava/api/BeeConstructor.java | 2 +- .../java/nl/sander/beejava/api/BeeField.java | 5 ++++- .../java/nl/sander/beejava/api/BeeMethod.java | 3 +++ .../java/nl/sander/beejava/api/BeePackage.java | 2 +- .../java/nl/sander/beejava/api/BeeParameter.java | 2 +- .../java/nl/sander/beejava/api/BeeSource.java | 2 +- .../java/nl/sander/beejava/api/CodeLine.java | 2 +- src/test/java/nl/sander/beejava/TestData.java | 8 ++++---- .../nl/sander/beejava/e2e/EmptyBeanTest.java | 16 +++++++++++++++- 9 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/main/java/nl/sander/beejava/api/BeeConstructor.java b/src/main/java/nl/sander/beejava/api/BeeConstructor.java index 01fedfa..bd2e761 100644 --- a/src/main/java/nl/sander/beejava/api/BeeConstructor.java +++ b/src/main/java/nl/sander/beejava/api/BeeConstructor.java @@ -8,7 +8,7 @@ import java.util.*; /** * Models a constructor */ -public class BeeConstructor extends CodeContainer { +public final class BeeConstructor extends CodeContainer { private BeeConstructor(Set accessFlags, List formalParameters, diff --git a/src/main/java/nl/sander/beejava/api/BeeField.java b/src/main/java/nl/sander/beejava/api/BeeField.java index adc6e03..04882ed 100644 --- a/src/main/java/nl/sander/beejava/api/BeeField.java +++ b/src/main/java/nl/sander/beejava/api/BeeField.java @@ -7,7 +7,10 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; -public class BeeField { +/** + * Models a field in a BeeClass + */ +public final class BeeField { private final Set accessFlags = new HashSet<>(); private final Class type; diff --git a/src/main/java/nl/sander/beejava/api/BeeMethod.java b/src/main/java/nl/sander/beejava/api/BeeMethod.java index bfc043b..7c7ad34 100644 --- a/src/main/java/nl/sander/beejava/api/BeeMethod.java +++ b/src/main/java/nl/sander/beejava/api/BeeMethod.java @@ -7,6 +7,9 @@ import nl.sander.beejava.flags.MethodAccessFlags; import java.util.*; import java.util.stream.Collectors; +/** + * Models a method in a BeeClass + */ public final class BeeMethod extends CodeContainer { private final String name; diff --git a/src/main/java/nl/sander/beejava/api/BeePackage.java b/src/main/java/nl/sander/beejava/api/BeePackage.java index 4a7d7f0..9638a22 100644 --- a/src/main/java/nl/sander/beejava/api/BeePackage.java +++ b/src/main/java/nl/sander/beejava/api/BeePackage.java @@ -3,7 +3,7 @@ package nl.sander.beejava.api; /** * Contains the name of the package for a class */ -public class BeePackage { +public final class BeePackage { private final String name; diff --git a/src/main/java/nl/sander/beejava/api/BeeParameter.java b/src/main/java/nl/sander/beejava/api/BeeParameter.java index 7a46697..abb18b0 100644 --- a/src/main/java/nl/sander/beejava/api/BeeParameter.java +++ b/src/main/java/nl/sander/beejava/api/BeeParameter.java @@ -5,7 +5,7 @@ import java.util.Objects; /** * Models a formal parameter in a method declaration. */ -public class BeeParameter { +public final class BeeParameter { private final Class type; private final String name; diff --git a/src/main/java/nl/sander/beejava/api/BeeSource.java b/src/main/java/nl/sander/beejava/api/BeeSource.java index f9b7d6b..410de1e 100644 --- a/src/main/java/nl/sander/beejava/api/BeeSource.java +++ b/src/main/java/nl/sander/beejava/api/BeeSource.java @@ -13,7 +13,7 @@ import java.util.Set; * End users need to create an instance of this class (using the Builder) and add all fields, methods etc. * Once created the BeeSource object is immutable. */ -public class BeeSource { +public final class BeeSource { private final Version classFileVersion; private final BeePackage beePackage; private final Set accessFlags = new HashSet<>(); diff --git a/src/main/java/nl/sander/beejava/api/CodeLine.java b/src/main/java/nl/sander/beejava/api/CodeLine.java index 42ee36c..9e2f95f 100644 --- a/src/main/java/nl/sander/beejava/api/CodeLine.java +++ b/src/main/java/nl/sander/beejava/api/CodeLine.java @@ -11,7 +11,7 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -public class CodeLine { +public final class CodeLine { private final int linenumber; private final Opcode opcode; private Ref ref; diff --git a/src/test/java/nl/sander/beejava/TestData.java b/src/test/java/nl/sander/beejava/TestData.java index f438b81..0f5ec72 100644 --- a/src/test/java/nl/sander/beejava/TestData.java +++ b/src/test/java/nl/sander/beejava/TestData.java @@ -19,7 +19,7 @@ public class TestData { .withAccessFlags(PUBLIC, SUPER) .withSimpleName("EmptyBean") .withSuperClass(Object.class) // Not mandatory, like in java sourcecode - .withConstructors(createConstructor()) // There's no default constructor in beejava. The user must always add them + .withConstructors(createDefaultConstructor()) // There's no default constructor in beejava. The user must always add them .build(); } @@ -31,7 +31,7 @@ public class TestData { .withSimpleName("EmptyBean") .withSuperClass(Object.class) // Not mandatory, like in java sourcecode .withInterfaces(Serializable.class) - .withConstructors(createConstructor()) // There's no default constructor in beejava. The user must always add them + .withConstructors(createDefaultConstructor()) // There's no default constructor in beejava. The user must always add them .build(); } @@ -64,7 +64,7 @@ public class TestData { .withPackage("nl.sander.beejava.test") .withAccessFlags(PUBLIC, SUPER) .withSimpleName("ClassWithReferences") - .withConstructors(createConstructor()) // There's no default constructor in beejava. The user must always add them + .withConstructors(createDefaultConstructor()) // There's no default constructor in beejava. The user must always add them .withMethods(print1, print2) .build(); } @@ -101,7 +101,7 @@ public class TestData { .build(); } - private static BeeConstructor createConstructor() throws ClassNotFoundException { + public static BeeConstructor createDefaultConstructor() throws ClassNotFoundException { return BeeConstructor.builder() .withAccessFlags(MethodAccessFlags.PUBLIC) .withCode( diff --git a/src/test/java/nl/sander/beejava/e2e/EmptyBeanTest.java b/src/test/java/nl/sander/beejava/e2e/EmptyBeanTest.java index 30017fb..6606a40 100644 --- a/src/test/java/nl/sander/beejava/e2e/EmptyBeanTest.java +++ b/src/test/java/nl/sander/beejava/e2e/EmptyBeanTest.java @@ -5,10 +5,13 @@ import nl.sander.beejava.CompiledClass; import nl.sander.beejava.Compiler; import nl.sander.beejava.TestData; import nl.sander.beejava.api.BeeSource; +import nl.sander.beejava.api.Version; import org.junit.jupiter.api.Test; import java.lang.reflect.Constructor; +import static nl.sander.beejava.flags.ClassAccessFlags.PUBLIC; +import static nl.sander.beejava.flags.ClassAccessFlags.SUPER; import static org.junit.jupiter.api.Assertions.assertNotNull; /** @@ -20,7 +23,7 @@ public class EmptyBeanTest { @Test public void testEmptyBean() throws Exception { // Arrange - BeeSource emptyClass = TestData.createEmptyClass(); + BeeSource emptyClass = createEmptyClass(); // Act CompiledClass compiledClass = Compiler.compile(emptyClass); @@ -37,4 +40,15 @@ public class EmptyBeanTest { assertNotNull(instance); } + + private BeeSource createEmptyClass() throws ClassNotFoundException { + return BeeSource.builder() + .withClassFileVersion(Version.V14) + .withPackage("nl.sander.beejava.test") + .withAccessFlags(PUBLIC, SUPER) + .withSimpleName("EmptyBean") + .withSuperClass(Object.class) // Not mandatory, like in java sourcecode + .withConstructors(TestData.createDefaultConstructor()) // There's no default constructor in beejava. The user must always add them + .build(); + } }