Icon for file is class icon iff it has the only class declaration, and the name is the same as the file.

This commit is contained in:
Evgeny Gerashchenko
2012-05-04 19:39:55 +04:00
parent cd2783eac8
commit f1ff0c68d5
@@ -17,11 +17,14 @@
package org.jetbrains.jet.plugin; package org.jetbrains.jet.plugin;
import com.intellij.ide.IconProvider; import com.intellij.ide.IconProvider;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Iconable; import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.PlatformIcons; import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.FilteringIterator;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.lexer.JetTokens;
@@ -40,23 +43,17 @@ public class JetIconProvider extends IconProvider {
public Icon getIcon(@NotNull PsiElement psiElement, int flags) { public Icon getIcon(@NotNull PsiElement psiElement, int flags) {
if (psiElement instanceof JetFile) { if (psiElement instanceof JetFile) {
JetFile file = (JetFile) psiElement; JetFile file = (JetFile) psiElement;
List<JetDeclaration> declarations = file.getDeclarations(); List<JetDeclaration> classes = ContainerUtil.filter(file.getDeclarations(), new Condition<JetDeclaration>() {
JetClassOrObject mostImportantClass = null; @Override
String nameWithoutExtension = StringUtil.getPackageName(file.getName()); public boolean value(JetDeclaration jetDeclaration) {
for (JetDeclaration declaration : declarations) { return jetDeclaration instanceof JetClassOrObject;
if (mostImportantClass == null && declaration instanceof JetClassOrObject) {
mostImportantClass = (JetClassOrObject) declaration;
} }
else if (declaration instanceof JetClassOrObject) { });
JetClassOrObject object = (JetClassOrObject) declaration; if (classes.size() == 1) {
if (nameWithoutExtension.equals(object.getName())) { if (StringUtil.getPackageName(file.getName()).equals(classes.get(0).getName())) {
mostImportantClass = object; return getIcon(classes.get(0), flags);
}
} }
} }
if (mostImportantClass != null) {
return getIcon(mostImportantClass, flags);
}
return JetIcons.FILE; return JetIcons.FILE;
} }
if (psiElement instanceof JetNamespaceHeader) { if (psiElement instanceof JetNamespaceHeader) {