Index for top level objects

This commit is contained in:
Nikolay Krasko
2012-11-08 20:58:03 +04:00
parent 5cf708d056
commit cb602496e3
10 changed files with 87 additions and 12 deletions
@@ -75,6 +75,15 @@ public class JetObjectDeclaration extends JetNamedDeclarationStub<PsiJetObjectSt
return JetPsiUtil.getFQName(this);
}
public boolean isTopLevel() {
PsiJetObjectStub stub = getStub();
if (stub != null) {
return stub.isTopLevel();
}
return getParent() instanceof JetFile;
}
@Override
public PsiElement getNameIdentifier() {
JetObjectDeclarationName nameAsDeclaration = getNameAsDeclaration();
@@ -27,4 +27,5 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
public interface PsiJetObjectStub extends NamedStub<JetObjectDeclaration> {
@Nullable
FqName getFQName();
boolean isTopLevel();
}
@@ -38,7 +38,7 @@ import java.io.IOException;
* @author Nikolay Krasko
*/
public class JetFileElementType extends IStubFileElementType<PsiJetFileStub> {
public static final int STUB_VERSION = 17;
public static final int STUB_VERSION = 18;
public JetFileElementType() {
super("jet.FILE", JetLanguage.INSTANCE);
@@ -69,7 +69,7 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
assert name != null;
FqName fqName = psi.getFqName();
return new PsiJetObjectStubImpl(JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName);
return new PsiJetObjectStubImpl(JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName, psi.isTopLevel());
}
@Override
@@ -77,6 +77,7 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
dataStream.writeName(stub.getName());
FqName fqName = stub.getFQName();
dataStream.writeName(fqName != null ? fqName.toString() : null);
dataStream.writeBoolean(stub.isTopLevel());
}
@Override
@@ -84,8 +85,9 @@ public class JetObjectElementType extends JetStubElementType<PsiJetObjectStub, J
StringRef name = dataStream.readName();
StringRef fqNameStr = dataStream.readName();
FqName fqName = fqNameStr != null ? new FqName(fqNameStr.toString()) : null;
boolean isTopLevel = dataStream.readBoolean();
return new PsiJetObjectStubImpl(JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName);
return new PsiJetObjectStubImpl(JetStubElementTypes.OBJECT_DECLARATION, parentStub, name, fqName, isTopLevel);
}
@Override
@@ -32,24 +32,28 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> implements PsiJetObjectStub {
private final StringRef name;
private final FqName fqName;
private final boolean isTopLevel;
public PsiJetObjectStubImpl(
@NotNull IStubElementType elementType,
@NotNull StubElement parent,
@NotNull String name,
@Nullable FqName fqName) {
this(elementType, parent, StringRef.fromString(name), fqName);
@Nullable FqName fqName,
boolean isTopLevel) {
this(elementType, parent, StringRef.fromString(name), fqName, isTopLevel);
}
public PsiJetObjectStubImpl(
@NotNull IStubElementType elementType,
@NotNull StubElement parent,
@NotNull StringRef name,
@Nullable FqName fqName) {
@Nullable FqName fqName,
boolean isTopLevel) {
super(parent, elementType);
this.name = name;
this.fqName = fqName;
this.isTopLevel = isTopLevel;
}
@Override
@@ -63,13 +67,22 @@ public class PsiJetObjectStubImpl extends StubBase<JetObjectDeclaration> impleme
return fqName;
}
@Override
public boolean isTopLevel() {
return isTopLevel;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("PsiJetObjectStubImpl[");
builder.append("name=").append(getName());
if (isTopLevel) {
builder.append("top ");
}
builder.append("name=").append(getName());
builder.append(" fqName=").append(fqName != null ? fqName.toString() : "null");
builder.append("]");