Remove acces to JavaPropertyInitializerEvaluator through ServiceLoader by injecting it in GenerateInjectors

This commit is contained in:
zarechenskiy
2014-03-28 20:23:45 +04:00
committed by Alexander Udalov
parent 2e4028ba3a
commit fe48051041
10 changed files with 34 additions and 32 deletions
@@ -29,7 +29,8 @@ public class LazyJavaPackageFragmentProvider(
outerContext.externalSignatureResolver,
outerContext.errorReporter,
outerContext.methodSignatureChecker,
outerContext.javaResolverCache
outerContext.javaResolverCache,
outerContext.javaPropertyInitializerEvaluator
)
override fun getModule() = _module
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter
import org.jetbrains.jet.lang.resolve.java.resolver.JavaResolverCache
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver
import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder
import org.jetbrains.jet.lang.resolve.java.structure.JavaPropertyInitializerEvaluator
open class GlobalJavaResolverContext(
val storageManager: StorageManager,
@@ -38,7 +39,8 @@ open class GlobalJavaResolverContext(
val externalSignatureResolver: ExternalSignatureResolver,
val errorReporter: ErrorReporter,
val methodSignatureChecker: MethodSignatureChecker,
val javaResolverCache: JavaResolverCache
val javaResolverCache: JavaResolverCache,
val javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator
)
open class LazyJavaResolverContext(
@@ -52,10 +54,11 @@ open class LazyJavaResolverContext(
externalSignatureResolver: ExternalSignatureResolver,
errorReporter: ErrorReporter,
methodSignatureChecker: MethodSignatureChecker,
javaResolverCache: JavaResolverCache
javaResolverCache: JavaResolverCache,
javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator
) : GlobalJavaResolverContext(storageManager, finder, kotlinClassFinder, deserializedDescriptorResolver,
externalAnnotationResolver, externalSignatureResolver,
errorReporter, methodSignatureChecker, javaResolverCache)
errorReporter, methodSignatureChecker, javaResolverCache, javaPropertyInitializerEvaluator)
fun LazyJavaResolverContext.withTypes(
typeParameterResolver: TypeParameterResolver = TypeParameterResolver.EMPTY
@@ -71,6 +74,7 @@ fun LazyJavaResolverContext.withTypes(
errorReporter,
methodSignatureChecker,
javaResolverCache,
javaPropertyInitializerEvaluator,
LazyJavaTypeResolver(this, typeParameterResolver),
typeParameterResolver)
@@ -86,12 +90,13 @@ class LazyJavaResolverContextWithTypes(
errorReporter: ErrorReporter,
methodSignatureChecker: MethodSignatureChecker,
javaResolverCache: JavaResolverCache,
javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator,
val typeResolver: LazyJavaTypeResolver,
val typeParameterResolver: TypeParameterResolver
) : LazyJavaResolverContext(packageFragmentProvider, javaClassResolver, storageManager, finder,
kotlinClassFinder, deserializedDescriptorResolver,
externalAnnotationResolver, externalSignatureResolver,
errorReporter, methodSignatureChecker, javaResolverCache)
errorReporter, methodSignatureChecker, javaResolverCache, javaPropertyInitializerEvaluator)
fun LazyJavaResolverContextWithTypes.child(
containingDeclaration: DeclarationDescriptor,
@@ -273,7 +273,7 @@ public abstract class LazyJavaMemberScope(
if (DescriptorUtils.shouldRecordInitializerForProperty(propertyDescriptor, propertyDescriptor.getType())) {
propertyDescriptor.setCompileTimeInitializer(
c.storageManager.createNullableLazyValue {
JavaPropertyInitializerEvaluator.getInstance().getInitializerConstant(field, propertyDescriptor)
c.javaPropertyInitializerEvaluator.getInitializerConstant(field, propertyDescriptor)
})
}
@@ -21,23 +21,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import java.util.Iterator;
import java.util.ServiceLoader;
public abstract class JavaPropertyInitializerEvaluator {
private static JavaPropertyInitializerEvaluator instance;
@NotNull
public static JavaPropertyInitializerEvaluator getInstance() {
if (instance == null) {
Iterator<JavaPropertyInitializerEvaluator> iterator =
ServiceLoader.load(JavaPropertyInitializerEvaluator.class, JavaPropertyInitializerEvaluator.class.getClassLoader()).iterator();
assert iterator.hasNext() : "No service found: " + JavaPropertyInitializerEvaluator.class.getName();
instance = iterator.next();
}
return instance;
}
public interface JavaPropertyInitializerEvaluator {
@Nullable
public abstract CompileTimeConstant<?> getInitializerConstant(@NotNull JavaField field, @NotNull PropertyDescriptor descriptor);
CompileTimeConstant<?> getInitializerConstant(@NotNull JavaField field, @NotNull PropertyDescriptor descriptor);
}