/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.ir.nodes; import gw.lang.reflect.IType; import gw.lang.reflect.IRelativeTypeInfo; import gw.lang.parser.IDynamicPropertySymbol; import gw.lang.ir.IRType; import gw.internal.gosu.parser.DynamicPropertySymbol; import gw.internal.gosu.parser.ParameterizedDynamicPropertySymbol; import gw.internal.gosu.parser.TypeLord; import gw.internal.gosu.ir.transform.util.AccessibilityUtil; import gw.internal.gosu.ir.transform.util.IRTypeResolver; public class IRPropertyFromDynamicPropertySymbol implements IRProperty { private DynamicPropertySymbol _dps; public IRPropertyFromDynamicPropertySymbol(DynamicPropertySymbol dps) { _dps = dps; } public DynamicPropertySymbol getDps() { return _dps; } @Override public IRType getType() { return IRTypeResolver.getDescriptor( getBoundedPropertyType( _dps ) ); } @Override public String getName() { return _dps.getName(); } @Override public boolean isField() { return false; } @Override public boolean isCaptured() { return false; } @Override public IRMethod getGetterMethod() { return new IRMethodForDPSGetter( this ); } @Override public IRMethod getSetterMethod() { return new IRMethodForDPSSetter( this ); } @Override public IRType getOwningIRType() { return IRTypeResolver.getDescriptor( _dps.getGosuClass() ); } @Override public IType getOwningIType() { return _dps.getGosuClass(); } @Override public IRelativeTypeInfo.Accessibility getAccessibility() { return AccessibilityUtil.forSymbol( _dps ); } @Override public boolean isStatic() { return _dps.isStatic(); } @Override public IRType getTargetRootIRType() { return getOwningIRType(); } @Override public boolean isBytecodeProperty() { return true; } public IType getBoundedPropertyType( IDynamicPropertySymbol dps ) { while( dps instanceof ParameterizedDynamicPropertySymbol) { ParameterizedDynamicPropertySymbol pdfs = (ParameterizedDynamicPropertySymbol)dps; dps = pdfs.getDelegate(); } return TypeLord.getDefaultParameterizedTypeWithTypeVars( dps.getType() ); } }