use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class TemplateLanguageStructureViewBuilder method updateAfterPsiChange.
private void updateAfterPsiChange() {
if (myProject.isDisposed())
return;
if (myBaseStructureViewDescriptor != null && ((StructureViewComponent) myBaseStructureViewDescriptor.structureView).getTree() == null)
return;
ApplicationManager.getApplication().runReadAction(() -> {
if (!myVirtualFile.isValid() || getViewProvider() == null)
return;
StructureViewWrapper structureViewWrapper = StructureViewFactoryEx.getInstanceEx(myProject).getStructureViewWrapper();
if (structureViewWrapper == null)
return;
Language baseLanguage = getTemplateDataLanguage();
if (baseLanguage == myTemplateDataLanguage && (myBaseStructureViewDescriptor == null || isPsiValid(myBaseStructureViewDescriptor))) {
updateBaseLanguageView();
} else {
myTemplateDataLanguage = baseLanguage;
((StructureViewWrapperImpl) structureViewWrapper).rebuild();
}
});
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class ExtractCodeStyleAction method reportResult.
public void reportResult(final ValuesExtractionResult forSelection, final Project project, final CodeStyleSettings cloneSettings, final PsiFile file, final Map<Value, Object> backup) {
final Balloon balloon = JBPopupFactory.getInstance().createHtmlTextBalloonBuilder("Formatting Options were extracted<br/><a href=\"apply\">Apply</a> <a href=\"details\">Details...</a>", MessageType.INFO, new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
boolean apply = "apply".equals(e.getDescription());
ExtractedSettingsDialog myDialog = null;
if (!apply) {
final List<Value> values = forSelection.getValues();
final LanguageCodeStyleSettingsProvider[] providers = Extensions.getExtensions(LanguageCodeStyleSettingsProvider.EP_NAME);
Language language = file.getLanguage();
CodeStyleSettingsNameProvider nameProvider = new CodeStyleSettingsNameProvider();
for (final LanguageCodeStyleSettingsProvider provider : providers) {
Language target = provider.getLanguage();
if (target.equals(language)) {
//this is our language
nameProvider.addSettings(provider);
myDialog = new ExtractedSettingsDialog(project, nameProvider, values);
apply = myDialog.showAndGet();
break;
}
}
}
if (apply && myDialog != null) {
//create new settings named after the file
final ExtractedSettingsDialog finalMyDialog = myDialog;
forSelection.applyConditioned(value -> finalMyDialog.valueIsSelectedInTree(value), backup);
CodeStyleScheme derivedScheme = CodeStyleSchemes.getInstance().createNewScheme("Derived from " + file.getName(), null);
derivedScheme.getCodeStyleSettings().copyFrom(cloneSettings);
CodeStyleSchemes.getInstance().addScheme(derivedScheme);
CodeStyleSchemesImpl.getSchemeManager().setCurrent(derivedScheme);
CodeStyleSettingsManager.getInstance(project).PREFERRED_PROJECT_CODE_STYLE = derivedScheme.getName();
}
}
}
}).setDisposable(ApplicationManager.getApplication()).setShowCallout(false).setFadeoutTime(0).setShowCallout(false).setAnimationCycle(0).setHideOnClickOutside(false).setHideOnKeyOutside(false).setCloseButtonEnabled(true).setHideOnLinkClick(true).createBalloon();
ApplicationManager.getApplication().invokeLater(() -> {
Window window = WindowManager.getInstance().getFrame(project);
if (window == null) {
window = JOptionPane.getRootFrame();
}
if (window instanceof IdeFrame) {
BalloonLayout layout = ((IdeFrame) window).getBalloonLayout();
if (layout != null) {
layout.add(balloon);
}
}
});
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class FormattingDocumentModelImpl method containsWhiteSpaceSymbolsOnly.
@Override
public boolean containsWhiteSpaceSymbolsOnly(int startOffset, int endOffset) {
WhiteSpaceFormattingStrategy strategy = myWhiteSpaceStrategy;
if (strategy.check(myDocument.getCharsSequence(), startOffset, endOffset) >= endOffset) {
return true;
}
PsiElement injectedElement = myFile != null ? InjectedLanguageUtil.findElementAtNoCommit(myFile, startOffset) : null;
if (injectedElement != null) {
Language injectedLanguage = injectedElement.getLanguage();
if (!injectedLanguage.equals(myFile.getLanguage())) {
WhiteSpaceFormattingStrategy localStrategy = WhiteSpaceFormattingStrategyFactory.getStrategy(injectedLanguage);
if (localStrategy != null) {
String unescapedText = InjectedLanguageUtil.getUnescapedLeafText(injectedElement, true);
if (unescapedText != null) {
return localStrategy.check(unescapedText, 0, unescapedText.length()) >= unescapedText.length();
}
return localStrategy.check(myDocument.getCharsSequence(), startOffset, endOffset) >= endOffset;
}
}
}
return false;
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class WhiteSpaceFormattingStrategyFactory method getAllStrategies.
/**
* @return collection of all registered white space strategies
*/
@NotNull
public static Collection<WhiteSpaceFormattingStrategy> getAllStrategies() {
final WeakReference<Collection<WhiteSpaceFormattingStrategy>> reference = myCachedStrategies.get();
final Collection<WhiteSpaceFormattingStrategy> strategies = SoftReference.dereference(reference);
if (strategies != null) {
return strategies;
}
final Collection<Language> languages = Language.getRegisteredLanguages();
if (languages == null) {
final List<WhiteSpaceFormattingStrategy> result = Collections.emptyList();
myCachedStrategies.set(new PatchedWeakReference<>(result));
return result;
}
Set<WhiteSpaceFormattingStrategy> result = new HashSet<>(SHARED_STRATEGIES);
final LanguageWhiteSpaceFormattingStrategy languageStrategy = LanguageWhiteSpaceFormattingStrategy.INSTANCE;
for (Language language : languages) {
final WhiteSpaceFormattingStrategy strategy = languageStrategy.forLanguage(language);
if (strategy != null) {
result.add(strategy);
}
}
myCachedStrategies.set(new PatchedWeakReference<>(result));
return result;
}
use of com.intellij.lang.Language in project intellij-community by JetBrains.
the class InjectedLanguageBlockBuilder method addInjectedLanguageBlockWrapper.
public void addInjectedLanguageBlockWrapper(final List<Block> result, final ASTNode injectedNode, final Indent indent, int offset, @Nullable TextRange range) {
//
if (range != null) {
if (range.getLength() == 0)
return;
if (StringUtil.isEmptyOrSpaces(range.substring(injectedNode.getText()))) {
return;
}
}
final PsiElement childPsi = injectedNode.getPsi();
final Language childLanguage = childPsi.getLanguage();
final FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forContext(childLanguage, childPsi);
LOG.assertTrue(builder != null);
final FormattingModel childModel = builder.createModel(childPsi, getSettings());
Block original = childModel.getRootBlock();
if ((original.isLeaf() && !injectedNode.getText().trim().isEmpty()) || !original.getSubBlocks().isEmpty()) {
result.add(createInjectedBlock(injectedNode, original, indent, offset, range, childLanguage));
}
}
Aggregations