Minor, extract method in CodegenTestCase
This commit is contained in:
@@ -38,8 +38,7 @@ public class AnnotationGenTest extends CodegenTestCase {
|
|||||||
|
|
||||||
private ClassLoader loadFileGetClassLoader(@NotNull String text) {
|
private ClassLoader loadFileGetClassLoader(@NotNull String text) {
|
||||||
loadText(text);
|
loadText(text);
|
||||||
ClassFileFactory state = generateClassesInFile();
|
return generateAndCreateClassLoader();
|
||||||
return createClassLoader(state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Class<?> getPackageClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
|
private Class<?> getPackageClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
|
||||||
|
|||||||
@@ -53,8 +53,7 @@ public class ClassGenTest extends CodegenTestCase {
|
|||||||
|
|
||||||
public void testDelegationToVal() throws Exception {
|
public void testDelegationToVal() throws Exception {
|
||||||
loadFile("classes/delegationToVal.kt");
|
loadFile("classes/delegationToVal.kt");
|
||||||
ClassFileFactory state = generateClassesInFile();
|
GeneratedClassLoader loader = generateAndCreateClassLoader();
|
||||||
GeneratedClassLoader loader = createClassLoader(state);
|
|
||||||
Class aClass = loader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT));
|
Class aClass = loader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT));
|
||||||
assertEquals("OK", aClass.getMethod("box").invoke(null));
|
assertEquals("OK", aClass.getMethod("box").invoke(null));
|
||||||
|
|
||||||
@@ -139,7 +138,7 @@ public class ClassGenTest extends CodegenTestCase {
|
|||||||
|
|
||||||
public void testClassObjectIsInnerClass() throws Exception {
|
public void testClassObjectIsInnerClass() throws Exception {
|
||||||
loadFile("classes/classObjectIsInnerClass.kt");
|
loadFile("classes/classObjectIsInnerClass.kt");
|
||||||
GeneratedClassLoader loader = createClassLoader(generateClassesInFile());
|
GeneratedClassLoader loader = generateAndCreateClassLoader();
|
||||||
Class<?> a = loader.loadClass("A");
|
Class<?> a = loader.loadClass("A");
|
||||||
Class<?> aClassObject = loader.loadClass("A" + JvmAbi.CLASS_OBJECT_SUFFIX);
|
Class<?> aClassObject = loader.loadClass("A" + JvmAbi.CLASS_OBJECT_SUFFIX);
|
||||||
assertSameElements(a.getDeclaredClasses(), aClassObject);
|
assertSameElements(a.getDeclaredClasses(), aClassObject);
|
||||||
|
|||||||
@@ -115,6 +115,11 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
|||||||
return initializedClassLoader;
|
return initializedClassLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
protected GeneratedClassLoader generateAndCreateClassLoader() {
|
||||||
|
return createClassLoader(generateClassesInFile());
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected URL[] getClassPathURLs() {
|
protected URL[] getClassPathURLs() {
|
||||||
List<URL> urls = Lists.newArrayList();
|
List<URL> urls = Lists.newArrayList();
|
||||||
@@ -159,7 +164,7 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
|||||||
@NotNull
|
@NotNull
|
||||||
protected Class<?> generateClass(@NotNull String name) {
|
protected Class<?> generateClass(@NotNull String name) {
|
||||||
try {
|
try {
|
||||||
return createClassLoader(generateClassesInFile()).loadClass(name);
|
return generateAndCreateClassLoader().loadClass(name);
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
fail("No class file was generated for: " + name);
|
fail("No class file was generated for: " + name);
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.jet.codegen;
|
|||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.asm4.Opcodes;
|
import org.jetbrains.asm4.Opcodes;
|
||||||
import org.jetbrains.asm4.Type;
|
|
||||||
import org.jetbrains.jet.ConfigurationKind;
|
import org.jetbrains.jet.ConfigurationKind;
|
||||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
import org.jetbrains.jet.lang.parsing.JetScriptDefinition;
|
||||||
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
import org.jetbrains.jet.lang.parsing.JetScriptDefinitionProvider;
|
||||||
@@ -52,14 +51,8 @@ public class ScriptGenTest extends CodegenTestCase {
|
|||||||
private void blackBoxScript(String filename) {
|
private void blackBoxScript(String filename) {
|
||||||
loadFile(filename);
|
loadFile(filename);
|
||||||
|
|
||||||
ClassFileFactory factory = generateClassesInFile();
|
|
||||||
|
|
||||||
GeneratedClassLoader loader = createClassLoader(factory);
|
|
||||||
|
|
||||||
String scriptClassName = ScriptNameUtil.classNameForScript(myFiles.getPsiFile());
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class<?> scriptClass = loader.loadClass(scriptClassName);
|
Class<?> scriptClass = generateClass(ScriptNameUtil.classNameForScript(myFiles.getPsiFile()));
|
||||||
|
|
||||||
Constructor constructor = getConstructor(scriptClass);
|
Constructor constructor = getConstructor(scriptClass);
|
||||||
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
scriptInstance = constructor.newInstance(myFiles.getScriptParameterValues().toArray());
|
||||||
@@ -88,13 +81,14 @@ public class ScriptGenTest extends CodegenTestCase {
|
|||||||
}
|
}
|
||||||
catch (Throwable e) {
|
catch (Throwable e) {
|
||||||
System.out.println(generateToText());
|
System.out.println(generateToText());
|
||||||
ExceptionUtils.rethrow(e);
|
throw ExceptionUtils.rethrow(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Constructor getConstructor(@NotNull Class<?> clazz) {
|
@NotNull
|
||||||
Constructor [] constructors = clazz.getConstructors();
|
protected static Constructor getConstructor(@NotNull Class<?> clazz) {
|
||||||
if (constructors == null || constructors.length != 1) {
|
Constructor[] constructors = clazz.getConstructors();
|
||||||
|
if (constructors.length != 1) {
|
||||||
throw new IllegalArgumentException("Script class should have one constructor: " + clazz);
|
throw new IllegalArgumentException("Script class should have one constructor: " + clazz);
|
||||||
}
|
}
|
||||||
return constructors[0];
|
return constructors[0];
|
||||||
|
|||||||
@@ -23,9 +23,7 @@ import org.jetbrains.jet.ConfigurationKind;
|
|||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.TestJdkKind;
|
import org.jetbrains.jet.TestJdkKind;
|
||||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
|
||||||
import org.jetbrains.jet.codegen.CodegenTestCase;
|
import org.jetbrains.jet.codegen.CodegenTestCase;
|
||||||
import org.jetbrains.jet.codegen.GeneratedClassLoader;
|
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||||
import org.jetbrains.jet.utils.ExceptionUtils;
|
import org.jetbrains.jet.utils.ExceptionUtils;
|
||||||
@@ -92,22 +90,17 @@ public abstract class AbstractBlackBoxCodegenTest extends CodegenTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void blackBox() {
|
private void blackBox() {
|
||||||
ClassFileFactory factory = generateClassesInFile();
|
|
||||||
GeneratedClassLoader loader = createClassLoader(factory);
|
|
||||||
|
|
||||||
// If there are many files, the first of them should contain the 'box(): String' function
|
// If there are many files, the first of them should contain the 'box(): String' function
|
||||||
JetFile firstFile = myFiles.getPsiFiles().get(0);
|
JetFile firstFile = myFiles.getPsiFiles().get(0);
|
||||||
String fqName = getPackageClassFqName(JetPsiUtil.getFQName(firstFile)).asString();
|
String fqName = getPackageClassFqName(JetPsiUtil.getFQName(firstFile)).asString();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class<?> namespaceClass = loader.loadClass(fqName);
|
Method method = generateClass(fqName).getMethod("box");
|
||||||
Method method = namespaceClass.getMethod("box");
|
|
||||||
|
|
||||||
String r = (String) method.invoke(null);
|
String r = (String) method.invoke(null);
|
||||||
assertEquals("OK", r);
|
assertEquals("OK", r);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
System.out.println(generateToText());
|
System.out.println(generateToText());
|
||||||
ExceptionUtils.rethrow(e);
|
throw ExceptionUtils.rethrow(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user