Remove ClassLoaderIsolationUtil
Minimize usages of jet.* in Java code: this will help in migration of jet.* to package kotlin. Since tests will work with fq names instead of Class<?> instances from now on, ClassLoaderIsolationUtil is useless now (except for one unrelated method, which was moved to CodegenTestUtil)
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import jet.JetObject;
|
||||
import com.google.common.collect.Sets;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
@@ -222,17 +222,17 @@ public class AnnotationGenTest extends CodegenTestCase {
|
||||
assertNotNull(annotation);
|
||||
}
|
||||
|
||||
public void testSimplestAnnotationClass() throws NoSuchFieldException, NoSuchMethodException {
|
||||
public void testSimplestAnnotationClass() {
|
||||
loadText("annotation class A");
|
||||
Class aClass = generateClass("A");
|
||||
Class<?> aClass = generateClass("A");
|
||||
Class[] interfaces = aClass.getInterfaces();
|
||||
assertEquals(2, interfaces.length);
|
||||
assertEquals(0, aClass.getDeclaredMethods().length);
|
||||
Class annotationClass = getCorrespondingClass(Annotation.class);
|
||||
Class jetObjectClass = getCorrespondingClass(JetObject.class);
|
||||
assertTrue(annotationClass == interfaces[0] || annotationClass == interfaces[1]);
|
||||
assertTrue(jetObjectClass == interfaces[0] || jetObjectClass == interfaces[1]);
|
||||
assertTrue(aClass.isAnnotation());
|
||||
assertEquals(2, interfaces.length);
|
||||
assertEquals(
|
||||
Sets.newHashSet("java.lang.annotation.Annotation", "jet.JetObject"),
|
||||
Sets.newHashSet(interfaces[0].getName(), interfaces[1].getName())
|
||||
);
|
||||
}
|
||||
|
||||
public void testAnnotationClassWithStringProperty()
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import static junit.framework.Assert.*;
|
||||
|
||||
public class ClassLoaderIsolationUtil {
|
||||
|
||||
public static void assertEquals(Class<?> expected, Class<?> actual) {
|
||||
if (actual == null) {
|
||||
assertNull(expected);
|
||||
}
|
||||
else Assert.assertEquals(getClassFromClassLoader(expected, actual.getClassLoader()), actual);
|
||||
}
|
||||
|
||||
public static Class<? extends Annotation> getAnnotationClass(Class<? extends Annotation> annotationClass, ClassLoader classLoader) {
|
||||
return (Class<? extends Annotation>) getClassFromClassLoader(annotationClass, classLoader);
|
||||
}
|
||||
|
||||
public static Object getAnnotationAttribute(Object annotation, String name) {
|
||||
try {
|
||||
return annotation.getClass().getMethod(name).invoke(annotation);
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
fail(e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Class<?> getClassFromClassLoader(Class<?> classForName, ClassLoader classLoader) {
|
||||
try {
|
||||
return classLoader.loadClass(classForName.getName());
|
||||
}
|
||||
catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
fail(e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -38,6 +38,7 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.utils.UtilsPackage;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -282,11 +283,14 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
||||
return method;
|
||||
}
|
||||
|
||||
public Class<? extends Annotation> getCorrespondingAnnotationClass(Class<? extends Annotation> classForName) {
|
||||
return ClassLoaderIsolationUtil.getAnnotationClass(classForName, initializedClassLoader);
|
||||
}
|
||||
|
||||
public Class<?> getCorrespondingClass(Class<?> classForName) {
|
||||
return ClassLoaderIsolationUtil.getClassFromClassLoader(classForName, initializedClassLoader);
|
||||
@NotNull
|
||||
public Class<? extends Annotation> loadAnnotationClassQuietly(@NotNull String fqName) {
|
||||
try {
|
||||
//noinspection unchecked
|
||||
return (Class<? extends Annotation>) initializedClassLoader.loadClass(fqName);
|
||||
}
|
||||
catch (ClassNotFoundException e) {
|
||||
throw UtilsPackage.rethrow(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,4 +138,14 @@ public class CodegenTestUtil {
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Object getAnnotationAttribute(@NotNull Object annotation, @NotNull String name) {
|
||||
try {
|
||||
return annotation.getClass().getMethod(name).invoke(annotation);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw UtilsPackage.rethrow(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,9 +50,10 @@ public class JUnitUsageGenTest extends CodegenTestCase {
|
||||
Class<?> packageClass = generatePackageClass();
|
||||
Method method = packageClass.getMethod("foo", Method.class);
|
||||
method.setAccessible(true);
|
||||
Annotation annotation = method.getAnnotation(getCorrespondingAnnotationClass(Test.class));
|
||||
assertEquals(ClassLoaderIsolationUtil.getAnnotationAttribute(annotation, "timeout"), 0l);
|
||||
ClassLoaderIsolationUtil.assertEquals(Test.None.class, (Class<?>) ClassLoaderIsolationUtil.getAnnotationAttribute(annotation,
|
||||
"expected"));
|
||||
Annotation annotation = method.getAnnotation(loadAnnotationClassQuietly(Test.class.getName()));
|
||||
assertEquals(CodegenTestUtil.getAnnotationAttribute(annotation, "timeout"), Long.valueOf(0));
|
||||
Class<?> expected = (Class<?>) CodegenTestUtil.getAnnotationAttribute(annotation, "expected");
|
||||
assertNotNull(expected);
|
||||
assertEquals(Test.None.class.getName(), expected.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import jet.runtime.typeinfo.JetValueParameter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
|
||||
@@ -30,24 +29,19 @@ public class JetValueParameterAnnotationTest extends CodegenTestCase {
|
||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||
}
|
||||
|
||||
private static class ValueParameter {
|
||||
public final String name;
|
||||
public final String type;
|
||||
|
||||
private ValueParameter(@NotNull String name, @NotNull String type) {
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JetValueParameter valueParameter(@NotNull final String name, final boolean nullable) {
|
||||
return new JetValueParameter() {
|
||||
@Override
|
||||
public String name() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String type() {
|
||||
return nullable ? "?" : "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends Annotation> annotationType() {
|
||||
return JetValueParameter.class;
|
||||
}
|
||||
};
|
||||
private static ValueParameter valueParameter(@NotNull String name, boolean nullable) {
|
||||
return new ValueParameter(name, nullable ? "?" : "");
|
||||
}
|
||||
|
||||
public void testOneNotNullParam() {
|
||||
@@ -95,7 +89,7 @@ public class JetValueParameterAnnotationTest extends CodegenTestCase {
|
||||
);
|
||||
}
|
||||
|
||||
private void doTest(@NotNull String code, @NotNull JetValueParameter... expected) {
|
||||
private void doTest(@NotNull String code, @NotNull ValueParameter... expected) {
|
||||
loadText(code);
|
||||
|
||||
Annotation[][] annotations = generateFunction().getParameterAnnotations();
|
||||
@@ -104,9 +98,9 @@ public class JetValueParameterAnnotationTest extends CodegenTestCase {
|
||||
for (int i = 0, length = annotations.length; i < length; i++) {
|
||||
assertSize(1, annotations[i]);
|
||||
Annotation annotation = annotations[i][0];
|
||||
ClassLoaderIsolationUtil.assertEquals(JetValueParameter.class, annotation.annotationType());
|
||||
assertEquals(expected[i].name(), ClassLoaderIsolationUtil.getAnnotationAttribute(annotation, "name"));
|
||||
assertEquals(expected[i].type(), ClassLoaderIsolationUtil.getAnnotationAttribute(annotation, "type"));
|
||||
assertEquals("jet.runtime.typeinfo.JetValueParameter", annotation.annotationType().getName());
|
||||
assertEquals(expected[i].name, CodegenTestUtil.getAnnotationAttribute(annotation, "name"));
|
||||
assertEquals(expected[i].type, CodegenTestUtil.getAnnotationAttribute(annotation, "type"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import jet.KotlinClass;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.descriptors.serialization.ClassData;
|
||||
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||
|
||||
@@ -48,13 +48,15 @@ public class KotlinClassAnnotationTest extends CodegenTestCase {
|
||||
"}\n");
|
||||
Class aClass = generateClass(PACKAGE_NAME + "." + CLASS_NAME);
|
||||
|
||||
Class<? extends Annotation> annotationClass = getCorrespondingAnnotationClass(KotlinClass.class);
|
||||
Class<? extends Annotation> annotationClass = loadAnnotationClassQuietly(JvmAnnotationNames.KOTLIN_CLASS.asString());
|
||||
assertTrue(aClass.isAnnotationPresent(annotationClass));
|
||||
Annotation kotlinClass = aClass.getAnnotation(annotationClass);
|
||||
|
||||
ClassData data = JavaProtoBufUtil.readClassDataFrom((String[]) ClassLoaderIsolationUtil.getAnnotationAttribute(kotlinClass, "data"));
|
||||
String[] data = (String[]) CodegenTestUtil.getAnnotationAttribute(kotlinClass, "data");
|
||||
assertNotNull(data);
|
||||
ClassData classData = JavaProtoBufUtil.readClassDataFrom(data);
|
||||
|
||||
Set<String> callableNames = collectCallableNames(data.getClassProto().getMemberList(), data.getNameResolver());
|
||||
Set<String> callableNames = collectCallableNames(classData.getClassProto().getMemberList(), classData.getNameResolver());
|
||||
assertSameElements(Arrays.asList("foo", "bar"), callableNames);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import jet.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
|
||||
import org.jetbrains.jet.descriptors.serialization.NameResolver;
|
||||
import org.jetbrains.jet.descriptors.serialization.PackageData;
|
||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
@@ -52,16 +52,17 @@ public class KotlinPackageAnnotationTest extends CodegenTestCase {
|
||||
"object C\n");
|
||||
Class aClass = generateClass(PackageClassUtils.getPackageClassFqName(PACKAGE_NAME).asString());
|
||||
|
||||
Class<? extends Annotation> annotationClass = getCorrespondingAnnotationClass(KotlinPackage.class);
|
||||
Class<? extends Annotation> annotationClass = loadAnnotationClassQuietly(JvmAnnotationNames.KOTLIN_PACKAGE.asString());
|
||||
assertTrue(aClass.isAnnotationPresent(annotationClass));
|
||||
assertTrue(aClass.isAnnotationPresent(annotationClass));
|
||||
|
||||
Annotation kotlinPackage = aClass.getAnnotation(annotationClass);
|
||||
|
||||
PackageData data = JavaProtoBufUtil.readPackageDataFrom((String[]) ClassLoaderIsolationUtil.getAnnotationAttribute(kotlinPackage,
|
||||
"data"));
|
||||
String[] data = (String[]) CodegenTestUtil.getAnnotationAttribute(kotlinPackage, "data");
|
||||
assertNotNull(data);
|
||||
PackageData packageData = JavaProtoBufUtil.readPackageDataFrom(data);
|
||||
|
||||
Set<String> callableNames = collectCallableNames(data.getPackageProto().getMemberList(), data.getNameResolver());
|
||||
Set<String> callableNames = collectCallableNames(packageData.getPackageProto().getMemberList(), packageData.getNameResolver());
|
||||
assertSameElements(callableNames, Arrays.asList("foo", "bar"));
|
||||
}
|
||||
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
|
||||
package org.jetbrains.jet.codegen;
|
||||
|
||||
import jet.KotlinPackageFragment;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.OutputFile;
|
||||
import org.jetbrains.jet.OutputFileCollection;
|
||||
import org.jetbrains.jet.lang.resolve.java.AbiVersionUtil;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -49,16 +49,17 @@ public class KotlinPackageFragmentAnnotationTest extends CodegenTestCase {
|
||||
String fqName = filePath.substring(0, filePath.length() - ".class".length()).replace('/', '.');
|
||||
Class aClass = generateClass(fqName);
|
||||
|
||||
Class<? extends Annotation> annotationClass = getCorrespondingAnnotationClass(KotlinPackageFragment.class);
|
||||
Class<? extends Annotation> annotationClass = loadAnnotationClassQuietly(JvmAnnotationNames.KOTLIN_PACKAGE_FRAGMENT.asString());
|
||||
|
||||
assertTrue("No KotlinPackageFragment annotation on a package fragment",
|
||||
aClass.isAnnotationPresent(annotationClass));
|
||||
|
||||
Annotation kotlinPackageFragment = aClass.getAnnotation(annotationClass);
|
||||
|
||||
Integer version = (Integer) CodegenTestUtil.getAnnotationAttribute(kotlinPackageFragment, "abiVersion");
|
||||
assertNotNull(version);
|
||||
assertTrue("KotlinPackageFragment annotation is written with an unsupported format",
|
||||
AbiVersionUtil.isAbiVersionCompatible(
|
||||
(Integer) ClassLoaderIsolationUtil.getAnnotationAttribute(kotlinPackageFragment, "abiVersion")));
|
||||
AbiVersionUtil.isAbiVersionCompatible(version));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user