use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class XmlTagRenameHandler method getElement.
@Nullable
private static PsiElement getElement(@Nullable final DataContext context) {
if (context != null) {
final Editor editor = getEditor(context);
if (editor != null) {
final int offset = editor.getCaretModel().getOffset();
final PsiFile file = CommonDataKeys.PSI_FILE.getData(context);
if (file instanceof XmlFile) {
return file.getViewProvider().findElementAt(offset);
}
if (file != null) {
final Language language = PsiUtilCore.getLanguageAtOffset(file, offset);
if (language != file.getLanguage()) {
final PsiFile psiAtOffset = file.getViewProvider().getPsi(language);
if (psiAtOffset instanceof XmlFile) {
return psiAtOffset.findElementAt(offset);
}
}
}
}
}
return null;
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class CheckRegExpForm method isMatchingText.
static RegExpMatchResult isMatchingText(@NotNull final PsiFile regexpFile, @NotNull String sampleText) {
final String regExp = regexpFile.getText();
final Language regexpFileLanguage = regexpFile.getLanguage();
final RegExpMatcherProvider matcherProvider = RegExpMatcherProvider.EP.forLanguage(regexpFileLanguage);
if (matcherProvider != null) {
final RegExpMatchResult result = ReadAction.compute(() -> {
final PsiLanguageInjectionHost host = InjectedLanguageUtil.findInjectionHost(regexpFile);
if (host != null) {
return matcherProvider.matches(regExp, regexpFile, host, sampleText, 1000L);
}
return null;
});
if (result != null) {
return result;
}
}
final Integer patternFlags = ReadAction.compute(() -> {
final PsiLanguageInjectionHost host = InjectedLanguageUtil.findInjectionHost(regexpFile);
int flags = 0;
if (host != null) {
for (RegExpModifierProvider provider : RegExpModifierProvider.EP.allForLanguage(host.getLanguage())) {
flags = provider.getFlags(host, regexpFile);
if (flags > 0)
break;
}
}
return flags;
});
try {
//noinspection MagicConstant
return Pattern.compile(regExp, patternFlags).matcher(StringUtil.newBombedCharSequence(sampleText, 1000)).matches() ? RegExpMatchResult.MATCHES : RegExpMatchResult.NO_MATCH;
} catch (ProcessCanceledException pc) {
return RegExpMatchResult.TIMEOUT;
} catch (Exception ignore) {
}
return RegExpMatchResult.BAD_REGEXP;
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class CheckRegExpIntentionAction method isAvailable.
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
Pair<PsiElement, TextRange> pair = getRangePair(file, editor);
if (pair != null && pair.first != null) {
Language language = pair.first.getLanguage();
return language.isKindOf(RegExpLanguage.INSTANCE);
}
PsiFile baseFile = InjectedLanguageManager.getInstance(project).getTopLevelFile(file);
return baseFile != null && baseFile.getLanguage().isKindOf(RegExpLanguage.INSTANCE);
}
use of com.intellij.lang.Language in project smali by JesusFreke.
the class LightCodeInsightParsingTestCase method doCheckResult.
public static void doCheckResult(String myFullDataPath, PsiFile file, boolean checkAllPsiRoots, String targetDataName, boolean skipSpaces, boolean printRanges) throws IOException {
FileViewProvider provider = file.getViewProvider();
Set<Language> languages = provider.getLanguages();
if (!checkAllPsiRoots || languages.size() == 1) {
doCheckResult(myFullDataPath, targetDataName + ".txt", toParseTreeText(file, skipSpaces, printRanges).trim());
return;
}
for (Language language : languages) {
PsiFile root = provider.getPsi(language);
String expectedName = targetDataName + "." + language.getID() + ".txt";
doCheckResult(myFullDataPath, expectedName, toParseTreeText(root, skipSpaces, printRanges).trim());
}
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class SearchDialog method buildOptions.
protected void buildOptions(JPanel searchOptions) {
recursiveMatching = new JCheckBox(SSRBundle.message("recursive.matching.checkbox"), true);
if (isRecursiveSearchEnabled()) {
searchOptions.add(UIUtil.createOptionLine(recursiveMatching));
}
caseSensitiveMatch = new JCheckBox(FindBundle.message("find.options.case.sensitive"), true);
searchOptions.add(UIUtil.createOptionLine(caseSensitiveMatch));
final List<FileType> types = new ArrayList<>();
for (FileType fileType : StructuralSearchUtil.getSuitableFileTypes()) {
if (StructuralSearchUtil.getProfileByFileType(fileType) != null) {
types.add(fileType);
}
}
Collections.sort(types, (o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()));
final DefaultComboBoxModel<FileType> comboBoxModel = new DefaultComboBoxModel<>(types.toArray(new FileType[types.size()]));
fileTypes = new ComboBox<>(comboBoxModel);
fileTypes.setRenderer(new FileTypeRenderer());
new ComboboxSpeedSearch(fileTypes) {
@Override
protected String getElementText(Object element) {
return ((FileType) element).getName();
}
};
contexts = new ComboBox<>();
contexts.setPreferredSize(new Dimension(60, -1));
dialects = new ComboBox<>();
dialects.setRenderer(new ListCellRendererWrapper<Language>() {
@Override
public void customize(JList list, Language value, int index, boolean selected, boolean hasFocus) {
if (value == null) {
setText("None");
} else {
setText(value.getDisplayName());
}
}
});
dialects.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
updateEditor();
}
});
new ComboboxSpeedSearch(dialects);
dialects.setPreferredSize(new Dimension(120, -1));
final JLabel jLabel = new JLabel(SSRBundle.message("search.dialog.file.type.label"));
final JLabel jLabel2 = new JLabel(SSRBundle.message("search.dialog.context.label"));
final JLabel jLabel3 = new JLabel(SSRBundle.message("search.dialog.file.dialect.label"));
searchOptions.add(UIUtil.createOptionLine(new JComponent[] { jLabel, fileTypes, (JComponent) Box.createHorizontalStrut(8), jLabel2, contexts, (JComponent) Box.createHorizontalStrut(8), jLabel3, dialects }));
jLabel.setLabelFor(fileTypes);
jLabel2.setLabelFor(contexts);
jLabel3.setLabelFor(dialects);
detectFileTypeAndDialect();
fileTypes.setSelectedItem(ourFtSearchVariant);
fileTypes.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
updateDialectsAndContexts();
updateEditor();
initiateValidation();
}
}
});
dialects.setSelectedItem(ourDialect);
contexts.setSelectedItem(ourContext);
updateDialectsAndContexts();
}
Aggregations