Important JavaDescriptorResolver refactoring

This patch implement own member filling with supertype scope. Before this patch JDR relied on
Idea hierarchy resolver.

This patch does two things:

* copies FunctionDescriptors from supertype scopes
* rewrites containingDeclaration similary to how it is done in previous patch

Patch is incomplete, in particular properties are not yet initialized properly, code needs cleanup,
however the most important part of refactoring is done, and tests pass.
This commit is contained in:
Stepan Koltsov
2012-02-15 00:02:03 +04:00
parent 0f52f2a5f8
commit 9248cf9659
11 changed files with 246 additions and 104 deletions
@@ -18,7 +18,19 @@ package org.jetbrains.jet.compiler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.codegen.PropertyCodegen;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassKind;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.Modality;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JavaNamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -32,7 +44,12 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Method;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* @author Stepan Koltsov
@@ -166,8 +183,11 @@ class NamespaceComparator {
case TRAIT:
sb.append("trait");
break;
case OBJECT:
sb.append("object");
break;
default:
throw new IllegalStateException();
throw new IllegalStateException("unknown class kind: " + kind);
}
}
@@ -184,6 +204,10 @@ class NamespaceComparator {
public void serialize(FunctionDescriptor fun) {
serialize(fun.getModality());
sb.append(" ");
if (!fun.getOverriddenDescriptors().isEmpty()) {
sb.append("override /*" + fun.getOverriddenDescriptors().size() + "*/ ");
}
if (fun instanceof ConstructorDescriptor) {
sb.append("/*constructor*/ ");
@@ -473,6 +497,12 @@ class NamespaceComparator {
for (String memberString : memberStrings) {
sb.append(indent(memberString));
}
if (klass.getClassObjectDescriptor() != null) {
StringBuilder sbForClassObject = new StringBuilder();
new FullContentSerialier(sbForClassObject).serialize(klass.getClassObjectDescriptor());
sb.append(indent(sbForClassObject.toString()));
}
sb.append("}\n");
}