aboutsummaryrefslogtreecommitdiff
path: root/java/com/google/turbine/binder/HierarchyBinder.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/turbine/binder/HierarchyBinder.java')
-rw-r--r--java/com/google/turbine/binder/HierarchyBinder.java11
1 files changed, 8 insertions, 3 deletions
diff --git a/java/com/google/turbine/binder/HierarchyBinder.java b/java/com/google/turbine/binder/HierarchyBinder.java
index ac2c840..3117d4e 100644
--- a/java/com/google/turbine/binder/HierarchyBinder.java
+++ b/java/com/google/turbine/binder/HierarchyBinder.java
@@ -34,6 +34,7 @@ import com.google.turbine.model.TurbineTyKind;
import com.google.turbine.tree.Tree;
import com.google.turbine.tree.Tree.ClassTy;
import java.util.ArrayDeque;
+import java.util.LinkedHashMap;
import org.jspecify.nullness.Nullable;
/** Type hierarchy binding. */
@@ -109,13 +110,17 @@ public class HierarchyBinder {
}
}
- ImmutableMap.Builder<String, TyVarSymbol> typeParameters = ImmutableMap.builder();
+ LinkedHashMap<String, TyVarSymbol> typeParameters = new LinkedHashMap<>();
for (Tree.TyParam p : decl.typarams()) {
- typeParameters.put(p.name().value(), new TyVarSymbol(origin, p.name().value()));
+ TyVarSymbol existing =
+ typeParameters.putIfAbsent(p.name().value(), new TyVarSymbol(origin, p.name().value()));
+ if (existing != null) {
+ log.error(p.position(), ErrorKind.DUPLICATE_DECLARATION, p.name());
+ }
}
return new SourceHeaderBoundClass(
- base, superclass, interfaces.build(), typeParameters.buildOrThrow());
+ base, superclass, interfaces.build(), ImmutableMap.copyOf(typeParameters));
}
/**