Fixed unnecessary FQ name bug.

#KT-1954 fixed
This commit is contained in:
Evgeny Gerashchenko
2012-05-11 19:19:52 +04:00
parent dcc6392eb4
commit 070a3729e5
3 changed files with 52 additions and 4 deletions
@@ -17,8 +17,12 @@
package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.StubBasedPsiElement;
import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -27,6 +31,7 @@ import org.jetbrains.jet.lang.psi.stubs.PsiJetClassStub;
import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -41,11 +46,10 @@ public class JetClass extends JetTypeParameterListOwner
public JetClass(@NotNull ASTNode node) {
super(node);
}
// TODO (stubs)
// public JetClass(final PsiJetClassStub stub) {
// this.stub = stub;
// }
// public JetClass(final PsiJetClassStub stub) {
// this.stub = stub;
// }
@Override
public List<JetDeclaration> getDeclarations() {
@@ -163,4 +167,35 @@ public class JetClass extends JetTypeParameterListOwner
public void delete() throws IncorrectOperationException {
JetPsiUtil.deleteClass(this);
}
@Override
public boolean isEquivalentTo(PsiElement another) {
if (super.isEquivalentTo(another)) {
return true;
}
if (another instanceof JetClass) {
String fq1 = getQualifiedName();
String fq2 = ((JetClass) another).getQualifiedName();
return fq1 != null && fq2 != null && fq1.equals(fq2);
}
return true;
}
@Nullable
private String getQualifiedName() {
List<String> parts = new ArrayList<String>();
JetClassOrObject current = this;
while (current != null) {
parts.add(current.getName());
current = PsiTreeUtil.getParentOfType(current, JetClassOrObject.class);
}
PsiFile file = getContainingFile();
if (!(file instanceof JetFile)) return null;
String fileQualifiedName = ((JetFile) file).getNamespaceHeader().getQualifiedName();
if (!fileQualifiedName.isEmpty()) {
parts.add(fileQualifiedName);
}
Collections.reverse(parts);
return StringUtil.join(parts, ".");
}
}
@@ -81,5 +81,16 @@ public class JetNamespaceHeader extends JetReferenceExpression {
public boolean isRoot() {
return getName().length() == 0;
}
public String getQualifiedName() {
StringBuilder builder = new StringBuilder();
for (JetSimpleNameExpression e : findChildrenByClass(JetSimpleNameExpression.class)) {
if (builder.length() > 0) {
builder.append(".");
}
builder.append(e.getName());
}
return builder.toString();
}
}
@@ -38,6 +38,7 @@ import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class JetParsingTest extends ParsingTestCase {
static {
@@ -88,6 +89,7 @@ public class JetParsingTest extends ParsingTestCase {
String methodName = method.getName();
if (!methodName.startsWith("get") && !methodName.startsWith("find") || methodName.equals("getReference") ||
methodName.equals("getReferences") || methodName.equals("getUseScope")) continue;
if (!Modifier.isPublic(method.getModifiers())) continue;
if (method.getParameterTypes().length > 0) continue;
Class<?> declaringClass = method.getDeclaringClass();
if (!declaringClass.getName().startsWith("org.jetbrains.jet")) continue;