Stub for annotations: write shortName instead getText

This commit is contained in:
Natalia.Ukhorskaya
2012-10-04 13:57:44 +04:00
parent 8e89cf40b7
commit a5b43cbbae
6 changed files with 45 additions and 15 deletions
@@ -20,5 +20,5 @@ import com.intellij.psi.stubs.StubElement;
import org.jetbrains.jet.lang.psi.JetAnnotationEntry; import org.jetbrains.jet.lang.psi.JetAnnotationEntry;
public interface PsiJetAnnotationStub extends StubElement<JetAnnotationEntry> { public interface PsiJetAnnotationStub extends StubElement<JetAnnotationEntry> {
String getText(); String getShortName();
} }
@@ -24,7 +24,7 @@ import com.intellij.psi.stubs.StubOutputStream;
import com.intellij.util.io.StringRef; import com.intellij.util.io.StringRef;
import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetAnnotationEntry; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.psi.stubs.PsiJetAnnotationStub; import org.jetbrains.jet.lang.psi.stubs.PsiJetAnnotationStub;
import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetAnnotationStubImpl; import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetAnnotationStubImpl;
@@ -48,12 +48,23 @@ public class JetAnnotationElementType extends JetStubElementType<PsiJetAnnotatio
@Override @Override
public PsiJetAnnotationStub createStub(@NotNull JetAnnotationEntry psi, StubElement parentStub) { public PsiJetAnnotationStub createStub(@NotNull JetAnnotationEntry psi, StubElement parentStub) {
return new PsiJetAnnotationStubImpl(parentStub, JetStubElementTypes.ANNOTATION_ENTRY, psi.getText()); JetTypeReference typeReference = psi.getTypeReference();
assert typeReference != null : "Annotation entry hasn't typeReference " + psi.getText();
JetTypeElement typeElement = typeReference.getTypeElement();
String shortName = null;
if (typeElement instanceof JetUserType) {
JetUserType userType = (JetUserType) typeElement;
shortName = userType.getReferencedName();
}
if (shortName == null) {
shortName = psi.getText();
}
return new PsiJetAnnotationStubImpl(parentStub, JetStubElementTypes.ANNOTATION_ENTRY, shortName);
} }
@Override @Override
public void serialize(PsiJetAnnotationStub stub, StubOutputStream dataStream) throws IOException { public void serialize(PsiJetAnnotationStub stub, StubOutputStream dataStream) throws IOException {
dataStream.writeName(stub.getText()); dataStream.writeName(stub.getShortName());
} }
@Override @Override
@@ -20,31 +20,32 @@ import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubBase;
import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubElement;
import com.intellij.util.io.StringRef; import com.intellij.util.io.StringRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetAnnotationEntry; import org.jetbrains.jet.lang.psi.JetAnnotationEntry;
import org.jetbrains.jet.lang.psi.stubs.PsiJetAnnotationStub; import org.jetbrains.jet.lang.psi.stubs.PsiJetAnnotationStub;
public class PsiJetAnnotationStubImpl extends StubBase<JetAnnotationEntry> implements PsiJetAnnotationStub { public class PsiJetAnnotationStubImpl extends StubBase<JetAnnotationEntry> implements PsiJetAnnotationStub {
private final StringRef text; private final StringRef shortName;
public PsiJetAnnotationStubImpl(StubElement parent, IStubElementType elementType, String text) { public PsiJetAnnotationStubImpl(StubElement parent, IStubElementType elementType, @NotNull String shortName) {
this(parent, elementType, StringRef.fromString(text)); this(parent, elementType, StringRef.fromString(shortName));
} }
public PsiJetAnnotationStubImpl(StubElement parent, IStubElementType elementType, StringRef text) { public PsiJetAnnotationStubImpl(StubElement parent, IStubElementType elementType, StringRef shortName) {
super(parent, elementType); super(parent, elementType);
this.text = text; this.shortName = shortName;
} }
@Override @Override
public String getText() { public String getShortName() {
return text.getString(); return shortName.getString();
} }
@Override @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("PsiJetAnnotationStubImpl["); builder.append("PsiJetAnnotationStubImpl[");
builder.append("text=").append(getText()); builder.append("shortName=").append(getShortName());
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }
@@ -95,6 +95,7 @@ public class KotlinAnnotatedElementsSearcher extends AnnotatedElementsSearcher {
return true; return true;
} }
/* Return all elements annotated with given annotation name. Aliases don't work now. */
private static Collection<? extends PsiElement> getJetAnnotationCandidates(final PsiClass annClass, final SearchScope useScope) { private static Collection<? extends PsiElement> getJetAnnotationCandidates(final PsiClass annClass, final SearchScope useScope) {
return ApplicationManager.getApplication().runReadAction(new Computable<Collection<? extends PsiElement>>() { return ApplicationManager.getApplication().runReadAction(new Computable<Collection<? extends PsiElement>>() {
@Override @Override
@@ -91,6 +91,6 @@ public class StubIndexServiceImpl implements StubIndexService {
@Override @Override
public void indexAnnotation(PsiJetAnnotationStub stub, IndexSink sink) { public void indexAnnotation(PsiJetAnnotationStub stub, IndexSink sink) {
sink.occurrence(JetIndexKeys.ANNOTATIONS_KEY, stub.getText()); sink.occurrence(JetIndexKeys.ANNOTATIONS_KEY, stub.getShortName());
} }
} }
@@ -168,7 +168,7 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
doBuildTest("Deprecated class Test {}", doBuildTest("Deprecated class Test {}",
"PsiJetFileStubImpl[package=]\n" + "PsiJetFileStubImpl[package=]\n" +
" CLASS:PsiJetClassStubImpl[name=Test fqn=Test superNames=[]]\n" + " CLASS:PsiJetClassStubImpl[name=Test fqn=Test superNames=[]]\n" +
" ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[text=Deprecated]\n" + " ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[shortName=Deprecated]\n" +
" TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n"); " TYPE_PARAMETER_LIST:PsiJetTypeParameterListStubImpl\n");
} }
@@ -176,7 +176,24 @@ public class JetStubsTest extends LightCodeInsightFixtureTestCase {
doBuildTest("Deprecated fun foo() {}", doBuildTest("Deprecated fun foo() {}",
"PsiJetFileStubImpl[package=]\n" + "PsiJetFileStubImpl[package=]\n" +
" FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" + " FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" +
" ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[text=Deprecated]\n" + " ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[shortName=Deprecated]\n" +
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
}
public void testQualifiedAnnotationOnFunction() {
doBuildTest("java.lang.Deprecated fun foo() {}",
"PsiJetFileStubImpl[package=]\n" +
" FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" +
" ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[shortName=Deprecated]\n" +
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
}
public void testManyAnnotationsOnFunction() {
doBuildTest("[Deprecated Override] fun foo() {}",
"PsiJetFileStubImpl[package=]\n" +
" FUN:PsiJetFunctionStubImpl[top topFQName=foo name=foo]\n" +
" ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[shortName=Deprecated]\n" +
" ANNOTATION_ENTRY:PsiJetAnnotationStubImpl[shortName=Override]\n" +
" VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n"); " VALUE_PARAMETER_LIST:PsiJetParameterListStubImpl\n");
} }