mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
JavaLightTreeUtil#hasExplicitModifier extracted (IDEA-CR-32927)
This commit is contained in:
+1
-3
@@ -49,10 +49,8 @@ private class InferenceVisitor(val tree : LighterAST) : RecursiveLighterASTNodeW
|
||||
private fun gatherFields(aClass: LighterASTNode) {
|
||||
val fields = LightTreeUtil.getChildrenOfType(tree, aClass, FIELD)
|
||||
for (field in fields) {
|
||||
val modifierList = LightTreeUtil.firstChildOfType(tree, field, MODIFIER_LIST)
|
||||
val fieldName = JavaLightTreeUtil.getNameIdentifierText(tree, field)
|
||||
if (modifierList != null && fieldName != null &&
|
||||
tree.getChildren(modifierList).any { modifier -> modifier.tokenType === JavaTokenType.VOLATILE_KEYWORD }) {
|
||||
if (fieldName != null && JavaLightTreeUtil.hasExplicitModifier(tree, field, JavaTokenType.VOLATILE_KEYWORD)) {
|
||||
volatileFieldNames.add(fieldName)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-5
@@ -52,11 +52,9 @@ class PurityInferenceVisitor {
|
||||
if (qualifier == null || qualifier.getTokenType() == THIS_EXPRESSION) {
|
||||
if (myVolatileFieldNames.contains(JavaLightTreeUtil.getNameIdentifierText(tree, element))) {
|
||||
LighterASTNode target = new FileLocalResolver(tree).resolveLocally(element).getTarget();
|
||||
if (target != null && target.getTokenType() == FIELD) {
|
||||
LighterASTNode modifierList = LightTreeUtil.firstChildOfType(tree, target, MODIFIER_LIST);
|
||||
hasVolatileReads |= modifierList != null &&
|
||||
tree.getChildren(modifierList).stream()
|
||||
.anyMatch(modifier -> modifier.getTokenType() == JavaTokenType.VOLATILE_KEYWORD);
|
||||
if (target != null && target.getTokenType() == FIELD &&
|
||||
JavaLightTreeUtil.hasExplicitModifier(tree, target, JavaTokenType.VOLATILE_KEYWORD)) {
|
||||
hasVolatileReads = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.impl.cache.RecordUtil;
|
||||
import com.intellij.psi.impl.source.tree.ElementType;
|
||||
import com.intellij.psi.impl.source.tree.LightTreeUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -73,4 +74,19 @@ public class JavaLightTreeUtil {
|
||||
}
|
||||
return expression;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if given element (which is modifier list owner) has given explicit modifier
|
||||
*
|
||||
* @param tree an AST tree
|
||||
* @param modifierListOwner element to check modifier of
|
||||
* @param modifierKeyword modifier to look for (e.g. {@link JavaTokenType#VOLATILE_KEYWORD}
|
||||
* @return true if given element has given explicit modifier
|
||||
*/
|
||||
public static boolean hasExplicitModifier(@NotNull LighterAST tree,
|
||||
@Nullable LighterASTNode modifierListOwner,
|
||||
@NotNull IElementType modifierKeyword) {
|
||||
LighterASTNode modifierList = LightTreeUtil.firstChildOfType(tree, modifierListOwner, MODIFIER_LIST);
|
||||
return LightTreeUtil.firstChildOfType(tree, modifierList, modifierKeyword) != null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user