From cbdeb2393509890e0820aaa8b5f3d8a1e6addf8f Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 15 Feb 2012 00:34:28 +0400 Subject: [PATCH] cleanup in JavaDescriptorResolver --- .../resolve/java/JavaDescriptorResolver.java | 42 ++++++------------- 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index c0d43b609db..08eea89a8be 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -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 resolveClassTypeParametersFromJetSignature(String jetSignature, final PsiClass clazz, final ClassDescriptor classDescriptor, final TypeVariableResolver outerClassTypeVariableResolver) { final List r = new ArrayList(); - - class MyTypeVariableResolver implements TypeVariableResolver { - @NotNull - @Override - public TypeParameterDescriptor getTypeVariable(@NotNull String name) { - for (TypeParameterDescriptorInitialization typeParameter : r) { - if (typeParameter.descriptor.getName().equals(name)) { - return typeParameter.descriptor; - } - } - return outerClassTypeVariableResolver.getTypeVariable(name); - } - } - + final List previousTypeParameters = new ArrayList(); + // note changes state in this method + final TypeVariableResolver typeVariableResolver = new TypeVariableResolverFromTypeDescriptors(previousTypeParameters, outerClassTypeVariableResolver); + new JetSignatureReader(jetSignature).accept(new JetSignatureExceptionsAdapter() { private int formalTypeParameterIndex = 0; @Override 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 protected void done(TypeParameterDescriptorInitialization typeParameterDescriptor) { r.add(typeParameterDescriptor); + previousTypeParameters.add(typeParameterDescriptor.descriptor); } }; } @@ -1489,30 +1480,21 @@ public class JavaDescriptorResolver { { final List r = new ArrayList(); - class MyTypeVariableResolver implements TypeVariableResolver { + final List previousTypeParameters = new ArrayList(); + // 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() { private int formalTypeParameterIndex = 0; @Override 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 protected void done(TypeParameterDescriptorInitialization typeParameterDescriptor) { r.add(typeParameterDescriptor); + previousTypeParameters.add(typeParameterDescriptor.descriptor); } };