From 098d183a72d0fd10c57fa7e8d8c7737a52d10274 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 3 Oct 2013 22:14:57 +0400 Subject: [PATCH] Remove Logger from AnnotationDescriptorDeserializer Use abstract ErrorReporter instead --- .../di/InjectorForJavaDescriptorResolver.java | 1 + .../di/InjectorForTopDownAnalyzerForJvm.java | 1 + .../resolver/TraceBasedErrorReporter.java | 9 +++++++++ .../resolve/java/resolver/ErrorReporter.java | 3 +++ .../AnnotationDescriptorDeserializer.java | 19 ++++++++++++------- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index 1f29cf777a8..308ba4a29d8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -144,6 +144,7 @@ public class InjectorForJavaDescriptorResolver { deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver); deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver); + annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 5131fc8c0fd..c32fa83c82f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -337,6 +337,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver); deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver); + annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java index 493efb7b848..a4f4709f834 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedErrorReporter.java @@ -16,8 +16,10 @@ package org.jetbrains.jet.lang.resolve.java.resolver; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -33,6 +35,8 @@ import javax.inject.Inject; import static org.jetbrains.jet.lang.diagnostics.Errors.CANNOT_INFER_VISIBILITY; public class TraceBasedErrorReporter implements ErrorReporter { + private static final Logger LOG = Logger.getInstance(TraceBasedErrorReporter.class); + public static final WritableSlice ABI_VERSION_ERRORS = new BasicWritableSlice(Slices.ONLY_REWRITE_TO_EQUAL, true); private BindingTrace trace; @@ -54,4 +58,9 @@ public class TraceBasedErrorReporter implements ErrorReporter { trace.report(CANNOT_INFER_VISIBILITY.on((JetDeclaration) element)); } } + + @Override + public void reportAnnotationLoadingError(@NotNull String message, @Nullable Exception exception) { + LOG.error(message, exception); + } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java index 568198662be..4f17f8155c3 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/ErrorReporter.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; @@ -24,4 +25,6 @@ public interface ErrorReporter { void reportIncompatibleAbiVersion(@NotNull KotlinJvmBinaryClass kotlinClass, int actualVersion); void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor); + + void reportAnnotationLoadingError(@NotNull String message, @Nullable Exception exception); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java index e31fae6488f..001a9772d2f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java @@ -16,7 +16,6 @@ package org.jetbrains.jet.lang.resolve.kotlin; -import com.intellij.openapi.diagnostic.Logger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf; @@ -34,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; +import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -52,10 +52,9 @@ import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.ko import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.naiveKotlinFqName; public class AnnotationDescriptorDeserializer implements AnnotationDeserializer { - private static final Logger LOG = Logger.getInstance(AnnotationDescriptorDeserializer.class); - private JavaClassResolver javaClassResolver; private KotlinClassFinder kotlinClassFinder; + private ErrorReporter errorReporter; // TODO: a single instance of StorageManager for all computations in resolve-java private final LockBasedStorageManager storageManager = new LockBasedStorageManager(); @@ -70,7 +69,8 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer return loadMemberAnnotationsFromClass(kotlinClass); } catch (IOException e) { - LOG.error("Error loading member annotations from Kotlin class: " + kotlinClass, e); + errorReporter.reportAnnotationLoadingError( + "Error loading member annotations from Kotlin class: " + kotlinClass, e); return Collections.emptyMap(); } } @@ -86,6 +86,11 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer this.kotlinClassFinder = kotlinClassFinder; } + @Inject + public void setErrorReporter(ErrorReporter errorReporter) { + this.errorReporter = errorReporter; + } + @NotNull @Override public List loadClassAnnotations(@NotNull ClassDescriptor descriptor, @NotNull ProtoBuf.Class classProto) { @@ -93,14 +98,14 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer if (kotlinClass == null) { // This means that the resource we're constructing the descriptor from is no longer present: KotlinClassFinder had found the // class earlier, but it can't now - LOG.error("Kotlin class for loading class annotations is not found: " + descriptor); + errorReporter.reportAnnotationLoadingError("Kotlin class for loading class annotations is not found: " + descriptor, null); return Collections.emptyList(); } try { return loadClassAnnotationsFromClass(kotlinClass); } catch (IOException e) { - LOG.error("Error loading member annotations from Kotlin class: " + kotlinClass, e); + errorReporter.reportAnnotationLoadingError("Error loading member annotations from Kotlin class: " + kotlinClass, e); return Collections.emptyList(); } } @@ -228,7 +233,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer KotlinJvmBinaryClass kotlinClass = findClassWithMemberAnnotations(container, proto, nameResolver); if (kotlinClass == null) { - LOG.error("Kotlin class for loading member annotations is not found: " + container); + errorReporter.reportAnnotationLoadingError("Kotlin class for loading member annotations is not found: " + container, null); } List annotations = memberAnnotations.fun(kotlinClass).get(signature);