/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.parser.expressions; import gw.internal.gosu.parser.Expression; import gw.internal.gosu.parser.IGosuClassInternal; import gw.internal.gosu.parser.statements.ClassStatement; import gw.lang.parser.statements.IClassDeclaration; public class ClassDeclaration extends Expression implements IClassDeclaration { private final CharSequence _className; private IGosuClassInternal _gsClass; public ClassDeclaration( CharSequence className ) { _className = className instanceof String ? ((String)className).intern() : className; } public CharSequence getClassName() { return _className; } @Override public String getName() { return getClassName().toString(); } public Object evaluate() { return null; // Nothing to do } @Override public String toString() { return getClassName().toString(); } @Override public int getNameOffset( String identifierName ) { return getLocation().getOffset(); } @Override public void setNameOffset( int iOffset, String identifierName ) { throw new UnsupportedOperationException(); } public String[] getDeclarations() { IGosuClassInternal gsClass = getGSClass(); return new String[] {gsClass.getRelativeName()}; } public boolean declares( String identifierName ) { IGosuClassInternal gsClass = getGSClass(); return identifierName != null && (identifierName.equals( gsClass.getName() ) || identifierName.equals( gsClass.getRelativeName() )); } public IGosuClassInternal getGSClass() { if (_gsClass == null) { if (!(getParent() instanceof ClassStatement)) { throw new RuntimeException("Class declaration's parent must be ClassStatement but was " + getParent()); } _gsClass = ((ClassStatement) getParent()).getGosuClass(); } return _gsClass; } }