From 8c45d50a868b09c3af5880cac07a984ef30d321e Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 2 Apr 2013 22:30:09 +0400 Subject: [PATCH] Extracted method for creating injector. Using delegating binding trace instead of original binding context. --- .../KotlinSignatureInJavaMarkerProvider.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java index 3c8d3fc75c4..4dc37f727a2 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java @@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; 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.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope; @@ -85,12 +86,10 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { return; } - KotlinDeclarationsCache declarationsCache = KotlinCacheManager.getInstance(project).getDeclarationsFromProject(TargetPlatform.JVM); - BindingContext bindingContext = declarationsCache.getBindingContext(); - DelegatingBindingTrace bindingTrace = new DelegatingBindingTrace(bindingContext, "wrapped context of declarations cache"); + InjectorForJavaDescriptorResolver injector = createInjector(project); - InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, bindingTrace, new ModuleDescriptor(Name.special(""))); JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver(); + BindingTrace trace = injector.getBindingTrace(); for (PsiElement element : elements) { if (!(element instanceof PsiMember)) { @@ -102,11 +101,11 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { continue; } - DeclarationDescriptor memberDescriptor = getDescriptorForMember(javaDescriptorResolver, member, bindingContext); + DeclarationDescriptor memberDescriptor = getDescriptorForMember(javaDescriptorResolver, member, trace); if (memberDescriptor == null) continue; - List errors = bindingContext.get(BindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, memberDescriptor); + List errors = trace.get(BindingContext.LOAD_FROM_JAVA_SIGNATURE_ERRORS, memberDescriptor); boolean hasSignatureAnnotation = findKotlinSignatureAnnotation(element) != null; 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(""))); + } + @Nullable private static DeclarationDescriptor getDescriptorForMember( @NotNull JavaDescriptorResolver javaDescriptorResolver, @NotNull PsiMember member, - @NotNull BindingContext bindingContext + @NotNull BindingTrace trace ) { PsiClass containingClass = member.getContainingClass(); if (containingClass == null) { // e.g., type parameter @@ -138,7 +145,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { if (memberScope == null) { return null; } - return getDescriptorForMember(member, memberScope, bindingContext); + return getDescriptorForMember(member, memberScope, trace); } @Nullable @@ -169,7 +176,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { private static DeclarationDescriptor getDescriptorForMember( @NotNull PsiMember member, @NotNull JetScope memberScope, - @NotNull BindingContext bindingContext + @NotNull BindingTrace trace ) { if (!(member instanceof PsiMethod) && !(member instanceof PsiField)) { return null; @@ -193,7 +200,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { } 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) {