use of com.google.idea.blaze.base.model.primitives.LanguageClass in project intellij by bazelbuild.
the class ExternalFileProjectManagementHelper method supportedFileType.
/**
* Whether the editor notification should be shown for this file type.
*/
private static boolean supportedFileType(File file) {
LanguageClass languageClass = LanguageClass.fromExtension(FileUtilRt.getExtension(file.getName()).toLowerCase());
if (languageClass != null && !AddSourceToProjectHelper.supportedLanguage(languageClass)) {
return false;
}
FileType type = FileTypeManager.getInstance().getFileTypeByFileName(file.getName());
for (Class<? extends FileType> clazz : IGNORED_FILE_TYPES) {
if (clazz.isInstance(type)) {
return false;
}
}
return true;
}
use of com.google.idea.blaze.base.model.primitives.LanguageClass in project intellij by bazelbuild.
the class AdditionalLanguagesHelper method createNotificationPanel.
@Nullable
@Override
public EditorNotificationPanel createNotificationPanel(VirtualFile file, FileEditor fileEditor) {
String ext = file.getExtension();
if (ext == null) {
return null;
}
LanguageClass language = LanguageClass.fromExtension(ext);
if (language == null || notifiedLanguages.contains(language)) {
return null;
}
BlazeProjectData projectData = BlazeProjectDataManager.getInstance(project).getBlazeProjectData();
if (projectData == null) {
return null;
}
WorkspaceLanguageSettings settings = projectData.workspaceLanguageSettings;
if (settings.isLanguageActive(language)) {
return null;
}
if (!LanguageSupport.supportedLanguagesForWorkspaceType(settings.getWorkspaceType()).contains(language)) {
return null;
}
String langName = language.getName();
String message = String.format("Do you want to enable %s plugin %s support?", Blaze.buildSystemName(project), langName);
EditorNotificationPanel panel = new EditorNotificationPanel();
panel.setText(message);
panel.createActionLabel(String.format("Enable %s support", langName), () -> {
enableLanguageSupport(project, ImmutableList.of(language));
suppressNotifications(language);
});
panel.createActionLabel("Don't show again", () -> suppressNotifications(language));
return panel;
}
use of com.google.idea.blaze.base.model.primitives.LanguageClass in project intellij by bazelbuild.
the class BlazeIdeInterfaceAspectsImpl method getIdeInfo.
private static IdeInfoResult getIdeInfo(Project project, BlazeContext parentContext, WorkspaceRoot workspaceRoot, ProjectViewSet projectViewSet, ImmutableSet<LanguageClass> activeLanguages, ShardedTargetList shardedTargets, AspectStrategy aspectStrategy) {
return Scope.push(parentContext, context -> {
context.push(new TimingScope(String.format("Execute%sCommand", Blaze.buildSystemName(project)), EventType.BlazeInvocation));
Set<File> ideInfoFiles = new LinkedHashSet<>();
Function<Integer, String> progressMessage = count -> String.format("Building IDE info files for shard %s of %s...", count, shardedTargets.shardedTargets.size());
Function<List<TargetExpression>, BuildResult> invocation = targets -> {
IdeInfoResult result = getIdeInfoForTargets(project, context, workspaceRoot, projectViewSet, activeLanguages, targets, aspectStrategy);
ideInfoFiles.addAll(result.files);
return result.buildResult;
};
BuildResult result = shardedTargets.runShardedCommand(project, context, progressMessage, invocation);
return new IdeInfoResult(ideInfoFiles, result);
});
}
use of com.google.idea.blaze.base.model.primitives.LanguageClass in project intellij by bazelbuild.
the class BlazeIdeInterfaceAspectsImpl method updateState.
@Nullable
static State updateState(Project project, BlazeContext parentContext, @Nullable State prevState, ImmutableMap<File, Long> fileState, BlazeConfigurationHandler configHandler, WorkspaceLanguageSettings workspaceLanguageSettings, ImportRoots importRoots, AspectStrategy aspectStrategy, List<File> newFiles, List<File> removedFiles, boolean mergeWithOldState) {
Result<State> result = Scope.push(parentContext, (ScopedFunction<Result<State>>) context -> {
context.push(new TimingScope("UpdateTargetMap", EventType.Other));
ImmutableMap<File, Long> nextFileState = fileState;
if (mergeWithOldState && prevState != null) {
ImmutableMap.Builder<File, Long> fileStateBuilder = ImmutableMap.<File, Long>builder().putAll(fileState);
for (Map.Entry<File, Long> entry : prevState.fileState.entrySet()) {
if (!fileState.containsKey(entry.getKey())) {
fileStateBuilder.put(entry);
}
}
nextFileState = fileStateBuilder.build();
}
State state = new State();
state.fileState = nextFileState;
state.workspaceLanguageSettings = workspaceLanguageSettings;
state.aspectStrategyName = aspectStrategy.getName();
Map<TargetKey, TargetIdeInfo> targetMap = Maps.newHashMap();
if (prevState != null) {
targetMap.putAll(prevState.targetMap.map());
state.fileToTargetMapKey.putAll(prevState.fileToTargetMapKey);
}
if (!mergeWithOldState) {
for (File removedFile : removedFiles) {
TargetKey key = state.fileToTargetMapKey.remove(removedFile);
if (key != null) {
targetMap.remove(key);
}
}
}
AtomicLong totalSizeLoaded = new AtomicLong(0);
Set<LanguageClass> ignoredLanguages = Sets.newConcurrentHashSet();
ListeningExecutorService executor = BlazeExecutor.getInstance().getExecutor();
List<ListenableFuture<TargetFilePair>> futures = Lists.newArrayList();
for (File file : newFiles) {
futures.add(executor.submit(() -> {
totalSizeLoaded.addAndGet(file.length());
IntellijIdeInfo.TargetIdeInfo message = aspectStrategy.readAspectFile(file);
TargetIdeInfo target = protoToTarget(workspaceLanguageSettings, importRoots, message, ignoredLanguages);
return new TargetFilePair(file, target);
}));
}
Set<TargetKey> newTargets = new HashSet<>();
Set<String> configurations = new LinkedHashSet<>();
configurations.add(configHandler.defaultConfigurationPathComponent);
int duplicateTargetLabels = 0;
try {
for (TargetFilePair targetFilePair : Futures.allAsList(futures).get()) {
if (targetFilePair.target != null) {
File file = targetFilePair.file;
String config = configHandler.getConfigurationPathComponent(file);
configurations.add(config);
TargetKey key = targetFilePair.target.key;
if (targetMap.putIfAbsent(key, targetFilePair.target) == null) {
state.fileToTargetMapKey.forcePut(file, key);
} else {
if (!newTargets.add(key)) {
duplicateTargetLabels++;
}
if (Objects.equals(config, configHandler.defaultConfigurationPathComponent)) {
targetMap.put(key, targetFilePair.target);
state.fileToTargetMapKey.forcePut(file, key);
}
}
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return Result.error(null);
} catch (ExecutionException e) {
return Result.error(e);
}
context.output(PrintOutput.log(String.format("Loaded %d aspect files, total size %dkB", newFiles.size(), totalSizeLoaded.get() / 1024)));
if (duplicateTargetLabels > 0) {
context.output(new PerformanceWarning(String.format("There were %d duplicate rules, built with the following " + "configurations: %s.\nYour IDE sync is slowed down by ~%d%%.", duplicateTargetLabels, configurations, (100 * duplicateTargetLabels / targetMap.size()))));
}
ignoredLanguages.retainAll(LanguageSupport.availableAdditionalLanguages(workspaceLanguageSettings.getWorkspaceType()));
warnIgnoredLanguages(project, context, ignoredLanguages);
state.targetMap = new TargetMap(ImmutableMap.copyOf(targetMap));
return Result.of(state);
});
if (result.error != null) {
logger.error(result.error);
return null;
}
return result.result;
}
use of com.google.idea.blaze.base.model.primitives.LanguageClass in project intellij by bazelbuild.
the class LanguageSupport method createWorkspaceLanguageSettings.
/**
* Derives {@link WorkspaceLanguageSettings} from the {@link ProjectViewSet}. Does no validation.
*/
public static WorkspaceLanguageSettings createWorkspaceLanguageSettings(ProjectViewSet projectViewSet) {
WorkspaceType workspaceType = projectViewSet.getScalarValue(WorkspaceTypeSection.KEY).orElse(getDefaultWorkspaceType());
ImmutableSet.Builder<LanguageClass> activeLanguages = ImmutableSet.<LanguageClass>builder().addAll(workspaceType.getLanguages()).addAll(projectViewSet.listItems(AdditionalLanguagesSection.KEY)).add(LanguageClass.GENERIC);
Arrays.stream(BlazeSyncPlugin.EP_NAME.getExtensions()).forEach(plugin -> activeLanguages.addAll(plugin.getAlwaysActiveLanguages()));
return new WorkspaceLanguageSettings(workspaceType, activeLanguages.build());
}
Aggregations