diff --git a/lib/rbs/environment.rb b/lib/rbs/environment.rb
index 416b8b902..81677e151 100644
--- a/lib/rbs/environment.rb
+++ b/lib/rbs/environment.rb
@@ -209,12 +209,16 @@ def validate_type_params
       end
     end
 
-    def resolve_type_names
+    def resolve_type_names(only: nil)
       resolver = TypeNameResolver.from_env(self)
       env = Environment.new()
 
       declarations.each do |decl|
-        env << resolve_declaration(resolver, decl, outer: [], prefix: Namespace.root)
+        if only && !only.member?(decl)
+          env << decl
+        else
+          env << resolve_declaration(resolver, decl, outer: [], prefix: Namespace.root)
+        end
       end
 
       env
diff --git a/sig/environment.rbs b/sig/environment.rbs
index 08bcfef26..447909fc1 100644
--- a/sig/environment.rbs
+++ b/sig/environment.rbs
@@ -84,7 +84,13 @@ module RBS
     # Runs generics type params validation over each class definitions.
     def validate_type_params: () -> void
 
-    def resolve_type_names: () -> Environment
+    # Resolve all type names in the environment to absolute type names.
+    # Relative type name will be left if absolute type name cannot be found.
+    #
+    # When `only` is given, it skips other _top-level_ declarations not included in the collection.
+    # This helps running resolution faster in the case of _partial updates_.
+    #
+    def resolve_type_names: (?only: Set[AST::Declarations::t]?) -> Environment
 
     def resolve_declaration: (TypeNameResolver resolver, AST::Declarations::t decl, outer: Array[module_decl], prefix: Namespace) -> AST::Declarations::t