两个 IDEA 项目之间的不同检查行为
Different inspection behavior between two IDEA projects
我几天前在 IDEA 2016.3.3 中创建的项目中出现了一个奇怪的检查问题,当我遇到这个问题时升级到 2016.3.5。即使在使缓存失效并重新启动后,问题仍然存在于旧项目中。我无法在 2016.3.5 创建的新项目中重现它。
两个项目具有相同的 minSdkVersion
、targetSdkVersion
、compileSdkVersion
和 buildToolsVersion
。 还有什么可能导致检查行为出现这种差异?
我在两个项目中创建了相同的 class:
public class PermissionWeirdness {
public void foo() {
bar();
baz();
}
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
private void bar() {}
@RequiresPermission(Manifest.permission.GET_ACCOUNTS)
private void baz() {}
}
ACCESS_FINE_LOCATION
和 GET_ACCOUNTS
都被 class 化为 "dangerous" 权限。
- 在这两个项目中,正如预期的那样,在调用
bar()
和 baz()
时警告出现在 foo()
中。
- 在较新的项目中,两个警告具有相同的形式:
Missing permission required by PermissionWeirdness.bar: android.permission.ACCESS_FINE_LOCATION
- 在旧项目中,与
ACCESS_FINE_LOCATION
相关的警告具有完全不同的消息。工具提示文本中有文字反引号,在此处被解释为代码标签:
Call requires permission which may be rejected by user: code should explicitly check to see if permission is available ( with checkPermission
) or explicitly handle a potential SecurityException
- 在这两个项目中,可以通过向
foo()
添加适当的 @RequiresPermission
注释来消除采用较短形式的警告。
- 在较旧的项目中,神秘的较长警告无法以这种方式消除。
真实项目与我在示例项目中重现问题的尝试之间的区别在于清单。 危险权限的检查行为会发生变化,但仅当它们在清单中列出时才会发生变化。警告消息发生变化,@RequiresPermission
不再级联。
我最初认为这是 Android Studio bug 177281, but that issue was more general. Not cascading for dangerous permissions may have been intentional, but I've reported it as a bug because 如果用户从 运行 应用程序撤消权限的回归。
我几天前在 IDEA 2016.3.3 中创建的项目中出现了一个奇怪的检查问题,当我遇到这个问题时升级到 2016.3.5。即使在使缓存失效并重新启动后,问题仍然存在于旧项目中。我无法在 2016.3.5 创建的新项目中重现它。
两个项目具有相同的 minSdkVersion
、targetSdkVersion
、compileSdkVersion
和 buildToolsVersion
。 还有什么可能导致检查行为出现这种差异?
我在两个项目中创建了相同的 class:
public class PermissionWeirdness {
public void foo() {
bar();
baz();
}
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
private void bar() {}
@RequiresPermission(Manifest.permission.GET_ACCOUNTS)
private void baz() {}
}
ACCESS_FINE_LOCATION
和GET_ACCOUNTS
都被 class 化为 "dangerous" 权限。- 在这两个项目中,正如预期的那样,在调用
bar()
和baz()
时警告出现在foo()
中。 - 在较新的项目中,两个警告具有相同的形式:
Missing permission required by PermissionWeirdness.bar: android.permission.ACCESS_FINE_LOCATION
- 在旧项目中,与
ACCESS_FINE_LOCATION
相关的警告具有完全不同的消息。工具提示文本中有文字反引号,在此处被解释为代码标签:Call requires permission which may be rejected by user: code should explicitly check to see if permission is available ( with
checkPermission
) or explicitly handle a potentialSecurityException
- 在这两个项目中,可以通过向
foo()
添加适当的@RequiresPermission
注释来消除采用较短形式的警告。 - 在较旧的项目中,神秘的较长警告无法以这种方式消除。
真实项目与我在示例项目中重现问题的尝试之间的区别在于清单。 危险权限的检查行为会发生变化,但仅当它们在清单中列出时才会发生变化。警告消息发生变化,@RequiresPermission
不再级联。
我最初认为这是 Android Studio bug 177281, but that issue was more general. Not cascading for dangerous permissions may have been intentional, but I've reported it as a bug because