我刚刚完成了一个奇怪的 UI 效果的六个小时的调试会话,我发现我最喜欢的框架实现的一个名为“getVisibleRegion”的接口函数禁用了一些 UI 功能(并且显然忘记了恢复它)。
我已经向框架提交了一个错误,但这让我想到了适当的设计:在什么情况下对一个名称暗示仅仅是计算/获取操作的操作产生任何副作用是合法的?
对于那些对实际细节感兴趣的人:我有一个关于我的插件不断破坏 Eclipse 的代码折叠导致折叠栏消失并且无法“展开”或查看折叠代码的错误的报告。我将其追溯到对 ITextViewer 上的 getVisibleRegion() 的调用,该 ITextViewer 的类型表示源代码查看器。现在,ITextViewer 的文档确实声明“实现 ITextViewerExtension5 的查看器可能被迫更改显示的输入文档的部分,以履行此合同”。然而,实际的实现有点过于宽松了,只是永久禁用了投影(折叠),永远不会把它带回来。