Save class files as inline call source too
This commit is contained in:
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.codegen.context.PackageContext;
|
|||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.*;
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.InlineRegistering;
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.InlineRegistering;
|
||||||
@@ -753,25 +753,55 @@ public class InlineCodegen extends CallGenerator {
|
|||||||
String sourceFile = getFilePath(sourceDescriptor);
|
String sourceFile = getFilePath(sourceDescriptor);
|
||||||
String targetFile = getFilePath(targetDescriptor);
|
String targetFile = getFilePath(targetDescriptor);
|
||||||
|
|
||||||
if (sourceFile != null && targetFile != null) {
|
if (sourceFile == null) {
|
||||||
IncrementalCache incrementalCache = incrementalCompilationComponents.getIncrementalCache(moduleId);
|
DeclarationDescriptor containingDeclaration = sourceDescriptor.getContainingDeclaration();
|
||||||
InlineRegistering inlineRegistering = incrementalCache.getInlineRegistering();
|
|
||||||
inlineRegistering.registerInline(sourceFile, jvmSignature.toString(), targetFile);
|
if (containingDeclaration instanceof DeclarationDescriptorWithSource) {
|
||||||
|
DeclarationDescriptorWithSource withSource = (DeclarationDescriptorWithSource) containingDeclaration;
|
||||||
|
sourceFile = getFilePath(withSource);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert sourceFile != null: "No source file for inline fun: " + jvmSignature;
|
||||||
|
assert targetFile != null: "No target file for inline fun: " + jvmSignature;
|
||||||
|
|
||||||
|
IncrementalCache incrementalCache = incrementalCompilationComponents.getIncrementalCache(moduleId);
|
||||||
|
InlineRegistering inlineRegistering = incrementalCache.getInlineRegistering();
|
||||||
|
inlineRegistering.registerInline(sourceFile, jvmSignature.toString(), targetFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static String getFilePath(@NotNull FunctionDescriptor descriptor) {
|
private static String getFilePath(@NotNull DeclarationDescriptorWithSource descriptor) {
|
||||||
SourceElement source = descriptor.getSource();
|
SourceElement source = descriptor.getSource();
|
||||||
if (!(source instanceof PsiSourceElement)) return null;
|
VirtualFile file = null;
|
||||||
|
|
||||||
PsiElement psi = ((PsiSourceElement) source).getPsi();
|
if (source instanceof PsiSourceElement) {
|
||||||
if (psi == null) return null;
|
file = getFile((PsiSourceElement) source);
|
||||||
|
} else if (source instanceof KotlinJvmBinarySourceElement) {
|
||||||
|
file = getFile((KotlinJvmBinarySourceElement) source);
|
||||||
|
}
|
||||||
|
|
||||||
VirtualFile file = psi.getContainingFile().getVirtualFile();
|
|
||||||
if (file == null) return null;
|
if (file == null) return null;
|
||||||
|
|
||||||
return file.getCanonicalPath();
|
return file.getCanonicalPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static VirtualFile getFile(@NotNull PsiSourceElement sourceElement) {
|
||||||
|
PsiElement psi = sourceElement.getPsi();
|
||||||
|
if (psi == null) return null;
|
||||||
|
|
||||||
|
return psi.getContainingFile().getVirtualFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static VirtualFile getFile(@NotNull KotlinJvmBinarySourceElement sourceElement) {
|
||||||
|
KotlinJvmBinaryClass binaryClass = sourceElement.getBinaryClass();
|
||||||
|
if (binaryClass instanceof VirtualFileKotlinClass) {
|
||||||
|
return ((VirtualFileKotlinClass) binaryClass).getFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user