From 11e42c6472f5ca2867b054f5350ab4ce2929e661 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Tue, 26 Apr 2016 12:02:42 +0300 Subject: [PATCH] Call 'invokeBox' with proper class instance (not try to find it via reflection) --- .../AbstractCodegenTestCaseOnAndroid.java | 9 +-------- compiler/android-tests/android-tests.iml | 1 + .../tests/CodegenTestsOnAndroidGenerator.java | 19 +++++++++++++------ 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java b/compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java index 2010512d246..91ee9e49ae1 100644 --- a/compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java +++ b/compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java @@ -22,11 +22,8 @@ import java.lang.reflect.Method; public class AbstractCodegenTestCaseOnAndroid extends TestCase { - protected void invokeBoxMethod(String filePath, String expectedResult) throws Exception { + protected void invokeBoxMethod(Class clazz, String filePath, String expectedResult) throws Exception { try { - String simpelName = filePath.substring(filePath.lastIndexOf("/") + 1); - String packageName = filePath.replaceAll("\\\\|-|\\.|/", "_"); - Class clazz = Class.forName(packageName + "." + getPackageClassName(simpelName)); Method method = clazz.getMethod("box"); assertEquals(expectedResult, method.invoke(null)); } @@ -34,8 +31,4 @@ public class AbstractCodegenTestCaseOnAndroid extends TestCase { throw new RuntimeException("File: " + filePath, e); } } - - public static String getPackageClassName(String fileName) { - return Character.toUpperCase(fileName.charAt(0)) + fileName.substring(1).replaceAll("\\.kt", "Kt"); - } } diff --git a/compiler/android-tests/android-tests.iml b/compiler/android-tests/android-tests.iml index 63758191184..69e9986eeff 100644 --- a/compiler/android-tests/android-tests.iml +++ b/compiler/android-tests/android-tests.iml @@ -16,5 +16,6 @@ + \ No newline at end of file diff --git a/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.java b/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.java index 4353211b72b..6962d44f924 100644 --- a/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.java +++ b/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.java @@ -31,6 +31,8 @@ import org.jetbrains.kotlin.codegen.GenerationUtils; import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime; import org.jetbrains.kotlin.idea.KotlinFileType; import org.jetbrains.kotlin.load.java.JvmAbi; +import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; +import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.InTextDirectivesUtils; @@ -240,23 +242,28 @@ public class CodegenTestsOnAndroidGenerator extends UsefulTestCase { CodegenTestFiles codegenFile = CodegenTestFiles.create(file.getName(), text, filesHolder.environment.getProject()); filesHolder.files.add(codegenFile.getPsiFile()); - generateTestMethod(printer, generatedTestName, StringUtil.escapeStringCharacters(file.getPath())); + FqName className = PackagePartClassUtils.getPackagePartFqName(new FqName(packageName), file.getName()); + generateTestMethod(printer, generatedTestName, className.toString(), StringUtil.escapeStringCharacters(file.getPath())); } } } } + private static boolean hasJvmNameAnnotation(String text) { + return text.contains("@file:JvmName") || text.contains("@file:kotlin.jvm.JvmName"); + } + private static boolean hasBoxMethod(String text) { return text.contains("fun box()"); } - private String changePackage(String testName, String text) { + private String changePackage(String packageName, String text) { if (text.contains("package ")) { Matcher matcher = packagePattern.matcher(text); - return matcher.replaceAll("package " + testName); + return matcher.replaceAll("package " + packageName); } else { - String packageDirective = "package " + testName + ";\n"; + String packageDirective = "package " + packageName + ";\n"; if (text.contains("@file:")) { int index = text.lastIndexOf("@file:"); int packageDirectiveIndex = text.indexOf("\n", index); @@ -267,10 +274,10 @@ public class CodegenTestsOnAndroidGenerator extends UsefulTestCase { } } - private static void generateTestMethod(Printer p, String testName, String packageName) { + private static void generateTestMethod(Printer p, String testName, String className, String filePath) { p.println("public void test" + testName + "() throws Exception {"); p.pushIndent(); - p.println("invokeBoxMethod(\"" + packageName + "\", \"OK\");"); + p.println("invokeBoxMethod(" + className + ".class, \"" + filePath + "\", \"OK\");"); p.popIndent(); p.println("}"); p.println();