Minor: Remove context parameter from getContainingFile() utility and move it to DescriptorToSourceUtils
This commit is contained in:
@@ -28,7 +28,7 @@ import org.jetbrains.jet.codegen.state.GenerationState;
|
|||||||
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
@@ -50,13 +50,14 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.JvmCodegenUtil.*;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.getSuperClass;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
|
import static org.jetbrains.jet.codegen.JvmCodegenUtil.isInterface;
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.JAVA_STRING_TYPE;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.getType;
|
import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.getType;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.ABI_VERSION_FIELD_NAME;
|
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.ABI_VERSION_FIELD_NAME;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
|
import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin.NO_ORIGIN;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.mapping.PrimitiveTypesUtil.asmTypeForPrimitive;
|
import static org.jetbrains.jet.lang.resolve.java.mapping.PrimitiveTypesUtil.asmTypeForPrimitive;
|
||||||
import static org.jetbrains.jet.lang.types.TypeUtils.isNullableType;
|
import static org.jetbrains.jet.lang.types.TypeUtils.isNullableType;
|
||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
@@ -785,7 +786,7 @@ public class AsmUtil {
|
|||||||
container = container.getContainingDeclaration();
|
container = container.getContainingDeclaration();
|
||||||
}
|
}
|
||||||
|
|
||||||
JetFile containingFile = BindingContextUtils.getContainingFile(typeMapper.getBindingContext(), originalDescriptor);
|
JetFile containingFile = DescriptorToSourceUtils.getContainingFile(originalDescriptor);
|
||||||
assert containingFile != null : "Containing file should be present for " + classDescriptor;
|
assert containingFile != null : "Containing file should be present for " + classDescriptor;
|
||||||
return PackagePartClassUtils.getPackagePartInternalName(containingFile);
|
return PackagePartClassUtils.getPackagePartInternalName(containingFile);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
@@ -157,7 +157,7 @@ public final class PsiCodegenPredictor {
|
|||||||
for (ClassDescriptor classDescriptor : trace.getKeys(CodegenBinding.ASM_TYPE)) {
|
for (ClassDescriptor classDescriptor : trace.getKeys(CodegenBinding.ASM_TYPE)) {
|
||||||
Type type = trace.get(CodegenBinding.ASM_TYPE, classDescriptor);
|
Type type = trace.get(CodegenBinding.ASM_TYPE, classDescriptor);
|
||||||
if (type != null && classInternalName.equals(type.getInternalName())) {
|
if (type != null && classInternalName.equals(type.getInternalName())) {
|
||||||
return BindingContextUtils.getContainingFile(trace.getBindingContext(), classDescriptor);
|
return DescriptorToSourceUtils.getContainingFile(classDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall;
|
import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.*;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
||||||
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
|
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
|
||||||
@@ -131,7 +134,7 @@ public class JetTypeMapper {
|
|||||||
boolean insideModule
|
boolean insideModule
|
||||||
) {
|
) {
|
||||||
if (insideModule) {
|
if (insideModule) {
|
||||||
JetFile file = BindingContextUtils.getContainingFile(bindingContext, descriptor);
|
JetFile file = DescriptorToSourceUtils.getContainingFile(descriptor);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
return PackagePartClassUtils.getPackagePartInternalName(file);
|
return PackagePartClassUtils.getPackagePartInternalName(file);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -62,33 +61,6 @@ public class BindingContextUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public static JetFile getContainingFile(@NotNull BindingContext context, @NotNull DeclarationDescriptor declarationDescriptor) {
|
|
||||||
// declarationDescriptor may describe a synthesized element which doesn't have PSI
|
|
||||||
// To workaround that, we find a top-level parent (which is inside a PackageFragmentDescriptor), which is guaranteed to have PSI
|
|
||||||
DeclarationDescriptor descriptor = findTopLevelParent(declarationDescriptor);
|
|
||||||
if (descriptor == null) return null;
|
|
||||||
|
|
||||||
PsiElement declaration = DescriptorToSourceUtils.descriptorToDeclaration(descriptor);
|
|
||||||
if (declaration == null) return null;
|
|
||||||
|
|
||||||
PsiFile containingFile = declaration.getContainingFile();
|
|
||||||
if (!(containingFile instanceof JetFile)) return null;
|
|
||||||
return (JetFile) containingFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private static DeclarationDescriptor findTopLevelParent(@NotNull DeclarationDescriptor declarationDescriptor) {
|
|
||||||
DeclarationDescriptor descriptor = declarationDescriptor;
|
|
||||||
if (declarationDescriptor instanceof PropertyAccessorDescriptor) {
|
|
||||||
descriptor = ((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty();
|
|
||||||
}
|
|
||||||
while (!(descriptor == null || DescriptorUtils.isTopLevelDeclaration(descriptor))) {
|
|
||||||
descriptor = descriptor.getContainingDeclaration();
|
|
||||||
}
|
|
||||||
return descriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void recordFunctionDeclarationToDescriptor(@NotNull BindingTrace trace,
|
public static void recordFunctionDeclarationToDescriptor(@NotNull BindingTrace trace,
|
||||||
@NotNull PsiElement psiElement, @NotNull SimpleFunctionDescriptor function) {
|
@NotNull PsiElement psiElement, @NotNull SimpleFunctionDescriptor function) {
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,11 @@ package org.jetbrains.jet.lang.resolve;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithSource;
|
|
||||||
import org.jetbrains.jet.lang.resolve.source.SourcePackage;
|
import org.jetbrains.jet.lang.resolve.source.SourcePackage;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -107,6 +106,33 @@ public final class DescriptorToSourceUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DescriptorToSourceUtils() {}
|
private DescriptorToSourceUtils() {}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static JetFile getContainingFile(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||||
|
// declarationDescriptor may describe a synthesized element which doesn't have PSI
|
||||||
|
// To workaround that, we find a top-level parent (which is inside a PackageFragmentDescriptor), which is guaranteed to have PSI
|
||||||
|
DeclarationDescriptor descriptor = findTopLevelParent(declarationDescriptor);
|
||||||
|
if (descriptor == null) return null;
|
||||||
|
|
||||||
|
PsiElement declaration = descriptorToDeclaration(descriptor);
|
||||||
|
if (declaration == null) return null;
|
||||||
|
|
||||||
|
PsiFile containingFile = declaration.getContainingFile();
|
||||||
|
if (!(containingFile instanceof JetFile)) return null;
|
||||||
|
return (JetFile) containingFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static DeclarationDescriptor findTopLevelParent(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||||
|
DeclarationDescriptor descriptor = declarationDescriptor;
|
||||||
|
if (declarationDescriptor instanceof PropertyAccessorDescriptor) {
|
||||||
|
descriptor = ((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty();
|
||||||
|
}
|
||||||
|
while (!(descriptor == null || DescriptorUtils.isTopLevelDeclaration(descriptor))) {
|
||||||
|
descriptor = descriptor.getContainingDeclaration();
|
||||||
|
}
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user