wire trace into JavaDescriptorResolver

This commit is contained in:
Stepan Koltsov
2012-03-23 23:44:12 +04:00
parent d27138e252
commit f73b2c01b4
2 changed files with 17 additions and 16 deletions
@@ -197,6 +197,7 @@ public class JavaDescriptorResolver {
protected JavaSemanticServices semanticServices; protected JavaSemanticServices semanticServices;
private AltClassFinder altClassFinder; private AltClassFinder altClassFinder;
private NamespaceFactory namespaceFactory; private NamespaceFactory namespaceFactory;
private BindingTrace trace;
@Inject @Inject
public void setProject(Project project) { public void setProject(Project project) {
@@ -221,6 +222,11 @@ public class JavaDescriptorResolver {
this.semanticServices = semanticServices; this.semanticServices = semanticServices;
} }
@Inject
public void setTrace(BindingTrace trace) {
this.trace = trace;
}
@Nullable @Nullable
@@ -386,7 +392,7 @@ public class JavaDescriptorResolver {
constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), classData.classDescriptor.getVisibility(), isStatic); constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), classData.classDescriptor.getVisibility(), isStatic);
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType()); constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
classData.classDescriptor.addConstructor(constructorDescriptor, null); classData.classDescriptor.addConstructor(constructorDescriptor, null);
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor); trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
} }
if (psiClass.isAnnotationType()) { if (psiClass.isAnnotationType()) {
// A constructor for an annotation type takes all the "methods" in the @interface as parameters // A constructor for an annotation type takes all the "methods" in the @interface as parameters
@@ -427,7 +433,7 @@ public class JavaDescriptorResolver {
constructorDescriptor.initialize(typeParameters, valueParameters, classData.classDescriptor.getVisibility(), isStatic); constructorDescriptor.initialize(typeParameters, valueParameters, classData.classDescriptor.getVisibility(), isStatic);
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType()); constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
classData.classDescriptor.addConstructor(constructorDescriptor, null); classData.classDescriptor.addConstructor(constructorDescriptor, null);
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor); trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
} }
} }
else { else {
@@ -453,7 +459,7 @@ public class JavaDescriptorResolver {
resolveVisibilityFromPsiModifiers(psiConstructor), isStatic); resolveVisibilityFromPsiModifiers(psiConstructor), isStatic);
constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType()); constructorDescriptor.setReturnType(classData.classDescriptor.getDefaultType());
classData.classDescriptor.addConstructor(constructorDescriptor, null); classData.classDescriptor.addConstructor(constructorDescriptor, null);
semanticServices.getTrace().record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor); trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
} }
} }
@@ -462,7 +468,7 @@ public class JavaDescriptorResolver {
classData.classDescriptor.setClassObjectDescriptor(classObject); classData.classDescriptor.setClassObjectDescriptor(classObject);
} }
semanticServices.getTrace().record(BindingContext.CLASS, psiClass, classData.classDescriptor); trace.record(BindingContext.CLASS, psiClass, classData.classDescriptor);
return classData; return classData;
} }
@@ -790,7 +796,7 @@ public class JavaDescriptorResolver {
for (JetType supertype : result) { for (JetType supertype : result) {
if (ErrorUtils.isErrorType(supertype)) { if (ErrorUtils.isErrorType(supertype)) {
semanticServices.getTrace().record(BindingContext.INCOMPLETE_HIERARCHY, classDescriptor); trace.record(BindingContext.INCOMPLETE_HIERARCHY, classDescriptor);
} }
} }
@@ -901,7 +907,7 @@ public class JavaDescriptorResolver {
); );
namespaceData.namespaceDescriptor.setMemberScope(createJavaPackageScope(new FqName(psiPackage.getQualifiedName()), namespaceData.namespaceDescriptor)); namespaceData.namespaceDescriptor.setMemberScope(createJavaPackageScope(new FqName(psiPackage.getQualifiedName()), namespaceData.namespaceDescriptor));
semanticServices.getTrace().record(BindingContext.NAMESPACE, psiPackage, namespaceData.namespaceDescriptor); trace.record(BindingContext.NAMESPACE, psiPackage, namespaceData.namespaceDescriptor);
// TODO: hack // TODO: hack
namespaceData.kotlin = true; namespaceData.kotlin = true;
return namespaceData; return namespaceData;
@@ -937,7 +943,7 @@ public class JavaDescriptorResolver {
false false
); );
namespaceData.namespaceDescriptor.setMemberScope(new JavaClassMembersScope(namespaceData.namespaceDescriptor, psiClass, semanticServices, true)); namespaceData.namespaceDescriptor.setMemberScope(new JavaClassMembersScope(namespaceData.namespaceDescriptor, psiClass, semanticServices, true));
semanticServices.getTrace().record(BindingContext.NAMESPACE, psiClass, namespaceData.namespaceDescriptor); trace.record(BindingContext.NAMESPACE, psiClass, namespaceData.namespaceDescriptor);
return namespaceData; return namespaceData;
} }
@@ -1313,7 +1319,7 @@ public class JavaDescriptorResolver {
setterDescriptor.initialize(new ValueParameterDescriptorImpl(setterDescriptor, 0, Collections.<AnnotationDescriptor>emptyList(), "p0"/*TODO*/, false, propertyDescriptor.getType(), false, null)); setterDescriptor.initialize(new ValueParameterDescriptorImpl(setterDescriptor, 0, Collections.<AnnotationDescriptor>emptyList(), "p0"/*TODO*/, false, propertyDescriptor.getType(), false, null));
} }
semanticServices.getTrace().record(BindingContext.VARIABLE, anyMember.getMember().psiMember, propertyDescriptor); trace.record(BindingContext.VARIABLE, anyMember.getMember().psiMember, propertyDescriptor);
r.add(propertyDescriptor); r.add(propertyDescriptor);
} }
@@ -1525,7 +1531,7 @@ public class JavaDescriptorResolver {
Modality.convertFromFlags(method.getPsiMethod().hasModifierProperty(PsiModifier.ABSTRACT), !method.isFinal()), Modality.convertFromFlags(method.getPsiMethod().hasModifierProperty(PsiModifier.ABSTRACT), !method.isFinal()),
resolveVisibilityFromPsiModifiers(method.getPsiMethod()) resolveVisibilityFromPsiModifiers(method.getPsiMethod())
); );
semanticServices.getTrace().record(BindingContext.FUNCTION, method.getPsiMethod(), functionDescriptorImpl); trace.record(BindingContext.FUNCTION, method.getPsiMethod(), functionDescriptorImpl);
FunctionDescriptor substitutedFunctionDescriptor = functionDescriptorImpl; FunctionDescriptor substitutedFunctionDescriptor = functionDescriptorImpl;
if (method.getPsiMethod().getContainingClass() != psiClass && !method.isStatic()) { if (method.getPsiMethod().getContainingClass() != psiClass && !method.isStatic()) {
throw new IllegalStateException("non-static method in subclass"); throw new IllegalStateException("non-static method in subclass");
@@ -67,14 +67,9 @@ public class JavaSemanticServices {
return descriptorResolver; return descriptorResolver;
} }
@NotNull
public BindingTrace getTrace() {
return trace;
}
@Nullable @Nullable
public ClassDescriptor getKotlinClassDescriptor(@NotNull FqName qualifiedName) { public ClassDescriptor getKotlinClassDescriptor(@NotNull FqName qualifiedName) {
return getTrace().get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, qualifiedName); return trace.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, qualifiedName);
} }
@Nullable @Nullable
@@ -88,6 +83,6 @@ public class JavaSemanticServices {
@Nullable @Nullable
public NamespaceDescriptor getKotlinNamespaceDescriptor(@NotNull FqName qualifiedName) { public NamespaceDescriptor getKotlinNamespaceDescriptor(@NotNull FqName qualifiedName) {
return getTrace().get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName); return trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName);
} }
} }