Simplify component injection in annotation/constant loaders
This commit is contained in:
+10
-22
@@ -39,39 +39,27 @@ import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage.MemberSignature;
|
||||
import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.javaClassIdToKotlinClassId;
|
||||
|
||||
public class AnnotationDescriptorLoader extends BaseDescriptorLoader implements AnnotationLoader {
|
||||
private final ModuleDescriptor module;
|
||||
private final StorageManager storageManager;
|
||||
private final ModuleDescriptor module;
|
||||
|
||||
public AnnotationDescriptorLoader(@NotNull ModuleDescriptor module, @NotNull StorageManager storageManager) {
|
||||
public AnnotationDescriptorLoader(
|
||||
@NotNull StorageManager storageManager,
|
||||
@NotNull ModuleDescriptor module,
|
||||
@NotNull DescriptorLoadersStorage storage,
|
||||
@NotNull KotlinClassFinder kotlinClassFinder,
|
||||
@NotNull ErrorReporter errorReporter
|
||||
) {
|
||||
super(kotlinClassFinder, errorReporter, storage);
|
||||
this.module = module;
|
||||
this.storageManager = storageManager;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setStorage(@NotNull DescriptorLoadersStorage storage) {
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setKotlinClassFinder(@NotNull KotlinClassFinder kotlinClassFinder) {
|
||||
this.kotlinClassFinder = kotlinClassFinder;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setErrorReporter(@NotNull ErrorReporter errorReporter) {
|
||||
this.errorReporter = errorReporter;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Annotations loadClassAnnotations(@NotNull ClassDescriptor descriptor, @NotNull ProtoBuf.Class classProto) {
|
||||
@@ -230,7 +218,7 @@ public class AnnotationDescriptorLoader extends BaseDescriptorLoader implements
|
||||
return new DeserializedAnnotations(storageManager, new Function0<List<AnnotationDescriptor>>() {
|
||||
@Override
|
||||
public List<AnnotationDescriptor> invoke() {
|
||||
List<AnnotationDescriptor> descriptors = storage.getStorage().invoke(kotlinClass).getMemberAnnotations().get(signature);
|
||||
List<AnnotationDescriptor> descriptors = storage.getStorageForClass(kotlinClass).getMemberAnnotations().get(signature);
|
||||
return descriptors == null ? Collections.<AnnotationDescriptor>emptyList() : descriptors;
|
||||
}
|
||||
});
|
||||
|
||||
+12
-9
@@ -39,16 +39,19 @@ import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.ge
|
||||
import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.kotlinClassIdToJavaClassId;
|
||||
|
||||
public abstract class BaseDescriptorLoader {
|
||||
protected KotlinClassFinder kotlinClassFinder;
|
||||
protected ErrorReporter errorReporter;
|
||||
private final KotlinClassFinder kotlinClassFinder;
|
||||
protected final ErrorReporter errorReporter;
|
||||
protected final DescriptorLoadersStorage storage;
|
||||
|
||||
protected DescriptorLoadersStorage storage;
|
||||
|
||||
public abstract void setKotlinClassFinder(@NotNull KotlinClassFinder kotlinClassFinder);
|
||||
|
||||
public abstract void setErrorReporter(@NotNull ErrorReporter errorReporter);
|
||||
|
||||
public abstract void setStorage(@NotNull DescriptorLoadersStorage storage);
|
||||
protected BaseDescriptorLoader(
|
||||
@NotNull KotlinClassFinder kotlinClassFinder,
|
||||
@NotNull ErrorReporter errorReporter,
|
||||
@NotNull DescriptorLoadersStorage storage
|
||||
) {
|
||||
this.kotlinClassFinder = kotlinClassFinder;
|
||||
this.errorReporter = errorReporter;
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected static MemberSignature getCallableSignature(
|
||||
|
||||
+7
-19
@@ -26,27 +26,15 @@ import org.jetbrains.jet.lang.descriptors.ClassOrPackageFragmentDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage.MemberSignature;
|
||||
|
||||
public class ConstantDescriptorLoader extends BaseDescriptorLoader implements ConstantLoader {
|
||||
@Inject
|
||||
@Override
|
||||
public void setStorage(@NotNull DescriptorLoadersStorage storage) {
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setKotlinClassFinder(@NotNull KotlinClassFinder kotlinClassFinder) {
|
||||
this.kotlinClassFinder = kotlinClassFinder;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setErrorReporter(@NotNull ErrorReporter errorReporter) {
|
||||
this.errorReporter = errorReporter;
|
||||
public ConstantDescriptorLoader(
|
||||
@NotNull DescriptorLoadersStorage storage,
|
||||
@NotNull KotlinClassFinder kotlinClassFinder,
|
||||
@NotNull ErrorReporter errorReporter
|
||||
) {
|
||||
super(kotlinClassFinder, errorReporter, storage);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -66,6 +54,6 @@ public class ConstantDescriptorLoader extends BaseDescriptorLoader implements Co
|
||||
return null;
|
||||
}
|
||||
|
||||
return storage.getStorage().invoke(kotlinClass).getPropertyConstants().get(signature);
|
||||
return storage.getStorageForClass(kotlinClass).getPropertyConstants().get(signature);
|
||||
}
|
||||
}
|
||||
|
||||
+9
-28
@@ -23,56 +23,37 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||
import org.jetbrains.jet.lang.resolve.constants.ConstantsPackage;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||
import org.jetbrains.jet.lang.resolve.name.ClassId;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.storage.MemoizedFunctionToNotNull;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
public class DescriptorLoadersStorage {
|
||||
private ErrorReporter errorReporter;
|
||||
private ModuleDescriptor module;
|
||||
|
||||
private final MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Storage> storage;
|
||||
private final ModuleDescriptor module;
|
||||
|
||||
public DescriptorLoadersStorage(@NotNull StorageManager storageManager) {
|
||||
public DescriptorLoadersStorage(@NotNull StorageManager storageManager, @NotNull ModuleDescriptor module) {
|
||||
this.storage = storageManager.createMemoizedFunction(
|
||||
new Function1<KotlinJvmBinaryClass, Storage>() {
|
||||
@NotNull
|
||||
@Override
|
||||
public Storage invoke(@NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
try {
|
||||
return loadAnnotationsAndInitializers(kotlinClass);
|
||||
}
|
||||
catch (IOException e) {
|
||||
errorReporter.reportLoadingError("Error loading member information from Kotlin class: " + kotlinClass, e);
|
||||
return Storage.EMPTY;
|
||||
}
|
||||
return loadAnnotationsAndInitializers(kotlinClass);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setModule(ModuleDescriptor module) {
|
||||
}
|
||||
);
|
||||
this.module = module;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setErrorReporter(ErrorReporter errorReporter) {
|
||||
this.errorReporter = errorReporter;
|
||||
@NotNull
|
||||
protected Storage getStorageForClass(@NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
return storage.invoke(kotlinClass);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Storage> getStorage() {
|
||||
return storage;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private Storage loadAnnotationsAndInitializers(@NotNull KotlinJvmBinaryClass kotlinClass) throws IOException {
|
||||
private Storage loadAnnotationsAndInitializers(@NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
final Map<MemberSignature, List<AnnotationDescriptor>> memberAnnotations = new HashMap<MemberSignature, List<AnnotationDescriptor>>();
|
||||
final Map<MemberSignature, CompileTimeConstant<?>> propertyConstants = new HashMap<MemberSignature, CompileTimeConstant<?>>();
|
||||
|
||||
|
||||
+5
-7
@@ -36,18 +36,16 @@ import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kin
|
||||
import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kind.PACKAGE_FACADE;
|
||||
|
||||
public final class DeserializedDescriptorResolver {
|
||||
private final ErrorReporter errorReporter;
|
||||
private DeserializationGlobalContextForJava context;
|
||||
|
||||
private ErrorReporter errorReporter;
|
||||
|
||||
@Inject
|
||||
public void setContext(DeserializationGlobalContextForJava context) {
|
||||
this.context = context;
|
||||
public DeserializedDescriptorResolver(@NotNull ErrorReporter errorReporter) {
|
||||
this.errorReporter = errorReporter;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setErrorReporter(ErrorReporter errorReporter) {
|
||||
this.errorReporter = errorReporter;
|
||||
public void setContext(@NotNull DeserializationGlobalContextForJava context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
Reference in New Issue
Block a user