cleanup in JavaDescriptorResolver

This commit is contained in:
Stepan Koltsov
2012-02-15 00:34:28 +04:00
parent 274406b72b
commit cbdeb23935
@@ -534,35 +534,26 @@ public class JavaDescriptorResolver {
} }
/** /**
* @see #resolveMethodTypeParametersFromJetSignature(String, FunctionDescriptor) * @see #resolveMethodTypeParametersFromJetSignature(String, com.intellij.psi.PsiMethod, org.jetbrains.jet.lang.descriptors.DeclarationDescriptor, TypeVariableResolver)
*/ */
private List<TypeParameterDescriptorInitialization> resolveClassTypeParametersFromJetSignature(String jetSignature, final PsiClass clazz, private List<TypeParameterDescriptorInitialization> resolveClassTypeParametersFromJetSignature(String jetSignature, final PsiClass clazz,
final ClassDescriptor classDescriptor, final TypeVariableResolver outerClassTypeVariableResolver) { final ClassDescriptor classDescriptor, final TypeVariableResolver outerClassTypeVariableResolver) {
final List<TypeParameterDescriptorInitialization> r = new ArrayList<TypeParameterDescriptorInitialization>(); final List<TypeParameterDescriptorInitialization> r = new ArrayList<TypeParameterDescriptorInitialization>();
class MyTypeVariableResolver implements TypeVariableResolver {
@NotNull final List<TypeParameterDescriptor> previousTypeParameters = new ArrayList<TypeParameterDescriptor>();
@Override // note changes state in this method
public TypeParameterDescriptor getTypeVariable(@NotNull String name) { final TypeVariableResolver typeVariableResolver = new TypeVariableResolverFromTypeDescriptors(previousTypeParameters, outerClassTypeVariableResolver);
for (TypeParameterDescriptorInitialization typeParameter : r) {
if (typeParameter.descriptor.getName().equals(name)) {
return typeParameter.descriptor;
}
}
return outerClassTypeVariableResolver.getTypeVariable(name);
}
}
new JetSignatureReader(jetSignature).accept(new JetSignatureExceptionsAdapter() { new JetSignatureReader(jetSignature).accept(new JetSignatureExceptionsAdapter() {
private int formalTypeParameterIndex = 0; private int formalTypeParameterIndex = 0;
@Override @Override
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) { public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) {
return new JetSignatureTypeParameterVisitor(classDescriptor, clazz, name, reified, formalTypeParameterIndex++, variance, new MyTypeVariableResolver()) { return new JetSignatureTypeParameterVisitor(classDescriptor, clazz, name, reified, formalTypeParameterIndex++, variance, typeVariableResolver) {
@Override @Override
protected void done(TypeParameterDescriptorInitialization typeParameterDescriptor) { protected void done(TypeParameterDescriptorInitialization typeParameterDescriptor) {
r.add(typeParameterDescriptor); r.add(typeParameterDescriptor);
previousTypeParameters.add(typeParameterDescriptor.descriptor);
} }
}; };
} }
@@ -1489,30 +1480,21 @@ public class JavaDescriptorResolver {
{ {
final List<TypeParameterDescriptorInitialization> r = new ArrayList<TypeParameterDescriptorInitialization>(); final List<TypeParameterDescriptorInitialization> r = new ArrayList<TypeParameterDescriptorInitialization>();
class MyTypeVariableResolver implements TypeVariableResolver { final List<TypeParameterDescriptor> previousTypeParameters = new ArrayList<TypeParameterDescriptor>();
// note changes state in this method
final TypeVariableResolver typeVariableResolver = new TypeVariableResolverFromTypeDescriptors(previousTypeParameters, classTypeVariableResolver);
@NotNull
@Override
public TypeParameterDescriptor getTypeVariable(@NotNull String name) {
for (TypeParameterDescriptorInitialization typeParameter : r) {
if (typeParameter.descriptor.getName().equals(name)) {
return typeParameter.descriptor;
}
}
return classTypeVariableResolver.getTypeVariable(name);
}
}
new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(new JetSignatureExceptionsAdapter() { new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(new JetSignatureExceptionsAdapter() {
private int formalTypeParameterIndex = 0; private int formalTypeParameterIndex = 0;
@Override @Override
public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) { public JetSignatureVisitor visitFormalTypeParameter(final String name, final TypeInfoVariance variance, boolean reified) {
return new JetSignatureTypeParameterVisitor(functionDescriptor, method, name, reified, formalTypeParameterIndex++, variance, new MyTypeVariableResolver()) { return new JetSignatureTypeParameterVisitor(functionDescriptor, method, name, reified, formalTypeParameterIndex++, variance, typeVariableResolver) {
@Override @Override
protected void done(TypeParameterDescriptorInitialization typeParameterDescriptor) { protected void done(TypeParameterDescriptorInitialization typeParameterDescriptor) {
r.add(typeParameterDescriptor); r.add(typeParameterDescriptor);
previousTypeParameters.add(typeParameterDescriptor.descriptor);
} }
}; };