Package sc.lang.java

Class BodyTypeDeclaration

    • Field Detail

      • INNER_STUB_SEPARATOR

        public static final java.lang.String INNER_STUB_SEPARATOR
        See Also:
        Constant Field Values
      • typeName

        public java.lang.String typeName
      • layer

        public transient Layer layer
      • changedMethods

        public transient java.util.TreeSet<java.lang.String> changedMethods
        Names of changed methods from the previous types if this type has been updated at runtime
      • membersByName

        public transient java.util.Map<java.lang.String,​java.util.List<Statement>> membersByName
        Cached of the members
      • methodsByName

        public transient java.util.TreeMap<java.lang.String,​java.util.List<Statement>> methodsByName
        Cached of the methods
      • replaced

        public transient boolean replaced
      • removed

        public transient boolean removed
      • replacedInactive

        public transient boolean replacedInactive
      • excludedStub

        public transient TypeDeclaration excludedStub
        For an excluded type, a framework can designate a 'stub type' to replace an excluded type for a given runtime. In that case, this stores the excludedStub type. It's included in the list of children and generated according to the needs of the framework. For SCHTML, we generate a node with the parentNode and id properties set by which is marked as serverContent with no children so we stitch in the server content with the client content.
      • isExcludedStub

        public transient boolean isExcludedStub
      • dynamicType

        public transient boolean dynamicType
        Set to true for types which are modified dynamically. Either because they have the dynamic keyword or because they're in or modified by a dynamic layer
      • dynamicNew

        public transient boolean dynamicNew
        If we only set properties in a dynamic type which extends a compiled type, we mark the type as "dynamicNew" - no stub is created. When constructing it, we treat it as a dynamic type which then creates an instance of the compiled class and sets properties
      • compiledOnly

        public transient boolean compiledOnly
        Set to true if this type is not to be made dynamic even if in a dynamic layer
      • propertiesToMakeBindable

        public transient java.util.TreeMap<java.lang.String,​java.lang.Boolean> propertiesToMakeBindable
        List of properties not defined in this class which need to have bindability or get/setters generated for them by this class because of how this class is used. It is a Tree so the order maintained is consistent even if the list is built up in a different order
      • propertiesAlreadyBindable

        public transient java.util.ArrayList<java.lang.String> propertiesAlreadyBindable
        List of properties with @Bindable(manual=true) - we need to at least compile in some annotations for these properties so we don't spit out warnings when mixing the compiled code with the dynamic runtime.
      • dynInvokeMethods

        public transient java.util.TreeMap<java.lang.String,​java.lang.Object> dynInvokeMethods
        List of property names marked @Constant but which can't be annotated directly cause there's no generated getX, setX, or field. These would primarily be put on external dyn types for the case when we annotate a compiled class to mark a property as constant.
      • isLayerType

        public transient boolean isLayerType
      • typeInfoCompleted

        public transient boolean typeInfoCompleted
      • instFields

        public transient java.lang.Object[] instFields
        Stores the current (and old/previous) mapping from slot to field+obj defs managed in the dynamic model
      • oldInstFields

        public transient java.lang.Object[] oldInstFields
        Stores the current (and old/previous) mapping from slot to field+obj defs managed in the dynamic model
      • staticFields

        public transient java.lang.Object[] staticFields
      • oldStaticFields

        public transient java.lang.Object[] oldStaticFields
      • scopeInterfaces

        public transient java.lang.Object[] scopeInterfaces
        List of hidden interfaces, added automatically by the scope tag
      • staticValues

        public transient java.lang.Object[] staticValues
      • oldStaticValues

        public transient java.lang.Object[] oldStaticValues
      • needsCompiledClass

        public transient boolean needsCompiledClass
        Set to true via CompilerSettings or when there's an explicit .class reference to force the generation of a dynamic stub for this class. It's different than compiledOnly which forces the class to be a normal compiled class. For needCompiledClass dynamic types, we generate the constructors that mirror the original class hardcoding the type
      • needsDynamicStub

        public transient boolean needsDynamicStub
        True if a method overrides a compiled method - forcing a stub in cases where one is not usually needed. Not to be confused with needsDynType - used when reflection is diabled and we need to generate dynType info for a compiled class (i.e. GWT)
      • needsOwnClass

        public transient boolean needsOwnClass
        Set to true for a compiled object type which cannot be optimized away due to an external dependency, such as a class reference or instanceof operation
      • allowDynamic

        public transient boolean allowDynamic
        For processing template types, we want to create a dynamic type even if the class is marked compiled
      • fullTypeName

        public transient java.lang.String fullTypeName
        Cached the getFullTypeName property
      • needsDynInnerStub

        public transient boolean needsDynInnerStub
        When we extend a compiled inner class from a dynamic type, we need to generate inner stub types in the dynamic stub of the parent type. this preserves the outer/inner relationship in the dynamic type. We cannot extend an inner type from a top level type. java requires that the inner type be extended from within the type hierarchy (for instance types). But if we use the inner/outer relationship all of the time, it means regenerating a new outer class every time we add a new inner object. So we only use inner types in the stub when we extend a compiled outer/inner combo. This flag gets set to true on the inner class if a type which extends some compiled inner type.
      • stubCompiled

        public transient boolean stubCompiled
      • stubGenerated

        public transient boolean stubGenerated
      • needsDynAccess

        public transient boolean needsDynAccess
        Do we access this object type at runtime, i.e. through a binding
      • objectSetProperty

        public transient boolean objectSetProperty
        True when this object overrides an existing property defined by getX, setX methods.
      • needsDynDefaultConstructor

        public transient boolean needsDynDefaultConstructor
        Does code require the default constructor to be dynamic
      • extendsInvalid

        public transient boolean extendsInvalid
      • extendsOverridden

        public transient boolean extendsOverridden
      • innerObjs

        protected transient TypeDeclaration[] innerObjs
        The list of inner types for this type only. Because we may remove these during transformation, we need to grab a copy up front so the type system doesn't change after transform
      • prevCompiledExtends

        public transient java.lang.Object prevCompiledExtends
        When updating the type, we may have removed a previous compiled extends class from this type. Keep track of that class so we can properly detect stale runtimes when someone tries to update this type again with a different compiled class
      • staleClassName

        public transient java.lang.String staleClassName
        In the event we modify a compiled type which was an omitted object type, we need to freeze the compiled class name at the one which was actually compiled. We could lazily cache the compiledClassName but maybe it will change during start/validate so we'd have to cache it the first time after we've compiled the system. Instead, we cache it the first time we see that we're stale
      • memberCacheEnabled

        protected transient boolean memberCacheEnabled
      • version

        protected transient int version
      • cachedNeedsSync

        protected transient java.lang.Boolean cachedNeedsSync
      • dependentTypes

        public transient java.util.Set<java.lang.Object> dependentTypes
      • transformedType

        public transient BodyTypeDeclaration transformedType
        Contains the version of the type which we transformed.
      • autoComponent

        public transient java.lang.Boolean autoComponent
        Caches whether we have the @Constant annotation to avoid the getInheritedAnnotation call
      • syncProperties

        public transient java.util.ArrayList<SyncProperties> syncProperties
      • syncPropertiesInited

        protected transient boolean syncPropertiesInited
      • dbTypeDescriptorInited

        protected transient boolean dbTypeDescriptorInited
      • hasBeenStopped

        public transient boolean hasBeenStopped
      • temporaryType

        public transient boolean temporaryType
      • liveDynType

        public transient boolean liveDynType
        Set to true for types manipulated in the command line, so we know to make them live-dynamic types by default
      • EMPTY_COMPILER_SETTINGS

        public static java.util.List<java.lang.Object> EMPTY_COMPILER_SETTINGS
      • compilerSettingsList

        public transient java.util.List<java.lang.Object> compilerSettingsList
      • dynObjectSignature

        public static final java.lang.String dynObjectSignature
      • altDynObjectSignature

        public static final java.lang.String altDynObjectSignature
    • Constructor Detail

      • BodyTypeDeclaration

        public BodyTypeDeclaration()
    • Method Detail

      • getCompilerSettingsList

        public java.util.List<java.lang.Object> getCompilerSettingsList()
      • getInheritProperties

        public boolean getInheritProperties()
      • getExportProperties

        public boolean getExportProperties()
      • getPropagateConstructorArgs

        public java.lang.Object[] getPropagateConstructorArgs()
      • setLayer

        public void setLayer​(Layer lt)
      • switchLayers

        public void switchLayers​(Layer lt)
      • getDeclarationTypeNoInit

        public DeclarationType getDeclarationTypeNoInit()
      • setDeclarationType

        public void setDeclarationType​(DeclarationType dt)
      • getDerivedTypeDeclaration

        public java.lang.Object getDerivedTypeDeclaration()
        Description copied from interface: ITypeDeclaration
        Used to retrieve the type which either a class or modify type is derived from. For a class it's the extends type. For a modify type, it's the modified type
        Specified by:
        getDerivedTypeDeclaration in interface ITypeDeclaration
      • updateBoundExtendsType

        protected void updateBoundExtendsType​(java.lang.Object newType)
      • updateBoundExtendsType

        protected void updateBoundExtendsType​(java.lang.Object newType,
                                              java.lang.Object oldType)
      • getDerivedTypeName

        public java.lang.String getDerivedTypeName()
      • declaresMemberInternal

        public java.lang.Object declaresMemberInternal​(java.lang.String name,
                                                       java.util.EnumSet<JavaSemanticNode.MemberType> mtype,
                                                       java.lang.Object refType,
                                                       TypeContext ctx)
      • conflictsWith

        public boolean conflictsWith​(Statement other,
                                     java.lang.String memberName)
        Description copied from class: Statement
        Does this statement conflict with another statement in the same list with this member name. Because fields can define more than one variable, (and variableDefinitions are not Statements) we need to report conflicts on a name-by-name basis.
        Overrides:
        conflictsWith in class Statement
      • definesPreviousMember

        public java.lang.Object definesPreviousMember​(java.lang.String name,
                                                      java.util.EnumSet<JavaSemanticNode.MemberType> mtype,
                                                      java.lang.Object refType,
                                                      TypeContext ctx,
                                                      boolean skipIfaces,
                                                      boolean isTransformed)
      • definesMemberCached

        public java.lang.Object definesMemberCached​(java.lang.String name,
                                                    java.util.EnumSet<JavaSemanticNode.MemberType> mtype,
                                                    java.lang.Object refType,
                                                    TypeContext ctx,
                                                    boolean skipIfaces,
                                                    boolean isTransformed)
      • bodyChanged

        protected void bodyChanged()
      • modelChanged

        protected void modelChanged()
      • clearCachedMemberInfo

        public void clearCachedMemberInfo()
      • incrVersion

        protected void incrVersion()
      • incrSubTypeVersions

        protected void incrSubTypeVersions()
      • initMemberCache

        protected void initMemberCache()
      • definesMemberInternal

        public java.lang.Object definesMemberInternal​(java.lang.String name,
                                                      java.util.EnumSet<JavaSemanticNode.MemberType> mtype,
                                                      java.lang.Object refType,
                                                      TypeContext ctx,
                                                      boolean skipIfaces,
                                                      boolean isTransformed)
      • findMethod

        public java.lang.Object findMethod​(java.lang.String name,
                                           java.util.List<? extends java.lang.Object> params,
                                           java.lang.Object fromChild,
                                           java.lang.Object refType,
                                           boolean staticOnly,
                                           java.lang.Object inferredType)
        Overrides:
        findMethod in class JavaSemanticNode
      • findMethodInBody

        public static java.lang.Object findMethodInBody​(java.util.List<Statement> body,
                                                        java.lang.String name,
                                                        java.util.List<? extends java.lang.Object> types,
                                                        ITypeParamContext ctx,
                                                        java.lang.Object refType,
                                                        boolean staticOnly,
                                                        java.lang.Object inferredType,
                                                        java.util.List<JavaType> methodTypeArgs)
      • declaresMethod

        public java.lang.Object declaresMethod​(java.lang.String name,
                                               java.util.List<? extends java.lang.Object> types,
                                               ITypeParamContext ctx,
                                               java.lang.Object refType,
                                               boolean isTransformed,
                                               boolean staticOnly,
                                               java.lang.Object inferredType,
                                               java.util.List<JavaType> methodTypeArgs,
                                               boolean includeModified)
        Just returns methods declared in this specific type
      • getConstructors

        public java.lang.Object[] getConstructors​(java.lang.Object refType,
                                                  boolean includeHidden)
        Specified by:
        getConstructors in interface ITypeDeclaration
      • extendsDefinesMethod

        public java.lang.Object extendsDefinesMethod​(java.lang.String name,
                                                     java.util.List<?> parameters,
                                                     ITypeParamContext ctx,
                                                     java.lang.Object refType,
                                                     boolean isTransformed,
                                                     boolean staticOnly,
                                                     java.lang.Object inferredType,
                                                     java.util.List<JavaType> methodTypeArgs)
      • getInheritedAnnotation

        public java.lang.Object getInheritedAnnotation​(java.lang.String annotationName)
      • getAllInheritedAnnotations

        public java.util.List<java.lang.Object> getAllInheritedAnnotations​(java.lang.String annotationName)
      • getInheritedAnnotation

        public java.lang.Object getInheritedAnnotation​(java.lang.String annotationName,
                                                       boolean skipCompiled,
                                                       Layer refLayer,
                                                       boolean layerResolve)
        Description copied from interface: ITypeDeclaration
        Returns the first occurrence of the specified annotation on the types in the type hierarchy
        Specified by:
        getInheritedAnnotation in interface ITypeDeclaration
      • getAllInheritedAnnotations

        public java.util.ArrayList<java.lang.Object> getAllInheritedAnnotations​(java.lang.String annotationName,
                                                                                boolean skipCompiled,
                                                                                Layer refLayer,
                                                                                boolean layerResolve)
        Description copied from interface: ITypeDeclaration
        Returns all occurrences of the specified annotation on the types in the type hierarchy ordered so the first type encountered during the traversal is first.
        Specified by:
        getAllInheritedAnnotations in interface ITypeDeclaration
      • getInheritedScopeName

        public java.lang.String getInheritedScopeName()
      • getScopeInterfaces

        public java.lang.Object[] getScopeInterfaces()
      • getScopeInterfaceJavaTypes

        public JavaType[] getScopeInterfaceJavaTypes()
      • addModifier

        public void addModifier​(java.lang.Object modifier)
        Overrides:
        addModifier in class Definition
      • initBody

        public void initBody()
      • initHiddenBody

        public void initHiddenBody​(boolean skipVersion)
      • isSemanticChildValue

        public boolean isSemanticChildValue​(ISemanticNode child)
        Description copied from interface: ISemanticNode
        Sometimes in a semantic node, you need to add children which are semantic nodes but which are not part of the semantic node tree. For example, in type declaration, we have "hiddenBody" which stores body elements that behave as though they are added to the type but are not saved to the transformed file.

        For these cases, you should override this method and return false when child == hiddenBody. That way, we do not propagate up refresh events and things when nodes in that tree change.

        Specified by:
        isSemanticChildValue in interface ISemanticNode
        Overrides:
        isSemanticChildValue in class SemanticNode
      • addToHiddenBody

        public void addToHiddenBody​(Statement s,
                                    boolean skipVersion)
      • isGeneratedType

        public boolean isGeneratedType()
      • getGeneratedFromType

        public java.lang.Object getGeneratedFromType()
      • checkForStaleAdd

        public void checkForStaleAdd()
      • addBodyStatementIndent

        public void addBodyStatementIndent​(Statement s)
      • checkForStaleAdd

        public void checkForStaleAdd​(Statement s)
      • addBodyStatement

        public void addBodyStatement​(Statement s)
      • addBodyStatementAt

        public void addBodyStatementAt​(int ix,
                                       Statement s)
      • addBodyStatementAtIndent

        public void addBodyStatementAtIndent​(int ix,
                                             Statement s)
      • addBodyStatementsAt

        public void addBodyStatementsAt​(int ix,
                                        java.util.List<Statement> s)
      • getInnerType

        public java.lang.Object getInnerType​(java.lang.String name,
                                             TypeContext ctx,
                                             boolean checkBaseType,
                                             boolean redirected,
                                             boolean srcOnly,
                                             boolean includeEnums)
      • getSimpleInnerType

        public java.lang.Object getSimpleInnerType​(java.lang.String name,
                                                   TypeContext ctx,
                                                   boolean checkBaseType,
                                                   boolean redirected,
                                                   boolean srcOnly,
                                                   boolean includeEnums)
      • getSimpleInnerTypeFromExtends

        protected java.lang.Object getSimpleInnerTypeFromExtends​(java.lang.Object extendsType,
                                                                 java.lang.String name,
                                                                 TypeContext ctx,
                                                                 boolean redirected,
                                                                 boolean srcOnly,
                                                                 boolean includeEnums)
      • getCompiledClass

        public java.lang.Class getCompiledClass()
        For an object definition where we are optimizing out the class, we need to skip to get the actual runtime class. Then, convert that to a type name, then see if there is a class available.

        For dynamic types, the runtime class is DynObject if there's no extend class. If we extend another dynamic type, that classes runtime class is the one we use. If our extends type is not dynamic, this particular type needs to become a dynamic stuff so we use this class.

        Specified by:
        getCompiledClass in interface ITypeDeclaration
      • canInstance

        public boolean canInstance()
      • getCompiledClass

        public java.lang.Class getCompiledClass​(boolean init)
      • genDynamicStubIfNecessary

        public void genDynamicStubIfNecessary()
      • getDefaultDynTypeClassName

        public java.lang.String getDefaultDynTypeClassName()
      • getFullTypeName

        public java.lang.String getFullTypeName​(boolean includeDims,
                                                boolean includeTypeParams)
        Specified by:
        getFullTypeName in interface ITypeDeclaration
      • getRuntimeFullTypeName

        public java.lang.String getRuntimeFullTypeName()
        A dynamic type may become out of sync with the instances, due to the optimization where we eliminate types. So in a few situations, we need to get the 'runtimeFullTypeName' rather than the full-type-name as based on the current type definition. For example, we add the first field to a type which has already been instantiated. We need to also consider that for an inner type, it's runtime type name depends on the runtime type name of its enclosing type.
      • setFullTypeName

        public void setFullTypeName()
      • getPackageName

        public java.lang.String getPackageName()
      • setPackageName

        public void setPackageName​(java.lang.String str)
      • getInnerTypeName

        public java.lang.String getInnerTypeName()
        Returns the type name not including the package prefix
        Specified by:
        getInnerTypeName in interface ITypeDeclaration
      • isAssignableFromClass

        public boolean isAssignableFromClass​(java.lang.Class other)
        Under the assumption that there's no time we'll have both the Class and TypeDeclaration of the same type.
        Specified by:
        isAssignableFromClass in interface ITypeDeclaration
      • getCachedAllMethods

        public java.lang.Object[] getCachedAllMethods()
      • getAllMethods

        public java.util.List<java.lang.Object> getAllMethods​(java.lang.String modifier,
                                                              boolean hasModifier,
                                                              boolean isDyn,
                                                              boolean overridesComp)
        Returns any methods defined by this type. Does not include constructors. If the modifier is supplied, only methods with that modifier are returned.
        Specified by:
        getAllMethods in interface ITypeDeclaration
      • getMethods

        public java.util.List<java.lang.Object> getMethods​(java.lang.String methodName,
                                                           java.lang.String modifier)
      • getMethods

        public java.util.List<java.lang.Object> getMethods​(java.lang.String methodName,
                                                           java.lang.String modifier,
                                                           boolean includeExtends)
        Returns the list of methods with the given name or null if there aren't any. Does not look for constructors
        Specified by:
        getMethods in interface ITypeDeclaration
      • getMethodFromSignature

        public java.lang.Object getMethodFromSignature​(java.lang.String methodName,
                                                       java.lang.String signature,
                                                       boolean resolveLayer)
        Specified by:
        getMethodFromSignature in interface ITypeDeclaration
      • getMethodFromIndex

        public java.lang.Object getMethodFromIndex​(int methodIndex)
      • getDeclaredProperties

        public java.util.List<java.lang.Object> getDeclaredProperties​(java.lang.String modifier,
                                                                      boolean includeAssigns,
                                                                      boolean includeModified,
                                                                      boolean editorProperties)
        Returns the list of properties with the given modifiers or null if there aren't any.
        Specified by:
        getDeclaredProperties in interface ITypeDeclaration
      • getDeclaredProperties

        public java.util.List<java.lang.Object> getDeclaredProperties()
      • setDeclaredProperties

        public void setDeclaredProperties​(java.util.List<java.lang.Object> props)
      • setComment

        public void setComment​(java.lang.String comment)
        Overrides:
        setComment in class Statement
      • getAllProperties

        public java.util.List<java.lang.Object> getAllProperties​(java.lang.String modifier,
                                                                 boolean includeAssigns)
        Returns the list of properties with the given modifiers or null if there aren't any.
        Specified by:
        getAllProperties in interface ITypeDeclaration
      • addAllProperties

        public static void addAllProperties​(SemanticNodeList<Statement> body,
                                            java.util.List<java.lang.Object> props,
                                            java.lang.String modifier,
                                            boolean includeAssigns,
                                            boolean editorProperties)
      • removeStaticProperties

        protected java.util.List removeStaticProperties​(java.lang.Object[] props)
        TODO: eliminate this? Returns all properties now. Used to remove static properties from the list returned so that we could implement "non-inherited" properties
      • getDeclaredIFields

        public java.util.List<java.lang.Object> getDeclaredIFields​(java.lang.String modifier,
                                                                   boolean hasModifier,
                                                                   boolean dynamicOnly,
                                                                   boolean includeObjs,
                                                                   boolean includeAssigns)
        Returns the list of fields with the given name or null if there aren't any
      • getAllFields

        public java.util.List<java.lang.Object> getAllFields​(java.lang.String modifier,
                                                             boolean hasModifier,
                                                             boolean dynamicOnly,
                                                             boolean includeObjs,
                                                             boolean includeAssigns,
                                                             boolean includeModified)
        Description copied from interface: ITypeDeclaration
        Returns all of the fields based on the flags. If modifier is not null then we only return those with have or don't have the modifier based on hasModifier. If dynamicOnly is true, we only return dynamic fields. If includeObjs is true, we return inner objects which have instance fields in this type. If includeAssigns is true, we return any property assignments we find along the way. If includeModified is true, when we resolve objects we'll return the most specific type for each inner type even if this is called on a type which is modified.
        Specified by:
        getAllFields in interface ITypeDeclaration
      • getDeclaredFields

        public java.util.List<java.lang.Object> getDeclaredFields​(java.lang.String modifier,
                                                                  boolean hasModifier,
                                                                  boolean dynamicOnly,
                                                                  boolean includeObjs,
                                                                  boolean includeAssigns,
                                                                  boolean includeModified)
        Returns the list of fields with the given name or null if there aren't any
      • isCompiledProperty

        public boolean isCompiledProperty​(java.lang.String propName,
                                          boolean fieldMode,
                                          boolean interfaceMode)
        Specified by:
        isCompiledProperty in interface ITypeDeclaration
      • addAllFields

        public void addAllFields​(SemanticNodeList<Statement> body,
                                 java.util.List<java.lang.Object> props,
                                 java.lang.String modifier,
                                 boolean hasModifier,
                                 boolean dynamicOnly,
                                 boolean includeObjs,
                                 boolean includeAssigns,
                                 boolean includeModified)
      • resolve

        public BodyTypeDeclaration resolve​(boolean modified)
        Pass in modified=true and it returns the most specific type for this type. Pass in false, it only skips types with replaced=true, where the user has updated since the definition was read. It will not step back to modified types. Use false for expressions where you are at a specific point in the layer hierarchy and just want the most up-to-date version (i.e. skipping replace=true) With true, it returns the most specific version of the type at this time. Use this for when you want the most specific type.
        Specified by:
        resolve in interface ITypeDeclaration
      • getDeclarationForLayer

        public BodyTypeDeclaration getDeclarationForLayer​(java.util.List<Layer> layers,
                                                          int inheritTypeCt,
                                                          int mergeLayerCt)
      • getModifiedByRoot

        public BodyTypeDeclaration getModifiedByRoot()
        Returns the root level type corresponding to this type declaration. In other words, the most specific type in the modify chain
      • getPureModifiedType

        public BodyTypeDeclaration getPureModifiedType()
        Like getModifiedType but returns null for modifyInherited cases - i.e. when you modify a type which you inherited from a sub-type. That pattern works more like an extends of a new type rather than changing the same type.
      • hasInnerObjects

        public boolean hasInnerObjects()
      • getAllInnerTypes

        public java.util.List<java.lang.Object> getAllInnerTypes​(java.lang.String modifier,
                                                                 boolean thisClassOnly,
                                                                 boolean includeInherited)
        Returns any inner types defined by this type. If the modifier is supplied, only methods with that modifier are returned.
        Specified by:
        getAllInnerTypes in interface ITypeDeclaration
      • getLocalInnerTypes

        public java.util.List<java.lang.Object> getLocalInnerTypes​(java.lang.String modifier)
        Like getAllInnerTypes but does not consult the modified type - so just returns the inner types we have defined for this type, modify or otherwise.
      • getClass

        public java.lang.Object getClass​(java.lang.String className,
                                         boolean useImports,
                                         boolean compiledOnly)
        Specified by:
        getClass in interface ITypeDeclaration
      • findTypeDeclaration

        public java.lang.Object findTypeDeclaration​(java.lang.String typeName,
                                                    boolean addExternalReference)
        Specified by:
        findTypeDeclaration in interface ITypeDeclaration
      • refreshBoundType

        public java.lang.Object refreshBoundType​(java.lang.Object boundType)
      • isDynamicNew

        public boolean isDynamicNew()
        Returns true if this type is either a 'dynamic new' or a plain old dynamic type
        Specified by:
        isDynamicNew in interface ITypeDeclaration
      • getCompiledOnly

        public boolean getCompiledOnly()
      • setDynamicType

        public void setDynamicType​(boolean dt)
      • enableNeedsCompiledClass

        public void enableNeedsCompiledClass()
      • setDynamicNew

        public void setDynamicNew​(boolean dt)
      • addAllPropertiesToMakeBindable

        public void addAllPropertiesToMakeBindable​(java.util.TreeMap<java.lang.String,​java.lang.Boolean> properties)
      • addPropertyAlreadyBindable

        public void addPropertyAlreadyBindable​(java.lang.String propName)
      • isStaticType

        public boolean isStaticType()
        Returns true if this is a static type - i.e. the class/object has the static keyword (or we are modifying a static type). This is different than "isStatic()" in a subtle way. That is used for an expression to see if it is in a static context. These are not the same for example when you have a static object but are initializing an instance variable of that object. It should see it as part of an instance context but that object is still considered a static type for its parent
      • addStaticFields

        public void addStaticFields​(java.util.List<java.lang.Object> fields)
      • getDynInstFieldCount

        public int getDynInstFieldCount()
      • getDynStaticFieldCount

        public int getDynStaticFieldCount()
      • getDynInstFields

        public java.lang.Object[] getDynInstFields()
      • getOldDynInstFields

        public java.lang.Object[] getOldDynInstFields()
      • addDynInstField

        public void addDynInstField​(java.lang.Object fieldObj,
                                    boolean updateType)
      • addDynInstFieldLeaf

        public void addDynInstFieldLeaf​(java.lang.Object fieldObj,
                                        boolean updateType)
      • getStaticFields

        public java.lang.Object[] getStaticFields()
      • getStaticPropertyObject

        public java.lang.Object getStaticPropertyObject​(java.lang.String propName)
      • getOldStaticFields

        public java.lang.Object[] getOldStaticFields()
      • staticInit

        public void staticInit()
        Initializes the type's static fields for interpreting
        Specified by:
        staticInit in interface ITypeDeclaration
      • preInitStaticValues

        public void preInitStaticValues​(java.lang.Object[] staticVals,
                                        ExecutionContext ctx)
      • initStaticValues

        public void initStaticValues​(java.lang.Object[] staticVals,
                                     ExecutionContext ctx)
      • getEnumArguments

        public java.util.List<Expression> getEnumArguments()
      • getStaticValues

        public java.lang.Object[] getStaticValues()
      • addStaticField

        protected void addStaticField​(java.lang.Object fieldType,
                                      java.lang.String fieldName,
                                      java.lang.Object initValue)
      • isDynObj

        protected boolean isDynObj​(boolean getStatic)
      • getDynTransientFields

        public java.util.BitSet getDynTransientFields()
      • getDynInstPropertyIndex

        public int getDynInstPropertyIndex​(java.lang.String propName)
      • getDynStaticFieldIndex

        public int getDynStaticFieldIndex​(java.lang.String propName)
      • isDynProperty

        public boolean isDynProperty​(java.lang.String propName)
      • setDynStaticField

        public void setDynStaticField​(int ix,
                                      java.lang.Object value)
      • setDynStaticField

        public void setDynStaticField​(java.lang.String propName,
                                      java.lang.Object value)
      • getDynStaticProperty

        public java.lang.Object getDynStaticProperty​(int ix)
      • getDynStaticField

        public java.lang.Object getDynStaticField​(java.lang.String propName)
      • setStaticProperty

        public void setStaticProperty​(java.lang.String propName,
                                      java.lang.Object value)
      • getStaticProperty

        public java.lang.Object getStaticProperty​(java.lang.String propName)
      • getPropertyMapping

        public IBeanMapper getPropertyMapping​(java.lang.String prop)
      • getExtendsTypeDeclarations

        public java.lang.Object[] getExtendsTypeDeclarations()
      • getDeclaredExtendsTypeDeclaration

        public java.lang.Object getDeclaredExtendsTypeDeclaration()
      • getModifiedExtendsTypeDeclaration

        public java.lang.Object getModifiedExtendsTypeDeclaration()
        For a modify of an inner type which modifies an inner type of a base-type of the enclosing type (i.e. modifyInherited), this returns the modified type, which is not the same type unlike a normal modify operation. It's possible we should return this as the extendsTypeDeclaration but for now you need to use this method to figure this out.
      • getCompiledExtendsTypeDeclaration

        public java.lang.Object getCompiledExtendsTypeDeclaration()
        By default, the extends type is the same in the model and compiled code. But when you modify an inherited type you actually do not extend that type but the compiled model will extend it.
      • getEnclosingInstType

        public BodyTypeDeclaration getEnclosingInstType()
        Returns the enclosing type only if it is not a static inner type - i.e. to determine if there's a "this" for the parent in the child
      • getObjChildrenNames

        public java.lang.String[] getObjChildrenNames​(java.lang.String scopeName,
                                                      boolean componentsOnly,
                                                      boolean thisClassOnly,
                                                      boolean dynamicOnly)
      • getObjChildrenTypes

        public java.lang.Object[] getObjChildrenTypes​(java.lang.String scopeName,
                                                      boolean componentsOnly,
                                                      boolean thisClassOnly,
                                                      boolean dynamicOnly)
      • getObjChildren

        public java.lang.Object[] getObjChildren​(java.lang.Object inst,
                                                 java.lang.String scopeName,
                                                 boolean componentsOnly,
                                                 boolean thisClassOnly,
                                                 boolean dynamicOnly)
      • initDynComponent

        public void initDynComponent​(java.lang.Object inst,
                                     ExecutionContext ctx,
                                     boolean doInit,
                                     java.lang.Object outerObj,
                                     java.lang.Object[] params,
                                     boolean initSyncInst)
      • initLazyDynProperty

        public java.lang.Object initLazyDynProperty​(IDynObject obj,
                                                    int dynIndex,
                                                    boolean isInstance)
      • initDynamicProperty

        public void initDynamicProperty​(java.lang.Object inst,
                                        java.lang.String propertyName)
        Let's callers initialize the properties one at a time to deal with dependencies between properties.
      • initDynamicInstance

        public void initDynamicInstance​(java.lang.Object inst)
      • constructDynamicInstance

        public void constructDynamicInstance​(java.lang.Object inst,
                                             java.lang.Object outerObj,
                                             ExecutionContext ctx,
                                             java.lang.String constrSig,
                                             java.lang.Object... params)
      • buildDynamicInstance

        public void buildDynamicInstance​(java.lang.Object inst,
                                         java.lang.Object outerObj,
                                         java.lang.String constrSig,
                                         java.lang.Object... params)
        This is called from code generated in the dynamic stub to complete the dynamic portion of the initialization on the instance provided
      • initOuterInstanceSlot

        public void initOuterInstanceSlot​(java.lang.Object inst,
                                          ExecutionContext ctx,
                                          java.lang.Object outerObj)
      • getLiveDynamicTypesAnnotation

        public boolean getLiveDynamicTypesAnnotation()
      • initDynamicFields

        public void initDynamicFields​(java.lang.Object inst,
                                      ExecutionContext ctx,
                                      boolean initExt)
      • initDynInstance

        public void initDynInstance​(java.lang.Object inst,
                                    ExecutionContext ctx,
                                    boolean initClassPhase,
                                    boolean completeObj,
                                    java.lang.Object outerObj,
                                    java.lang.Object[] params,
                                    boolean initExt,
                                    boolean pushInst)
      • getBoolCompilerSetting

        public boolean getBoolCompilerSetting​(java.lang.String settingName,
                                              boolean inherited)
      • getCompilerSetting

        public java.lang.Object getCompilerSetting​(java.lang.String settingName,
                                                   boolean inherited)
      • getDynChildManagerClassName

        public java.lang.String getDynChildManagerClassName()
      • stopDynComponent

        public void stopDynComponent​(IDynObject inst)
      • getOuterInstCount

        public int getOuterInstCount()
      • needsClassInit

        public boolean needsClassInit()
      • isDynInnerStub

        public boolean isDynInnerStub()
      • getInnerStubFullTypeName

        public java.lang.String getInnerStubFullTypeName()
      • getInnerStubTypeName

        public java.lang.String getInnerStubTypeName()
      • getInnerStubFileName

        public java.lang.String getInnerStubFileName()
      • getSuperIsDynamicStub

        public boolean getSuperIsDynamicStub()
      • getExtendsDynamicStub

        public boolean getExtendsDynamicStub()
        Is there any IDynObject implementation, even if not the immediate super type this method returns true
      • compileDynamicStub

        public void compileDynamicStub​(boolean doCompile,
                                       boolean genStub)
        If we create a dynamic type at runtime, we may need a new stub for that type. We can generate and compile without requiring a restart as long as there is no old definition.
      • getCompiledIFields

        public java.util.List<java.lang.Object> getCompiledIFields()
        Returns the set of instance fields we inherit from interfaces we implement - i.e. as part of multiple inheritance support. These are the fields to be compiled into this type as properties.
      • getDynCompiledIFields

        public java.util.List<java.lang.Object> getDynCompiledIFields()
        Returns the subset of the compiledIFields which are implemented as dynamic fields in this type
      • getDynCompiledMethods

        public java.util.List<java.lang.Object> getDynCompiledMethods()
        These are methods that are defined as dynamic but override a compiled method so need some type of stub to make the transition
      • updateExtendsType

        public boolean updateExtendsType​(BodyTypeDeclaration newExtType,
                                         boolean modifyOnly,
                                         boolean extOnly)
      • addInstMemberToPropertyCache

        public void addInstMemberToPropertyCache​(java.lang.String propName,
                                                 java.lang.Object fieldObj)
      • addInstMemberToPropertyCacheLeaf

        public void addInstMemberToPropertyCacheLeaf​(java.lang.String propName,
                                                     java.lang.Object fieldObj)
      • clearDynamicNew

        public void clearDynamicNew()
        As soon as one subclass needs to create a real dynamic type from a base type, we need to make the whole type hierarchy dynamic.
      • removeStatement

        public void removeStatement​(Statement st)
      • addChildObjectToInstances

        public void addChildObjectToInstances​(BodyTypeDeclaration innerType)
      • addChildObjectToInstancesLeaf

        public void addChildObjectToInstancesLeaf​(BodyTypeDeclaration innerType)
      • updateType

        public void updateType​(BodyTypeDeclaration newType,
                               ExecutionContext ctx,
                               TypeUpdateMode updateMode,
                               boolean updateInstances,
                               UpdateInstanceInfo info)
        Updates this type with the new type. If replacesType is true, we are replacing this exact type. If it is false we are adding a new layered version of this type. In other words, adding a new modify that modifies this type.
      • removeType

        public void removeType()
      • removeTypeInstances

        public void removeTypeInstances()
        Removes any instances lying around for this type
      • createInstance

        public java.lang.Object createInstance()
      • constructInstance

        public java.lang.Object constructInstance​(ExecutionContext ctx,
                                                  java.lang.Object outerObj,
                                                  java.lang.Object[] argValues,
                                                  boolean fromSuper,
                                                  boolean doInit,
                                                  boolean initExt)
      • createInstance

        public java.lang.Object createInstance​(ExecutionContext ctx,
                                               java.lang.String sig,
                                               java.util.List<Expression> args)
      • getObjectInstance

        public java.lang.Object getObjectInstance()
      • createInstance

        public java.lang.Object createInstance​(ExecutionContext ctx,
                                               java.lang.String sig,
                                               java.util.List<Expression> args,
                                               BodyTypeDeclaration dynParentType,
                                               java.lang.Object outerObj,
                                               int dynIndex)
        Creates either an instance of a class or constructs the object instance. This is primarily used for dynamic types. It mirrors the behavior of Java - essentially to first initialize the instance fields, and instance code of the base-type, then call the constructor for the base type, then run the init code for each sub-type, and constructor until hitting this type, then run the init code and constructor for this type. For components, the initialization of the instance goes in multiple passes. The first pass will initialize any simple properties, the second will initialize all references, then call the preInit, init, and start methods. One tricky aspect of this code is that to invoke the constructor, we need to know if it will call super or not. If so, the sub-type is set as the "orig constructor" but no instance is created. Instead, the IdentifierExpression for the super(..) call will either chain itself like this type, or when we hit the final super() in the chain, the instance is created. It's returned as the current object in the ExecutionContext. When the instance is created, we need to set its type to the type that we originally created the instance with but we don't set the outerObj until we unwind and hit the first class in the chain with an enclosing type. TODO: some paths to creating dynamic types still construct the instance with the initExt=true parameter - i.e. initDynStatements recursively initializes the statements in the extends type before initializing the sub-type. Although that works fine when there are no constructor methods, it does not respect the proper ordering which is base-type-init code, base-type-constructor sub-type init code, sub-type constructor.
      • initNewSyncInst

        public void initNewSyncInst​(java.lang.Object[] argValues,
                                    java.lang.Object inst)
      • initDynSyncInst

        public void initDynSyncInst​(java.lang.Object inst,
                                    java.lang.Object[] params)
      • getMemberCount

        public int getMemberCount()
      • getCompiledImplements

        public java.lang.Object getCompiledImplements()
      • addChildNames

        public int addChildNames​(java.lang.StringBuilder childNames,
                                 java.util.Map<java.lang.String,​java.lang.StringBuilder> childNamesByScope,
                                 java.lang.String prefix,
                                 boolean componentsOnly,
                                 boolean thisClassOnly,
                                 boolean dynamicOnly,
                                 java.util.Set<java.lang.String> nameSet,
                                 java.util.ArrayList<java.lang.Object> objTypes)
      • isExtendsDynamicType

        public static boolean isExtendsDynamicType​(java.lang.Object extendsType)
      • getCompiledTypeArgs

        public java.util.List<JavaType> getCompiledTypeArgs​(java.util.List<JavaType> typeArgs)
        Converts the supplied type arguments which would be used for the current class to those from the extends class
        Specified by:
        getCompiledTypeArgs in interface ITypeDeclaration
      • getCompiledConstrArgs

        public java.lang.Object[] getCompiledConstrArgs​(java.lang.Object[] args)
      • getClassDeclarationForType

        public java.lang.Object getClassDeclarationForType()
        Returns this type unless this class is not compiled into the runtime as a class. In that case, it returns the real class
      • getCompiledImplTypes

        public java.lang.Object[] getCompiledImplTypes()
      • getCompiledImplJavaTypes

        public java.lang.Object[] getCompiledImplJavaTypes()
      • startExtendedType

        public void startExtendedType​(BodyTypeDeclaration extendsType,
                                      java.lang.String message)
      • convertToSrcReference

        public void convertToSrcReference()
      • getExtendsTypeName

        public java.lang.String getExtendsTypeName()
        Gets the extends type name without trying to resolve the type
      • setExtendsTypeName

        public void setExtendsTypeName​(java.lang.String str)
      • bodyNeedsClass

        public boolean bodyNeedsClass()
      • modifyNeedsClass

        public boolean modifyNeedsClass()
      • needsOwnClass

        public boolean needsOwnClass​(boolean checkComponents)
        We need to generate a class for an object definition if it is a top-level class or there is a method or field
        Specified by:
        needsOwnClass in interface ITypeDeclaration
      • getConcreteExtendsType

        public java.lang.Object getConcreteExtendsType()
      • isStaticInnerClass

        public boolean isStaticInnerClass()
      • getDefinesCurrentObject

        public abstract boolean getDefinesCurrentObject()
      • getPropertyInitializer

        public Expression getPropertyInitializer​(java.lang.String name)
      • getTypeClassName

        public java.lang.String getTypeClassName()
      • unregister

        public void unregister()
      • modifiesType

        public boolean modifiesType​(BodyTypeDeclaration other)
        Returns true if this type modifies the supplied type either directly or indirectly
      • isHiddenType

        public boolean isHiddenType()
      • replaceHiddenType

        public BodyTypeDeclaration replaceHiddenType​(BodyTypeDeclaration parentType)
        Overridden by ModifyDeclaration. For "a.b" types, returns the value of "a" which replaces this element
      • isEnumConstant

        public boolean isEnumConstant()
      • getEnumOrdinal

        public int getEnumOrdinal()
      • getEnumValues

        public java.lang.Object[] getEnumValues()
      • getEnumValue

        public java.lang.Object getEnumValue()
      • getRuntimeEnum

        public java.lang.Object getRuntimeEnum()
      • setCompiledOnly

        public void setCompiledOnly​(boolean val)
      • addDependentTypes

        public void addDependentTypes​(java.util.Set<java.lang.Object> types,
                                      JavaSemanticNode.DepTypeCtx mode)
        Adds to the 'types' array any types or type names required for the specified mode. The mode determines which dependent types to return - i.e. all, recursive or not, sync types, etc.
        Specified by:
        addDependentTypes in class Statement
      • setAccessTimeForRefs

        public void setAccessTimeForRefs​(long time)
        Description copied from interface: ITypeDeclaration
        For source representations of a type, mark any references contains in this type as 'in use' with the specified access time so only unused types in the cache are removed
        Specified by:
        setAccessTimeForRefs in interface ITypeDeclaration
        Specified by:
        setAccessTimeForRefs in class Statement
      • setAccessTime

        public void setAccessTime​(long time)
        Description copied from interface: ITypeDeclaration
        Mark the lastAccessTime for all of the models that define this type only (not the code inside of the type like the ForRefs version)
        Specified by:
        setAccessTime in interface ITypeDeclaration
      • initExcluded

        public void initExcluded()
      • markExcluded

        public void markExcluded​(boolean topLevel)
      • initTypeIndex

        public void initTypeIndex()
      • getTypePathName

        public java.lang.String getTypePathName()
      • setNeedsDynamicStub

        public void setNeedsDynamicStub​(boolean val)
      • propagateDynamicStub

        public void propagateDynamicStub()
      • getInitStatements

        public java.util.List<Statement> getInitStatements​(InitStatementsMode mode,
                                                           boolean isTransformed,
                                                           boolean updateStaticType)
      • getSignature

        public java.lang.String getSignature()
      • isObjectSetProperty

        public boolean isObjectSetProperty()
      • isDynCompiledObject

        public boolean isDynCompiledObject()
      • allocateAnonId

        public int allocateAnonId()
      • allocateAnonMethodId

        public int allocateAnonMethodId()
      • mergeDynInvokeMethods

        public void mergeDynInvokeMethods​(java.util.Map<java.lang.String,​java.lang.Object> otherDIMs)
      • addDynInvokeMethod

        public void addDynInvokeMethod​(java.lang.Object methodObj,
                                       JavaModel fromModel)
      • findTemplate

        public Template findTemplate​(java.util.List<java.lang.Object> compilerSettings,
                                     java.lang.String templateName,
                                     java.lang.Class paramClass)
      • findTemplatePath

        public Template findTemplatePath​(java.lang.String templatePath,
                                         java.lang.String templateName,
                                         java.lang.Class paramClass)
      • needsSync

        public boolean needsSync()
      • transformTemplate

        public int transformTemplate​(int ix,
                                     boolean statefulContext)
        Description copied from class: JavaSemanticNode
        A pass over the semantic node tree to convert template statements into layer cake statements.
        Overrides:
        transformTemplate in class JavaSemanticNode
      • processModifiers

        protected void processModifiers​(java.util.List<java.lang.Object> modifiers)
        Overrides:
        processModifiers in class Definition
      • getSyncProperties

        public java.util.List<SyncProperties> getSyncProperties()
      • initDBTypeDescriptor

        public void initDBTypeDescriptor()
      • ensureTypeInfoInited

        public void ensureTypeInfoInited()
      • getInheritedSyncProperties

        public java.util.List<SyncProperties> getInheritedSyncProperties()
      • isSynced

        public boolean isSynced​(java.lang.String prop,
                                boolean forClient)
      • getInheritedSyncMode

        public static SyncMode getInheritedSyncMode​(LayeredSystem sys,
                                                    java.lang.Object origType)
        To find out whether a type is synchronized at either the type or layer level by walking the type hierarchy
      • getInheritedSyncModeForProp

        public static SyncMode getInheritedSyncModeForProp​(LayeredSystem sys,
                                                           java.lang.Object checkType,
                                                           java.lang.Object propParentType,
                                                           SyncMode defaultSync,
                                                           boolean includeSuper)
        Called with the current type and the properties parentType. Walks the type tree to find the first syncMode annotation at either the type or layer level.
      • getSyncFlags

        public int getSyncFlags()
      • initSyncProperties

        public void initSyncProperties()
      • getSyncOnDemand

        public boolean getSyncOnDemand()
      • getSyncConstant

        public boolean getSyncConstant()
      • getSyncInitDefault

        public boolean getSyncInitDefault()
      • getDerivedScopeName

        public java.lang.String getDerivedScopeName()
        Returns the scope name that includes either one inherited from the base type or derived from an outer instance class.
      • isTransformed

        public boolean isTransformed()
      • getClientTypeDeclaration

        public ClientTypeDeclaration getClientTypeDeclaration()
        Used for synchronization. We could just use TypeDeclaration but it is itself treated as a special class - like java.lang.Class that denotes a type in the system, Here we need an instance that's not considered a type so we use a special subclass. The main difference is that for ClientTypeDeclaration DynUtil.isType returns false.
      • refreshClientTypeDeclaration

        public void refreshClientTypeDeclaration()
      • deepCopy

        public BodyTypeDeclaration deepCopy​(int options,
                                            java.util.IdentityHashMap<java.lang.Object,​java.lang.Object> oldNewMap)
        Description copied from interface: ISemanticNode
        Performs a deep copy of the semantic node tree. Subclasses should do their own copy implementation to decide what else to copy. Uses the copy options flags above. The default, with 0, just copies the semantic node information so you get a new tree like's it parsed but without parse node info. Use that mode only if you want to throw away the original source and regenerate it all from scratch. Otherwise, you can copy the parse tree as well. If you want to copy the semantic node's initial resolved state - including it's init/start, etc. and whatever the subclass adds to that copy, use CopyState or CopyNormal - for both parse nodes and state.
        Specified by:
        deepCopy in interface ISemanticNode
        Overrides:
        deepCopy in class Statement
      • isFinalLayerType

        public boolean isFinalLayerType()
        Note - this returns true for any types which are in a final layer, even those which have not yet been compiled.
      • needsTypeChange

        public boolean needsTypeChange()
      • isAutoComponent

        public boolean isAutoComponent()
      • hasDynStubForMethod

        public boolean hasDynStubForMethod​(java.lang.Object meth)
        In the rare case we have one dyn stub extending another, only one _super_x can exist in that inheritance chain, otherwise, it starts calling the wrong method. TODO: this could/should actually exclude the whole dyn stub, not just the _super_x for this method but hopefully the duplication won't make a difference
      • getExistsInJSRuntime

        public boolean getExistsInJSRuntime()
      • setExistsInJSRuntime

        public void setExistsInJSRuntime​(boolean b)
      • getFileRelativeTypeName

        public java.lang.String getFileRelativeTypeName()
        Returns the name of the class from within this file - i.e. full name without the package prefix
      • updateTypeName

        public void updateTypeName​(java.lang.String newTypeName,
                                   boolean renameFile)
      • setNodeName

        public void setNodeName​(java.lang.String newNodeName)
        Specified by:
        setNodeName in interface INamedNode
      • getNodeName

        public java.lang.String getNodeName()
        Specified by:
        getNodeName in interface INamedNode
      • refreshNode

        public BodyTypeDeclaration refreshNode()
        This method is used by the IDE when it wants to convert this type declaration (which it might find in a reference) with the version of this type managed in the IDE. It uses the getAnnotatedModel method to find the right model, then looks for this type in that layered system (since we know by then that the model in that system is annotated .
        Specified by:
        refreshNode in interface ISemanticNode
        Overrides:
        refreshNode in class JavaSemanticNode
      • addBreakpointNodes

        public void addBreakpointNodes​(java.util.List<ISrcStatement> res,
                                       ISrcStatement srcStatement)
        Description copied from interface: ISrcStatement
        Adds all of the generated statements to the resulting list, for the case where more than one fromStatement points to the same src statement. These are used to determine which statements in the generated code should cause a 'break' when the developer sets a breakpoint on this statement.
        Specified by:
        addBreakpointNodes in interface ISrcStatement
        Overrides:
        addBreakpointNodes in class Statement
      • getArrayComponentType

        public java.lang.Object getArrayComponentType()
        Description copied from interface: ITypeDeclaration
        If this type extends for example ArrayList return the value of the first type parameter so we get the accurate component type.
        Specified by:
        getArrayComponentType in interface ITypeDeclaration
      • needsAbstract

        public boolean needsAbstract()
      • isLayerType

        public boolean isLayerType()
        Description copied from interface: ITypeDeclaration
        Returns true if this is the root type for a layer definition
        Specified by:
        isLayerType in interface ITypeDeclaration
      • isLayerComponent

        public boolean isLayerComponent()
        Is this a type defined inside of a layer? If so, it's implicitly dynamic.
        Specified by:
        isLayerComponent in interface ITypeDeclaration
      • getOperatorString

        public java.lang.String getOperatorString()
      • addNodeCompletions

        public java.lang.String addNodeCompletions​(JavaModel origModel,
                                                   JavaSemanticNode origNode,
                                                   java.lang.String matchPrefix,
                                                   int offset,
                                                   java.lang.String dummyIdentifier,
                                                   java.util.Set<java.lang.String> candidates,
                                                   boolean nextNameInPath,
                                                   int max)
        Description copied from class: JavaSemanticNode
        This works like suggestCompletions but designed to conform to the requirements of IntelliJ. We don't support the live programming use case in this version and have access (possibly) to the original model and original node which most closely approximates this node which is being parsed (so we can use more context to do a better job of matching because those values are all resolved).
        Overrides:
        addNodeCompletions in class Statement
      • checkReplaced

        protected void checkReplaced()
      • isAutomaticBindable

        public boolean isAutomaticBindable​(java.lang.String property)
      • isAnonymousType

        public boolean isAnonymousType()
      • markAsTemporary

        public void markAsTemporary()
      • getTemplatePathName

        public java.lang.String getTemplatePathName()
      • needsCompile

        public boolean needsCompile()
        An excluded type can have an excludedStub that's inserted in it's place
      • isServerTagType

        public boolean isServerTagType()
      • getNeedsDynInnerStub

        public boolean getNeedsDynInnerStub()
      • markNeedsDynamicStub

        public final void markNeedsDynamicStub​(boolean val)
      • getConstructorParamNames

        public java.lang.String getConstructorParamNames()
      • getConstructorPropSignature

        public java.lang.String getConstructorPropSignature()