/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.stubs.elements;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.stubs.StubElement;
import gw.lang.parser.statements.IClassStatement;
import gw.plugin.ij.filetypes.GosuProgramFileProvider;
import gw.plugin.ij.lang.parser.GosuCompositeElement;
import gw.plugin.ij.lang.parser.GosuSyntheticCompositeElement;
import gw.plugin.ij.lang.psi.api.statements.typedef.IGosuClassDefinition;
import gw.plugin.ij.lang.psi.impl.statements.typedef.GosuClassDefinitionImpl;
import gw.plugin.ij.lang.psi.impl.statements.typedef.GosuSyntheticClassDefinitionImpl;
import gw.plugin.ij.lang.psi.stubs.GosuFileStub;
import gw.plugin.ij.lang.psi.stubs.GosuTypeDefinitionStub;
import org.jetbrains.annotations.NotNull;
public class GosuClassDefinitionElementType extends GosuTypeDefinitionElementType<IGosuClassDefinition> {
public GosuClassDefinitionElementType() {
super("class definition", IClassStatement.class);
}
@NotNull
public IGosuClassDefinition createPsi(@NotNull GosuTypeDefinitionStub stub) {
final StubElement parentStub = stub.getParentStub();
if (parentStub instanceof GosuFileStub &&
((GosuFileStub) parentStub).getExt().getString().equalsIgnoreCase('.' + GosuProgramFileProvider.EXT_PROGRAM)) {
return new GosuSyntheticClassDefinitionImpl(stub);
}
return new GosuClassDefinitionImpl(stub);
}
@NotNull
public PsiElement createElement(ASTNode node) {
if (node instanceof GosuSyntheticCompositeElement) {
return new GosuSyntheticClassDefinitionImpl((GosuSyntheticCompositeElement) node);
}
return new GosuClassDefinitionImpl((GosuCompositeElement) node);
}
}