public PropertyInfoBuilder like( IPropertyInfo prop ) { _isStatic = prop.isStatic(); _name = prop.getName(); _accessor = prop.getAccessor(); _readable = prop.isReadable(); _writable = prop.isWritable(); _type = prop.getFeatureType(); _description = prop.getDescription(); if ( prop.isDeprecated() ) { _deprecated = prop.getDeprecatedReason() == null ? "" : prop.getDeprecatedReason(); } else { _deprecated = null; } _annotations = prop.getAnnotations(); // todo dlank - any need to step through annotations and recreate 1-by-1? _locationInfo = prop.getLocationInfo(); return this; }
public IType getOwnersType() { return _delegate.getOwnersType(); }
public String getDisplayName() { return _source.getDisplayName(); }
private boolean notAnInternalOrPrivateField( IPropertyInfo existingPropInfo ) { // Allow shadowing of protected or private fields on Java classes return !(existingPropInfo instanceof JavaFieldPropertyInfo) || (existingPropInfo.isPublic() || existingPropInfo.isProtected()); }
@Override public List<IType> getFullArgTypes() { ArrayList<IType> lst = new ArrayList<IType>(); if (!_pi.isStatic()) { lst.add(_pi.getOwnersType()); } return lst; }
typeInfo.getProperties(); for (IPropertyInfo property : sort(properties, PROPERTY_COMPARATOR)) { if (!property.isPrivate()) { if (property.getName() != null) { fp.extend(property.getName()); featureType = property.getFeatureType(); fp.extend(Boolean.toString(property.isReadable())); fp.extend(Boolean.toString(property.isWritable())); fp.extend(Boolean.toString(property.isPublic())); fp.extend(Boolean.toString(property.isPrivate())); fp.extend(Boolean.toString(property.isProtected())); fp.extend(Boolean.toString(property.isInternal())); fp.extend(Boolean.toString(property.isFinal())); fp.extend(Boolean.toString(property.isStatic())); fp.extend(Boolean.toString(property.isHidden()));
private static void genInterfacePropertyDecl( StringBuilder sb, IPropertyInfo pi, IType rootType ) { if( pi.isStatic() ) { return; if( !pi.isReadable() ) { return; if( pi.getOwnersType() instanceof IGosuEnhancement ) { return; if( pi.getOwnersType() == JavaTypes.IGOSU_OBJECT().getAdapterClass() ) { return; IType ifacePropertyType = TypeLord.getPureGenericType( TypeLord.getDefaultParameterizedType( pi.getFeatureType() ) ); if( pi.getDescription() != null ) { sb.append( "\n/** " ).append( pi.getDescription() ).append( " */\n" ); boolean bPrivate = rootTypeInfo instanceof IRelativeTypeInfo && ((IRelativeTypeInfo) rootTypeInfo).getProperty( rootType, pi.getName() ).isPrivate(); sb.append( " property get " ).append( pi.getName() ).append( "() : " ).append( ifacePropertyType.getName() ).append( " {\n" ); if( bPrivate ) { sb.append( " return _root[\"" ).append( pi.getName() ).append( "\"] as " ).append( ifacePropertyType.getName() ).append( "\n" ); sb.append( " return _root." ).append( pi.getName() ).append( " as " ).append( ifacePropertyType.getName() ).append( "\n" ); if( pi.isWritable( pi.getOwnersType() ) ) { sb.append( " property set " ).append( pi.getName() ).append( "( value: " ).append( ifacePropertyType.getName() ).append( " ) {\n" ); if( bPrivate ) { sb.append( " _root[\"" ).append( pi.getName() ).append( "\"] = value" ).append( maybeCastPropertyAssignment( pi, rootType ) ); sb.append( " _root." ).append( pi.getName() ).append( " = value" ).append( maybeCastPropertyAssignment( pi, rootType ) );
private void genInterfacePropertyDecl( StringBuilder sb, IPropertyInfo pi ) { if( pi.isStatic() ) { genStaticProperty( pi, sb ); return; } if( !pi.isReadable() ) { return; } if( !(pi instanceof JavaBaseFeatureInfo) ) { // It is possible that a methodinfo on a java type originates outside of java. // E.g., enhancement methods. Gosu does not support extending these. return; } IType type = getGenericType( pi ); if( pi.getDescription() != null ) { sb.append( "\n/** " ).append( pi.getDescription() ).append( " */\n" ); } sb.append( " property get " ).append( pi.getName() ).append( "() : " ).append( type.getName() ).append( "\n" ); if( pi.isWritable( pi.getOwnersType() ) ) { sb.append( " property set " ).append( pi.getName() ).append( "( _proxy_arg_value : " ).append( type.getName() ).append( " )\n" ); } }
protected Map<String,IPropertyInfo> getProperties(IType type) { Map<String, IPropertyInfo> rtn = new TreeMap<String,IPropertyInfo>(); ITypeInfo typeInfo = type.getTypeInfo(); if (typeInfo instanceof IRelativeTypeInfo) { IRelativeTypeInfo pogoTI = ((IRelativeTypeInfo) typeInfo); for (IPropertyInfo property : pogoTI.getDeclaredProperties()) { if (property.isPublic() && property.isWritable() && property.isReadable()) { rtn.put(property.getName(), property); } } } return rtn; }
if( pi.isPrivate() ) else if( pi.isInternal() ) else if( pi.isProtected() ) if( pi.isDeprecated() )
private static void maybePushEnumTypes(ISymbolTable symbolTable, IType returnType) { if( !returnType.isEnum() ) { return; } for(IPropertyInfo pi : returnType.getTypeInfo().getProperties() ) { if( pi.isStatic() && pi.isPublic() ) { symbolTable.putSymbol( new Symbol(pi.getName(), pi.getFeatureType(), null) ); } } }
private IMethodInfo getPropertyGetMethod( IPropertyInfo pi, IJavaType ownerType ) { JavaTypeInfo ti; if( !(pi.getOwnersType() instanceof IJavaType) ) { return null; } if( ownerType.getTypeInfo() instanceof JavaTypeInfo ) { ti = (JavaTypeInfo)ownerType.getTypeInfo(); } else { throw new IllegalArgumentException( ownerType + " is not a recognized Java type" ); } IType propType = pi.getFeatureType(); String strAccessor = "get" + pi.getDisplayName(); IMethodInfo mi = ti.getMethod( ownerType, strAccessor ); if( mi == null ) { strAccessor = "is" + pi.getDisplayName(); mi = ti.getMethod( ownerType, strAccessor ); } if( mi != null && mi.getReturnType().equals( propType ) ) { return mi; } return null; }
public void addAllEnhancementPropsForType(IType typeToGetEnhancementsFor, boolean caseSensitive) { List<IGosuEnhancementInternal> enhancements = getEnhancementsForType( typeToGetEnhancementsFor ); for( IGosuEnhancementInternal type : enhancements ) { GosuClassTypeInfo typeInfo = getTypeInfoForType( typeToGetEnhancementsFor, type ); List<? extends IPropertyInfo> props = typeInfo.getDeclaredProperties(); for( IPropertyInfo enhancementPropertyInfo : props ) { if( typeToGetEnhancementsFor.isArray() || (!enhancementPropertyInfo.isPrivate() && (!enhancementPropertyInfo.isInternal() || type.getNamespace().equals( typeToGetEnhancementsFor.getNamespace() ))) ) { IPropertyInfo existingPropInfo = _propertyInfosToAddTo.get(convertCharSequenceToCorrectSensitivity(enhancementPropertyInfo.getName(), caseSensitive) ); //if a property exists that is not associated with this if( existingPropInfo != null && !GosuObjectUtil.equals( existingPropInfo.getContainer(), enhancementPropertyInfo.getContainer() ) && notAnInternalOrPrivateField( existingPropInfo ) ) { } else { _propertyInfosToAddTo.put( convertCharSequenceToCorrectSensitivity(enhancementPropertyInfo.getName(), caseSensitive), enhancementPropertyInfo ); } } } } }
@Override public IPropertyInfo getProperty(CharSequence propName) { for (IPropertyInfo prop : properties) { if (propName.equals(prop.getName())) { return prop; } } return null; }
protected void mergeProperty(PropertyNameMap<T> props, IPropertyInfo propertyInfo, boolean replace) { boolean prependPrefix = _superPropertyPrefix != null && ! propertyInfo.getOwnersType().equals( _typeInfo.getOwnersType() ); T cs = convertCharSequenceToCorrectSensitivity( prependPrefix ? ( _superPropertyPrefix + propertyInfo.getName() ) : propertyInfo.getName() ); if ( replace || shouldReplace( props, cs, propertyInfo ) ) { if ( prependPrefix ) { props.put( cs, new PropertyInfoDelegate( propertyInfo.getContainer(), propertyInfo, cs.toString() ) ); } else { props.put(cs, propertyInfo); } } }
private void checkMemberAccessIsReadable() { Expression expr = peekExpression(); if( expr instanceof MemberAccess ) { IPropertyInfo pi = ((MemberAccess)expr).getPropertyInfoWithoutThrowing(); if( pi != null ) { verify( expr, pi.isReadable( getGosuClass() ), Res.MSG_CLASS_PROPERTY_NOT_READABLE, pi.getName(), pi.getOwnersType().getName() ); } } else if( (expr instanceof Identifier && ((Identifier)expr).getSymbol() instanceof DynamicPropertySymbol) ) { DynamicPropertySymbol dps = (DynamicPropertySymbol)((Identifier)expr).getSymbol(); if( dps != null && dps.getPropertyInfo() != null && !dps.getPropertyInfo().isReadable( getGosuClass() ) ) { verify( expr, false, Res.MSG_CLASS_PROPERTY_NOT_READABLE, dps.getName(), dps.getScriptPart() == null ? "" : dps.getScriptPart().getContainingType().getName() ); } } }
public int compare(IPropertyInfo property1, IPropertyInfo property2) { int res = nullSafeCompare(property1.getName(), property2.getName()); if (res != 0) { return res; } res = nullSafeCompare(property1.getFeatureType().getName(), property2.getFeatureType().getName()); return res; } };
protected static String deriveDescription(IPropertyInfo propertyInfo) { IType intrinsicType = propertyInfo.getOwnersType(); String description; try { ResourceBundle resourceBundle = ResourceBundle.getBundle( intrinsicType.getName(), Locale.getDefault(), TypeSystem.getGosuClassLoader().getActualLoader() ); description = resourceBundle.getString(propertyInfo.getName()); } catch (MissingResourceException e) { description = propertyInfo.getDescription(); } return description == null ? "" : description.replaceAll("\n", " "); }
private IRExpression autoCreateEntityValue(IPropertyInfo pi, IRSymbol rootSymbol) { return checkCast( _expr().getType(), callStaticMethod(MemberAccessTransformer.class, "autoCreateEntityInstance", new Class[]{Object.class, String.class, String.class}, exprList( identifier( rootSymbol ), pushConstant(pi.getOwnersType().getName()), pushConstant(pi.getName())) ) ); }
static IPropertyInfo findRootPropertyInfo( IPropertyInfo pi ) { while( pi instanceof PropertyInfoDelegate ) { pi = ((PropertyInfoDelegate)pi).getSource(); } IType ownersType = pi.getOwnersType(); pi = findRootPropertyInfo( ownersType, pi ); ownersType = pi.getOwnersType(); IType genType = getGenericType( ownersType ); if( genType != ownersType ) { ITypeInfo ti = genType.getTypeInfo(); if( ti instanceof IRelativeTypeInfo ) { pi = ((IRelativeTypeInfo)ti).getProperty( genType, pi.getDisplayName() ); } else { pi = ti.getProperty( pi.getDisplayName() ); } } return pi; }