Extracted method for creating injector.
Using delegating binding trace instead of original binding context.
This commit is contained in:
+17
-10
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace;
|
import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||||
@@ -85,12 +86,10 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinDeclarationsCache declarationsCache = KotlinCacheManager.getInstance(project).getDeclarationsFromProject(TargetPlatform.JVM);
|
InjectorForJavaDescriptorResolver injector = createInjector(project);
|
||||||
BindingContext bindingContext = declarationsCache.getBindingContext();
|
|
||||||
DelegatingBindingTrace bindingTrace = new DelegatingBindingTrace(bindingContext, "wrapped context of declarations cache");
|
|
||||||
|
|
||||||
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, bindingTrace, new ModuleDescriptor(Name.special("<fake>")));
|
|
||||||
JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
|
JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
|
||||||
|
BindingTrace trace = injector.getBindingTrace();
|
||||||
|
|
||||||
for (PsiElement element : elements) {
|
for (PsiElement element : elements) {
|
||||||
if (!(element instanceof PsiMember)) {
|
if (!(element instanceof PsiMember)) {
|
||||||
@@ -102,11 +101,11 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeclarationDescriptor memberDescriptor = getDescriptorForMember(javaDescriptorResolver, member, bindingContext);
|
DeclarationDescriptor memberDescriptor = getDescriptorForMember(javaDescriptorResolver, member, trace);
|
||||||
|
|
||||||
if (memberDescriptor == null) continue;
|
if (memberDescriptor == null) continue;
|
||||||
|
|
||||||
List<String> errors = bindingContext.get(BindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, memberDescriptor);
|
List<String> errors = trace.get(BindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, memberDescriptor);
|
||||||
boolean hasSignatureAnnotation = findKotlinSignatureAnnotation(element) != null;
|
boolean hasSignatureAnnotation = findKotlinSignatureAnnotation(element) != null;
|
||||||
|
|
||||||
if (errors != null || hasSignatureAnnotation) {
|
if (errors != null || hasSignatureAnnotation) {
|
||||||
@@ -115,11 +114,19 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static InjectorForJavaDescriptorResolver createInjector(Project project) {
|
||||||
|
KotlinDeclarationsCache declarationsCache = KotlinCacheManager.getInstance(project).getDeclarationsFromProject(TargetPlatform.JVM);
|
||||||
|
BindingContext bindingContext = declarationsCache.getBindingContext();
|
||||||
|
DelegatingBindingTrace delegatingTrace = new DelegatingBindingTrace(bindingContext, "wrapped context of declarations cache");
|
||||||
|
|
||||||
|
return new InjectorForJavaDescriptorResolver(project, delegatingTrace, new ModuleDescriptor(Name.special("<fake>")));
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static DeclarationDescriptor getDescriptorForMember(
|
private static DeclarationDescriptor getDescriptorForMember(
|
||||||
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
||||||
@NotNull PsiMember member,
|
@NotNull PsiMember member,
|
||||||
@NotNull BindingContext bindingContext
|
@NotNull BindingTrace trace
|
||||||
) {
|
) {
|
||||||
PsiClass containingClass = member.getContainingClass();
|
PsiClass containingClass = member.getContainingClass();
|
||||||
if (containingClass == null) { // e.g., type parameter
|
if (containingClass == null) { // e.g., type parameter
|
||||||
@@ -138,7 +145,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
if (memberScope == null) {
|
if (memberScope == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getDescriptorForMember(member, memberScope, bindingContext);
|
return getDescriptorForMember(member, memberScope, trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -169,7 +176,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
private static DeclarationDescriptor getDescriptorForMember(
|
private static DeclarationDescriptor getDescriptorForMember(
|
||||||
@NotNull PsiMember member,
|
@NotNull PsiMember member,
|
||||||
@NotNull JetScope memberScope,
|
@NotNull JetScope memberScope,
|
||||||
@NotNull BindingContext bindingContext
|
@NotNull BindingTrace trace
|
||||||
) {
|
) {
|
||||||
if (!(member instanceof PsiMethod) && !(member instanceof PsiField)) {
|
if (!(member instanceof PsiMethod) && !(member instanceof PsiField)) {
|
||||||
return null;
|
return null;
|
||||||
@@ -193,7 +200,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PsiModifierListOwner annotationOwner = getAnnotationOwner(member);
|
PsiModifierListOwner annotationOwner = getAnnotationOwner(member);
|
||||||
return bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, annotationOwner);
|
return trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, annotationOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMarkersEnabled(@NotNull Project project) {
|
public static boolean isMarkersEnabled(@NotNull Project project) {
|
||||||
|
|||||||
Reference in New Issue
Block a user