From e7a7afa0bee6e7d5be94443dcfa0434bffe8d1ef Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 24 Oct 2012 18:57:31 +0400 Subject: [PATCH] Sort all namespace files by name prior to assigning names in codegen This helps to make names of closures etc. stable across compilation, should also probably help to implement incremental compilation. No new tests added --- .../jet/codegen/binding/CodegenBinding.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java index d4cdfbb57ae..c4503c262e1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.codegen.binding; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,9 +35,7 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.util.slicedmap.Slices; import org.jetbrains.jet.util.slicedmap.WritableSlice; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; +import java.util.*; import static org.jetbrains.jet.codegen.CodegenUtil.isInterface; import static org.jetbrains.jet.lang.resolve.BindingContext.*; @@ -229,7 +228,23 @@ public class CodegenBinding { if (jetFiles != null) answer.addAll(jetFiles); } - return answer; + + List sortedAnswer = new ArrayList(answer); + Collections.sort(sortedAnswer, new Comparator() { + @NotNull + private String path(JetFile file) { + VirtualFile virtualFile = file.getVirtualFile(); + assert virtualFile != null : "VirtualFile is null for JetFile: " + file.getName(); + return virtualFile.getPath(); + } + + @Override + public int compare(JetFile first, JetFile second) { + return path(first).compareTo(path(second)); + } + }); + + return sortedAnswer; } public static boolean isMultiFileNamespace(BindingContext bindingContext, FqName fqName) {