[platform] restores Kotlin compatibility; deprecates exposed fields

This commit is contained in:
Roman Shevchenko
2016-11-09 13:45:07 +01:00
parent 44319d3b0c
commit 1a5ec5d9ab
4 changed files with 72 additions and 51 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,25 +40,26 @@ public class MethodHierarchyBrowser extends MethodHierarchyBrowserBase {
super(project, method);
}
@Override
protected void createTrees(@NotNull Map<String, JTree> trees) {
final JTree tree = createTree(false);
ActionGroup group = (ActionGroup)ActionManager.getInstance().getAction(IdeActions.GROUP_METHOD_HIERARCHY_POPUP);
PopupHandler.installPopupHandler(tree, group, ActionPlaces.METHOD_HIERARCHY_VIEW_POPUP, ActionManager.getInstance());
final BaseOnThisMethodAction baseOnThisMethodAction = new BaseOnThisMethodAction();
baseOnThisMethodAction
.registerCustomShortcutSet(ActionManager.getInstance().getAction(IdeActions.ACTION_METHOD_HIERARCHY).getShortcutSet(), tree);
final BaseOnThisMethodAction action = new BaseOnThisMethodAction();
action.registerCustomShortcutSet(ActionManager.getInstance().getAction(IdeActions.ACTION_METHOD_HIERARCHY).getShortcutSet(), tree);
trees.put(METHOD_TYPE, tree);
}
@Override
protected JPanel createLegendPanel() {
return createStandardLegendPanel(IdeBundle.message("hierarchy.legend.method.is.defined.in.class"),
IdeBundle.message("hierarchy.legend.method.defined.in.superclass"),
IdeBundle.message("hierarchy.legend.method.should.be.defined"));
}
@Override
protected PsiElement getElementFromDescriptor(@NotNull final HierarchyNodeDescriptor descriptor) {
if (descriptor instanceof MethodHierarchyNodeDescriptor) {
return ((MethodHierarchyNodeDescriptor)descriptor).getTargetElement();
@@ -66,10 +67,12 @@ public class MethodHierarchyBrowser extends MethodHierarchyBrowserBase {
return null;
}
@Override
protected boolean isApplicableElement(@NotNull final PsiElement psiElement) {
return psiElement instanceof PsiMethod;
}
@Override
protected HierarchyTreeStructure createHierarchyTreeStructure(@NotNull final String typeName, @NotNull final PsiElement psiElement) {
if (!METHOD_TYPE.equals(typeName)) {
LOG.error("unexpected type: " + typeName);
@@ -78,17 +81,17 @@ public class MethodHierarchyBrowser extends MethodHierarchyBrowserBase {
return new MethodHierarchyTreeStructure(myProject, (PsiMethod)psiElement);
}
@Override
protected Comparator<NodeDescriptor> getComparator() {
return JavaHierarchyUtil.getComparator(myProject);
}
public PsiMethod getBaseMethod() {
final HierarchyTreeBuilder builder = myBuilders.get(myCurrentViewType);
final HierarchyTreeBuilder builder = getCurrentBuilder();
final MethodHierarchyTreeStructure treeStructure = (MethodHierarchyTreeStructure)builder.getTreeStructure();
assert treeStructure != null : builder;
return treeStructure.getBaseMethod();
}
public static final class BaseOnThisMethodAction extends MethodHierarchyBrowserBase.BaseOnThisMethodAction {
}
}
public static final class BaseOnThisMethodAction extends MethodHierarchyBrowserBase.BaseOnThisMethodAction { }
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,7 +38,6 @@ import java.util.Map;
public class TypeHierarchyBrowser extends TypeHierarchyBrowserBase {
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.hierarchy.type.TypeHierarchyBrowser");
public TypeHierarchyBrowser(final Project project, final PsiClass psiClass) {
super(project, psiClass);
}
@@ -55,7 +54,7 @@ public class TypeHierarchyBrowser extends TypeHierarchyBrowserBase {
super.prependActions(actionGroup);
actionGroup.add(new ChangeScopeAction() {
protected boolean isEnabled() {
return !Comparing.strEqual(myCurrentViewType, SUPERTYPES_HIERARCHY_TYPE);
return !Comparing.strEqual(getCurrentViewType(), SUPERTYPES_HIERARCHY_TYPE);
}
});
}
@@ -121,4 +120,4 @@ public class TypeHierarchyBrowser extends TypeHierarchyBrowserBase {
protected TypeHierarchyBrowserBase.BaseOnThisTypeAction createBaseOnThisAction() {
return new BaseOnThisTypeAction();
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.hierarchy;
import com.intellij.icons.AllIcons;
@@ -91,13 +90,12 @@ public abstract class CallHierarchyBrowserBase extends HierarchyBrowserBaseEx {
@Override
public final boolean isSelected(final AnActionEvent event) {
return myTypeName.equals(myCurrentViewType);
return myTypeName.equals(getCurrentViewType());
}
@Override
public final void setSelected(final AnActionEvent event, final boolean flag) {
if (flag) {
// setWaitCursor();
// invokeLater is called to update state of button before long tree building operation
ApplicationManager.getApplication().invokeLater(() -> changeView(myTypeName));
}
@@ -115,5 +113,4 @@ public abstract class CallHierarchyBrowserBase extends HierarchyBrowserBaseEx {
super(IdeBundle.message("action.base.on.this.method"), CALL_HIERARCHY_BROWSER_DATA_KEY, LanguageCallHierarchy.INSTANCE);
}
}
}
}
@@ -103,9 +103,15 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
}
};
protected final Map<String, HierarchyTreeBuilder> myBuilders = Collections.synchronizedMap(new HashMap<>());
/** @deprecated use {@link #getBuilderForType(String)} and {@link #getBuilders()} (to be removed in IDEA 2018) */
@SuppressWarnings({"UseOfObsoleteCollectionType", "DeprecatedIsStillUsed"})
protected final Hashtable<String, HierarchyTreeBuilder> myBuilders = new Hashtable<>();
/** @deprecated use {@link #getCurrentViewType()} (to be removed in IDEA 2018) */
@SuppressWarnings("DeprecatedIsStillUsed")
protected String myCurrentViewType;
private final Map<String, HierarchyTreeBuilder> myType2BuilderMap;
private final Map<String, JTree> myType2TreeMap;
private final RefreshAction myRefreshAction = new RefreshAction();
private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD,this);
@@ -119,6 +125,9 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
public HierarchyBrowserBaseEx(@NotNull Project project, @NotNull PsiElement element) {
super(project);
@SuppressWarnings("deprecation") Map<String, HierarchyTreeBuilder> mapView = myBuilders;
myType2BuilderMap = mapView;
setHierarchyBase(element);
myCardLayout = new CardLayout();
@@ -325,7 +334,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
}
public final void changeView(@NotNull final String typeName) {
myCurrentViewType = typeName;
setCurrentViewType(typeName);
final PsiElement element = mySmartPsiElementPointer.getElement();
if (element == null || !isApplicableElement(element)) {
@@ -341,7 +350,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
myCardLayout.show(myTreePanel, typeName);
if (!myBuilders.containsKey(typeName)) {
if (!myType2BuilderMap.containsKey(typeName)) {
try {
setWaitCursor();
// create builder
@@ -356,9 +365,9 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
final Comparator<NodeDescriptor> comparator = getComparator();
final HierarchyTreeBuilder builder = new HierarchyTreeBuilder(myProject, tree, model, structure, comparator);
myBuilders.put(typeName, builder);
myType2BuilderMap.put(typeName, builder);
Disposer.register(this, builder);
Disposer.register(builder, () -> myBuilders.remove(typeName));
Disposer.register(builder, () -> myType2BuilderMap.remove(typeName));
final HierarchyNodeDescriptor descriptor = structure.getBaseDescriptor();
builder.select(descriptor, () -> builder.expand(descriptor, null));
@@ -371,6 +380,11 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
getCurrentTree().requestFocus();
}
@SuppressWarnings("deprecation")
private void setCurrentViewType(String typeName) {
myCurrentViewType = typeName;
}
@Nullable
protected String getContentDisplayName(@NotNull String typeName, @NotNull PsiElement element) {
if (element instanceof PsiNamedElement) {
@@ -395,11 +409,14 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
}
private OccurenceNavigator getOccurrenceNavigator() {
if (myCurrentViewType == null) {
return EMPTY_NAVIGATOR;
String currentViewType = getCurrentViewType();
if (currentViewType != null) {
OccurenceNavigator navigator = myOccurrenceNavigators.get(currentViewType);
if (navigator != null) {
return navigator;
}
}
final OccurenceNavigator navigator = myOccurrenceNavigators.get(myCurrentViewType);
return navigator != null ? navigator : EMPTY_NAVIGATOR;
return EMPTY_NAVIGATOR;
}
@Override
@@ -429,7 +446,15 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
@Override
protected HierarchyTreeBuilder getCurrentBuilder() {
return myBuilders.get(myCurrentViewType);
return getBuilderForType(getCurrentViewType());
}
protected final HierarchyTreeBuilder getBuilderForType(String viewType) {
return myType2BuilderMap.get(viewType);
}
protected final Iterable<HierarchyTreeBuilder> getBuilders() {
return Collections.unmodifiableCollection(myType2BuilderMap.values());
}
final boolean isValidBase() {
@@ -444,11 +469,12 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
@Override
protected JTree getCurrentTree() {
if (myCurrentViewType == null) return null;
return myType2TreeMap.get(myCurrentViewType);
String currentViewType = getCurrentViewType();
return currentViewType == null ? null : myType2TreeMap.get(currentViewType);
}
String getCurrentViewType() {
@SuppressWarnings("deprecation")
protected final String getCurrentViewType() {
return myCurrentViewType;
}
@@ -464,22 +490,22 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
}
private void disposeBuilders() {
final Collection<HierarchyTreeBuilder> builders = new ArrayList<>(myBuilders.values());
final Collection<HierarchyTreeBuilder> builders = new ArrayList<>(myType2BuilderMap.values());
for (final HierarchyTreeBuilder builder : builders) {
Disposer.dispose(builder);
}
myBuilders.clear();
myType2BuilderMap.clear();
}
void doRefresh(boolean currentBuilderOnly) {
if (currentBuilderOnly) LOG.assertTrue(myCurrentViewType != null);
if (currentBuilderOnly) LOG.assertTrue(getCurrentViewType() != null);
if (!isValidBase()) return;
if (getCurrentBuilder() == null) return; // seems like we are in the middle of refresh already
final Ref<Pair<List<Object>, List<Object>>> storedInfo = new Ref<>();
if (myCurrentViewType != null) {
if (getCurrentViewType() != null) {
final HierarchyTreeBuilder builder = getCurrentBuilder();
storedInfo.set(builder.storeExpandedAndSelectedInfo());
}
@@ -488,8 +514,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
if (element == null || !isApplicableElement(element)) {
return;
}
final String currentViewType = myCurrentViewType;
final String currentViewType = getCurrentViewType();
if (currentBuilderOnly) {
Disposer.dispose(getCurrentBuilder());
}
@@ -506,14 +531,13 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
}
protected String getCurrentScopeType() {
if (myCurrentViewType == null) return null;
return myType2ScopeMap.get(myCurrentViewType);
String currentViewType = getCurrentViewType();
return currentViewType == null ? null : myType2ScopeMap.get(currentViewType);
}
protected class AlphaSortAction extends ToggleAction {
public AlphaSortAction() {
super(IdeBundle.message("action.sort.alphabetically"), IdeBundle.message("action.sort.alphabetically"),
AllIcons.ObjectBrowser.Sorted);
super(IdeBundle.message("action.sort.alphabetically"), IdeBundle.message("action.sort.alphabetically"), AllIcons.ObjectBrowser.Sorted);
}
@Override
@@ -525,8 +549,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
public final void setSelected(final AnActionEvent event, final boolean flag) {
HierarchyBrowserManager.getSettings(myProject).SORT_ALPHABETICALLY = flag;
final Comparator<NodeDescriptor> comparator = getComparator();
final Collection<HierarchyTreeBuilder> builders = myBuilders.values();
for (final HierarchyTreeBuilder builder : builders) {
for (final HierarchyTreeBuilder builder : getBuilders()) {
builder.setNodeDescriptorComparator(comparator);
}
}
@@ -560,7 +583,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
final PsiElement selectedElement = browser.getSelectedElement();
if (selectedElement == null || !browser.isApplicableElement(selectedElement)) return;
final String currentViewType = browser.myCurrentViewType;
final String currentViewType = browser.getCurrentViewType();
Disposer.dispose(browser);
final HierarchyProvider provider = BrowseHierarchyActionBase.findProvider(
myProviderLanguageExtension, selectedElement, selectedElement.getContainingFile(), event.getDataContext());
@@ -676,13 +699,12 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
}
private void selectScope(final String scopeType) {
myType2ScopeMap.put(myCurrentViewType, scopeType);
myType2ScopeMap.put(getCurrentViewType(), scopeType);
HierarchyBrowserManager.getSettings(myProject).SCOPE = scopeType;
// invokeLater is called to update state of button before long tree building operation
ApplicationManager.getApplication().invokeLater(() -> {
doRefresh(true); // scope is kept per type so other builders doesn't need to be refreshed
});
// scope is kept per type so other builders doesn't need to be refreshed
ApplicationManager.getApplication().invokeLater(() -> doRefresh(true));
}
@Override
@@ -717,7 +739,7 @@ public abstract class HierarchyBrowserBaseEx extends HierarchyBrowserBase implem
@Override
public void actionPerformed(AnActionEvent e) {
EditScopesDialog.showDialog(myProject, null);
if (!getValidScopeNames().contains(myType2ScopeMap.get(myCurrentViewType))) {
if (!getValidScopeNames().contains(getCurrentScopeType())) {
selectScope(SCOPE_ALL);
}
}