Skip to content

Commit 57d6acc

Browse files
committed
#1578 changing to insertion order for import post processing after new imports already sorted
1 parent 668a168 commit 57d6acc

1 file changed

Lines changed: 11 additions & 7 deletions

File tree

generator/src/org/immutables/generator/ImportRewriter.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.ArrayList;
44
import java.util.Arrays;
55
import java.util.HashMap;
6+
import java.util.LinkedHashSet;
67
import java.util.LinkedList;
78
import java.util.List;
89
import java.util.Map;
@@ -88,7 +89,6 @@ void range(int at, int len) {
8889
private static final class Import extends Occurrence {
8990
final LinkedList<String> packageSegments = new LinkedList<>();
9091
final LinkedList<String> classSegments = new LinkedList<>();
91-
final StringBuilder name = new StringBuilder();
9292
boolean isStatic;
9393
boolean isStar;
9494

@@ -170,30 +170,34 @@ private String replace() {
170170
// these blocks were kept inline to better see overall work done
171171
// and preserve context/state of result content and sourceAt pointer
172172

173-
// append useful (non-skipped) imports to the end of our newImports set
173+
// copy all generated imports preserving their sorted ordering
174+
// this new set will maintain insertion order
175+
Set<String> rewrittenImports = new LinkedHashSet<>(newImports);
176+
177+
// append useful (non-skipped) imports to the end of our rewrittenImports set
174178
for (Import imp : imports) {
175179
if (imp.isStatic
176180
|| imp.isStar
177181
|| imp.classSegments.size() != 1
178182
|| !imp.packageSegments.equals(JAVA_LANG)) {
179183

180-
newImports.add(imp.toString());
184+
rewrittenImports.add(imp.toString());
181185
}
182186
}
183187

184188
// Run import modifiers if present on the classpath
185189
for (GeneratedImportsModifier modifier : importsModifiers) {
186-
modifier.modify(thisPackage, newImports);
190+
modifier.modify(thisPackage, rewrittenImports);
187191
}
188192

189-
// Insert new imports
190-
if (!newImports.isEmpty()) {
193+
// Insert rewritten imports
194+
if (!rewrittenImports.isEmpty()) {
191195
int insertAt = Math.max(beforeImportPosition, afterPackagePosition);
192196
// append all header and package declaration before insert position
193197
result.append(source, sourceAt, insertAt);
194198
sourceAt = insertAt;
195199

196-
for (String n : newImports) {
200+
for (String n : rewrittenImports) {
197201
result.append("import ").append(n).append(";\n");
198202
}
199203

0 commit comments

Comments
 (0)