#KT-1426 Implement "Optimize Imports" in plugin - fixes for used reference search (look to calls and work with java type constructors.)

This commit is contained in:
Nikolay Krasko
2012-03-17 02:03:13 +04:00
parent 9c58e5b45c
commit 8088b770f7
4 changed files with 13 additions and 10 deletions
@@ -129,7 +129,7 @@ public class JetImportOptimizer implements ImportOptimizer {
@Override @Override
public void visitReferenceExpression(JetReferenceExpression expression) { public void visitReferenceExpression(JetReferenceExpression expression) {
if (PsiTreeUtil.getParentOfType(expression, JetQualifiedExpression.class) == null) { if (PsiTreeUtil.getParentOfType(expression, JetImportDirective.class) == null) {
PsiReference reference = expression.getReference(); PsiReference reference = expression.getReference();
if (reference != null) { if (reference != null) {
List<PsiElement> references = new ArrayList<PsiElement>(); List<PsiElement> references = new ArrayList<PsiElement>();
@@ -145,7 +145,7 @@ public class JetImportOptimizer implements ImportOptimizer {
} }
for (PsiElement psiReference : references) { for (PsiElement psiReference : references) {
FqName fqName = getElementFQName(psiReference); FqName fqName = getElementUsageFQName(psiReference);
if (fqName != null) { if (fqName != null) {
usedQualifiedNames.add(fqName); usedQualifiedNames.add(fqName);
} }
@@ -163,7 +163,7 @@ public class JetImportOptimizer implements ImportOptimizer {
@Nullable @Nullable
public static FqName getElementFQName(PsiElement element) { public static FqName getElementUsageFQName(PsiElement element) {
if (element instanceof JetClassOrObject) { if (element instanceof JetClassOrObject) {
return JetPsiUtil.getFQName((JetClassOrObject) element); return JetPsiUtil.getFQName((JetClassOrObject) element);
} }
@@ -184,6 +184,10 @@ public class JetImportOptimizer implements ImportOptimizer {
if (containingClass != null) { if (containingClass != null) {
String classFQNStr = containingClass.getQualifiedName(); String classFQNStr = containingClass.getQualifiedName();
if (classFQNStr != null) { if (classFQNStr != null) {
if (method.isConstructor()) {
return new FqName(classFQNStr);
}
FqName classFQN = new FqName(classFQNStr); FqName classFQN = new FqName(classFQNStr);
if (classFQN.shortName().equals(JvmAbi.PACKAGE_CLASS)) { if (classFQN.shortName().equals(JvmAbi.PACKAGE_CLASS)) {
return QualifiedNamesUtil.combine(classFQN.parent(), method.getName()); return QualifiedNamesUtil.combine(classFQN.parent(), method.getName());
@@ -197,6 +201,4 @@ public class JetImportOptimizer implements ImportOptimizer {
return null; return null;
} }
} }
@@ -4,10 +4,11 @@ import java.lang.StringBuilder
import java.net.HttpRetryException import java.net.HttpRetryException
import java.util.ArrayList import java.util.ArrayList
import kotlin.util.measureTimeMillis import kotlin.util.measureTimeMillis
import java.util.HashMap
class Action { class Action {
fun test() { fun test() {
measureTimeMillis({ println("Some")}) measureTimeMillis({ println(HashMap<String, Int>().size()) })
val test : ArrayList<Int>? = null val test : ArrayList<Int>? = null
} }
} }
@@ -1,9 +1,10 @@
import java.util.ArrayList import java.util.ArrayList
import java.util.HashMap
import kotlin.util.measureTimeMillis import kotlin.util.measureTimeMillis
class Action { class Action {
fun test() { fun test() {
measureTimeMillis({ println("Some")}) measureTimeMillis({ println(HashMap<String, Int>().size()) })
val test : ArrayList<Int>? = null val test : ArrayList<Int>? = null
} }
} }
@@ -98,8 +98,7 @@ public class OptimizeImportsTest extends LightCodeInsightTestCase {
private static void invokeFormatFile() { private static void invokeFormatFile() {
CommandProcessor.getInstance().executeCommand( CommandProcessor.getInstance().executeCommand(
getProject(), new JetImportOptimizer().processFile(getFile()), getProject(), new JetImportOptimizer().processFile(getFile()),
"Optimize Imports", null, UndoConfirmationPolicy.DO_NOT_REQUEST_CONFIRMATION); "Optimize Imports", null, UndoConfirmationPolicy.DO_NOT_REQUEST_CONFIRMATION);
} }
} }