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> {
boolean isVar();
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",
psi.getText(), psi.getParent() != null ? psi.getParent().getText() : "<no parent>");
return new PsiJetPropertyStubImpl(parentStub, StringRef.fromString(psi.getName()),
psi.isVar(), psi.isTopLevel(), ResolveSessionUtils.safeFqNameForLazyResolve(psi));
return new PsiJetPropertyStubImpl(
parentStub, StringRef.fromString(psi.getName()),
psi.isVar(), psi.isTopLevel(), psi.hasDelegate(),
psi.hasDelegateExpression(), psi.hasInitializer(),
ResolveSessionUtils.safeFqNameForLazyResolve(psi)
);
}
@Override
@@ -63,6 +67,9 @@ public class JetPropertyElementType extends JetStubElementType<PsiJetPropertyStu
dataStream.writeName(stub.getName());
dataStream.writeBoolean(stub.isVar());
dataStream.writeBoolean(stub.isTopLevel());
dataStream.writeBoolean(stub.hasDelegate());
dataStream.writeBoolean(stub.hasDelegateExpression());
dataStream.writeBoolean(stub.hasInitializer());
FqName fqName = stub.getFqName();
dataStream.writeName(fqName != null ? fqName.asString() : null);
@@ -74,11 +81,14 @@ public class JetPropertyElementType extends JetStubElementType<PsiJetPropertyStu
StringRef name = dataStream.readName();
boolean isVar = dataStream.readBoolean();
boolean isTopLevel = dataStream.readBoolean();
boolean hasDelegate = dataStream.readBoolean();
boolean hasDelegateExpression = dataStream.readBoolean();
boolean hasInitializer = dataStream.readBoolean();
StringRef fqNameAsString = dataStream.readName();
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
@@ -29,18 +29,36 @@ public class PsiJetPropertyStubImpl extends StubBase<JetProperty> implements Psi
private final StringRef name;
private final boolean isVar;
private final boolean isTopLevel;
private final boolean hasDelegate;
private final boolean hasDelegateExpression;
private final boolean hasInitializer;
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);
if (isTopLevel && fqName == null) {
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.isVar = isVar;
this.isTopLevel = isTopLevel;
this.hasDelegate = hasDelegate;
this.hasDelegateExpression = hasDelegateExpression;
this.hasInitializer = hasInitializer;
this.fqName = fqName;
}
@@ -54,6 +72,21 @@ public class PsiJetPropertyStubImpl extends StubBase<JetProperty> implements Psi
return isTopLevel;
}
@Override
public boolean hasDelegate() {
return hasDelegate;
}
@Override
public boolean hasDelegateExpression() {
return hasDelegateExpression;
}
@Override
public boolean hasInitializer() {
return hasInitializer;
}
@Nullable
@Override
public FqName getFqName() {