use of org.intellij.lang.regexp.psi.RegExpBranch in project intellij-community by JetBrains.
the class RegExpFactory method createBranchFromText.
@NotNull
public static RegExpBranch createBranchFromText(@NotNull CharSequence text, @NotNull PsiElement context) {
final RegExpPattern pattern = createPatternFromText(text, context);
final RegExpBranch branch = PsiTreeUtil.getChildOfType(pattern, RegExpBranch.class);
assert branch != null;
return branch;
}
use of org.intellij.lang.regexp.psi.RegExpBranch in project intellij-community by JetBrains.
the class RegExpUtil method getEnumValues.
@Nullable
public static Set<String> getEnumValues(Project project, @NotNull String regExp) {
final PsiFileFactory factory = PsiFileFactory.getInstance(project);
final PsiFile file = factory.createFileFromText("dummy.regexp", RegExpFileType.INSTANCE, regExp);
final RegExpPattern pattern = (RegExpPattern) file.getFirstChild();
if (pattern == null) {
return null;
}
final RegExpBranch[] branches = pattern.getBranches();
final Set<String> values = new HashSet<>();
for (RegExpBranch branch : branches) {
if (analyzeBranch(branch)) {
values.add(branch.getUnescapedText());
}
}
return values;
}
use of org.intellij.lang.regexp.psi.RegExpBranch in project intellij-community by JetBrains.
the class ValueRegExpAnnotator method annotate.
public void annotate(@NotNull PsiElement psiElement, @NotNull AnnotationHolder holder) {
if (psiElement instanceof RegExpFile && psiElement.getCopyableUserData(KEY) == Boolean.TRUE) {
final PsiElement pattern = psiElement.getFirstChild();
if (!(pattern instanceof RegExpPattern)) {
return;
}
final RegExpBranch[] branches = ((RegExpPattern) pattern).getBranches();
if (branches.length == 1 && branches[0].getAtoms().length == 0) {
return;
}
for (RegExpBranch branch : branches) {
final int[] count = new int[1];
branch.accept(new RegExpRecursiveElementVisitor() {
@Override
public void visitRegExpGroup(RegExpGroup group) {
if (group.isCapturing()) {
count[0]++;
}
super.visitRegExpGroup(group);
}
});
if (count[0] != 1) {
holder.createWarningAnnotation(branch, "The pattern should contain exactly one capturing group");
}
}
}
}
Aggregations