Don't create namespace class for file if codegen won't do so
This commit is contained in:
@@ -28,7 +28,7 @@ public abstract class ClassBuilderOnDemand {
|
||||
|
||||
private ClassBuilder classBuilder;
|
||||
|
||||
private List<ClassBuilderCallback> optionalDeclarations = Lists.newArrayList();
|
||||
private final List<ClassBuilderCallback> optionalDeclarations = Lists.newArrayList();
|
||||
|
||||
interface ClassBuilderCallback {
|
||||
void doSomething(@NotNull ClassBuilder classBuilder);
|
||||
@@ -60,4 +60,8 @@ public abstract class ClassBuilderOnDemand {
|
||||
classBuilder.done();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isActivated() {
|
||||
return classBuilder != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,8 +131,8 @@ public class GenerationState {
|
||||
return Pair.create(className, getFactory().forAnonymousSubclass(className));
|
||||
}
|
||||
|
||||
public NamespaceCodegen forNamespace(FqName fqName, Collection<JetFile> namespace) {
|
||||
return getFactory().forNamespace(fqName, namespace);
|
||||
public NamespaceCodegen forNamespace(FqName fqName, Collection<JetFile> jetFiles) {
|
||||
return getFactory().forNamespace(fqName, jetFiles);
|
||||
}
|
||||
|
||||
private void beforeCompile() {
|
||||
@@ -181,8 +181,8 @@ public class GenerationState {
|
||||
progress);
|
||||
}
|
||||
|
||||
protected void generateNamespace(FqName fqName, Collection<JetFile> namespace, CompilationErrorHandler errorHandler, Progress progress) {
|
||||
NamespaceCodegen codegen = forNamespace(fqName, namespace);
|
||||
protected void generateNamespace(FqName fqName, Collection<JetFile> jetFiles, CompilationErrorHandler errorHandler, Progress progress) {
|
||||
NamespaceCodegen codegen = forNamespace(fqName, jetFiles);
|
||||
codegen.generate(errorHandler, progress);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,9 +27,9 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
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.jet.utils.Progress;
|
||||
import org.objectweb.asm.MethodVisitor;
|
||||
@@ -120,6 +120,8 @@ public class NamespaceCodegen {
|
||||
}
|
||||
}
|
||||
|
||||
assert v.isActivated() == shouldGenerateNSClass(files) : "Different algorithms for generating namespace class and for heuristics";
|
||||
|
||||
if (hasNonConstantPropertyInitializers()) {
|
||||
generateStaticInitializers();
|
||||
}
|
||||
@@ -193,6 +195,18 @@ public class NamespaceCodegen {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean shouldGenerateNSClass(Collection<JetFile> files) {
|
||||
for (JetFile file : files) {
|
||||
for (JetDeclaration declaration : file.getDeclarations()) {
|
||||
if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void generateStaticInitializers() {
|
||||
final JetFile namespace = files.iterator().next(); // @todo: hack
|
||||
|
||||
|
||||
Reference in New Issue
Block a user