Add hasDelegate(), hasDelegateExpression() and hasInitializer() to PsiJetPropertyStub

This commit is contained in:
Pavel V. Talanov
2014-04-09 15:35:29 +04:00
parent a61ab440d7
commit 736465f1c6
3 changed files with 50 additions and 4 deletions
@@ -21,4 +21,7 @@ import org.jetbrains.jet.lang.psi.JetProperty;
public interface PsiJetPropertyStub extends PsiJetStubWithFqName<JetProperty> { public interface PsiJetPropertyStub extends PsiJetStubWithFqName<JetProperty> {
boolean isVar(); boolean isVar();
boolean isTopLevel(); boolean isTopLevel();
boolean hasDelegate();
boolean hasDelegateExpression();
boolean hasInitializer();
} }
@@ -54,8 +54,12 @@ public class JetPropertyElementType extends JetStubElementType<PsiJetPropertyStu
String.format("Should not store local property: %s, parent %s", String.format("Should not store local property: %s, parent %s",
psi.getText(), psi.getParent() != null ? psi.getParent().getText() : "<no parent>"); psi.getText(), psi.getParent() != null ? psi.getParent().getText() : "<no parent>");
return new PsiJetPropertyStubImpl(parentStub, StringRef.fromString(psi.getName()), return new PsiJetPropertyStubImpl(
psi.isVar(), psi.isTopLevel(), ResolveSessionUtils.safeFqNameForLazyResolve(psi)); parentStub, StringRef.fromString(psi.getName()),
psi.isVar(), psi.isTopLevel(), psi.hasDelegate(),
psi.hasDelegateExpression(), psi.hasInitializer(),
ResolveSessionUtils.safeFqNameForLazyResolve(psi)
);
} }
@Override @Override
@@ -63,6 +67,9 @@ public class JetPropertyElementType extends JetStubElementType<PsiJetPropertyStu
dataStream.writeName(stub.getName()); dataStream.writeName(stub.getName());
dataStream.writeBoolean(stub.isVar()); dataStream.writeBoolean(stub.isVar());
dataStream.writeBoolean(stub.isTopLevel()); dataStream.writeBoolean(stub.isTopLevel());
dataStream.writeBoolean(stub.hasDelegate());
dataStream.writeBoolean(stub.hasDelegateExpression());
dataStream.writeBoolean(stub.hasInitializer());
FqName fqName = stub.getFqName(); FqName fqName = stub.getFqName();
dataStream.writeName(fqName != null ? fqName.asString() : null); dataStream.writeName(fqName != null ? fqName.asString() : null);
@@ -74,11 +81,14 @@ public class JetPropertyElementType extends JetStubElementType<PsiJetPropertyStu
StringRef name = dataStream.readName(); StringRef name = dataStream.readName();
boolean isVar = dataStream.readBoolean(); boolean isVar = dataStream.readBoolean();
boolean isTopLevel = dataStream.readBoolean(); boolean isTopLevel = dataStream.readBoolean();
boolean hasDelegate = dataStream.readBoolean();
boolean hasDelegateExpression = dataStream.readBoolean();
boolean hasInitializer = dataStream.readBoolean();
StringRef fqNameAsString = dataStream.readName(); StringRef fqNameAsString = dataStream.readName();
FqName fqName = fqNameAsString != null ? new FqName(fqNameAsString.toString()) : null; FqName fqName = fqNameAsString != null ? new FqName(fqNameAsString.toString()) : null;
return new PsiJetPropertyStubImpl(parentStub, name, isVar, isTopLevel, fqName); return new PsiJetPropertyStubImpl(parentStub, name, isVar, isTopLevel, hasDelegate, hasDelegateExpression, hasInitializer, fqName);
} }
@Override @Override
@@ -29,18 +29,36 @@ public class PsiJetPropertyStubImpl extends StubBase<JetProperty> implements Psi
private final StringRef name; private final StringRef name;
private final boolean isVar; private final boolean isVar;
private final boolean isTopLevel; private final boolean isTopLevel;
private final boolean hasDelegate;
private final boolean hasDelegateExpression;
private final boolean hasInitializer;
private final FqName fqName; private final FqName fqName;
public PsiJetPropertyStubImpl( StubElement parent, StringRef name, boolean isVar, boolean isTopLevel, @Nullable FqName fqName) { public PsiJetPropertyStubImpl(
StubElement parent,
StringRef name,
boolean isVar,
boolean isTopLevel,
boolean hasDelegate,
boolean hasDelegateExpression,
boolean hasInitializer,
@Nullable FqName fqName
) {
super(parent, JetStubElementTypes.PROPERTY); super(parent, JetStubElementTypes.PROPERTY);
if (isTopLevel && fqName == null) { if (isTopLevel && fqName == null) {
throw new IllegalArgumentException("fqName shouldn't be null for top level properties"); throw new IllegalArgumentException("fqName shouldn't be null for top level properties");
} }
if (hasDelegateExpression && !hasDelegate) {
throw new IllegalArgumentException("Can't have delegate expression without delegate");
}
this.name = name; this.name = name;
this.isVar = isVar; this.isVar = isVar;
this.isTopLevel = isTopLevel; this.isTopLevel = isTopLevel;
this.hasDelegate = hasDelegate;
this.hasDelegateExpression = hasDelegateExpression;
this.hasInitializer = hasInitializer;
this.fqName = fqName; this.fqName = fqName;
} }
@@ -54,6 +72,21 @@ public class PsiJetPropertyStubImpl extends StubBase<JetProperty> implements Psi
return isTopLevel; return isTopLevel;
} }
@Override
public boolean hasDelegate() {
return hasDelegate;
}
@Override
public boolean hasDelegateExpression() {
return hasDelegateExpression;
}
@Override
public boolean hasInitializer() {
return hasInitializer;
}
@Nullable @Nullable
@Override @Override
public FqName getFqName() { public FqName getFqName() {