cleanup in JavaDescriptorResolver
This commit is contained in:
+12
-30
@@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user