Use unsafe qualified names instead of safe ones in FQNAME_TO_CLASS_DESCRIPTOR slice

This commit is contained in:
Alexey Sedunov
2013-12-19 19:15:09 +04:00
parent c20ee310d0
commit 1e66a346d7
7 changed files with 16 additions and 7 deletions
@@ -122,7 +122,7 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport
@NotNull @NotNull
@Override @Override
public Collection<JetClassOrObject> findClassOrObjectDeclarations(@NotNull FqName fqName, @NotNull GlobalSearchScope searchScope) { public Collection<JetClassOrObject> findClassOrObjectDeclarations(@NotNull FqName fqName, @NotNull GlobalSearchScope searchScope) {
ClassDescriptor classDescriptor = getTrace().get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, fqName); ClassDescriptor classDescriptor = getTrace().get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, fqName.toUnsafe());
if (classDescriptor != null) { if (classDescriptor != null) {
PsiElement element = BindingContextUtils.classDescriptorToDeclaration(trace.getBindingContext(), classDescriptor); PsiElement element = BindingContextUtils.classDescriptorToDeclaration(trace.getBindingContext(), classDescriptor);
if (element != null && PsiSearchScopeUtil.isInScope(searchScope, element)) { if (element != null && PsiSearchScopeUtil.isInScope(searchScope, element)) {
@@ -62,7 +62,7 @@ public class TraceBasedJavaResolverCache implements JavaResolverCache {
@Nullable @Nullable
@Override @Override
public ClassDescriptor getClassResolvedFromSource(@NotNull FqName fqName) { public ClassDescriptor getClassResolvedFromSource(@NotNull FqName fqName) {
return trace.get(FQNAME_TO_CLASS_DESCRIPTOR, fqName); return trace.get(FQNAME_TO_CLASS_DESCRIPTOR, fqName.toUnsafe());
} }
@Nullable @Nullable
@@ -35,6 +35,7 @@ import org.jetbrains.jet.kdoc.psi.api.KDocElement;
import org.jetbrains.jet.lang.parsing.JetExpressionParsing; import org.jetbrains.jet.lang.parsing.JetExpressionParsing;
import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.SpecialNames; import org.jetbrains.jet.lang.resolve.name.SpecialNames;
import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.jet.lang.types.expressions.OperatorConventions;
@@ -190,6 +191,12 @@ public class JetPsiUtil {
return header != null ? header.getFqName() : FqName.ROOT; return header != null ? header.getFqName() : FqName.ROOT;
} }
@Nullable
public static FqNameUnsafe getUnsafeFQName(@NotNull JetNamedDeclaration namedDeclaration) {
FqName fqName = getFQName(namedDeclaration);
return fqName != null ? fqName.toUnsafe() : null;
}
@Nullable @Nullable
public static FqName getFQName(@NotNull JetNamedDeclaration namedDeclaration) { public static FqName getFQName(@NotNull JetNamedDeclaration namedDeclaration) {
Name name = namedDeclaration.getNameAsName(); Name name = namedDeclaration.getNameAsName();
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystemCompleter;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.DeferredType; import org.jetbrains.jet.lang.types.DeferredType;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
@@ -245,7 +246,7 @@ public interface BindingContext {
WritableSlice<ClassDescriptor, FunctionDescriptor> DATA_CLASS_COPY_FUNCTION = WritableSlice<ClassDescriptor, FunctionDescriptor> DATA_CLASS_COPY_FUNCTION =
Slices.<ClassDescriptor, FunctionDescriptor>sliceBuilder().build(); Slices.<ClassDescriptor, FunctionDescriptor>sliceBuilder().build();
WritableSlice<FqName, ClassDescriptor> FQNAME_TO_CLASS_DESCRIPTOR = new BasicWritableSlice<FqName, ClassDescriptor>(DO_NOTHING, true); WritableSlice<FqNameUnsafe, ClassDescriptor> FQNAME_TO_CLASS_DESCRIPTOR = new BasicWritableSlice<FqNameUnsafe, ClassDescriptor>(DO_NOTHING, true);
WritableSlice<JetFile, PackageFragmentDescriptor> FILE_TO_PACKAGE_FRAGMENT = Slices.createSimpleSlice(); WritableSlice<JetFile, PackageFragmentDescriptor> FILE_TO_PACKAGE_FRAGMENT = Slices.createSimpleSlice();
WritableSlice<FqName, Collection<JetFile>> PACKAGE_TO_FILES = Slices.createSimpleSlice(); WritableSlice<FqName, Collection<JetFile>> PACKAGE_TO_FILES = Slices.createSimpleSlice();
@@ -491,7 +491,7 @@ public class TypeHierarchyResolver {
createClassDescriptorForSingleton(declaration, JetPsiUtil.safeName(declaration.getName()), ClassKind.OBJECT); createClassDescriptorForSingleton(declaration, JetPsiUtil.safeName(declaration.getName()), ClassKind.OBJECT);
owner.addClassifierDescriptor(descriptor); owner.addClassifierDescriptor(descriptor);
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getFQName(declaration), descriptor); trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getUnsafeFQName(declaration), descriptor);
descriptor.getBuilder().setClassObjectDescriptor(createSyntheticClassObject(descriptor)); descriptor.getBuilder().setClassObjectDescriptor(createSyntheticClassObject(descriptor));
} }
@@ -572,7 +572,7 @@ public class TypeHierarchyResolver {
MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor( MutableClassDescriptor mutableClassDescriptor = new MutableClassDescriptor(
containingDeclaration, outerScope, kind, isInner, JetPsiUtil.safeName(klass.getName())); containingDeclaration, outerScope, kind, isInner, JetPsiUtil.safeName(klass.getName()));
context.getClasses().put(klass, mutableClassDescriptor); context.getClasses().put(klass, mutableClassDescriptor);
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getFQName(klass), mutableClassDescriptor); trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getUnsafeFQName(klass), mutableClassDescriptor);
createClassObjectForEnumClass(mutableClassDescriptor); createClassObjectForEnumClass(mutableClassDescriptor);
@@ -138,7 +138,7 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
return ((ClassDescriptor) currentParent).getClassObjectDescriptor(); return ((ClassDescriptor) currentParent).getClassObjectDescriptor();
} }
else { else {
return bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFqNameSafe(originalDescriptor)); return bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFqName(originalDescriptor));
} }
} }
@@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.name.Name
import org.jetbrains.jet.lang.resolve.BindingContextUtils import org.jetbrains.jet.lang.resolve.BindingContextUtils
import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe
private enum class RenameType { private enum class RenameType {
JAVA_CLASS JAVA_CLASS
@@ -167,7 +168,7 @@ public abstract class AbstractRenameTest : MultiFileTestCase() {
private fun doRenameInKotlinClass(renameParamsObject: JsonObject, context: TestContext, private fun doRenameInKotlinClass(renameParamsObject: JsonObject, context: TestContext,
findDescriptorToRename: (ClassDescriptor) -> DeclarationDescriptor findDescriptorToRename: (ClassDescriptor) -> DeclarationDescriptor
) { ) {
val classFqName = FqName(renameParamsObject.getString("classFQN")) val classFqName = FqNameUnsafe(renameParamsObject.getString("classFQN"))
val newName = renameParamsObject.getString("newName") val newName = renameParamsObject.getString("newName")
val mainFilePath = renameParamsObject.getNullableString("mainFile") ?: "${getTestDirName(false)}.kt" val mainFilePath = renameParamsObject.getNullableString("mainFile") ?: "${getTestDirName(false)}.kt"