Extracted PackagePartClassUtils.
This commit is contained in:
@@ -33,6 +33,7 @@ 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.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaCallableMemberDescriptor;
|
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaCallableMemberDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
@@ -773,7 +774,7 @@ public class AsmUtil {
|
|||||||
|
|
||||||
JetFile containingFile = BindingContextUtils.getContainingFile(typeMapper.getBindingContext(), originalDescriptor);
|
JetFile containingFile = BindingContextUtils.getContainingFile(typeMapper.getBindingContext(), originalDescriptor);
|
||||||
assert containingFile != null : "Containing file should be present for " + classDescriptor;
|
assert containingFile != null : "Containing file should be present for " + classDescriptor;
|
||||||
return PackageCodegen.getPackagePartInternalName(containingFile);
|
return PackagePartClassUtils.getPackagePartInternalName(containingFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmClassSignature;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
|
||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature;
|
||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.*;
|
import org.jetbrains.jet.lang.types.*;
|
||||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||||
|
|||||||
@@ -244,13 +244,6 @@ public class JvmCodegenUtil {
|
|||||||
return (ImplementationBodyCodegen) classBodyCodegen.getParentCodegen();
|
return (ImplementationBodyCodegen) classBodyCodegen.getParentCodegen();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int getPathHashCode(@NotNull VirtualFile file) {
|
|
||||||
// Conversion to system-dependent name seems to be unnecessary, but it's hard to check now:
|
|
||||||
// it was introduced when fixing KT-2839, which appeared again (KT-3639).
|
|
||||||
// If you try to remove it, run tests on Windows.
|
|
||||||
return FileUtil.toSystemDependentName(file.getPath()).hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static ClassDescriptor getExpectedThisObjectForConstructorCall(
|
public static ClassDescriptor getExpectedThisObjectForConstructorCall(
|
||||||
@NotNull ConstructorDescriptor descriptor,
|
@NotNull ConstructorDescriptor descriptor,
|
||||||
|
|||||||
@@ -20,10 +20,8 @@ import com.google.common.collect.Lists;
|
|||||||
import com.google.common.collect.Ordering;
|
import com.google.common.collect.Ordering;
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.util.ArrayUtil;
|
import com.intellij.util.ArrayUtil;
|
||||||
import com.intellij.util.PathUtil;
|
|
||||||
import com.intellij.util.SmartList;
|
import com.intellij.util.SmartList;
|
||||||
import kotlin.Function0;
|
import kotlin.Function0;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -53,9 +51,8 @@ import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
|
||||||
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragmentScope;
|
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragmentScope;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.BaseDescriptorDeserializer;
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
|
||||||
import org.jetbrains.org.objectweb.asm.AnnotationVisitor;
|
import org.jetbrains.org.objectweb.asm.AnnotationVisitor;
|
||||||
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
||||||
import org.jetbrains.org.objectweb.asm.Type;
|
import org.jetbrains.org.objectweb.asm.Type;
|
||||||
@@ -63,7 +60,6 @@ import org.jetbrains.org.objectweb.asm.Type;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses;
|
import static org.jetbrains.jet.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses;
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClasses;
|
|
||||||
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
|
import static org.jetbrains.jet.descriptors.serialization.NameSerializationUtil.createNameResolver;
|
||||||
import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName;
|
import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName;
|
||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
@@ -144,7 +140,7 @@ public class PackageCodegen {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FieldOwnerContext context = CodegenContext.STATIC.intoPackageFacade(
|
FieldOwnerContext context = CodegenContext.STATIC.intoPackageFacade(
|
||||||
Type.getObjectType(getPackagePartInternalName(member)),
|
AsmUtil.asmTypeByFqNameWithoutInnerClasses(PackagePartClassUtils.getPackagePartFqName(member)),
|
||||||
compiledPackageFragment
|
compiledPackageFragment
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -249,7 +245,7 @@ public class PackageCodegen {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private ClassBuilder generate(@NotNull JetFile file, @NotNull Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks) {
|
private ClassBuilder generate(@NotNull JetFile file, @NotNull Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks) {
|
||||||
boolean generatePackagePart = false;
|
boolean generatePackagePart = false;
|
||||||
Type packagePartType = getPackagePartType(getPackageClassFqName(packageFragment.getFqName()), file.getVirtualFile());
|
Type packagePartType = PackagePartClassUtils.getPackagePartType(file);
|
||||||
PackageContext packagePartContext = CodegenContext.STATIC.intoPackagePart(packageFragment, packagePartType);
|
PackageContext packagePartContext = CodegenContext.STATIC.intoPackagePart(packageFragment, packagePartType);
|
||||||
|
|
||||||
for (JetDeclaration declaration : file.getDeclarations()) {
|
for (JetDeclaration declaration : file.getDeclarations()) {
|
||||||
@@ -335,8 +331,8 @@ public class PackageCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
public void generateClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
||||||
JetFile file = classOrObject.getContainingJetFile();
|
JetFile file = (JetFile) classOrObject.getContainingFile();
|
||||||
Type packagePartType = getPackagePartType(getPackageClassFqName(packageFragment.getFqName()), file.getVirtualFile());
|
Type packagePartType = PackagePartClassUtils.getPackagePartType(file);
|
||||||
CodegenContext context = CodegenContext.STATIC.intoPackagePart(packageFragment, packagePartType);
|
CodegenContext context = CodegenContext.STATIC.intoPackagePart(packageFragment, packagePartType);
|
||||||
MemberCodegen.genClassOrObject(context, classOrObject, state, null);
|
MemberCodegen.genClassOrObject(context, classOrObject, state, null);
|
||||||
}
|
}
|
||||||
@@ -344,33 +340,4 @@ public class PackageCodegen {
|
|||||||
public void done() {
|
public void done() {
|
||||||
v.done();
|
v.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static Type getPackagePartType(@NotNull FqName facadeFqName, @NotNull VirtualFile file) {
|
|
||||||
String fileName = FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.getName()));
|
|
||||||
|
|
||||||
// path hashCode to prevent same name / different path collision
|
|
||||||
String srcName = facadeFqName.shortName().asString() + "-" + replaceSpecialSymbols(fileName) + "-" + Integer.toHexString(
|
|
||||||
JvmCodegenUtil.getPathHashCode(file));
|
|
||||||
|
|
||||||
return asmTypeByFqNameWithoutInnerClasses(facadeFqName.parent().child(Name.identifier(srcName)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private static String replaceSpecialSymbols(@NotNull String str) {
|
|
||||||
return str.replace('.', '_');
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static String getPackagePartInternalName(@NotNull JetFile file) {
|
|
||||||
FqName packageFqName = file.getPackageFqName();
|
|
||||||
return getPackagePartType(getPackageClassFqName(packageFqName), file.getVirtualFile()).getInternalName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static String getPackagePartInternalName(@NotNull DeserializedCallableMemberDescriptor callable) {
|
|
||||||
FqName packageFqName = ((PackageFragmentDescriptor) callable.getContainingDeclaration()).getFqName();
|
|
||||||
FqName packagePartFqName = packageFqName.child(BaseDescriptorDeserializer.getPackagePartClassName(callable));
|
|
||||||
return AsmUtil.internalNameByFqNameWithoutInnerClasses(packagePartFqName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,10 @@
|
|||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
|
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
||||||
|
import org.jetbrains.org.objectweb.asm.Type;
|
||||||
|
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
||||||
import org.jetbrains.jet.codegen.context.CodegenContext;
|
import org.jetbrains.jet.codegen.context.CodegenContext;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
||||||
@@ -29,9 +33,6 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor;
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.org.objectweb.asm.MethodVisitor;
|
|
||||||
import org.jetbrains.org.objectweb.asm.Type;
|
|
||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
|
||||||
|
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE;
|
import static org.jetbrains.jet.codegen.AsmUtil.NO_FLAG_PACKAGE_PRIVATE;
|
||||||
import static org.jetbrains.jet.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
|
import static org.jetbrains.jet.codegen.AsmUtil.writeKotlinSyntheticClassAnnotation;
|
||||||
@@ -136,7 +137,7 @@ public class SamWrapperCodegen {
|
|||||||
JavaClassDescriptor descriptor = samType.getJavaClassDescriptor();
|
JavaClassDescriptor descriptor = samType.getJavaClassDescriptor();
|
||||||
return packageInternalName + "$sam$" + descriptor.getName().asString() + "$" +
|
return packageInternalName + "$sam$" + descriptor.getName().asString() + "$" +
|
||||||
Integer.toHexString(
|
Integer.toHexString(
|
||||||
JvmCodegenUtil.getPathHashCode(containingFile.getVirtualFile()) * 31 +
|
PackagePartClassUtils.getPathHashCode(containingFile.getVirtualFile()) * 31 +
|
||||||
DescriptorUtils.getFqNameSafe(descriptor).hashCode()
|
DescriptorUtils.getFqNameSafe(descriptor).hashCode()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.codegen.AsmUtil;
|
import org.jetbrains.jet.codegen.AsmUtil;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactories;
|
import org.jetbrains.jet.codegen.ClassBuilderFactories;
|
||||||
import org.jetbrains.jet.codegen.PackageCodegen;
|
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
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;
|
||||||
@@ -34,6 +33,7 @@ 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.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.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.org.objectweb.asm.Type;
|
import org.jetbrains.org.objectweb.asm.Type;
|
||||||
@@ -135,7 +135,7 @@ public final class PsiCodegenPredictor {
|
|||||||
@Nullable
|
@Nullable
|
||||||
public static JetFile getFileForPackagePartName(@NotNull Collection<JetFile> allPackageFiles, @NotNull JvmClassName className) {
|
public static JetFile getFileForPackagePartName(@NotNull Collection<JetFile> allPackageFiles, @NotNull JvmClassName className) {
|
||||||
for (JetFile file : allPackageFiles) {
|
for (JetFile file : allPackageFiles) {
|
||||||
String internalName = PackageCodegen.getPackagePartInternalName(file);
|
String internalName = PackagePartClassUtils.getPackagePartInternalName(file);
|
||||||
JvmClassName jvmClassName = JvmClassName.byInternalName(internalName);
|
JvmClassName jvmClassName = JvmClassName.byInternalName(internalName);
|
||||||
if (jvmClassName.equals(className)) {
|
if (jvmClassName.equals(className)) {
|
||||||
return file;
|
return file;
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import com.intellij.psi.PsiElement;
|
|||||||
import com.intellij.psi.PsiFile;
|
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.codegen.PackageCodegen;
|
|
||||||
import org.jetbrains.jet.codegen.binding.CodegenBinding;
|
import org.jetbrains.jet.codegen.binding.CodegenBinding;
|
||||||
import org.jetbrains.jet.codegen.context.CodegenContext;
|
import org.jetbrains.jet.codegen.context.CodegenContext;
|
||||||
import org.jetbrains.jet.codegen.context.PackageContext;
|
import org.jetbrains.jet.codegen.context.PackageContext;
|
||||||
@@ -33,11 +32,13 @@ import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf;
|
|||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils;
|
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
|
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -154,9 +155,7 @@ public class InlineCodegenUtil {
|
|||||||
assert codegenContext instanceof PackageContext : "Expected package context but " + codegenContext;
|
assert codegenContext instanceof PackageContext : "Expected package context but " + codegenContext;
|
||||||
packagePartType = ((PackageContext) codegenContext).getPackagePartType();
|
packagePartType = ((PackageContext) codegenContext).getPackagePartType();
|
||||||
} else {
|
} else {
|
||||||
packagePartType =
|
packagePartType = PackagePartClassUtils.getPackagePartType((JetFile) file);
|
||||||
PackageCodegen.getPackagePartType(PackageClassUtils.getPackageClassFqName(getFqName(currentDescriptor).toSafe()),
|
|
||||||
file.getVirtualFile());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packagePartType == null) {
|
if (packagePartType == null) {
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature;
|
||||||
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
|
import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature;
|
||||||
import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap;
|
import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
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.FqNameUnsafe;
|
||||||
import org.jetbrains.jet.lang.types.*;
|
import org.jetbrains.jet.lang.types.*;
|
||||||
@@ -131,13 +132,14 @@ public class JetTypeMapper {
|
|||||||
if (insideModule) {
|
if (insideModule) {
|
||||||
JetFile file = BindingContextUtils.getContainingFile(bindingContext, descriptor);
|
JetFile file = BindingContextUtils.getContainingFile(bindingContext, descriptor);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
return PackageCodegen.getPackagePartInternalName(file);
|
return PackagePartClassUtils.getPackagePartInternalName(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (descriptor instanceof DeserializedCallableMemberDescriptor && IncrementalCompilation.ENABLED) {
|
if (descriptor instanceof DeserializedCallableMemberDescriptor && IncrementalCompilation.ENABLED) {
|
||||||
//
|
//
|
||||||
// TODO calls from other modules/libraries should use facade: KT-4590
|
// TODO calls from other modules/libraries should use facade: KT-4590
|
||||||
return PackageCodegen.getPackagePartInternalName((DeserializedCallableMemberDescriptor) descriptor);
|
FqName packagePartFqName = PackagePartClassUtils.getPackagePartFqName((DeserializedCallableMemberDescriptor) descriptor);
|
||||||
|
return AsmUtil.internalNameByFqNameWithoutInnerClasses(packagePartFqName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,15 +18,16 @@ package org.jetbrains.jet.cli.jvm.compiler
|
|||||||
|
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter
|
import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter
|
||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf
|
import org.jetbrains.jet.descriptors.serialization.ProtoBuf
|
||||||
import org.jetbrains.jet.codegen.PackageCodegen.getPackagePartInternalName
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils.getPackagePartInternalName
|
||||||
import org.jetbrains.jet.descriptors.serialization.NameResolver
|
import org.jetbrains.jet.descriptors.serialization.NameResolver
|
||||||
import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf
|
import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf
|
||||||
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName
|
||||||
import org.jetbrains.jet.codegen.AsmUtil
|
import org.jetbrains.jet.codegen.AsmUtil
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils
|
||||||
|
|
||||||
public class CliSourcesMemberFilter(environment: JetCoreEnvironment): MemberFilter {
|
public class CliSourcesMemberFilter(environment: JetCoreEnvironment): MemberFilter {
|
||||||
val packagePartClassNames = environment.getSourceFiles().map { getPackagePartInternalName(it) }.toSet()
|
val packagePartClassNames = environment.getSourceFiles().map { PackagePartClassUtils.getPackagePartInternalName(it) }.toSet()
|
||||||
|
|
||||||
override fun acceptPackagePartClass(container: PackageFragmentDescriptor, member: ProtoBuf.Callable, nameResolver: NameResolver): Boolean {
|
override fun acceptPackagePartClass(container: PackageFragmentDescriptor, member: ProtoBuf.Callable, nameResolver: NameResolver): Boolean {
|
||||||
if (member.hasExtension(JavaProtoBuf.implClassName)) {
|
if (member.hasExtension(JavaProtoBuf.implClassName)) {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="module" module-name="frontend" />
|
<orderEntry type="module" module-name="frontend" exported="" />
|
||||||
<orderEntry type="library" scope="PROVIDED" name="intellij-core" level="project" />
|
<orderEntry type="library" scope="PROVIDED" name="intellij-core" level="project" />
|
||||||
<orderEntry type="library" name="javax.inject" level="project" />
|
<orderEntry type="library" name="javax.inject" level="project" />
|
||||||
<orderEntry type="module" module-name="serialization" />
|
<orderEntry type="module" module-name="serialization" />
|
||||||
|
|||||||
+77
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2014 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.lang.resolve.kotlin;
|
||||||
|
|
||||||
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
|
import com.intellij.util.PathUtil;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
|
import org.jetbrains.org.objectweb.asm.Type;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName;
|
||||||
|
|
||||||
|
public class PackagePartClassUtils {
|
||||||
|
public static int getPathHashCode(@NotNull VirtualFile file) {
|
||||||
|
// Conversion to system-dependent name seems to be unnecessary, but it's hard to check now:
|
||||||
|
// it was introduced when fixing KT-2839, which appeared again (KT-3639).
|
||||||
|
// If you try to remove it, run tests on Windows.
|
||||||
|
return FileUtil.toSystemDependentName(file.getPath()).hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private static String replaceSpecialSymbols(@NotNull String str) {
|
||||||
|
return str.replace('.', '_');
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static FqName getPackagePartFqName(@NotNull FqName facadeFqName, @NotNull VirtualFile file) {
|
||||||
|
String fileName = FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.getName()));
|
||||||
|
|
||||||
|
// path hashCode to prevent same name / different path collision
|
||||||
|
String srcName = facadeFqName.shortName().asString() + "-" + replaceSpecialSymbols(fileName) + "-" + Integer.toHexString(
|
||||||
|
getPathHashCode(file));
|
||||||
|
|
||||||
|
return facadeFqName.parent().child(Name.identifier(srcName));
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static FqName getPackagePartFqName(@NotNull JetFile file) {
|
||||||
|
return getPackagePartFqName(getPackageClassFqName(file.getPackageFqName()), file.getVirtualFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static Type getPackagePartType(@NotNull JetFile file) {
|
||||||
|
return Type.getObjectType(getPackagePartInternalName(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static String getPackagePartInternalName(@NotNull JetFile file) {
|
||||||
|
return JvmClassName.byFqNameWithoutInnerClasses(getPackagePartFqName(file)).getInternalName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static FqName getPackagePartFqName(@NotNull DeserializedCallableMemberDescriptor callable) {
|
||||||
|
FqName packageFqName = ((PackageFragmentDescriptor) callable.getContainingDeclaration()).getFqName();
|
||||||
|
return packageFqName.child(BaseDescriptorDeserializer.getPackagePartClassName(callable));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.ConfigurationKind;
|
import org.jetbrains.jet.ConfigurationKind;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
@@ -43,7 +44,7 @@ public class AnnotationGenTest extends CodegenTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Class<?> getPackageSrcClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
|
private Class<?> getPackageSrcClass(@NotNull ClassLoader loader) throws ClassNotFoundException {
|
||||||
return loader.loadClass(PackageCodegen.getPackagePartInternalName(myFiles.getPsiFile()));
|
return loader.loadClass(PackagePartClassUtils.getPackagePartInternalName(myFiles.getPsiFile()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testVolatileProperty() throws Exception {
|
public void testVolatileProperty() throws Exception {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.jet.OutputFile;
|
|||||||
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
||||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||||
import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime;
|
import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.utils.UtilsPackage;
|
import org.jetbrains.jet.utils.UtilsPackage;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader;
|
import org.jetbrains.org.objectweb.asm.ClassReader;
|
||||||
@@ -174,7 +175,7 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected Class<?> generatePackagePartClass() {
|
protected Class<?> generatePackagePartClass() {
|
||||||
String name = PackageCodegen.getPackagePartInternalName(myFiles.getPsiFile());
|
String name = PackagePartClassUtils.getPackagePartInternalName(myFiles.getPsiFile());
|
||||||
return generateClass(name);
|
return generateClass(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.annotations.TestOnly;
|
import org.jetbrains.annotations.TestOnly;
|
||||||
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactories;
|
import org.jetbrains.jet.codegen.ClassBuilderFactories;
|
||||||
import org.jetbrains.jet.codegen.PackageCodegen;
|
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
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.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
@@ -48,6 +47,7 @@ import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument;
|
|||||||
import org.jetbrains.jet.lang.resolve.extension.InlineAnalyzerExtension;
|
import org.jetbrains.jet.lang.resolve.extension.InlineAnalyzerExtension;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
|
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.types.lang.InlineStrategy;
|
import org.jetbrains.jet.lang.types.lang.InlineStrategy;
|
||||||
import org.jetbrains.jet.lang.types.lang.InlineUtil;
|
import org.jetbrains.jet.lang.types.lang.InlineUtil;
|
||||||
@@ -170,7 +170,7 @@ public class JetPositionManager implements PositionManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return PackageCodegen.getPackagePartInternalName(file);
|
return PackagePartClassUtils.getPackagePartInternalName(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ import com.intellij.testFramework.LightVirtualFile;
|
|||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.codegen.AsmUtil;
|
||||||
import org.jetbrains.jet.codegen.PackageCodegen;
|
import org.jetbrains.jet.codegen.PackageCodegen;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jps.builders.BuildResult;
|
import org.jetbrains.jps.builders.BuildResult;
|
||||||
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
|
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
|
||||||
@@ -368,7 +370,9 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase {
|
|||||||
return super.getPath().substring(1);
|
return super.getPath().substring(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return PackageCodegen.getPackagePartType(new FqName(packageClassFqName), fakeVirtualFile).getInternalName();
|
|
||||||
|
FqName packagePartFqName = PackagePartClassUtils.getPackagePartFqName(new FqName(packageClassFqName), fakeVirtualFile);
|
||||||
|
return AsmUtil.internalNameByFqNameWithoutInnerClasses(packagePartFqName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static enum Operation {
|
private static enum Operation {
|
||||||
|
|||||||
Reference in New Issue
Block a user