提交 7c8937bd 编写于 作者: S Stepan Koltsov

JavaDescriptorResolver: negative package cache

Time spent in JavaDescriptorResolver.resolveNamespace reduced from 10% to 5%
in CompileCompilerDependenciesTest
上级 be9004aa
......@@ -209,11 +209,9 @@ public class JavaDescriptorResolver {
final PsiClass psiClass;
@Nullable
final PsiPackage psiPackage;
@NotNull
final FqName fqName;
final boolean staticMembers;
final boolean kotlin;
@NotNull
final ClassOrNamespaceDescriptor classOrNamespaceDescriptor;
protected ResolverScopeData(@Nullable PsiClass psiClass, @Nullable PsiPackage psiPackage, @NotNull FqName fqName, boolean staticMembers, @NotNull ClassOrNamespaceDescriptor descriptor) {
......@@ -237,6 +235,22 @@ public class JavaDescriptorResolver {
classOrNamespaceDescriptor = descriptor;
}
protected ResolverScopeData(boolean negative) {
if (!negative) {
throw new IllegalStateException();
}
this.psiClass = null;
this.psiPackage = null;
this.fqName = null;
this.staticMembers = false;
this.kotlin = false;
this.classOrNamespaceDescriptor = null;
}
public boolean isPositive() {
return this.classOrNamespaceDescriptor != null;
}
@NotNull
public PsiElement getPsiPackageOrPsiClass() {
if (psiPackage != null) {
......@@ -262,6 +276,13 @@ public class JavaDescriptorResolver {
this.classDescriptor = classDescriptor;
}
private ResolverBinaryClassData(boolean negative) {
super(negative);
this.classDescriptor = null;
}
static final ResolverBinaryClassData NEGATIVE = new ResolverBinaryClassData(true);
List<TypeParameterDescriptorInitialization> typeParameters;
@NotNull
......@@ -286,6 +307,13 @@ public class JavaDescriptorResolver {
this.namespaceDescriptor = namespaceDescriptor;
}
private ResolverNamespaceData(boolean negative) {
super(negative);
this.namespaceDescriptor = null;
}
static final ResolverNamespaceData NEGATIVE = new ResolverNamespaceData(true);
private JavaPackageScope memberScope;
@NotNull
......@@ -374,11 +402,15 @@ public class JavaDescriptorResolver {
if (classData == null) {
PsiClass psiClass = psiClassFinder.findPsiClass(qualifiedName, PsiClassFinder.RuntimeClassesHandleMode.THROW);
if (psiClass == null) {
ResolverBinaryClassData oldValue = classDescriptorCache.put(qualifiedName, ResolverBinaryClassData.NEGATIVE);
if (oldValue != null) {
throw new IllegalStateException("rewrite at " + qualifiedName);
}
return null;
}
classData = createJavaClassDescriptor(psiClass, tasks);
}
return classData.getClassDescriptor();
return classData.classDescriptor;
}
private ResolverBinaryClassData createJavaClassDescriptor(@NotNull final PsiClass psiClass, List<Runnable> taskList) {
......@@ -974,6 +1006,10 @@ public class JavaDescriptorResolver {
break lookingForPsi;
}
ResolverNamespaceData oldValue = namespaceDescriptorCacheByFqn.put(fqName, ResolverNamespaceData.NEGATIVE);
if (oldValue != null) {
throw new IllegalStateException("rewrite at " + fqName);
}
return null;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册