Fixed computing source file for package facade.
There had been a bug in case when compiling package with some class-only files, but exactly one file with callables.
This commit is contained in:
@@ -20,9 +20,11 @@ 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.Condition;
|
||||||
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.SmartList;
|
import com.intellij.util.SmartList;
|
||||||
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import kotlin.Function0;
|
import kotlin.Function0;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -82,8 +84,7 @@ public class PackageCodegen {
|
|||||||
@Override
|
@Override
|
||||||
public ClassBuilder invoke() {
|
public ClassBuilder invoke() {
|
||||||
Collection<JetFile> files = PackageCodegen.this.files;
|
Collection<JetFile> files = PackageCodegen.this.files;
|
||||||
JetFile sourceFile = files.size() == 1 && previouslyCompiledCallables.isEmpty()
|
JetFile sourceFile = getRepresentativePackageFile(files);
|
||||||
? files.iterator().next() : null;
|
|
||||||
|
|
||||||
String className = AsmUtil.internalNameByFqNameWithoutInnerClasses(getPackageClassFqName(fqName));
|
String className = AsmUtil.internalNameByFqNameWithoutInnerClasses(getPackageClassFqName(fqName));
|
||||||
ClassBuilder v = PackageCodegen.this.state.getFactory().newVisitor(Type.getObjectType(className), files);
|
ClassBuilder v = PackageCodegen.this.state.getFactory().newVisitor(Type.getObjectType(className), files);
|
||||||
@@ -103,6 +104,28 @@ public class PackageCodegen {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns null if file has callables in several files
|
||||||
|
@Nullable
|
||||||
|
private JetFile getRepresentativePackageFile(@NotNull Collection<JetFile> packageFiles) {
|
||||||
|
if (!previouslyCompiledCallables.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<JetFile> packageFilesWithCallables = ContainerUtil.filter(packageFiles, new Condition<JetFile>() {
|
||||||
|
@Override
|
||||||
|
public boolean value(JetFile packageFile) {
|
||||||
|
for (JetDeclaration declaration : packageFile.getDeclarations()) {
|
||||||
|
if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return packageFilesWithCallables.size() == 1 ? packageFilesWithCallables.get(0) : null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static PackageFragmentDescriptor getCompiledPackageFragment(@NotNull PackageFragmentDescriptor packageFragment) {
|
private static PackageFragmentDescriptor getCompiledPackageFragment(@NotNull PackageFragmentDescriptor packageFragment) {
|
||||||
if (!IncrementalCompilation.ENABLED) {
|
if (!IncrementalCompilation.ENABLED) {
|
||||||
|
|||||||
Reference in New Issue
Block a user