JavaDescriptorResolver always uses lazy mode

This commit is contained in:
Andrey Breslav
2014-02-05 10:00:55 +01:00
committed by Alexander Udalov
parent 76c722b81c
commit 9f918d48b5
4 changed files with 69 additions and 362 deletions
@@ -38,86 +38,55 @@ import javax.inject.Inject;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver {
private final boolean LAZY;
{
LAZY = true;
}
public static final Name JAVA_ROOT = Name.special("<java_root>");
private StorageManager storageManager;
private JavaClassResolver classResolver;
private JavaPackageFragmentProvider packageFragmentProvider;
private JavaClassFinder javaClassFinder;
private ExternalAnnotationResolver externalAnnotationResolver;
private LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
private ExternalSignatureResolver externalSignatureResolver;
private ErrorReporter errorReporter;
private MethodSignatureChecker signatureChecker;
private JavaResolverCache javaResolverCache;
private DeserializedDescriptorResolver deserializedDescriptorResolver;
private KotlinClassFinder kotlinClassFinder;
private ModuleDescriptor module;
private final ModuleDescriptor module;
private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
@Inject
public void setStorageManager(StorageManager storageManager) {
this.storageManager = storageManager;
}
@Inject
public void setClassResolver(JavaClassResolver classResolver) {
this.classResolver = classResolver;
}
@Inject
public void setPackageFragmentProvider(JavaPackageFragmentProvider packageFragmentProvider) {
this.packageFragmentProvider = packageFragmentProvider;
}
@Inject
public void setJavaClassFinder(JavaClassFinder javaClassFinder) {
this.javaClassFinder = javaClassFinder;
}
@Inject
public void setExternalAnnotationResolver(ExternalAnnotationResolver externalAnnotationResolver) {
this.externalAnnotationResolver = externalAnnotationResolver;
}
@Inject
public void setExternalSignatureResolver(ExternalSignatureResolver externalSignatureResolver) {
this.externalSignatureResolver = externalSignatureResolver;
}
@Inject
public void setErrorReporter(ErrorReporter errorReporter) {
this.errorReporter = errorReporter;
}
@Inject
public void setSignatureChecker(MethodSignatureChecker signatureChecker) {
this.signatureChecker = signatureChecker;
}
@Inject
public void setJavaResolverCache(JavaResolverCache javaResolverCache) {
this.javaResolverCache = javaResolverCache;
}
@Inject
public void setDeserializedDescriptorResolver(DeserializedDescriptorResolver deserializedDescriptorResolver) {
this.deserializedDescriptorResolver = deserializedDescriptorResolver;
}
@Inject
public void setKotlinClassFinder(KotlinClassFinder kotlinClassFinder) {
this.kotlinClassFinder = kotlinClassFinder;
}
@Inject
public void setModule(@NotNull ModuleDescriptor module) {
public JavaDescriptorResolver(
StorageManager storageManager,
JavaClassFinder javaClassFinder,
ExternalAnnotationResolver externalAnnotationResolver,
ExternalSignatureResolver externalSignatureResolver,
ErrorReporter errorReporter,
MethodSignatureChecker signatureChecker,
final JavaResolverCache javaResolverCache,
DeserializedDescriptorResolver deserializedDescriptorResolver,
KotlinClassFinder kotlinClassFinder,
ModuleDescriptor module
) {
this.module = module;
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(
new GlobalJavaResolverContext(
storageManager,
javaClassFinder,
kotlinClassFinder,
deserializedDescriptorResolver,
new LazyJavaClassResolver() {
@Override
public ClassDescriptor resolveClass(JavaClass aClass) {
FqName fqName = aClass.getFqName();
if (fqName != null) {
return resolveClassByFqName(fqName);
}
return null;
}
@Override
public ClassDescriptor resolveClassByFqName(FqName fqName) {
return javaResolverCache.getClassResolvedFromSource(fqName);
}
},
externalAnnotationResolver,
externalSignatureResolver,
errorReporter,
signatureChecker,
javaResolverCache,
this
),
module
);
}
@NotNull
@@ -125,49 +94,14 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return module;
}
private LazyJavaPackageFragmentProvider getLazyJavaPackageFragmentProvider() {
if (lazyJavaPackageFragmentProvider == null) {
lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(
new GlobalJavaResolverContext(
storageManager,
javaClassFinder,
kotlinClassFinder,
deserializedDescriptorResolver,
new LazyJavaClassResolver() {
@Override
public ClassDescriptor resolveClass(JavaClass aClass) {
FqName fqName = aClass.getFqName();
if (fqName != null) {
return resolveClassByFqName(fqName);
}
return null;
}
@Override
public ClassDescriptor resolveClassByFqName(FqName fqName) {
return javaResolverCache.getClassResolvedFromSource(fqName);
}
},
externalAnnotationResolver,
externalSignatureResolver,
errorReporter,
signatureChecker,
javaResolverCache,
this
),
module
);
}
@NotNull
public LazyJavaPackageFragmentProvider getPackageFragmentProvider() {
return lazyJavaPackageFragmentProvider;
}
@Nullable
public ClassDescriptor resolveClass(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule) {
if (LAZY) {
return getLazyJavaPackageFragmentProvider().getClass(qualifiedName);
}
return classResolver.resolveClass(qualifiedName, searchRule);
return getPackageFragmentProvider().getClass(qualifiedName);
}
@Override
@@ -175,19 +109,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
return resolveClass(qualifiedName, IGNORE_KOTLIN_SOURCES);
}
@NotNull
public JavaPackageFragmentProvider getPackageFragmentProvider() {
if (LAZY) {
return getLazyJavaPackageFragmentProvider();
}
return packageFragmentProvider;
}
@Nullable
public PackageFragmentDescriptor getPackageFragment(@NotNull FqName fqName) {
if (LAZY) {
return getLazyJavaPackageFragmentProvider().getPackageFragment(fqName);
}
return packageFragmentProvider.getPackageFragment(fqName);
return getPackageFragmentProvider().getPackageFragment(fqName);
}
}