private void onFacetAdded(final Facet facet) { boolean firstFacet = myFacetsByType.isEmpty(); final FacetTypeId typeId = facet.getTypeId(); WeakHashMap<Facet, Boolean> facets = myFacetsByType.get(typeId); if (facets == null) { facets = new WeakHashMap<Facet, Boolean>(); myFacetsByType.put(typeId, facets); } boolean firstFacetOfType = facets.isEmpty(); facets.put(facet, true); if (firstFacet) { getAllFacetsMulticaster().firstFacetAdded(); } getAllFacetsMulticaster().facetAdded(facet); final EventDispatcher<ProjectWideFacetListener> dispatcher = myDispatchers.get(typeId); if (dispatcher != null) { if (firstFacetOfType) { dispatcher.getMulticaster().firstFacetAdded(); } //noinspection unchecked dispatcher.getMulticaster().facetAdded(facet); } }
@NotNull private static Collection<PsiElement> getPsiElementsAt(Point point, Editor editor) { if (editor.isDisposed()) { return Collections.emptySet(); } Project project = editor.getProject(); if (project == null || project.isDisposed()) { return Collections.emptySet(); } final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); final Document document = editor.getDocument(); PsiFile psiFile = documentManager.getPsiFile(document); if (psiFile == null || psiFile instanceof PsiCompiledElement || !psiFile.isValid()) { return Collections.emptySet(); } final Set<PsiElement> elements = Collections.newSetFromMap(new WeakHashMap<PsiElement, Boolean>()); final int offset = editor.logicalPositionToOffset(editor.xyToLogicalPosition(point)); if (documentManager.isCommitted(document)) { ContainerUtil.addIfNotNull(elements, InjectedLanguageUtil.findElementAtNoCommit(psiFile, offset)); } for (PsiFile file : psiFile.getViewProvider().getAllFiles()) { ContainerUtil.addIfNotNull(elements, file.findElementAt(offset)); } return elements; }
private void onFacetRemoved(final Facet facet, final boolean before) { final FacetTypeId typeId = facet.getTypeId(); WeakHashMap<Facet, Boolean> facets = myFacetsByType.get(typeId); boolean lastFacet; if (facets != null) { facets.remove(facet); lastFacet = facets.isEmpty(); if (lastFacet) { myFacetsByType.remove(typeId); } } else { lastFacet = true; } final EventDispatcher<ProjectWideFacetListener> dispatcher = myDispatchers.get(typeId); if (dispatcher != null) { if (before) { //noinspection unchecked dispatcher.getMulticaster().beforeFacetRemoved(facet); } else { //noinspection unchecked dispatcher.getMulticaster().facetRemoved(facet); if (lastFacet) { dispatcher.getMulticaster().allFacetsRemoved(); } } } if (before) { getAllFacetsMulticaster().beforeFacetRemoved(facet); } else { getAllFacetsMulticaster().facetRemoved(facet); if (myFacetsByType.isEmpty()) { getAllFacetsMulticaster().allFacetsRemoved(); } } }
public static PythonSdkPathCache getInstance(@NotNull Project project, @NotNull Sdk sdk) { synchronized (KEY) { Map<Project, PythonSdkPathCache> cacheMap = sdk.getUserData(KEY); if (cacheMap == null) { cacheMap = new WeakHashMap<Project, PythonSdkPathCache>(); sdk.putUserData(KEY, cacheMap); } PythonSdkPathCache cache = cacheMap.get(project); if (cache == null) { cache = new PythonSdkPathCache(project, sdk); cacheMap.put(project, cache); } return cache; } }
@Nonnull private static Collection<PsiElement> getPsiElementsAt(Point point, Editor editor) { if (editor.isDisposed()) { return Collections.emptySet(); } Project project = editor.getProject(); if (project == null || project.isDisposed()) { return Collections.emptySet(); } final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); final Document document = editor.getDocument(); PsiFile psiFile = documentManager.getPsiFile(document); if (psiFile == null || psiFile instanceof PsiCompiledElement || !psiFile.isValid()) { return Collections.emptySet(); } final Set<PsiElement> elements = Collections.newSetFromMap(new WeakHashMap<PsiElement, Boolean>()); final int offset = editor.logicalPositionToOffset(editor.xyToLogicalPosition(point)); if (documentManager.isCommitted(document)) { ContainerUtil.addIfNotNull(elements, InjectedLanguageUtil.findElementAtNoCommit(psiFile, offset)); } for (PsiFile file : psiFile.getViewProvider().getAllFiles()) { ContainerUtil.addIfNotNull(elements, file.findElementAt(offset)); } return elements; }