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
@@ -1 +0,0 @@
org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter;
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider;
@@ -56,6 +57,7 @@ public class InjectorForJavaDescriptorResolver {
private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator;
private final VirtualFileFinder virtualFileFinder;
private final MemberFilter memberFilter;
private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
@@ -83,7 +85,8 @@ public class InjectorForJavaDescriptorResolver {
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.globalJavaResolverContext = new GlobalJavaResolverContext(lockBasedStorageManager, getJavaClassFinder(), virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache);
this.javaPropertyInitializerEvaluator = new JavaPropertyInitializerEvaluatorImpl();
this.globalJavaResolverContext = new GlobalJavaResolverContext(lockBasedStorageManager, getJavaClassFinder(), virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache, javaPropertyInitializerEvaluator);
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModule());
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModule());
this.memberFilter = org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter.ALWAYS_TRUE;
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.LazyResolveBasedCache;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
@@ -83,6 +84,7 @@ public class InjectorForLazyResolveWithJava {
private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator;
private final AnnotationResolver annotationResolver;
private final CallResolver callResolver;
private final ArgumentTypeResolver argumentTypeResolver;
@@ -132,7 +134,8 @@ public class InjectorForLazyResolveWithJava {
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.lazyResolveBasedCache = new LazyResolveBasedCache();
this.globalJavaResolverContext = new GlobalJavaResolverContext(lockBasedStorageManager, javaClassFinder, virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, lazyResolveBasedCache);
this.javaPropertyInitializerEvaluator = new JavaPropertyInitializerEvaluatorImpl();
this.globalJavaResolverContext = new GlobalJavaResolverContext(lockBasedStorageManager, javaClassFinder, virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, lazyResolveBasedCache, javaPropertyInitializerEvaluator);
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModule());
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModule());
this.memberFilter = org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter.ALWAYS_TRUE;
@@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
@@ -91,6 +92,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator;
private final VirtualFileFinder virtualFileFinder;
private final BodyResolver bodyResolver;
private final AnnotationResolver annotationResolver;
@@ -152,7 +154,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.globalJavaResolverContext = new GlobalJavaResolverContext(storageManager, javaClassFinder, virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache);
this.javaPropertyInitializerEvaluator = new JavaPropertyInitializerEvaluatorImpl();
this.globalJavaResolverContext = new GlobalJavaResolverContext(storageManager, javaClassFinder, virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache, javaPropertyInitializerEvaluator);
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModuleDescriptor());
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModuleDescriptor());
this.bodyResolver = new BodyResolver();
@@ -27,7 +27,7 @@ import org.jetbrains.jet.lang.resolve.constants.ConstantsPackage;
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
import org.jetbrains.jet.lang.resolve.java.structure.JavaPropertyInitializerEvaluator;
public class JavaPropertyInitializerEvaluatorImpl extends JavaPropertyInitializerEvaluator {
public class JavaPropertyInitializerEvaluatorImpl implements JavaPropertyInitializerEvaluator {
@Nullable
@Override
public CompileTimeConstant<?> getInitializerConstant(@NotNull JavaField field, @NotNull PropertyDescriptor descriptor) {
@@ -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);
}
@@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils
import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter
import org.jetbrains.jet.lang.resolve.calls.CallResolver
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl
// NOTE: After making changes, you need to re-generate the injectors.
// To do that, you can run main in this file.
@@ -106,7 +107,8 @@ private fun generatorForTopDownAnalyzerForJvm() =
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>(),
javaClass<MutablePackageFragmentProvider>()
javaClass<MutablePackageFragmentProvider>(),
javaClass<JavaPropertyInitializerEvaluatorImpl>()
)
field(javaClass<VirtualFileFinder>(), init = GivenExpression(javaClass<VirtualFileFinder>().getName() + ".SERVICE.getInstance(project)"))
}
@@ -130,7 +132,8 @@ private fun generatorForJavaDescriptorResolver() =
javaClass<TraceBasedJavaResolverCache>(),
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>()
javaClass<PsiBasedExternalAnnotationResolver>(),
javaClass<JavaPropertyInitializerEvaluatorImpl>()
)
field(javaClass<VirtualFileFinder>(),
init = GivenExpression(javaClass<VirtualFileFinder>().getName() + ".SERVICE.getInstance(project)"))
@@ -164,7 +167,8 @@ private fun generatorForLazyResolveWithJava() =
javaClass<LazyResolveBasedCache>(),
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>()
javaClass<PsiBasedExternalAnnotationResolver>(),
javaClass<JavaPropertyInitializerEvaluatorImpl>()
)
}