Remove PSI in TraceBasedExternalSignatureResolver, AlternativeFieldSignatureData, AlternativeMethodSignatureData

This commit is contained in:
zarechenskiy
2014-03-13 18:29:06 +04:00
committed by Alexander Udalov
parent 77b2b29641
commit d7337fbe94
7 changed files with 22 additions and 15 deletions
@@ -95,6 +95,7 @@ public class InjectorForJavaDescriptorResolver {
this.javaClassFinder.setProject(project); this.javaClassFinder.setProject(project);
traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
traceBasedExternalSignatureResolver.setProject(project);
traceBasedExternalSignatureResolver.setTrace(bindingTrace); traceBasedExternalSignatureResolver.setTrace(bindingTrace);
traceBasedJavaResolverCache.setTrace(bindingTrace); traceBasedJavaResolverCache.setTrace(bindingTrace);
@@ -172,6 +172,7 @@ public class InjectorForLazyResolveWithJava {
javaClassFinder.setProject(project); javaClassFinder.setProject(project);
traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
traceBasedExternalSignatureResolver.setProject(project);
traceBasedExternalSignatureResolver.setTrace(bindingTrace); traceBasedExternalSignatureResolver.setTrace(bindingTrace);
lazyResolveBasedCache.setSession(resolveSession); lazyResolveBasedCache.setSession(resolveSession);
@@ -201,6 +201,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaClassFinder.setProject(project); javaClassFinder.setProject(project);
traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
traceBasedExternalSignatureResolver.setProject(project);
traceBasedExternalSignatureResolver.setTrace(bindingTrace); traceBasedExternalSignatureResolver.setTrace(bindingTrace);
traceBasedJavaResolverCache.setTrace(bindingTrace); traceBasedJavaResolverCache.setTrace(bindingTrace);
@@ -24,7 +24,7 @@ import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.psi.JetProperty;
import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaFieldImpl; import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import java.util.HashMap; import java.util.HashMap;
@@ -34,8 +34,9 @@ public class AlternativeFieldSignatureData extends ElementAlternativeSignatureDa
public AlternativeFieldSignatureData( public AlternativeFieldSignatureData(
@NotNull ExternalAnnotationResolver externalAnnotationResolver, @NotNull ExternalAnnotationResolver externalAnnotationResolver,
@NotNull JavaFieldImpl field, @NotNull JavaField field,
@NotNull JetType originalReturnType, @NotNull JetType originalReturnType,
@NotNull Project project,
boolean isVar boolean isVar
) { ) {
String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, field); String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, field);
@@ -46,7 +47,6 @@ public class AlternativeFieldSignatureData extends ElementAlternativeSignatureDa
} }
setAnnotated(true); setAnnotated(true);
Project project = field.getPsi().getProject();
JetProperty altPropertyDeclaration = JetPsiFactory.createProperty(project, signature); JetProperty altPropertyDeclaration = JetPsiFactory.createProperty(project, signature);
try { try {
@@ -66,7 +66,7 @@ public class AlternativeFieldSignatureData extends ElementAlternativeSignatureDa
return altReturnType; return altReturnType;
} }
private static void checkFieldAnnotation(@NotNull JetProperty altProperty, @NotNull JavaFieldImpl field, boolean isVar) { private static void checkFieldAnnotation(@NotNull JetProperty altProperty, @NotNull JavaField field, boolean isVar) {
if (!ComparatorUtil.equalsNullable(field.getName().asString(), altProperty.getName())) { if (!ComparatorUtil.equalsNullable(field.getName().asString(), altProperty.getName())) {
throw new AlternativeSignatureMismatchException("Field name mismatch, original: %s, alternative: %s", throw new AlternativeSignatureMismatchException("Field name mismatch, original: %s, alternative: %s",
field.getName().asString(), altProperty.getName()); field.getName().asString(), altProperty.getName());
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaMethodImpl;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeSubstitutor; import org.jetbrains.jet.lang.types.TypeSubstitutor;
@@ -56,8 +55,9 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
public AlternativeMethodSignatureData( public AlternativeMethodSignatureData(
@NotNull ExternalAnnotationResolver externalAnnotationResolver, @NotNull ExternalAnnotationResolver externalAnnotationResolver,
@NotNull JavaMethodImpl method, @NotNull JavaMethod method,
@Nullable JetType receiverType, @Nullable JetType receiverType,
@NotNull Project project,
@NotNull List<ValueParameterDescriptor> valueParameters, @NotNull List<ValueParameterDescriptor> valueParameters,
@Nullable JetType originalReturnType, @Nullable JetType originalReturnType,
@NotNull List<TypeParameterDescriptor> methodTypeParameters, @NotNull List<TypeParameterDescriptor> methodTypeParameters,
@@ -76,7 +76,6 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
} }
setAnnotated(true); setAnnotated(true);
Project project = method.getPsi().getProject();
altFunDeclaration = JetPsiFactory.createFunction(project, signature); altFunDeclaration = JetPsiFactory.createFunction(project, signature);
originalToAltTypeParameters = DescriptorResolverUtils.recreateTypeParametersAndReturnMapping(methodTypeParameters, null); originalToAltTypeParameters = DescriptorResolverUtils.recreateTypeParametersAndReturnMapping(methodTypeParameters, null);
@@ -75,7 +75,7 @@ public class SignaturesPropagationData {
@Nullable JetType receiverType, @Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> autoValueParameters, // descriptors built by parameters resolver @NotNull List<ValueParameterDescriptor> autoValueParameters, // descriptors built by parameters resolver
@NotNull List<TypeParameterDescriptor> autoTypeParameters, // descriptors built by signature resolver @NotNull List<TypeParameterDescriptor> autoTypeParameters, // descriptors built by signature resolver
@NotNull JavaMethodImpl method, @NotNull JavaMethod method,
@NotNull BindingTrace trace @NotNull BindingTrace trace
) { ) {
this.containingClass = containingClass; this.containingClass = containingClass;
@@ -254,7 +254,7 @@ public class SignaturesPropagationData {
} }
private static List<FunctionDescriptor> getSuperFunctionsForMethod( private static List<FunctionDescriptor> getSuperFunctionsForMethod(
@NotNull JavaMethodImpl method, @NotNull JavaMethod method,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull ClassDescriptor containingClass @NotNull ClassDescriptor containingClass
) { ) {
@@ -297,7 +297,7 @@ public class SignaturesPropagationData {
// sorting for diagnostic stability // sorting for diagnostic stability
Collections.sort(superFunctions, new Comparator<FunctionDescriptor>() { Collections.sort(superFunctions, new Comparator<FunctionDescriptor>() {
@Override @Override
public int compare(FunctionDescriptor fun1, FunctionDescriptor fun2) { public int compare(@NotNull FunctionDescriptor fun1, @NotNull FunctionDescriptor fun2) {
FqNameUnsafe fqName1 = getFqName(fun1.getContainingDeclaration()); FqNameUnsafe fqName1 = getFqName(fun1.getContainingDeclaration());
FqNameUnsafe fqName2 = getFqName(fun2.getContainingDeclaration()); FqNameUnsafe fqName2 = getFqName(fun2.getContainingDeclaration());
return fqName1.asString().compareTo(fqName2.asString()); return fqName1.asString().compareTo(fqName2.asString());
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve.java.resolver; package org.jetbrains.jet.lang.resolve.java.resolver;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
@@ -29,8 +30,6 @@ import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSign
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData; import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
import org.jetbrains.jet.lang.resolve.java.structure.JavaField; import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod; import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaFieldImpl;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaMethodImpl;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import javax.inject.Inject; import javax.inject.Inject;
@@ -40,6 +39,7 @@ import java.util.List;
public class TraceBasedExternalSignatureResolver implements ExternalSignatureResolver { public class TraceBasedExternalSignatureResolver implements ExternalSignatureResolver {
private BindingTrace trace; private BindingTrace trace;
private ExternalAnnotationResolver externalAnnotationResolver; private ExternalAnnotationResolver externalAnnotationResolver;
private Project project;
@Inject @Inject
public void setTrace(BindingTrace trace) { public void setTrace(BindingTrace trace) {
@@ -51,6 +51,11 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
this.externalAnnotationResolver = externalAnnotationResolver; this.externalAnnotationResolver = externalAnnotationResolver;
} }
@Inject
public void setProject(Project project) {
this.project = project;
}
@Override @Override
@NotNull @NotNull
public PropagatedMethodSignature resolvePropagatedSignature( public PropagatedMethodSignature resolvePropagatedSignature(
@@ -62,7 +67,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
@NotNull List<TypeParameterDescriptor> typeParameters @NotNull List<TypeParameterDescriptor> typeParameters
) { ) {
SignaturesPropagationData data = SignaturesPropagationData data =
new SignaturesPropagationData(owner, returnType, receiverType, valueParameters, typeParameters, (JavaMethodImpl) method, new SignaturesPropagationData(owner, returnType, receiverType, valueParameters, typeParameters, method,
trace); trace);
return new PropagatedMethodSignature(data.getModifiedReturnType(), data.getModifiedReceiverType(), return new PropagatedMethodSignature(data.getModifiedReturnType(), data.getModifiedReceiverType(),
data.getModifiedValueParameters(), data.getModifiedTypeParameters(), data.getSignatureErrors(), data.getModifiedValueParameters(), data.getModifiedTypeParameters(), data.getSignatureErrors(),
@@ -81,7 +86,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
boolean hasStableParameterNames boolean hasStableParameterNames
) { ) {
AlternativeMethodSignatureData data = AlternativeMethodSignatureData data =
new AlternativeMethodSignatureData(externalAnnotationResolver, (JavaMethodImpl) method, receiverType, valueParameters, returnType, new AlternativeMethodSignatureData(externalAnnotationResolver, method, receiverType, project, valueParameters, returnType,
typeParameters, hasSuperMethods); typeParameters, hasSuperMethods);
if (data.isAnnotated() && !data.hasErrors()) { if (data.isAnnotated() && !data.hasErrors()) {
@@ -101,7 +106,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
boolean isVar boolean isVar
) { ) {
AlternativeFieldSignatureData data = AlternativeFieldSignatureData data =
new AlternativeFieldSignatureData(externalAnnotationResolver, (JavaFieldImpl) field, returnType, isVar); new AlternativeFieldSignatureData(externalAnnotationResolver, field, returnType, project, isVar);
if (data.isAnnotated() && !data.hasErrors()) { if (data.isAnnotated() && !data.hasErrors()) {
return new AlternativeFieldSignature(data.getReturnType(), null); return new AlternativeFieldSignature(data.getReturnType(), null);