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.psi.JetProperty;
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.types.JetType;
@@ -33,12 +33,12 @@ public class AlternativeFieldSignatureData extends ElementAlternativeSignatureDa
private JetType altReturnType;
public AlternativeFieldSignatureData(
@NotNull JavaAnnotationResolver annotationResolver,
@NotNull ExternalAnnotationResolver externalAnnotationResolver,
@NotNull JavaFieldImpl field,
@NotNull JetType originalReturnType,
boolean isVar
) {
String signature = SignaturesUtil.getKotlinSignature(annotationResolver, field);
String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, field);
if (signature == null) {
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.psi.*;
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.impl.JavaMethodImpl;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -55,7 +55,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
private Map<TypeParameterDescriptor, TypeParameterDescriptorImpl> originalToAltTypeParameters;
public AlternativeMethodSignatureData(
@NotNull JavaAnnotationResolver annotationResolver,
@NotNull ExternalAnnotationResolver externalAnnotationResolver,
@NotNull JavaMethodImpl method,
@Nullable JetType receiverType,
@NotNull List<ValueParameterDescriptor> valueParameters,
@@ -63,7 +63,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD
@NotNull List<TypeParameterDescriptor> methodTypeParameters,
boolean hasSuperMethods
) {
String signature = SignaturesUtil.getKotlinSignature(annotationResolver, method);
String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, method);
if (signature == null) {
setAnnotated(false);
@@ -20,11 +20,8 @@ import com.intellij.openapi.util.text.StringUtil;
import jet.runtime.typeinfo.KotlinSignature;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotation;
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.java.resolver.ExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.*;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -38,8 +35,8 @@ public class SignaturesUtil {
}
@Nullable
public static String getKotlinSignature(@NotNull JavaAnnotationResolver annotationResolver, @NotNull JavaMember member) {
JavaAnnotation annotation = annotationResolver.findAnnotationWithExternal(member, KOTLIN_SIGNATURE);
public static String getKotlinSignature(@NotNull ExternalAnnotationResolver externalAnnotationResolver, @NotNull JavaMember member) {
JavaAnnotation annotation = findAnnotationWithExternal(externalAnnotationResolver, member, KOTLIN_SIGNATURE);
if (annotation != null) {
JavaAnnotationArgument argument = annotation.findArgument(KOTLIN_SIGNATURE_VALUE_FIELD_NAME);
@@ -53,4 +50,15 @@ public class SignaturesUtil {
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 {
private static final Logger LOG = Logger.getInstance(PsiBasedMethodSignatureChecker.class);
private JavaAnnotationResolver annotationResolver;
private ExternalAnnotationResolver externalAnnotationResolver;
private ExternalSignatureResolver externalSignatureResolver;
@Inject
public void setAnnotationResolver(JavaAnnotationResolver annotationResolver) {
this.annotationResolver = annotationResolver;
public void setExternalAnnotationResolver(ExternalAnnotationResolver externalAnnotationResolver) {
this.externalAnnotationResolver = externalAnnotationResolver;
}
@Inject
@@ -92,7 +92,7 @@ public class PsiBasedMethodSignatureChecker implements MethodSignatureChecker {
+ "sub function = " + function + "\n"
+ "sub class = " + function.getContainingDeclaration() + "\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 {
private BindingTrace trace;
private JavaAnnotationResolver annotationResolver;
private ExternalAnnotationResolver externalAnnotationResolver;
@Inject
public void setTrace(BindingTrace trace) {
@@ -47,8 +47,8 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
}
@Inject
public void setAnnotationResolver(JavaAnnotationResolver annotationResolver) {
this.annotationResolver = annotationResolver;
public void setExternalAnnotationResolver(ExternalAnnotationResolver externalAnnotationResolver) {
this.externalAnnotationResolver = externalAnnotationResolver;
}
@Override
@@ -80,7 +80,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
@NotNull List<TypeParameterDescriptor> typeParameters
) {
AlternativeMethodSignatureData data =
new AlternativeMethodSignatureData(annotationResolver, (JavaMethodImpl) method, receiverType, valueParameters, returnType,
new AlternativeMethodSignatureData(externalAnnotationResolver, (JavaMethodImpl) method, receiverType, valueParameters, returnType,
typeParameters, hasSuperMethods);
if (data.isAnnotated() && !data.hasErrors()) {
@@ -100,7 +100,7 @@ public class TraceBasedExternalSignatureResolver implements ExternalSignatureRes
boolean isVar
) {
AlternativeFieldSignatureData data =
new AlternativeFieldSignatureData(annotationResolver, (JavaFieldImpl) field, returnType, isVar);
new AlternativeFieldSignatureData(externalAnnotationResolver, (JavaFieldImpl) field, returnType, isVar);
if (data.isAnnotated() && !data.hasErrors()) {
return new AlternativeFieldSignature(data.getReturnType(), null);