From b6071411fe45dd97c7ca0e9c8b5c56e5f59a4085 Mon Sep 17 00:00:00 2001 From: Egor Klementev Date: Sun, 27 Feb 2022 19:00:12 +0300 Subject: [PATCH] BOOL & TEST: some fixes and tests --- README.md | 6 ++-- src/main/java/translator/Declarations.kt | 1 + src/main/java/translator/Literals.kt | 25 +++++++++------- .../translator/preprocessor/Preprocessor.kt | 29 +++++++++++++++++-- .../SimpleLexicalLiterals.java | 17 ----------- .../SimpleClassMembers.java | 20 ------------- .../SimpleMethod.java | 10 ------- .../SimpleParameterMethod.java | 10 ------- src/test/resources/test_ready/SimpleTest.java | 7 ++--- .../SampleTest.java | 9 ------ .../sec_8_2_class_members/SampleTest.java | 9 ------ .../SampleTest.java | 14 --------- .../SampleTest.java | 10 ------- .../SampleTest.java | 9 ------ 14 files changed, 49 insertions(+), 127 deletions(-) delete mode 100644 src/test/resources/test_candidates/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SimpleLexicalLiterals.java delete mode 100644 src/test/resources/test_candidates/ch_8_classes/sec_8_2_class_members/SimpleClassMembers.java delete mode 100644 src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleMethod.java delete mode 100644 src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleParameterMethod.java delete mode 100644 src/test/resources/test_ready/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SampleTest.java delete mode 100644 src/test/resources/test_ready/ch_8_classes/sec_8_2_class_members/SampleTest.java delete mode 100644 src/test/resources/test_ready/ch_8_classes/sec_8_3_field_declarations/sec_8_3_2_field_initialization/SampleTest.java delete mode 100644 src/test/resources/test_ready/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SampleTest.java delete mode 100644 src/test/resources/test_ready/ch_8_classes/sec_8_5_member_class_and_interface_declarations/SampleTest.java diff --git a/README.md b/README.md index 375a6f76..f4e5e2cc 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@
[![Gradle Build](https://github.com/polystat/j2eo/actions/workflows/gradle-build.yml/badge.svg)](https://github.com/polystat/j2eo/actions/workflows/gradle-build.yml) -![LINE](https://img.shields.io/badge/line--coverage-41.57%25-orange.svg) -![BRANCH](https://img.shields.io/badge/branch--coverage-31.03%25-red.svg) -![COMPLEXITY](https://img.shields.io/badge/complexity-5.74-brightgreen.svg) +![LINE](https://img.shields.io/badge/line--coverage-30,97%25-red.svg) +![BRANCH](https://img.shields.io/badge/branch--coverage-21,13%25-red.svg) +![COMPLEXITY](https://img.shields.io/badge/complexity-6,69-brightgreen.svg) This is a translator of **Java** programming language to [EOLANG](https://www.eolang.org) programming language. diff --git a/src/main/java/translator/Declarations.kt b/src/main/java/translator/Declarations.kt index d7a784ee..3c4cb878 100644 --- a/src/main/java/translator/Declarations.kt +++ b/src/main/java/translator/Declarations.kt @@ -75,6 +75,7 @@ fun decodePrimitiveType(type: PrimitiveType): String { return when (type.typeCode) { TokenCode.Int -> TokenCodes.PRIM__INT.value TokenCode.Float -> TokenCodes.PRIM__FLOAT.value + TokenCode.Boolean -> TokenCodes.PRIM__BOOLEAN.value else -> throw IllegalArgumentException("Type code " + type.typeCode + " is not supported") } } diff --git a/src/main/java/translator/Literals.kt b/src/main/java/translator/Literals.kt index 2e6df705..09a55726 100644 --- a/src/main/java/translator/Literals.kt +++ b/src/main/java/translator/Literals.kt @@ -2,10 +2,7 @@ package translator import arrow.core.None import eotree.* -import eotree.data.EOData -import eotree.data.EOFloatData -import eotree.data.EOIntData -import eotree.data.EOStringData +import eotree.data.* import lexer.TokenCode import tree.Expression.Primary.Literal import tree.Type.PrimitiveType @@ -14,16 +11,24 @@ import util.TokenCodes fun mapLiteral(literal: Literal): EOObject = when (literal.code) { TokenCode.StringLiteral -> generateEOData( - listOf(TokenCodes.CLASS__STRING.value, "constructor2").eoDot(), - EOStringData(literal.value as String) + listOf(TokenCodes.CLASS__STRING.value, "constructor2").eoDot(), + EOStringData(literal.value as String) ) TokenCode.FloatingLiteral -> generateEOData( - listOf(TokenCodes.PRIM__FLOAT.value, "constructor2").eoDot(), - EOFloatData((literal.value as String).toFloat()) + listOf(TokenCodes.PRIM__FLOAT.value, "constructor2").eoDot(), + EOFloatData((literal.value as String).toFloat()) ) TokenCode.IntegerLiteral -> generateEOData( - listOf(TokenCodes.PRIM__INT.value, "constructor2").eoDot(), - EOIntData((literal.value as String).toInt()) + listOf(TokenCodes.PRIM__INT.value, "constructor2").eoDot(), + EOIntData((literal.value as String).toInt()) + ) + TokenCode.True -> generateEOData( + listOf(TokenCodes.PRIM__BOOLEAN.value, "constructor2").eoDot(), + EOBoolData(true) + ) + TokenCode.False -> generateEOData( + listOf(TokenCodes.PRIM__BOOLEAN.value, "constructor2").eoDot(), + EOBoolData(false) ) else -> throw IllegalArgumentException("Mapping of type ${literal.javaClass.simpleName} is not supported.") } diff --git a/src/main/java/translator/preprocessor/Preprocessor.kt b/src/main/java/translator/preprocessor/Preprocessor.kt index 349f5387..55e51845 100644 --- a/src/main/java/translator/preprocessor/Preprocessor.kt +++ b/src/main/java/translator/preprocessor/Preprocessor.kt @@ -1,5 +1,6 @@ package translator.preprocessor +import lexer.TokenCode import tree.Compilation.CompilationUnit import tree.Compilation.SimpleCompilationUnit import tree.Compilation.TopLevelComponent @@ -12,9 +13,13 @@ import tree.InitializerSimple import tree.Statement.BlockStatement import tree.Statement.Statement import tree.Statement.StatementExpression +import tree.Type.PrimitiveType import tree.Type.TypeName import util.TokenCodes import util.collectPrimitivePackages +import java.util.* +import kotlin.collections.HashMap +import kotlin.collections.HashSet /** * @property classNames @@ -23,8 +28,9 @@ import util.collectPrimitivePackages */ data class PreprocessorState( val classNames: HashMap = hashMapOf( - "Object" to TokenCodes.CLASS__OBJECT.value, - "System" to TokenCodes.CLASS__SYSTEM.value, + "Object" to TokenCodes.CLASS__OBJECT.value, + "System" to TokenCodes.CLASS__SYSTEM.value, + "int" to TokenCodes.PRIM__INT.value ), val stdClassesNeededForAlias: HashSet = hashSetOf( TokenCodes.CLASS__OBJECT.value, @@ -144,6 +150,15 @@ private fun preprocessMethodDecl(state: PreprocessorState, methodDecl: MethodDec try { methodDecl.methodBody.block.blockStatements .map { blockStmt: BlockStatement -> preprocessBlockStmt(state, blockStmt) } + when (methodDecl.type) { + is PrimitiveType -> + { + tryAddClassForAliases( + state, convertPrimTokenCode((methodDecl.type as PrimitiveType).typeCode) + ) + } + else -> {} + } } catch (e: NullPointerException) { /* Ignore it */ } @@ -240,3 +255,13 @@ private fun tryAddClassForAliases(state: PreprocessorState, className: String) { state.stdClassesForCurrentAlias.add(className) } } + +/** + * Converts token code name of type to the stdlib EO class. + * Example: TokenCode.Int -> 'prim__int' + * + * @param tokenCode the token code of primitive type + */ +private fun convertPrimTokenCode(tokenCode: TokenCode) : String { + return "prim__${tokenCode.name.lowercase(Locale.getDefault())}" +} diff --git a/src/test/resources/test_candidates/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SimpleLexicalLiterals.java b/src/test/resources/test_candidates/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SimpleLexicalLiterals.java deleted file mode 100644 index 98b695f0..00000000 --- a/src/test/resources/test_candidates/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SimpleLexicalLiterals.java +++ /dev/null @@ -1,17 +0,0 @@ - -public class SimpleLexicalLiterals { - - public static void main(String[] args) { - int v1 = 5; - long v2 = 5L; - long v3 = 5l; - float v4 = 5.0f; - float v5 = 5.0F; - double v6 = 5.0; - boolean v7 = v1 == v2; - char v8 = '5'; - String v9 = "5"; - Object v10 = null; - System.out.println("passed"); - } -} diff --git a/src/test/resources/test_candidates/ch_8_classes/sec_8_2_class_members/SimpleClassMembers.java b/src/test/resources/test_candidates/ch_8_classes/sec_8_2_class_members/SimpleClassMembers.java deleted file mode 100644 index 572ad286..00000000 --- a/src/test/resources/test_candidates/ch_8_classes/sec_8_2_class_members/SimpleClassMembers.java +++ /dev/null @@ -1,20 +0,0 @@ -public class SimpleClassMembers { - public static void main(String[] args) { - ColoredPoint c = new ColoredPoint(0, 0); - c.reset(); - System.out.println("passed"); - } -} - -class Point { - int x, y; - private Point() { reset(); } - Point(int x, int y) { this.x = x; this.y = y; } - void reset() { this.x = 0; this.y = 0; } -} - -class ColoredPoint extends Point { - int color; - ColoredPoint(int x, int y) { super(x, y); color = 0; } -} - diff --git a/src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleMethod.java b/src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleMethod.java deleted file mode 100644 index 86846ba8..00000000 --- a/src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleMethod.java +++ /dev/null @@ -1,10 +0,0 @@ -public class SimpleMethod { - - static void method () {} - - public static void main(String[] args) { - method(); - System.out.println("passed"); - } - -} diff --git a/src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleParameterMethod.java b/src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleParameterMethod.java deleted file mode 100644 index 9983c3b5..00000000 --- a/src/test/resources/test_candidates/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SimpleParameterMethod.java +++ /dev/null @@ -1,10 +0,0 @@ -public class SimpleParameterMethod { - - static void method (String param) {} - - public static void main(String[] args) { - method("param 1"); - System.out.println("passed"); - } - -} diff --git a/src/test/resources/test_ready/SimpleTest.java b/src/test/resources/test_ready/SimpleTest.java index 1beb5fb0..a20553b9 100644 --- a/src/test/resources/test_ready/SimpleTest.java +++ b/src/test/resources/test_ready/SimpleTest.java @@ -1,9 +1,8 @@ public class SimpleTest { - + public static void main(String[] args) { - int a = 5; - int b = (-a); - System.out.println(b); + boolean a = true; + boolean b = false; System.out.println("passed"); } } diff --git a/src/test/resources/test_ready/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SampleTest.java b/src/test/resources/test_ready/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SampleTest.java deleted file mode 100644 index 2c897dfb..00000000 --- a/src/test/resources/test_ready/ch_15_expressions/sec_15_8_primary_expressions/sec_15_8_1_lexical_literals/SampleTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.eolang.j2eo; - -public class SampleTest { - - public static void Main (String[] args) { - - } - -} diff --git a/src/test/resources/test_ready/ch_8_classes/sec_8_2_class_members/SampleTest.java b/src/test/resources/test_ready/ch_8_classes/sec_8_2_class_members/SampleTest.java deleted file mode 100644 index 2c897dfb..00000000 --- a/src/test/resources/test_ready/ch_8_classes/sec_8_2_class_members/SampleTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.eolang.j2eo; - -public class SampleTest { - - public static void Main (String[] args) { - - } - -} diff --git a/src/test/resources/test_ready/ch_8_classes/sec_8_3_field_declarations/sec_8_3_2_field_initialization/SampleTest.java b/src/test/resources/test_ready/ch_8_classes/sec_8_3_field_declarations/sec_8_3_2_field_initialization/SampleTest.java deleted file mode 100644 index 14e0b952..00000000 --- a/src/test/resources/test_ready/ch_8_classes/sec_8_3_field_declarations/sec_8_3_2_field_initialization/SampleTest.java +++ /dev/null @@ -1,14 +0,0 @@ -public class SimpleFieldInitialization { - - public static void main(String[] args) { - OuterClass obj = new OuterClass(); - obj.var = obj.var2; - System.out.println(obj.var); - System.out.println("passed"); - } - -} - -class OuterClass { - int var = 2, var2 = 3; -} diff --git a/src/test/resources/test_ready/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SampleTest.java b/src/test/resources/test_ready/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SampleTest.java deleted file mode 100644 index 86846ba8..00000000 --- a/src/test/resources/test_ready/ch_8_classes/sec_8_4_method_declarations/sec_8_4_1_formal_parametes/SampleTest.java +++ /dev/null @@ -1,10 +0,0 @@ -public class SimpleMethod { - - static void method () {} - - public static void main(String[] args) { - method(); - System.out.println("passed"); - } - -} diff --git a/src/test/resources/test_ready/ch_8_classes/sec_8_5_member_class_and_interface_declarations/SampleTest.java b/src/test/resources/test_ready/ch_8_classes/sec_8_5_member_class_and_interface_declarations/SampleTest.java deleted file mode 100644 index 2c897dfb..00000000 --- a/src/test/resources/test_ready/ch_8_classes/sec_8_5_member_class_and_interface_declarations/SampleTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.eolang.j2eo; - -public class SampleTest { - - public static void Main (String[] args) { - - } - -}