More straightforward caching.

This commit is contained in:
Evgeny Gerashchenko
2013-11-13 04:55:20 +04:00
parent e18173cbac
commit 78e40114ca
@@ -48,8 +48,6 @@ import java.util.*;
public final class JavaPackageFragmentProvider implements PackageFragmentProvider {
@NotNull
private final Map<FqName, JavaPackageFragmentDescriptor> packageFragments = Maps.newHashMap();
@NotNull
private final Set<FqName> unresolvedCache = new HashSet<FqName>();
private JavaClassFinder javaClassFinder;
private JavaResolverCache cache;
@@ -119,16 +117,11 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
@Nullable
public JavaPackageFragmentDescriptor getOrCreatePackage(@NotNull final FqName fqName) {
// TODO 1 use one cache
if (unresolvedCache.contains(fqName)) {
return null;
}
JavaPackageFragmentDescriptor packageFragment = packageFragments.get(fqName);
if (packageFragment != null) {
return packageFragment;
if (packageFragments.containsKey(fqName)) {
return packageFragments.get(fqName);
}
packageFragment = JavaPackageFragmentDescriptor.create(this, fqName, new NullableFunction<JavaPackageFragmentDescriptor, JetScope>() {
JavaPackageFragmentDescriptor packageFragment = JavaPackageFragmentDescriptor.create(this, fqName, new NullableFunction<JavaPackageFragmentDescriptor, JetScope>() {
@Override
@Nullable
public JetScope fun(JavaPackageFragmentDescriptor packageFragment) {
@@ -136,7 +129,7 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
}
});
cache(fqName, packageFragment);
packageFragments.put(fqName, packageFragment);
return packageFragment;
}
@@ -175,17 +168,6 @@ public final class JavaPackageFragmentProvider implements PackageFragmentProvide
return !DescriptorResolverUtils.isCompiledKotlinClassOrPackageClass(javaClass) && hasStaticMembers(javaClass);
}
private void cache(@NotNull FqName fqName, @Nullable JavaPackageFragmentDescriptor packageFragment) {
if (packageFragment == null) {
unresolvedCache.add(fqName);
return;
}
JavaPackageFragmentDescriptor oldValue = packageFragments.put(fqName, packageFragment);
if (oldValue != null) {
throw new IllegalStateException("rewrite at " + fqName);
}
}
private static boolean hasStaticMembers(@NotNull JavaClass javaClass) {
for (JavaMethod method : javaClass.getMethods()) {
if (method.isStatic() && !DescriptorResolverUtils.shouldBeInEnumClassObject(method)) {