Tests for additional lazy resolve (local classes/objects in class initializers)

This commit is contained in:
Alexey Sedunov
2013-12-24 12:07:02 +04:00
parent adddb70e50
commit e2118b7ae8
11 changed files with 251 additions and 8 deletions
@@ -41,14 +41,19 @@ import java.util.Collection;
import java.util.List;
public abstract class AbstractLazyResolveDescriptorRendererTest extends KotlinTestWithEnvironment {
@Override
protected JetCoreEnvironment createEnvironment() {
return createEnvironmentWithMockJdk(ConfigurationKind.ALL);
}
protected DeclarationDescriptor getDescriptor(JetDeclaration declaration, ResolveSession resolveSession) {
return resolveSession.resolveToDescriptor(declaration);
}
protected void doTest(@NotNull String testFile) throws IOException {
JetFile psiFile = JetPsiFactory.createFile(getProject(), FileUtil.loadFile(new File(testFile), true));
String fileText = FileUtil.loadFile(new File(testFile), true);
JetFile psiFile = JetPsiFactory.createFile(getProject(), fileText);
Collection<JetFile> files = Lists.newArrayList(psiFile);
final ModuleDescriptorImpl lazyModule = AnalyzerFacadeForJVM.createJavaModule("<lazy module>");
@@ -82,13 +87,13 @@ public abstract class AbstractLazyResolveDescriptorRendererTest extends KotlinTe
}
if (declaringElement instanceof JetNamedFunction) {
JetNamedFunction jetNamedFunction = (JetNamedFunction) declaringElement;
FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(jetNamedFunction);
FunctionDescriptor functionDescriptor = (FunctionDescriptor) getDescriptor(jetNamedFunction, resolveSession);
addCorrespondingParameterDescriptor(functionDescriptor, parameter);
}
else if (declaringElement instanceof JetClass) {
// Primary constructor parameter
JetClass jetClass = (JetClass) declaringElement;
ClassDescriptor classDescriptor = resolveSession.getClassDescriptor(jetClass);
ClassDescriptor classDescriptor = (ClassDescriptor) getDescriptor(jetClass, resolveSession);
addCorrespondingParameterDescriptor(classDescriptor.getConstructors().iterator().next(), parameter);
}
else {
@@ -102,23 +107,30 @@ public abstract class AbstractLazyResolveDescriptorRendererTest extends KotlinTe
descriptors.add(valueParameterDescriptor);
}
}
parameter.acceptChildren(this);
}
@Override
public void visitPropertyAccessor(@NotNull JetPropertyAccessor accessor) {
JetProperty parent = (JetProperty) accessor.getParent();
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(parent);
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) getDescriptor(parent, resolveSession);
if (accessor.isGetter()) {
descriptors.add(propertyDescriptor.getGetter());
}
else {
descriptors.add(propertyDescriptor.getSetter());
}
accessor.acceptChildren(this);
}
@Override
public void visitAnonymousInitializer(@NotNull JetClassInitializer initializer) {
initializer.acceptChildren(this);
}
@Override
public void visitDeclaration(@NotNull JetDeclaration element) {
DeclarationDescriptor descriptor = resolveSession.resolveToDescriptor(element);
DeclarationDescriptor descriptor = getDescriptor(element, resolveSession);
descriptors.add(descriptor);
if (descriptor instanceof ClassDescriptor) {
descriptors.addAll(((ClassDescriptor) descriptor).getConstructors());