/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.lang.psi.stubs.impl; import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.stubs.StubBase; import com.intellij.psi.stubs.StubElement; import com.intellij.util.io.StringRef; import gw.plugin.ij.lang.psi.api.statements.typedef.IGosuAnonymousClassDefinition; import gw.plugin.ij.lang.psi.api.statements.typedef.IGosuTypeDefinition; import gw.plugin.ij.lang.psi.stubs.GosuTypeDefinitionStub; import org.jetbrains.annotations.NotNull; public class GosuTypeDefinitionStubImpl extends StubBase<IGosuTypeDefinition> implements GosuTypeDefinitionStub { private static final int ANONYMOUS = 0x01; private static final int INTERFACE = 0x02; private static final int ENUM = 0x04; private static final int ANNOTATION = 0x08; private static final int IS_IN_QUALIFIED_NEW = 0x10; private final StringRef myName; private final String[] mySuperClasses; private final StringRef myQualifiedName; private StringRef mySourceFileName; private final String[] myAnnotations; private final byte myFlags; public GosuTypeDefinitionStubImpl(StubElement parent, final String name, final String[] supers, final IStubElementType elementType, final String qualifiedName, String[] annotations, byte flags) { super(parent, elementType); myAnnotations = annotations; myName = StringRef.fromString(name); mySuperClasses = supers; myQualifiedName = StringRef.fromString(qualifiedName); myFlags = flags; } public String[] getSuperClassNames() { return mySuperClasses; } public String getName() { return StringRef.toString(myName); } public String[] getAnnotations() { return myAnnotations; } public String getQualifiedName() { return StringRef.toString(myQualifiedName); } public String getSourceFileName() { return StringRef.toString(mySourceFileName); } public void setSourceFileName(final StringRef sourceFileName) { mySourceFileName = sourceFileName; } public void setSourceFileName(final String sourceFileName) { mySourceFileName = StringRef.fromString(sourceFileName); } public boolean isAnnotationType() { return (myFlags & ANNOTATION) != 0; } public boolean isAnonymous() { return (myFlags & ANONYMOUS) != 0; } public boolean isAnonymousInQualifiedNew() { return (myFlags & IS_IN_QUALIFIED_NEW) != 0; } public boolean isInterface() { return (myFlags & INTERFACE) != 0; } public boolean isEnum() { return (myFlags & ENUM) != 0; } public byte getFlags() { return myFlags; } public static byte buildFlags(@NotNull IGosuTypeDefinition typeDefinition) { byte flags = 0; if (typeDefinition.isAnonymous()) { flags |= ANONYMOUS; if (((IGosuAnonymousClassDefinition) typeDefinition).isInQualifiedNew()) { flags |= IS_IN_QUALIFIED_NEW; } } if (typeDefinition.isAnnotationType()) { flags |= ANNOTATION; } if (typeDefinition.isInterface()) { flags |= INTERFACE; } if (typeDefinition.isEnum()) { flags |= ENUM; } return flags; } }