/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl.statements.typedef;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import gw.lang.parser.statements.IClassStatement;
import gw.lang.reflect.IType;
import gw.lang.reflect.gs.IGosuEnhancement;
import gw.plugin.ij.icons.GosuIcons;
import gw.plugin.ij.lang.parser.GosuCompositeElement;
import gw.plugin.ij.lang.parser.GosuElementTypes;
import gw.plugin.ij.lang.psi.api.statements.typedef.IGosuEnhancementDefinition;
import gw.plugin.ij.lang.psi.impl.GosuElementVisitor;
import gw.plugin.ij.lang.psi.impl.resolvers.PsiTypeResolver;
import gw.plugin.ij.lang.psi.stubs.GosuTypeDefinitionStub;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class GosuEnhancementDefinitionImpl extends GosuTypeDefinitionImpl implements IGosuEnhancementDefinition {
public GosuEnhancementDefinitionImpl(GosuTypeDefinitionStub stub) {
super(stub, GosuElementTypes.ENHANCEMENT_DEFINITION);
}
public GosuEnhancementDefinitionImpl(GosuCompositeElement node) {
super(node);
}
@Override
public boolean isEnhancement() {
return true;
}
@Nullable
@Override
public PsiElement getEnhancedType() {
final IClassStatement parsedElement = getParsedElement();
final IType enhancedType = ((IGosuEnhancement) parsedElement.getGosuClass()).getEnhancedType();
return PsiTypeResolver.resolveType(enhancedType, this);
}
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
if( visitor instanceof GosuElementVisitor) {
((GosuElementVisitor)visitor).visitEnhancementDefinition(this);
}
else {
visitor.visitElement( this );
}
}
}