ExternalAnnotationResolver is enough to look for external annotations

This commit is contained in:
Andrey Breslav
2014-02-05 09:24:47 +01:00
committed by Alexander Udalov
parent 6c96d235ec
commit ab3b8d63df
5 changed files with 30 additions and 22 deletions
@@ -23,7 +23,7 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; 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.JavaAnnotationResolver; 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.impl.JavaFieldImpl;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
@@ -33,12 +33,12 @@ public class AlternativeFieldSignatureData extends ElementAlternativeSignatureDa
private JetType altReturnType; private JetType altReturnType;
public AlternativeFieldSignatureData( public AlternativeFieldSignatureData(
@NotNull JavaAnnotationResolver annotationResolver, @NotNull ExternalAnnotationResolver externalAnnotationResolver,
@NotNull JavaFieldImpl field, @NotNull JavaFieldImpl field,
@NotNull JetType originalReturnType, @NotNull JetType originalReturnType,
boolean isVar boolean isVar
) { ) {
String signature = SignaturesUtil.getKotlinSignature(annotationResolver, field); String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, field);
if (signature == null) { if (signature == null) {
setAnnotated(false); setAnnotated(false);
@@ -27,7 +27,7 @@ import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
import org.jetbrains.jet.lang.psi.*; 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.JavaAnnotationResolver; 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.java.structure.impl.JavaMethodImpl;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -55,7 +55,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
private Map<TypeParameterDescriptor, TypeParameterDescriptorImpl> originalToAltTypeParameters; private Map<TypeParameterDescriptor, TypeParameterDescriptorImpl> originalToAltTypeParameters;
public AlternativeMethodSignatureData( public AlternativeMethodSignatureData(
@NotNull JavaAnnotationResolver annotationResolver, @NotNull ExternalAnnotationResolver externalAnnotationResolver,
@NotNull JavaMethodImpl method, @NotNull JavaMethodImpl method,
@Nullable JetType receiverType, @Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters, @NotNull List<ValueParameterDescriptor> valueParameters,
@@ -63,7 +63,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
@NotNull List<TypeParameterDescriptor> methodTypeParameters, @NotNull List<TypeParameterDescriptor> methodTypeParameters,
boolean hasSuperMethods boolean hasSuperMethods
) { ) {
String signature = SignaturesUtil.getKotlinSignature(annotationResolver, method); String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, method);
if (signature == null) { if (signature == null) {
setAnnotated(false); setAnnotated(false);
@@ -20,11 +20,8 @@ import com.intellij.openapi.util.text.StringUtil;
import jet.runtime.typeinfo.KotlinSignature; import jet.runtime.typeinfo.KotlinSignature;
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.resolve.java.resolver.JavaAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.resolver.ExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotation; import org.jetbrains.jet.lang.resolve.java.structure.*;
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotationArgument;
import org.jetbrains.jet.lang.resolve.java.structure.JavaLiteralAnnotationArgument;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMember;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -38,8 +35,8 @@ public class SignaturesUtil {
} }
@Nullable @Nullable
public static String getKotlinSignature(@NotNull JavaAnnotationResolver annotationResolver, @NotNull JavaMember member) { public static String getKotlinSignature(@NotNull ExternalAnnotationResolver externalAnnotationResolver, @NotNull JavaMember member) {
JavaAnnotation annotation = annotationResolver.findAnnotationWithExternal(member, KOTLIN_SIGNATURE); JavaAnnotation annotation = findAnnotationWithExternal(externalAnnotationResolver, member, KOTLIN_SIGNATURE);
if (annotation != null) { if (annotation != null) {
JavaAnnotationArgument argument = annotation.findArgument(KOTLIN_SIGNATURE_VALUE_FIELD_NAME); JavaAnnotationArgument argument = annotation.findArgument(KOTLIN_SIGNATURE_VALUE_FIELD_NAME);
@@ -53,4 +50,15 @@ public class SignaturesUtil {
return null; return null;
} }
@Nullable
public static JavaAnnotation findAnnotationWithExternal(@NotNull ExternalAnnotationResolver externalAnnotationResolver, @NotNull JavaAnnotationOwner owner, @NotNull FqName name) {
JavaAnnotation annotation = owner.findAnnotation(name);
if (annotation != null) {
return annotation;
}
return externalAnnotationResolver.findExternalAnnotation(owner, name);
}
} }
@@ -46,12 +46,12 @@ import static org.jetbrains.jet.lang.resolve.OverridingUtil.isReturnTypeOkForOve
public class PsiBasedMethodSignatureChecker implements MethodSignatureChecker { public class PsiBasedMethodSignatureChecker implements MethodSignatureChecker {
private static final Logger LOG = Logger.getInstance(PsiBasedMethodSignatureChecker.class); private static final Logger LOG = Logger.getInstance(PsiBasedMethodSignatureChecker.class);
private JavaAnnotationResolver annotationResolver; private ExternalAnnotationResolver externalAnnotationResolver;
private ExternalSignatureResolver externalSignatureResolver; private ExternalSignatureResolver externalSignatureResolver;
@Inject @Inject
public void setAnnotationResolver(JavaAnnotationResolver annotationResolver) { public void setExternalAnnotationResolver(ExternalAnnotationResolver externalAnnotationResolver) {
this.annotationResolver = annotationResolver; this.externalAnnotationResolver = externalAnnotationResolver;
} }
@Inject @Inject
@@ -92,7 +92,7 @@ public class PsiBasedMethodSignatureChecker implements MethodSignatureChecker {
+ "sub function = " + function + "\n" + "sub function = " + function + "\n"
+ "sub class = " + function.getContainingDeclaration() + "\n" + "sub class = " + function.getContainingDeclaration() + "\n"
+ "sub method = " + JavaSignatureFormatter.getInstance().getExternalName(method) + "\n" + "sub method = " + JavaSignatureFormatter.getInstance().getExternalName(method) + "\n"
+ "@KotlinSignature = " + SignaturesUtil.getKotlinSignature(annotationResolver, method)); + "@KotlinSignature = " + SignaturesUtil.getKotlinSignature(externalAnnotationResolver, method));
} }
} }
@@ -39,7 +39,7 @@ import java.util.List;
public class TraceBasedExternalSignatureResolver implements ExternalSignatureResolver { public class TraceBasedExternalSignatureResolver implements ExternalSignatureResolver {
private BindingTrace trace; private BindingTrace trace;
private JavaAnnotationResolver annotationResolver; private ExternalAnnotationResolver externalAnnotationResolver;
@Inject @Inject
public void setTrace(BindingTrace trace) { public void setTrace(BindingTrace trace) {
@@ -47,8 +47,8 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
} }
@Inject @Inject
public void setAnnotationResolver(JavaAnnotationResolver annotationResolver) { public void setExternalAnnotationResolver(ExternalAnnotationResolver externalAnnotationResolver) {
this.annotationResolver = annotationResolver; this.externalAnnotationResolver = externalAnnotationResolver;
} }
@Override @Override
@@ -80,7 +80,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
@NotNull List<TypeParameterDescriptor> typeParameters @NotNull List<TypeParameterDescriptor> typeParameters
) { ) {
AlternativeMethodSignatureData data = AlternativeMethodSignatureData data =
new AlternativeMethodSignatureData(annotationResolver, (JavaMethodImpl) method, receiverType, valueParameters, returnType, new AlternativeMethodSignatureData(externalAnnotationResolver, (JavaMethodImpl) method, receiverType, valueParameters, returnType,
typeParameters, hasSuperMethods); typeParameters, hasSuperMethods);
if (data.isAnnotated() && !data.hasErrors()) { if (data.isAnnotated() && !data.hasErrors()) {
@@ -100,7 +100,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
boolean isVar boolean isVar
) { ) {
AlternativeFieldSignatureData data = AlternativeFieldSignatureData data =
new AlternativeFieldSignatureData(annotationResolver, (JavaFieldImpl) field, returnType, isVar); new AlternativeFieldSignatureData(externalAnnotationResolver, (JavaFieldImpl) field, returnType, isVar);
if (data.isAnnotated() && !data.hasErrors()) { if (data.isAnnotated() && !data.hasErrors()) {
return new AlternativeFieldSignature(data.getReturnType(), null); return new AlternativeFieldSignature(data.getReturnType(), null);