Drop JvmFileClassesProvider and inline implementations
Both of its implementations called the same static function; inline those and move related utilities to JvmFileClassUtil
This commit is contained in:
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 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.kotlin.codegen
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo
|
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
|
|
||||||
class CodegenFileClassesProvider : JvmFileClassesProvider {
|
|
||||||
override fun getFileClassInfo(file: KtFile): JvmFileClassInfo =
|
|
||||||
JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
|
||||||
}
|
|
||||||
@@ -21,6 +21,7 @@ import kotlin.collections.SetsKt;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||||
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
@@ -55,7 +56,7 @@ public class KotlinCodegenFacade {
|
|||||||
for (KtFile file : files) {
|
for (KtFile file : files) {
|
||||||
if (file == null) throw new IllegalArgumentException("A null file given for compilation");
|
if (file == null) throw new IllegalArgumentException("A null file given for compilation");
|
||||||
|
|
||||||
JvmFileClassInfo fileClassInfo = state.getFileClassesProvider().getFileClassInfo(file);
|
JvmFileClassInfo fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file);
|
||||||
|
|
||||||
if (fileClassInfo.getWithJvmMultifileClass()) {
|
if (fileClassInfo.getWithJvmMultifileClass()) {
|
||||||
filesInMultifileClasses.putValue(fileClassInfo.getFacadeClassFqName(), file);
|
filesInMultifileClasses.putValue(fileClassInfo.getFacadeClassFqName(), file);
|
||||||
|
|||||||
@@ -37,8 +37,7 @@ import org.jetbrains.kotlin.descriptors.*;
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget;
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||||
import org.jetbrains.kotlin.fileClasses.FileClasses;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider;
|
|
||||||
import org.jetbrains.kotlin.load.java.JavaVisibilities;
|
import org.jetbrains.kotlin.load.java.JavaVisibilities;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames;
|
||||||
@@ -98,7 +97,6 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
|||||||
public final KotlinTypeMapper typeMapper;
|
public final KotlinTypeMapper typeMapper;
|
||||||
public final BindingContext bindingContext;
|
public final BindingContext bindingContext;
|
||||||
|
|
||||||
private final JvmFileClassesProvider fileClassesProvider;
|
|
||||||
private final MemberCodegen<?> parentCodegen;
|
private final MemberCodegen<?> parentCodegen;
|
||||||
private final ReifiedTypeParametersUsages reifiedTypeParametersUsages = new ReifiedTypeParametersUsages();
|
private final ReifiedTypeParametersUsages reifiedTypeParametersUsages = new ReifiedTypeParametersUsages();
|
||||||
private final Collection<ClassDescriptor> innerClasses = new LinkedHashSet<>();
|
private final Collection<ClassDescriptor> innerClasses = new LinkedHashSet<>();
|
||||||
@@ -118,7 +116,6 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
|||||||
this.state = state;
|
this.state = state;
|
||||||
this.typeMapper = state.getTypeMapper();
|
this.typeMapper = state.getTypeMapper();
|
||||||
this.bindingContext = state.getBindingContext();
|
this.bindingContext = state.getBindingContext();
|
||||||
this.fileClassesProvider = state.getFileClassesProvider();
|
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.v = builder;
|
this.v = builder;
|
||||||
@@ -433,7 +430,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
|||||||
return implementationOwnerType;
|
return implementationOwnerType;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return FileClasses.getFileClassType(fileClassesProvider, element.getContainingKtFile());
|
return Type.getObjectType(JvmFileClassUtil.getFileClassInternalName(element.getContainingKtFile()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,7 +458,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
|||||||
@NotNull
|
@NotNull
|
||||||
public NameGenerator getInlineNameGenerator() {
|
public NameGenerator getInlineNameGenerator() {
|
||||||
if (inlineNameGenerator == null) {
|
if (inlineNameGenerator == null) {
|
||||||
String prefix = getInlineName(context, typeMapper, fileClassesProvider);
|
String prefix = getInlineName(context, typeMapper);
|
||||||
inlineNameGenerator = new NameGenerator(prefix);
|
inlineNameGenerator = new NameGenerator(prefix);
|
||||||
}
|
}
|
||||||
return inlineNameGenerator;
|
return inlineNameGenerator;
|
||||||
|
|||||||
@@ -77,9 +77,6 @@ class MultifileClassCodegenImpl(
|
|||||||
.getContributedDescriptors(DescriptorKindFilter.CALLABLES, MemberScope.ALL_NAME_FILTER)
|
.getContributedDescriptors(DescriptorKindFilter.CALLABLES, MemberScope.ALL_NAME_FILTER)
|
||||||
.filterIsInstance<DeserializedCallableMemberDescriptor>()
|
.filterIsInstance<DeserializedCallableMemberDescriptor>()
|
||||||
|
|
||||||
private fun KtFile.getFileClassFqName() =
|
|
||||||
state.fileClassesProvider.getFileClassInfo(this).fileClassFqName
|
|
||||||
|
|
||||||
private val shouldGeneratePartHierarchy =
|
private val shouldGeneratePartHierarchy =
|
||||||
state.inheritMultifileParts
|
state.inheritMultifileParts
|
||||||
|
|
||||||
@@ -87,7 +84,7 @@ class MultifileClassCodegenImpl(
|
|||||||
val partInternalNamesSet = hashSetOf<String>()
|
val partInternalNamesSet = hashSetOf<String>()
|
||||||
for (file in files) {
|
for (file in files) {
|
||||||
if (file.hasDeclarationsForPartClass()) {
|
if (file.hasDeclarationsForPartClass()) {
|
||||||
partInternalNamesSet.add(file.getFileClassFqName().toInternalName())
|
partInternalNamesSet.add(JvmFileClassUtil.getFileClassInternalName(file))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
compiledPackageFragment?.let {
|
compiledPackageFragment?.let {
|
||||||
@@ -205,7 +202,7 @@ class MultifileClassCodegenImpl(
|
|||||||
val packageFragment = this.packageFragment
|
val packageFragment = this.packageFragment
|
||||||
?: throw AssertionError("File part $file of $facadeFqName: no package fragment")
|
?: throw AssertionError("File part $file of $facadeFqName: no package fragment")
|
||||||
|
|
||||||
val partType = file.getFileClassFqName().toAsmType()
|
val partType = Type.getObjectType(JvmFileClassUtil.getFileClassInternalName(file))
|
||||||
val partContext = state.rootContext.intoMultifileClassPart(packageFragment, facadeClassType, partType, file)
|
val partContext = state.rootContext.intoMultifileClassPart(packageFragment, facadeClassType, partType, file)
|
||||||
|
|
||||||
generateNonPartClassDeclarations(file, partContext)
|
generateNonPartClassDeclarations(file, partContext)
|
||||||
@@ -372,12 +369,6 @@ class MultifileClassCodegenImpl(
|
|||||||
private fun KtFile.hasDeclarationsForPartClass() =
|
private fun KtFile.hasDeclarationsForPartClass() =
|
||||||
declarations.any { it is KtProperty || it is KtFunction }
|
declarations.any { it is KtProperty || it is KtFunction }
|
||||||
|
|
||||||
private fun FqName.toInternalName() =
|
|
||||||
AsmUtil.internalNameByFqNameWithoutInnerClasses(this)
|
|
||||||
|
|
||||||
private fun FqName.toAsmType() =
|
|
||||||
AsmUtil.asmTypeByFqNameWithoutInnerClasses(this)
|
|
||||||
|
|
||||||
private fun getCompiledPackageFragment(
|
private fun getCompiledPackageFragment(
|
||||||
facadeFqName: FqName, state: GenerationState
|
facadeFqName: FqName, state: GenerationState
|
||||||
): IncrementalPackageFragmentProvider.IncrementalMultifileClassPackageFragment? {
|
): IncrementalPackageFragmentProvider.IncrementalMultifileClassPackageFragment? {
|
||||||
@@ -393,5 +384,4 @@ class MultifileClassCodegenImpl(
|
|||||||
return incrementalPackageFragment?.getPackageFragmentForMultifileClass(facadeFqName)
|
return incrementalPackageFragment?.getPackageFragmentForMultifileClass(facadeFqName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState;
|
|||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor;
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils;
|
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||||
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens;
|
import org.jetbrains.kotlin.lexer.KtTokens;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus;
|
||||||
@@ -88,11 +89,8 @@ public class PackageCodegenImpl implements PackageCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void generateFile(@NotNull KtFile file) {
|
private void generateFile(@NotNull KtFile file) {
|
||||||
JvmFileClassInfo fileClassInfo = state.getFileClassesProvider().getFileClassInfo(file);
|
JvmFileClassInfo fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file);
|
||||||
|
if (fileClassInfo.getWithJvmMultifileClass()) return;
|
||||||
if (fileClassInfo.getWithJvmMultifileClass()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Type fileClassType = AsmUtil.asmTypeByFqNameWithoutInnerClasses(fileClassInfo.getFileClassFqName());
|
Type fileClassType = AsmUtil.asmTypeByFqNameWithoutInnerClasses(fileClassInfo.getFileClassFqName());
|
||||||
PackageContext packagePartContext = state.getRootContext().intoPackagePart(packageFragment, fileClassType, file);
|
PackageContext packagePartContext = state.getRootContext().intoPackagePart(packageFragment, fileClassType, file);
|
||||||
|
|||||||
+4
-7
@@ -37,8 +37,7 @@ import org.jetbrains.kotlin.descriptors.*;
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
|
||||||
import org.jetbrains.kotlin.fileClasses.FileClasses;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider;
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor;
|
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor;
|
||||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingConfiguration;
|
import org.jetbrains.kotlin.load.kotlin.TypeMappingConfiguration;
|
||||||
@@ -85,7 +84,6 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
|||||||
private final BindingContext bindingContext;
|
private final BindingContext bindingContext;
|
||||||
private final GenerationState.GenerateClassFilter filter;
|
private final GenerationState.GenerateClassFilter filter;
|
||||||
private final JvmRuntimeTypes runtimeTypes;
|
private final JvmRuntimeTypes runtimeTypes;
|
||||||
private final JvmFileClassesProvider fileClassesProvider;
|
|
||||||
private final TypeMappingConfiguration<Type> typeMappingConfiguration;
|
private final TypeMappingConfiguration<Type> typeMappingConfiguration;
|
||||||
private final SwitchCodegenProvider switchCodegenProvider;
|
private final SwitchCodegenProvider switchCodegenProvider;
|
||||||
|
|
||||||
@@ -94,7 +92,6 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
|||||||
this.bindingContext = state.getBindingContext();
|
this.bindingContext = state.getBindingContext();
|
||||||
this.filter = state.getGenerateDeclaredClassFilter();
|
this.filter = state.getGenerateDeclaredClassFilter();
|
||||||
this.runtimeTypes = state.getJvmRuntimeTypes();
|
this.runtimeTypes = state.getJvmRuntimeTypes();
|
||||||
this.fileClassesProvider = state.getFileClassesProvider();
|
|
||||||
this.typeMappingConfiguration = state.getTypeMapper().getTypeMappingConfiguration();
|
this.typeMappingConfiguration = state.getTypeMapper().getTypeMappingConfiguration();
|
||||||
this.switchCodegenProvider = new SwitchCodegenProvider(state);
|
this.switchCodegenProvider = new SwitchCodegenProvider(state);
|
||||||
}
|
}
|
||||||
@@ -462,7 +459,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Type.getObjectType(FileClasses.getFileClassInternalName(fileClassesProvider, property.getContainingKtFile()));
|
return Type.getObjectType(JvmFileClassUtil.getFileClassInternalName(property.getContainingKtFile()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -548,7 +545,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
|||||||
else if (containingDeclaration instanceof PackageFragmentDescriptor) {
|
else if (containingDeclaration instanceof PackageFragmentDescriptor) {
|
||||||
KtFile containingFile = DescriptorToSourceUtils.getContainingFile(descriptor);
|
KtFile containingFile = DescriptorToSourceUtils.getContainingFile(descriptor);
|
||||||
assert containingFile != null : "File not found for " + descriptor;
|
assert containingFile != null : "File not found for " + descriptor;
|
||||||
return FileClasses.getFileClassInternalName(fileClassesProvider, containingFile) + '$' + name;
|
return JvmFileClassUtil.getFileClassInternalName(containingFile) + '$' + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -728,7 +725,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FileClasses.getFacadeClassInternalName(fileClassesProvider, file);
|
return JvmFileClassUtil.getFacadeClassInternalName(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T> T peekFromStack(@NotNull Stack<T> stack) {
|
private static <T> T peekFromStack(@NotNull Stack<T> stack) {
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ import org.jetbrains.kotlin.codegen.optimization.common.intConstant
|
|||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.getFileClassType
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryPackageSourceElement
|
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryPackageSourceElement
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
|
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
|
||||||
@@ -61,7 +60,6 @@ import org.jetbrains.org.objectweb.asm.util.TraceMethodVisitor
|
|||||||
import java.io.PrintWriter
|
import java.io.PrintWriter
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
|
|
||||||
|
|
||||||
const val GENERATE_SMAP = true
|
const val GENERATE_SMAP = true
|
||||||
const val API = Opcodes.ASM5
|
const val API = Opcodes.ASM5
|
||||||
const val NUMBERED_FUNCTION_PREFIX = "kotlin/jvm/functions/Function"
|
const val NUMBERED_FUNCTION_PREFIX = "kotlin/jvm/functions/Function"
|
||||||
@@ -158,31 +156,25 @@ internal fun findVirtualFileImprecise(state: GenerationState, internalClassName:
|
|||||||
return findVirtualFile(state, ClassId(packageFqName, Name.identifier(classNameWithDollars)))
|
return findVirtualFile(state, ClassId(packageFqName, Name.identifier(classNameWithDollars)))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun getInlineName(
|
internal fun getInlineName(codegenContext: CodegenContext<*>, typeMapper: KotlinTypeMapper): String =
|
||||||
codegenContext: CodegenContext<*>,
|
getInlineName(codegenContext, codegenContext.contextDescriptor, typeMapper)
|
||||||
typeMapper: KotlinTypeMapper,
|
|
||||||
fileClassesManager: JvmFileClassesProvider
|
|
||||||
): String {
|
|
||||||
return getInlineName(codegenContext, codegenContext.contextDescriptor, typeMapper, fileClassesManager)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getInlineName(
|
private fun getInlineName(
|
||||||
codegenContext: CodegenContext<*>,
|
codegenContext: CodegenContext<*>,
|
||||||
currentDescriptor: DeclarationDescriptor,
|
currentDescriptor: DeclarationDescriptor,
|
||||||
typeMapper: KotlinTypeMapper,
|
typeMapper: KotlinTypeMapper
|
||||||
fileClassesProvider: JvmFileClassesProvider
|
|
||||||
): String {
|
): String {
|
||||||
when (currentDescriptor) {
|
when (currentDescriptor) {
|
||||||
is PackageFragmentDescriptor -> {
|
is PackageFragmentDescriptor -> {
|
||||||
val file = DescriptorToSourceUtils.getContainingFile(codegenContext.contextDescriptor)
|
val file = DescriptorToSourceUtils.getContainingFile(codegenContext.contextDescriptor)
|
||||||
|
|
||||||
val implementationOwnerType: Type? =
|
val implementationOwnerInternalName: String? =
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
CodegenContextUtil.getImplementationOwnerClassType(codegenContext)
|
CodegenContextUtil.getImplementationOwnerClassType(codegenContext)?.internalName
|
||||||
}
|
}
|
||||||
else fileClassesProvider.getFileClassType(file)
|
else JvmFileClassUtil.getFileClassInternalName(file)
|
||||||
|
|
||||||
if (implementationOwnerType == null) {
|
if (implementationOwnerInternalName == null) {
|
||||||
val contextDescriptor = codegenContext.contextDescriptor
|
val contextDescriptor = codegenContext.contextDescriptor
|
||||||
throw RuntimeException(
|
throw RuntimeException(
|
||||||
"Couldn't find declaration for " +
|
"Couldn't find declaration for " +
|
||||||
@@ -191,7 +183,7 @@ private fun getInlineName(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return implementationOwnerType.internalName
|
return implementationOwnerInternalName
|
||||||
}
|
}
|
||||||
is ClassifierDescriptor -> {
|
is ClassifierDescriptor -> {
|
||||||
return typeMapper.mapType(currentDescriptor).internalName
|
return typeMapper.mapType(currentDescriptor).internalName
|
||||||
@@ -207,8 +199,7 @@ private fun getInlineName(
|
|||||||
//TODO: add suffix for special case
|
//TODO: add suffix for special case
|
||||||
val suffix = if (currentDescriptor.name.isSpecial) "" else currentDescriptor.name.asString()
|
val suffix = if (currentDescriptor.name.isSpecial) "" else currentDescriptor.name.asString()
|
||||||
|
|
||||||
|
return getInlineName(codegenContext, currentDescriptor.containingDeclaration!!, typeMapper) + "$" + suffix
|
||||||
return getInlineName(codegenContext, currentDescriptor.containingDeclaration!!, typeMapper, fileClassesProvider) + "$" + suffix
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun isInvokeOnLambda(owner: String, name: String): Boolean {
|
internal fun isInvokeOnLambda(owner: String, name: String): Boolean {
|
||||||
|
|||||||
+1
-2
@@ -20,14 +20,13 @@ import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
|||||||
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.KotlinToJvmSignatureMapper
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.KotlinToJvmSignatureMapper
|
||||||
|
|
||||||
class KotlinToJvmSignatureMapperImpl : KotlinToJvmSignatureMapper {
|
class KotlinToJvmSignatureMapperImpl : KotlinToJvmSignatureMapper {
|
||||||
// We use empty BindingContext, because it is only used by KotlinTypeMapper for purposes irrelevant to the needs of this class
|
// We use empty BindingContext, because it is only used by KotlinTypeMapper for purposes irrelevant to the needs of this class
|
||||||
private val typeMapper = KotlinTypeMapper(BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES, NoResolveFileClassesProvider,
|
private val typeMapper = KotlinTypeMapper(BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES,
|
||||||
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, false)
|
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, false)
|
||||||
|
|
||||||
override fun mapToJvmMethodSignature(function: FunctionDescriptor) = typeMapper.mapAsmMethod(function)
|
override fun mapToJvmMethodSignature(function: FunctionDescriptor) = typeMapper.mapAsmMethod(function)
|
||||||
|
|||||||
+1
-3
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider
|
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.getParentJavaStaticClassScope
|
import org.jetbrains.kotlin.load.java.descriptors.getParentJavaStaticClassScope
|
||||||
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
|
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -57,14 +56,13 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
|
|||||||
builderFactory: ClassBuilderFactory,
|
builderFactory: ClassBuilderFactory,
|
||||||
bindingContext: BindingContext,
|
bindingContext: BindingContext,
|
||||||
private val diagnostics: DiagnosticSink,
|
private val diagnostics: DiagnosticSink,
|
||||||
fileClassesProvider: JvmFileClassesProvider,
|
|
||||||
moduleName: String,
|
moduleName: String,
|
||||||
shouldGenerate: (JvmDeclarationOrigin) -> Boolean
|
shouldGenerate: (JvmDeclarationOrigin) -> Boolean
|
||||||
) : SignatureCollectingClassBuilderFactory(builderFactory, shouldGenerate) {
|
) : SignatureCollectingClassBuilderFactory(builderFactory, shouldGenerate) {
|
||||||
|
|
||||||
// Avoid errors when some classes are not loaded for some reason
|
// Avoid errors when some classes are not loaded for some reason
|
||||||
private val typeMapper = KotlinTypeMapper(
|
private val typeMapper = KotlinTypeMapper(
|
||||||
bindingContext, ClassBuilderMode.LIGHT_CLASSES, fileClassesProvider, IncompatibleClassTracker.DoNothing, moduleName, false, false
|
bindingContext, ClassBuilderMode.LIGHT_CLASSES, IncompatibleClassTracker.DoNothing, moduleName, false, false
|
||||||
)
|
)
|
||||||
private val reportDiagnosticsTasks = ArrayList<() -> Unit>()
|
private val reportDiagnosticsTasks = ArrayList<() -> Unit>()
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,6 @@ class GenerationState @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val fileClassesProvider: CodegenFileClassesProvider = CodegenFileClassesProvider()
|
|
||||||
val inlineCache: InlineCache = InlineCache()
|
val inlineCache: InlineCache = InlineCache()
|
||||||
|
|
||||||
val incrementalCacheForThisTarget: IncrementalCache?
|
val incrementalCacheForThisTarget: IncrementalCache?
|
||||||
@@ -138,7 +137,7 @@ class GenerationState @JvmOverloads constructor(
|
|||||||
filter = if (wantsDiagnostics) BindingTraceFilter.ACCEPT_ALL else BindingTraceFilter.NO_DIAGNOSTICS)
|
filter = if (wantsDiagnostics) BindingTraceFilter.ACCEPT_ALL else BindingTraceFilter.NO_DIAGNOSTICS)
|
||||||
val bindingContext: BindingContext = bindingTrace.bindingContext
|
val bindingContext: BindingContext = bindingTrace.bindingContext
|
||||||
val typeMapper: KotlinTypeMapper = KotlinTypeMapper(
|
val typeMapper: KotlinTypeMapper = KotlinTypeMapper(
|
||||||
this.bindingContext, classBuilderMode, fileClassesProvider, IncompatibleClassTrackerImpl(extraJvmDiagnosticsTrace),
|
this.bindingContext, classBuilderMode, IncompatibleClassTrackerImpl(extraJvmDiagnosticsTrace),
|
||||||
this.moduleName, isJvm8Target, isJvm8TargetWithDefaults
|
this.moduleName, isJvm8Target, isJvm8TargetWithDefaults
|
||||||
)
|
)
|
||||||
val intrinsics: IntrinsicMethods = IntrinsicMethods(target)
|
val intrinsics: IntrinsicMethods = IntrinsicMethods(target)
|
||||||
@@ -184,8 +183,7 @@ class GenerationState @JvmOverloads constructor(
|
|||||||
.wrapWith(
|
.wrapWith(
|
||||||
{ OptimizationClassBuilderFactory(it, configuration.get(JVMConfigurationKeys.DISABLE_OPTIMIZATION, false)) },
|
{ OptimizationClassBuilderFactory(it, configuration.get(JVMConfigurationKeys.DISABLE_OPTIMIZATION, false)) },
|
||||||
{ BuilderFactoryForDuplicateSignatureDiagnostics(
|
{ BuilderFactoryForDuplicateSignatureDiagnostics(
|
||||||
it, this.bindingContext, diagnostics,
|
it, this.bindingContext, diagnostics, this.moduleName,
|
||||||
fileClassesProvider, this.moduleName,
|
|
||||||
shouldGenerate = { !shouldOnlyCollectSignatures(it) }
|
shouldGenerate = { !shouldOnlyCollectSignatures(it) }
|
||||||
).apply { duplicateSignatureFactory = this } },
|
).apply { duplicateSignatureFactory = this } },
|
||||||
{ BuilderFactoryForDuplicateClassNameDiagnostics(it, diagnostics) },
|
{ BuilderFactoryForDuplicateClassNameDiagnostics(it, diagnostics) },
|
||||||
|
|||||||
@@ -38,10 +38,8 @@ import org.jetbrains.kotlin.descriptors.*;
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableAccessorDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.LocalVariableAccessorDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor;
|
||||||
import org.jetbrains.kotlin.fileClasses.FileClasses;
|
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider;
|
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature;
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature;
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.SpecialSignatureInfo;
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.SpecialSignatureInfo;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
@@ -94,7 +92,6 @@ import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
|||||||
public class KotlinTypeMapper {
|
public class KotlinTypeMapper {
|
||||||
private final BindingContext bindingContext;
|
private final BindingContext bindingContext;
|
||||||
private final ClassBuilderMode classBuilderMode;
|
private final ClassBuilderMode classBuilderMode;
|
||||||
private final JvmFileClassesProvider fileClassesProvider;
|
|
||||||
private final IncompatibleClassTracker incompatibleClassTracker;
|
private final IncompatibleClassTracker incompatibleClassTracker;
|
||||||
private final String moduleName;
|
private final String moduleName;
|
||||||
private final boolean isJvm8Target;
|
private final boolean isJvm8Target;
|
||||||
@@ -137,7 +134,6 @@ public class KotlinTypeMapper {
|
|||||||
public KotlinTypeMapper(
|
public KotlinTypeMapper(
|
||||||
@NotNull BindingContext bindingContext,
|
@NotNull BindingContext bindingContext,
|
||||||
@NotNull ClassBuilderMode classBuilderMode,
|
@NotNull ClassBuilderMode classBuilderMode,
|
||||||
@NotNull JvmFileClassesProvider fileClassesProvider,
|
|
||||||
@NotNull IncompatibleClassTracker incompatibleClassTracker,
|
@NotNull IncompatibleClassTracker incompatibleClassTracker,
|
||||||
@NotNull String moduleName,
|
@NotNull String moduleName,
|
||||||
boolean isJvm8Target,
|
boolean isJvm8Target,
|
||||||
@@ -145,7 +141,6 @@ public class KotlinTypeMapper {
|
|||||||
) {
|
) {
|
||||||
this.bindingContext = bindingContext;
|
this.bindingContext = bindingContext;
|
||||||
this.classBuilderMode = classBuilderMode;
|
this.classBuilderMode = classBuilderMode;
|
||||||
this.fileClassesProvider = fileClassesProvider;
|
|
||||||
this.incompatibleClassTracker = incompatibleClassTracker;
|
this.incompatibleClassTracker = incompatibleClassTracker;
|
||||||
this.moduleName = moduleName;
|
this.moduleName = moduleName;
|
||||||
this.isJvm8Target = isJvm8Target;
|
this.isJvm8Target = isJvm8Target;
|
||||||
@@ -208,10 +203,10 @@ public class KotlinTypeMapper {
|
|||||||
Visibilities.isPrivate(visibility) ||
|
Visibilities.isPrivate(visibility) ||
|
||||||
isAccessor/*Cause of KT-9603*/
|
isAccessor/*Cause of KT-9603*/
|
||||||
) {
|
) {
|
||||||
return FileClasses.getFileClassInternalName(fileClassesProvider, file);
|
return JvmFileClassUtil.getFileClassInternalName(file);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return FileClasses.getFacadeClassInternalName(fileClassesProvider, file);
|
return JvmFileClassUtil.getFacadeClassInternalName(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||||
|
|
||||||
object JvmFileClassUtil {
|
object JvmFileClassUtil {
|
||||||
@@ -40,6 +41,14 @@ object JvmFileClassUtil {
|
|||||||
return (descriptor.containingDeclaration as PackageFragmentDescriptor).fqName.child(implClassName)
|
return (descriptor.containingDeclaration as PackageFragmentDescriptor).fqName.child(implClassName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getFileClassInternalName(file: KtFile): String =
|
||||||
|
getFileClassInfoNoResolve(file).fileClassFqName.internalNameWithoutInnerClasses
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getFacadeClassInternalName(file: KtFile): String =
|
||||||
|
getFileClassInfoNoResolve(file).facadeClassFqName.internalNameWithoutInnerClasses
|
||||||
|
|
||||||
private fun manglePartName(facadeName: String, fileName: String): String =
|
private fun manglePartName(facadeName: String, fileName: String): String =
|
||||||
"$facadeName$MULTIFILE_PART_NAME_DELIMITER${PackagePartClassUtils.getFilePartShortName(fileName)}"
|
"$facadeName$MULTIFILE_PART_NAME_DELIMITER${PackagePartClassUtils.getFilePartShortName(fileName)}"
|
||||||
|
|
||||||
@@ -100,3 +109,6 @@ fun KtDeclaration.isInsideJvmMultifileClassFile() = JvmFileClassUtil.findAnnotat
|
|||||||
containingKtFile,
|
containingKtFile,
|
||||||
JvmFileClassUtil.JVM_MULTIFILE_CLASS_SHORT
|
JvmFileClassUtil.JVM_MULTIFILE_CLASS_SHORT
|
||||||
) != null
|
) != null
|
||||||
|
|
||||||
|
val FqName.internalNameWithoutInnerClasses: String
|
||||||
|
get() = JvmClassName.byFqNameWithoutInnerClasses(this).internalName
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
@file:JvmName("FileClasses")
|
|
||||||
package org.jetbrains.kotlin.fileClasses
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
|
||||||
|
|
||||||
interface JvmFileClassesProvider {
|
|
||||||
fun getFileClassInfo(file: KtFile): JvmFileClassInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
val FqName.internalNameWithoutInnerClasses: String
|
|
||||||
get() = JvmClassName.byFqNameWithoutInnerClasses(this).internalName
|
|
||||||
|
|
||||||
fun JvmFileClassesProvider.getFileClassFqName(file: KtFile): FqName =
|
|
||||||
getFileClassInfo(file).fileClassFqName
|
|
||||||
|
|
||||||
fun JvmFileClassesProvider.getFileClassInternalName(file: KtFile): String =
|
|
||||||
getFileClassFqName(file).internalNameWithoutInnerClasses
|
|
||||||
|
|
||||||
fun JvmFileClassesProvider.getFileClassType(file: KtFile): Type =
|
|
||||||
Type.getObjectType(getFileClassFqName(file).internalNameWithoutInnerClasses)
|
|
||||||
|
|
||||||
fun JvmFileClassesProvider.getFacadeClassInternalName(file: KtFile): String =
|
|
||||||
getFileClassInfo(file).facadeClassFqName.internalNameWithoutInnerClasses
|
|
||||||
-24
@@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 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.kotlin.fileClasses
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
|
|
||||||
object NoResolveFileClassesProvider : JvmFileClassesProvider {
|
|
||||||
override fun getFileClassInfo(file: KtFile): JvmFileClassInfo =
|
|
||||||
JvmFileClassUtil.getFileClassInfoNoResolve(file)
|
|
||||||
}
|
|
||||||
@@ -19,8 +19,7 @@ package org.jetbrains.kotlin.resolve.jvm
|
|||||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorNonRoot
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorNonRoot
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.getFileClassFqName
|
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
|
import org.jetbrains.kotlin.load.java.descriptors.getImplClassNameForDeserialized
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
@@ -36,7 +35,7 @@ object JvmOverloadFilter : OverloadFilter {
|
|||||||
for (overload in overloads) {
|
for (overload in overloads) {
|
||||||
val file = DescriptorToSourceUtils.getContainingFile(overload) ?: continue
|
val file = DescriptorToSourceUtils.getContainingFile(overload) ?: continue
|
||||||
result.add(overload)
|
result.add(overload)
|
||||||
sourceClassesFQNs.add(NoResolveFileClassesProvider.getFileClassFqName(file))
|
sourceClassesFQNs.add(JvmFileClassUtil.getFileClassInfoNoResolve(file).fileClassFqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (overload in overloads) {
|
for (overload in overloads) {
|
||||||
|
|||||||
+4
-4
@@ -27,14 +27,14 @@ import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
|||||||
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
|
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
|
||||||
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.getFileClassType
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||||
import org.jetbrains.kotlin.psi.KtScript
|
import org.jetbrains.kotlin.psi.KtScript
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
||||||
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
|
|
||||||
class LightClassDataProviderForClassOrObject(
|
class LightClassDataProviderForClassOrObject(
|
||||||
private val classOrObject: KtClassOrObject
|
private val classOrObject: KtClassOrObject
|
||||||
@@ -48,7 +48,7 @@ class LightClassDataProviderForClassOrObject(
|
|||||||
buildLightClass(packageFqName, listOf(file), ClassFilterForClassOrObject(classOrObject), constructionContext) {
|
buildLightClass(packageFqName, listOf(file), ClassFilterForClassOrObject(classOrObject), constructionContext) {
|
||||||
state, files ->
|
state, files ->
|
||||||
val packageCodegen = state.factory.forPackage(packageFqName, files)
|
val packageCodegen = state.factory.forPackage(packageFqName, files)
|
||||||
val packagePartType = state.fileClassesProvider.getFileClassType(file)
|
val packagePartType = Type.getObjectType(JvmFileClassUtil.getFileClassInternalName(file))
|
||||||
val context = state.rootContext.intoPackagePart(packageCodegen.packageFragment, packagePartType, file)
|
val context = state.rootContext.intoPackagePart(packageCodegen.packageFragment, packagePartType, file)
|
||||||
packageCodegen.generateClassOrObject(getOutermostClassOrObject(classOrObject), context)
|
packageCodegen.generateClassOrObject(getOutermostClassOrObject(classOrObject), context)
|
||||||
state.factory.done()
|
state.factory.done()
|
||||||
@@ -79,7 +79,7 @@ sealed class LightClassDataProviderForFileFacade constructor(
|
|||||||
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@ {
|
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@ {
|
||||||
state, files ->
|
state, files ->
|
||||||
val representativeFile = files.first()
|
val representativeFile = files.first()
|
||||||
val fileClassInfo = NoResolveFileClassesProvider.getFileClassInfo(representativeFile)
|
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
|
||||||
if (!fileClassInfo.withJvmMultifileClass) {
|
if (!fileClassInfo.withJvmMultifileClass) {
|
||||||
val codegen = state.factory.forPackage(representativeFile.packageFqName, files)
|
val codegen = state.factory.forPackage(representativeFile.packageFqName, files)
|
||||||
codegen.generate(CompilationErrorHandler.THROW_EXCEPTION)
|
codegen.generate(CompilationErrorHandler.THROW_EXCEPTION)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
|
|||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory.cast
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory.cast
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors.*
|
import org.jetbrains.kotlin.diagnostics.Errors.*
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData
|
||||||
@@ -37,7 +37,7 @@ fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostic
|
|||||||
fun getDiagnosticsForFileFacade(file: KtFile): Diagnostics? {
|
fun getDiagnosticsForFileFacade(file: KtFile): Diagnostics? {
|
||||||
val project = file.project
|
val project = file.project
|
||||||
val cache = KtLightClassForFacade.FacadeStubCache.getInstance(project)
|
val cache = KtLightClassForFacade.FacadeStubCache.getInstance(project)
|
||||||
val facadeFqName = NoResolveFileClassesProvider.getFileClassInfo(file).facadeClassFqName
|
val facadeFqName = JvmFileClassUtil.getFileClassInfoNoResolve(file).facadeClassFqName
|
||||||
return cache[facadeFqName, moduleScope].value?.extraDiagnostics
|
return cache[facadeFqName, moduleScope].value?.extraDiagnostics
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,7 @@ import com.intellij.psi.util.PsiTreeUtil
|
|||||||
import com.sun.jdi.AbsentInformationException
|
import com.sun.jdi.AbsentInformationException
|
||||||
import com.sun.jdi.ReferenceType
|
import com.sun.jdi.ReferenceType
|
||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass
|
import org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.getFileClassInternalName
|
|
||||||
import org.jetbrains.kotlin.idea.debugger.breakpoints.getLambdasAtLineIfAny
|
import org.jetbrains.kotlin.idea.debugger.breakpoints.getLambdasAtLineIfAny
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches
|
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches.Companion.getOrComputeClassNames
|
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches.Companion.getOrComputeClassNames
|
||||||
@@ -115,7 +114,7 @@ class DebuggerClassNameProvider(
|
|||||||
|
|
||||||
return when (element) {
|
return when (element) {
|
||||||
is KtFile -> {
|
is KtFile -> {
|
||||||
val fileClassName = runReadAction { NoResolveFileClassesProvider.getFileClassInternalName(element) }.toJdiName()
|
val fileClassName = runReadAction { JvmFileClassUtil.getFileClassInternalName(element) }.toJdiName()
|
||||||
ComputedClassNames.Cached(fileClassName)
|
ComputedClassNames.Cached(fileClassName)
|
||||||
}
|
}
|
||||||
is KtClassOrObject -> {
|
is KtClassOrObject -> {
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import com.sun.jdi.ReferenceType
|
|||||||
import com.sun.jdi.request.ClassPrepareRequest
|
import com.sun.jdi.request.ClassPrepareRequest
|
||||||
import org.jetbrains.kotlin.codegen.inline.KOTLIN_STRATA_NAME
|
import org.jetbrains.kotlin.codegen.inline.KOTLIN_STRATA_NAME
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.internalNameWithoutInnerClasses
|
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
|
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
|
||||||
import org.jetbrains.kotlin.idea.debugger.breakpoints.getLambdasAtLineIfAny
|
import org.jetbrains.kotlin.idea.debugger.breakpoints.getLambdasAtLineIfAny
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinCodeFragmentFactory
|
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinCodeFragmentFactory
|
||||||
@@ -234,8 +233,7 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq
|
|||||||
if (psiFile is ClsFileImpl) {
|
if (psiFile is ClsFileImpl) {
|
||||||
val decompiledPsiFile = psiFile.readAction { it.decompiledPsiFile }
|
val decompiledPsiFile = psiFile.readAction { it.decompiledPsiFile }
|
||||||
if (decompiledPsiFile is KtClsFile && sourcePosition.line == -1) {
|
if (decompiledPsiFile is KtClsFile && sourcePosition.line == -1) {
|
||||||
val className =
|
val className = JvmFileClassUtil.getFileClassInternalName(decompiledPsiFile)
|
||||||
JvmFileClassUtil.getFileClassInfoNoResolve(decompiledPsiFile).fileClassFqName.internalNameWithoutInnerClasses
|
|
||||||
return myDebugProcess.virtualMachineProxy.classesByName(className)
|
return myDebugProcess.virtualMachineProxy.classesByName(className)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ import com.intellij.openapi.util.io.FileUtilRt
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.testFramework.PsiTestUtil
|
import com.intellij.testFramework.PsiTestUtil
|
||||||
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
|
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.getFileClassFqName
|
|
||||||
import org.jetbrains.kotlin.idea.refactoring.toVirtualFile
|
import org.jetbrains.kotlin.idea.refactoring.toVirtualFile
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinCodeInsightTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinCodeInsightTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
@@ -90,7 +89,7 @@ abstract class AbstractKotlinExceptionFilterTest : KotlinCodeInsightTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val stackTraceElement = try {
|
val stackTraceElement = try {
|
||||||
val className = NoResolveFileClassesProvider.getFileClassFqName(file as KtFile)
|
val className = JvmFileClassUtil.getFileClassInfoNoResolve(file as KtFile).fileClassFqName
|
||||||
val clazz = classLoader.loadClass(className.asString())
|
val clazz = classLoader.loadClass(className.asString())
|
||||||
clazz.getMethod("box")?.invoke(null)
|
clazz.getMethod("box")?.invoke(null)
|
||||||
throw AssertionError("class ${className.asString()} should have box() method and throw exception")
|
throw AssertionError("class ${className.asString()} should have box() method and throw exception")
|
||||||
|
|||||||
-2
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||||
import org.jetbrains.kotlin.diagnostics.reportFromPlugin
|
import org.jetbrains.kotlin.diagnostics.reportFromPlugin
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -176,7 +175,6 @@ class ParcelableDeclarationChecker : SimpleDeclarationChecker {
|
|||||||
val typeMapper = KotlinTypeMapper(
|
val typeMapper = KotlinTypeMapper(
|
||||||
bindingContext,
|
bindingContext,
|
||||||
ClassBuilderMode.full(false),
|
ClassBuilderMode.full(false),
|
||||||
NoResolveFileClassesProvider,
|
|
||||||
IncompatibleClassTracker.DoNothing,
|
IncompatibleClassTracker.DoNothing,
|
||||||
descriptor.module.name.asString(),
|
descriptor.module.name.asString(),
|
||||||
/* isJvm8Target */ false,
|
/* isJvm8Target */ false,
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.uast.kotlin.internal
|
|||||||
import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
||||||
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -30,8 +29,7 @@ class IdeaKotlinUastBindingContextProviderService : KotlinUastBindingContextProv
|
|||||||
override fun getBindingContext(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL)
|
override fun getBindingContext(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL)
|
||||||
|
|
||||||
override fun getTypeMapper(element: KtElement): KotlinTypeMapper? {
|
override fun getTypeMapper(element: KtElement): KotlinTypeMapper? {
|
||||||
return KotlinTypeMapper(getBindingContext(element),
|
return KotlinTypeMapper(getBindingContext(element), ClassBuilderMode.LIGHT_CLASSES,
|
||||||
ClassBuilderMode.LIGHT_CLASSES, NoResolveFileClassesProvider,
|
|
||||||
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, false)
|
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-2
@@ -6,7 +6,6 @@ import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
|||||||
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -40,7 +39,7 @@ class UastAnalysisHandlerExtension : AnalysisHandlerExtension {
|
|||||||
if (typeMapper != null) return typeMapper
|
if (typeMapper != null) return typeMapper
|
||||||
val bindingContext = context ?: return null
|
val bindingContext = context ?: return null
|
||||||
|
|
||||||
val typeMapper = KotlinTypeMapper(bindingContext, ClassBuilderMode.LIGHT_CLASSES, NoResolveFileClassesProvider,
|
val typeMapper = KotlinTypeMapper(bindingContext, ClassBuilderMode.LIGHT_CLASSES,
|
||||||
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, false)
|
IncompatibleClassTracker.DoNothing, JvmAbi.DEFAULT_MODULE_NAME, false, false)
|
||||||
this.typeMapper = typeMapper
|
this.typeMapper = typeMapper
|
||||||
return typeMapper
|
return typeMapper
|
||||||
|
|||||||
Reference in New Issue
Block a user