Skip to content

Commit f1fbe5a

Browse files
committed
Ensure root is set in both worlds. Fixes #159.
1 parent 4011143 commit f1fbe5a

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/main/java/com/google/jspecify/nullness/NullSpecAnnotatedTypeFactory.java

+22
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343

4444
import com.sun.source.tree.BinaryTree;
4545
import com.sun.source.tree.ClassTree;
46+
import com.sun.source.tree.CompilationUnitTree;
4647
import com.sun.source.tree.ExpressionTree;
4748
import com.sun.source.tree.IdentifierTree;
4849
import com.sun.source.tree.LambdaExpressionTree;
@@ -374,6 +375,27 @@ private NullSpecAnnotatedTypeFactory(
374375
}
375376
}
376377

378+
/** Too ensure setRoot is called on both worlds exactly once. */
379+
private boolean settingRoot = false;
380+
381+
/**
382+
* Ensure setRoot is called on both worlds exactly once whenever it is called on one of the
383+
* worlds.
384+
*/
385+
@Override
386+
public void setRoot(@Nullable CompilationUnitTree root) {
387+
if (!settingRoot) {
388+
settingRoot = true;
389+
super.setRoot(root);
390+
if (withLeastConvenientWorld != this) {
391+
withLeastConvenientWorld.setRoot(root);
392+
} else {
393+
withMostConvenientWorld.setRoot(root);
394+
}
395+
}
396+
settingRoot = false;
397+
}
398+
377399
@Override
378400
protected void addCheckedCodeDefaults(QualifierDefaults defs) {
379401
// TODO: add false for subpackages once overload is added to CF. Shouldn't really matter.

0 commit comments

Comments
 (0)