diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 6e5ca5ca331..648fc0aad8a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -52,13 +52,15 @@ public class NamespaceCodegen { private final Collection files; private int nextMultiFile = 0; - public NamespaceCodegen(@NotNull ClassBuilderOnDemand v, @NotNull final FqName fqName, GenerationState state, Collection files) { + public NamespaceCodegen(@NotNull ClassBuilderOnDemand v, @NotNull final FqName fqName, GenerationState state, Collection namespaceFiles) { + checkAllFilesHaveSameNamespace(namespaceFiles); + this.v = v; name = fqName; this.state = state; - this.files = files; + this.files = namespaceFiles; - final PsiFile sourceFile = files.iterator().next().getContainingFile(); + final PsiFile sourceFile = namespaceFiles.iterator().next().getContainingFile(); v.addOptionalDeclaration(new ClassBuilderOnDemand.ClassBuilderCallback() { @Override @@ -195,8 +197,14 @@ public class NamespaceCodegen { } } - public static boolean shouldGenerateNSClass(Collection files) { - for (JetFile file : files) { + /** + * @param namespaceFiles all files should have same package name + * @return + */ + public static boolean shouldGenerateNSClass(Collection namespaceFiles) { + checkAllFilesHaveSameNamespace(namespaceFiles); + + for (JetFile file : namespaceFiles) { for (JetDeclaration declaration : file.getDeclarations()) { if (declaration instanceof JetProperty || declaration instanceof JetNamedFunction) { return true; @@ -207,6 +215,21 @@ public class NamespaceCodegen { return false; } + public static void checkAllFilesHaveSameNamespace(Collection namespaceFiles) { + FqName commonFqName = null; + for (JetFile file : namespaceFiles) { + FqName fqName = JetPsiUtil.getFQName(file); + if (commonFqName != null) { + if (!commonFqName.equals(fqName)) { + throw new IllegalArgumentException("All files should have same package name"); + } + } + else { + commonFqName = JetPsiUtil.getFQName(file); + } + } + } + private void generateStaticInitializers() { final JetFile namespace = files.iterator().next(); // @todo: hack diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java index abff90f239d..a3cb6b8ea7a 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java @@ -179,7 +179,7 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa final GenerationState state = new GenerationState(project, builderFactory, context, Collections.singletonList(file)) { @Override - protected void generateNamespace(FqName fqName, Collection namespace, CompilationErrorHandler errorHandler, Progress progress) { + protected void generateNamespace(FqName fqName, Collection namespaceFiles, CompilationErrorHandler errorHandler, Progress progress) { PsiManager manager = PsiManager.getInstance(project); stubStack.push(answer); @@ -196,7 +196,7 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa fakeFile.setPhysical(false); answer.setPsi(fakeFile); - super.generateNamespace(fqName, namespace, errorHandler, progress); + super.generateNamespace(fqName, namespaceFiles, errorHandler, progress); final StubElement pop = stubStack.pop(); if (pop != answer) { LOG.error("Unbalanced stack operations: " + pop);