Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,13 +1,10 @@
|
||||
package org.jetbrains.jet;
|
||||
|
||||
import com.intellij.lang.LanguageASTFactory;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import com.intellij.psi.impl.PsiFileFactoryImpl;
|
||||
import com.intellij.psi.impl.source.tree.JavaASTFactory;
|
||||
import com.intellij.testFramework.LightVirtualFile;
|
||||
import com.intellij.testFramework.UsefulTestCase;
|
||||
import junit.framework.Test;
|
||||
@@ -70,8 +67,6 @@ public class CompileJavaAgainstKotlinTest extends UsefulTestCase {
|
||||
protected void runTest() throws Throwable {
|
||||
jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdk(myTestRootDisposable);
|
||||
|
||||
LanguageASTFactory.INSTANCE.addExplicitExtension(JavaLanguage.INSTANCE, new JavaASTFactory());
|
||||
|
||||
|
||||
String text = FileUtil.loadFile(ktFile);
|
||||
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
package org.jetbrains.jet;
|
||||
|
||||
import com.intellij.lang.LanguageASTFactory;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import com.intellij.psi.impl.PsiFileFactoryImpl;
|
||||
import com.intellij.psi.impl.source.tree.JavaASTFactory;
|
||||
import com.intellij.testFramework.LightVirtualFile;
|
||||
import com.intellij.testFramework.UsefulTestCase;
|
||||
import junit.framework.Test;
|
||||
@@ -18,15 +15,7 @@ import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||
import org.jetbrains.jet.codegen.GenerationState;
|
||||
import org.jetbrains.jet.compiler.CompileEnvironment;
|
||||
import org.jetbrains.jet.lang.JetSemanticServices;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
@@ -34,8 +23,8 @@ import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeConstructor;
|
||||
import org.jetbrains.jet.lang.types.TypeProjection;
|
||||
import org.jetbrains.jet.lang.types.Variance;
|
||||
import org.jetbrains.jet.plugin.JetLanguage;
|
||||
@@ -44,6 +33,7 @@ import org.junit.Assert;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -92,9 +82,6 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
public void runTest() throws Exception {
|
||||
jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdk(myTestRootDisposable);
|
||||
|
||||
LanguageASTFactory.INSTANCE.addExplicitExtension(JavaLanguage.INSTANCE, new JavaASTFactory());
|
||||
|
||||
|
||||
String text = FileUtil.loadFile(testFile);
|
||||
|
||||
LightVirtualFile virtualFile = new LightVirtualFile(testFile.getName(), JetLanguage.INSTANCE, text);
|
||||
@@ -159,7 +146,8 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
private String serializeContent(ClassDescriptor klass) {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("class ");
|
||||
serialize(klass.getKind(), sb);
|
||||
sb.append(" ");
|
||||
|
||||
serialize(klass, sb);
|
||||
|
||||
@@ -174,9 +162,6 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
|
||||
sb.append(" {\n");
|
||||
|
||||
if (false) {
|
||||
// TODO: for some reason I don't understand scope of ClassDescriptor came from source is empty
|
||||
|
||||
List<TypeProjection> typeArguments = new ArrayList<TypeProjection>();
|
||||
for (TypeParameterDescriptor param : klass.getTypeConstructor().getParameters()) {
|
||||
typeArguments.add(new TypeProjection(Variance.INVARIANT, param.getDefaultType()));
|
||||
@@ -184,15 +169,37 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
|
||||
JetScope memberScope = klass.getMemberScope(typeArguments);
|
||||
for (DeclarationDescriptor member : memberScope.getAllDescriptors()) {
|
||||
// TODO
|
||||
if (member.getName().equals("equals") || member.getName().equals("hashCode")
|
||||
|| member.getName().equals("wait") || member.getName().equals("notify") || member.getName().equals("notifyAll")
|
||||
|| member.getName().equals("toString") || member.getName().equals("getClass")
|
||||
|| member.getName().equals("clone") || member.getName().equals("finalize")
|
||||
|| member.getName().equals("getTypeInfo") || member.getName().equals("$setTypeInfo") || member.getName().equals("$typeInfo")
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sb.append(" ");
|
||||
serialize(member, sb);
|
||||
sb.append("\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sb.append("}\n");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void serialize(ClassKind kind, StringBuilder sb) {
|
||||
switch (kind) {
|
||||
case CLASS:
|
||||
sb.append("class");
|
||||
break;
|
||||
case TRAIT:
|
||||
sb.append("trait");
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void compareFunctions(@NotNull FunctionDescriptor a, @NotNull FunctionDescriptor b) {
|
||||
@@ -220,6 +227,12 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
serializeCommaSeparated(fun.getTypeParameters(), sb);
|
||||
sb.append(">");
|
||||
}
|
||||
|
||||
if (fun.getReceiverParameter().exists()) {
|
||||
serialize(fun.getReceiverParameter(), sb);
|
||||
sb.append(".");
|
||||
}
|
||||
|
||||
sb.append(fun.getName());
|
||||
sb.append("(");
|
||||
serializeCommaSeparated(fun.getValueParameters(), sb);
|
||||
@@ -227,6 +240,21 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
serialize(fun.getReturnType(), sb);
|
||||
}
|
||||
|
||||
private void serialize(ExtensionReceiver extensionReceiver, StringBuilder sb) {
|
||||
serialize(extensionReceiver.getType(), sb);
|
||||
}
|
||||
|
||||
private void serialize(PropertyDescriptor prop, StringBuilder sb) {
|
||||
if (prop.isVar()) {
|
||||
sb.append("var ");
|
||||
} else {
|
||||
sb.append("val ");
|
||||
}
|
||||
sb.append(prop.getName());
|
||||
sb.append(": ");
|
||||
serialize(prop.getOutType(), sb);
|
||||
}
|
||||
|
||||
private void serialize(ValueParameterDescriptor valueParameter, StringBuilder sb) {
|
||||
sb.append(valueParameter.getName());
|
||||
sb.append(": ");
|
||||
@@ -274,16 +302,20 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
}
|
||||
|
||||
private void serializeCommaSeparated(List<?> list, StringBuilder sb) {
|
||||
serializeSeparated(list, sb, ", ");
|
||||
}
|
||||
|
||||
private void serializeSeparated(List<?> list, StringBuilder sb, String sep) {
|
||||
boolean first = true;
|
||||
for (Object o : list) {
|
||||
if (!first) {
|
||||
sb.append(", ");
|
||||
sb.append(sep);
|
||||
}
|
||||
serialize(o, sb);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Method getMethodToSerialize(Object o) {
|
||||
// TODO: cache
|
||||
for (Method method : ReadClassDataTest.class.getDeclaredMethods()) {
|
||||
@@ -311,6 +343,10 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
Method method = getMethodToSerialize(o);
|
||||
invoke(method, this, o, sb);
|
||||
}
|
||||
|
||||
private void serialize(String s, StringBuilder sb) {
|
||||
sb.append(s);
|
||||
}
|
||||
|
||||
private void serialize(ModuleDescriptor module, StringBuilder sb) {
|
||||
// nop
|
||||
@@ -331,11 +367,20 @@ public class ReadClassDataTest extends UsefulTestCase {
|
||||
sb.append(".");
|
||||
sb.append(ns.getName());
|
||||
}
|
||||
|
||||
|
||||
private void serialize(TypeParameterDescriptor param, StringBuilder sb) {
|
||||
serialize(param.getVariance(), sb);
|
||||
sb.append(param.getName());
|
||||
// TODO: serialize bounds
|
||||
if (!param.getUpperBounds().isEmpty()) {
|
||||
sb.append(" : ");
|
||||
List<String> list = new ArrayList<String>();
|
||||
for (JetType upper : param.getUpperBounds()) {
|
||||
list.add(serialize(upper));
|
||||
}
|
||||
Collections.sort(list);
|
||||
serializeSeparated(list, sb, " & "); // TODO: use where
|
||||
}
|
||||
// TODO: lower bounds
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,11 @@ public class ArrayGenTest extends CodegenTestCase {
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testKt779 () throws Exception {
|
||||
blackBoxFile("regressions/kt779.jet");
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testCreateMultiInt () throws Exception {
|
||||
loadText("fun foo() = Array<Array<Int>> (5, { Array<Int>(it, {239}) })");
|
||||
Method foo = generateFunction();
|
||||
|
||||
@@ -231,8 +231,25 @@ public class ControlStructuresTest extends CodegenTestCase {
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testKt772() throws Exception {
|
||||
blackBoxFile("regressions/kt772.jet");
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testQuicksort() throws Exception {
|
||||
blackBoxFile("controlStructures/quicksort.jet");
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testSynchronized() throws Exception {
|
||||
createEnvironmentWithFullJdk();
|
||||
blackBoxFile("controlStructures/sync.jet");
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testIfInWhile() throws Exception {
|
||||
createEnvironmentWithFullJdk();
|
||||
blackBoxFile("controlStructures/ifInWhile.jet");
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,6 +138,11 @@ public class TypeInfoTest extends CodegenTestCase {
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testKt511() throws Exception {
|
||||
blackBoxFile("regressions/kt511.jet");
|
||||
// System.out.println(generateToText());
|
||||
}
|
||||
|
||||
public void testInner() throws Exception {
|
||||
blackBoxFile("typeInfo/inner.jet");
|
||||
System.out.println(generateToText());
|
||||
|
||||
Reference in New Issue
Block a user