diff options
Diffstat (limited to 'java/com/google/turbine/binder/HierarchyBinder.java')
-rw-r--r-- | java/com/google/turbine/binder/HierarchyBinder.java | 11 |
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)); } /** |