de.dhbwstuttgart.syntaxtree.type

## Class TypePlaceholder

- java.lang.Object
- - de.dhbwstuttgart.syntaxtree.SyntaxTreeNode
  - - de.dhbwstuttgart.syntaxtree.type.Type
    - - de.dhbwstuttgart.syntaxtree.type.ObjectType
      - - de.dhbwstuttgart.syntaxtree.type.TypePlaceholder

All Implemented Interfaces:
  IItemWithOffset

    public class TypePlaceholder
    extends ObjectType

ReprÃ¯Â¿Â½sentiert einen Typparameter fÃ¯Â¿Â½r einen vom Programmierer nicht angegeben Typ. Jede TypePlaceholder besitzt einen eindeutigen Namen aus einem Namenspool und ist in einer zentralen Registry, d.h. einer `Hashtable` abgelegt.

Version:
  $Date: 2013/06/19 12:45:37 $
Author:
  JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

### Field Summary

Fields
`private static Logger` `log`
`private static java.util.Hashtable<JavaClassName,TypePlaceholder>` `m_TypePlaceholdersRegistry`
`private SyntaxTreeNode` `parent`
`private static java.lang.String` `strNextName`

### Fields inherited from class de.dhbwstuttgart.syntaxtree.type.Type

`name, used`

### Constructor Summary

Constructors
`private` `TypePlaceholder(java.lang.String typeName, SyntaxTreeNode parent)` Privater Konstruktor - Eine TypePlaceholder-Variable wird Ã¯Â¿Â½ber die Factory-Methode `fresh()` erzeugt.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`static TypePlaceholder` `backdoorCreate(java.lang.String name)` Backdoor-Hilfsfunktion, die fÃ¯Â¿Â½r `makeFC()` und `unify()` benÃ¯Â¿Â½tigt wird, zum Erzeugen eines `TypePlaceholders`, der nicht in der zentralen Registry eingetragen wird.
`static TypePlaceholder` `backdoorFresh()` Backdoor-Hilfsfunktion, die fÃ¯Â¿Â½r `makeFC()` und `unify()` benÃ¯Â¿Â½tigt wird, um neue TypePlaceholders zu erzeugen.
`void` `backdoorSetName(java.lang.String varName)` Backdoor-Hilfsfunktion, die fÃ¯Â¿Â½r `makeFC()` und `unify()` benÃ¯Â¿Â½tigt wird, um den Namen eines TypePlaceholders zu verÃ¯Â¿Â½ndern.
`TypePlaceholder` `clone()` Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer Listener Ã¯Â¿Â½ber die zentrale Instanz in der Registry laufen muss.
`static void` `deleteRegistry()` LÃ¯Â¿Â½scht die komplette Registry von TypePlaceholders.
`boolean` `equals(java.lang.Object obj)` Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle
`static TypePlaceholder` `fresh(java.lang.String name, SyntaxTreeNode parent)` Generiert einen neuen TPH mit einem bestimmten Namen.
`static TypePlaceholder` `fresh(SyntaxTreeNode parent)`
`java.lang.String` `get_Name()`
`static TypePlaceholder` `getInstance(java.lang.String name)` Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
`Menge<TypePlaceholder>` `getInvolvedTypePlaceholder()` Sammelt alle TypePlaceholder, welche in diesem Typ vorkommen.
`Menge<TypeInsertPoint>` `getTypeInsertPoints(ResultSet result)` Berechnet die InsertPoints dieses TypePlaceholders.
`Menge<TypePlaceholder>` `getUnresolvedTPH(ResultSet resultSet)` Sucht nach TPHs in diesem Typ, denen das resultSet keinen Typ zuordnen kann.
`private static void` `inc(int i)` Hilfsfunktion zur Berechnung eines neuen Namens Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle
`private static java.lang.String` `makeNewName()` Berechnet einen neuen, eindeutigen Namen fÃ¯Â¿Â½r eine neue `TypePlaceholder`.
`private static void` `manipulate(int nStelle, char nWert)` Hilfsfunktion zur Berechnung eines neuen Namens.
`JavaCodeResult` `printJavaCode(ResultSet resultSet)`
`java.lang.String` `toString()` Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle
`ConstraintType` `TYPE(TypeAssumptions ass, SyntaxTreeNode parent)` PrÃ¼ft ob der Typ in den Assumptions ass vorhanden ist.

### Methods inherited from class de.dhbwstuttgart.syntaxtree.type.Type

`applyResultSet, checkTYPE, get_UsedId, getChildren, getName, getOffset, getSimpleName, getSuperWildcardTypes, getVariableLength, involves, set_UsedId, setOffset, Type2Key, Type2String`

### Methods inherited from class de.dhbwstuttgart.syntaxtree.SyntaxTreeNode

`addTypeInsertPoints, getDescription, getGTVDeclarationContext, getMatchingParentNode, getParent, getParentClass, parserPostProcessing, seesType`

### Methods inherited from class java.lang.Object

`finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### log

    private static final Logger log

#### strNextName

    private static java.lang.String strNextName

#### m_TypePlaceholdersRegistry

    private static java.util.Hashtable<JavaClassName,TypePlaceholder> m_TypePlaceholdersRegistry

#### parent

    private SyntaxTreeNode parent

### Constructor Detail

#### TypePlaceholder

    private TypePlaceholder(java.lang.String typeName,
                            SyntaxTreeNode parent)

Privater Konstruktor - Eine TypePlaceholder-Variable wird Ã¯Â¿Â½ber die Factory-Methode `fresh()` erzeugt.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Parameters:
  `typeName` - Der Name der TypePlaceholder-Variablen

### Method Detail

#### TYPE

    public ConstraintType TYPE(TypeAssumptions ass,
                               SyntaxTreeNode parent)

Description copied from class: `Type`
PrÃ¼ft ob der Typ in den Assumptions ass vorhanden ist. Dabei kann eine neue Instanz eines Typs entstehen, welche von der Methode zurÃ¼ckgegeben wird.

Overrides:
  `TYPE` in class `Type`
Parameters:
  `ass` - - Die Assumptions fÃ¼r den jeweiligen Kontext in dem sich der Typ befindet. public ConstraintType checkType(TypeAssumptions ass, SyntaxTreeNode parent){ ConstraintType t = ass.getTypeFor(this, this); if(t==null) throw new TypeinferenceException("Der Typ "+this.getName()+" ist nicht korrekt", parent); return t; }

#### getInstance

    public static TypePlaceholder getInstance(java.lang.String name)

Statische Methode, um einen TypePlaceholder aus der Registry zu holen.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Parameters:
  `name` - Der Name des TypePlaceholders
Returns:
  Der TypePlaceholder oder `null`, falls er nicht in der Registry existiert

#### fresh

    public static TypePlaceholder fresh(java.lang.String name,
                                        SyntaxTreeNode parent)

Generiert einen neuen TPH mit einem bestimmten Namen. Wird benÃ¶tigt, wenn aus Generischen Variablen TPH generiert werden.

Parameters:
  `name` -
Returns:

#### fresh

    public static TypePlaceholder fresh(SyntaxTreeNode parent)

Parameters:
  `listener` -
Returns:

#### getInvolvedTypePlaceholder

    public Menge<TypePlaceholder> getInvolvedTypePlaceholder()

Description copied from class: `Type`
Sammelt alle TypePlaceholder, welche in diesem Typ vorkommen.

Overrides:
  `getInvolvedTypePlaceholder` in class `Type`
Returns:

#### makeNewName

    private static java.lang.String makeNewName()

Berechnet einen neuen, eindeutigen Namen fÃ¯Â¿Â½r eine neue `TypePlaceholder`.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Returns:
  Der Name

#### inc

    private static void inc(int i)

Hilfsfunktion zur Berechnung eines neuen Namens
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Parameters:
  `i` -

#### manipulate

    private static void manipulate(int nStelle,
                                   char nWert)

Hilfsfunktion zur Berechnung eines neuen Namens.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Parameters:
  `nStelle` -
  `nWert` -

#### equals

    public boolean equals(java.lang.Object obj)

Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Overrides:
  `equals` in class `Type`
Parameters:
  `Object` -
Returns:

#### deleteRegistry

    public static void deleteRegistry()

LÃ¯Â¿Â½scht die komplette Registry von TypePlaceholders. Sollte nur und ausschlieÃ¯Â¿Â½lich von `MyCompiler.init()` aufgerufen werden!!!
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

#### clone

    public TypePlaceholder clone()

Diese Methode sollte nur sehr sparsam und mit Vorsicht verwendet werden, da die Registrierung neuer Listener Ã¯Â¿Â½ber die zentrale Instanz in der Registry laufen muss.
Diese Methode erzeugt eine Kopie dieser zentralen Instanz. Listener, die sich Ã¯Â¿Â½ber diese Kopie registrieren, werden spÃ¯Â¿Â½ter nicht Ã¯Â¿Â½ber StatusÃ¯Â¿Â½nderungen benachrichtigt, d.h. ihre TypePlaceholders werden nicht substituiert.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Specified by:
  `clone` in class `ObjectType`
Returns:

#### get_Name

    public java.lang.String get_Name()

Overrides:
  `get_Name` in class `Type`

#### toString

    public java.lang.String toString()

Description copied from class: `Type`
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Overrides:
  `toString` in class `Type`

#### backdoorFresh

    public static TypePlaceholder backdoorFresh()

Backdoor-Hilfsfunktion, die fÃ¯Â¿Â½r `makeFC()` und `unify()` benÃ¯Â¿Â½tigt wird, um neue TypePlaceholders zu erzeugen. Die erzeugten Variablen werden nicht registriert und sind vÃ¯Â¿Â½llig losgelÃ¯Â¿Â½st vom abstrakten Syntaxbaum.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Returns:
  Eine neue `TypePlaceholder`

#### backdoorSetName

    public void backdoorSetName(java.lang.String varName)

Backdoor-Hilfsfunktion, die fÃ¯Â¿Â½r `makeFC()` und `unify()` benÃ¯Â¿Â½tigt wird, um den Namen eines TypePlaceholders zu verÃ¯Â¿Â½ndern.
ACHTUNG: Diese `TypePlaceholder` darf nicht Teil des abstrakten Syntaxbaumes sein!!! Es muss sicher gestellt werden, dass die betreffende `TypePlaceholder` nicht Ã¯Â¿Â½ber die Methode `fresh()`, sondern Ã¯Â¿Â½ber `backdoorCreate()` oder `backdoorClone()` erzeugt worden ist.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Parameters:
  `varName` - Der Name des zu erzeugenden `TypePlaceholders`

#### backdoorCreate

    public static TypePlaceholder backdoorCreate(java.lang.String name)

Backdoor-Hilfsfunktion, die fÃ¯Â¿Â½r `makeFC()` und `unify()` benÃ¯Â¿Â½tigt wird, zum Erzeugen eines `TypePlaceholders`, der nicht in der zentralen Registry eingetragen wird. Die erzeugte Variablen ist somit vÃ¯Â¿Â½llig losgelÃ¯Â¿Â½st vom abstrakten Syntaxbaum.
Author: JÃ¯Â¿Â½rg BÃ¯Â¿Â½uerle

Parameters:
  `name` -
Returns:

#### printJavaCode

    public JavaCodeResult printJavaCode(ResultSet resultSet)

Overrides:
  `printJavaCode` in class `Type`

#### getTypeInsertPoints

    public Menge<TypeInsertPoint> getTypeInsertPoints(ResultSet result)

Berechnet die InsertPoints dieses TypePlaceholders. Alle an diesem TypePlaceholder registrierten ITypeReplacementListener werden darauf kontrolliert, ob sie von TypeInsertable erben. Diese ergeben zusammen mit den Informationen aus dem Ã¼bergebenen ResultSet einen TypeInsertPoint. Mehrere TypeInsertPoint's ergeben ein TypeInsertSet.

Parameters:
  `result` - Das ResultSet das den einzusetzenden Typ fÃ¼r diesen TPH enthÃ¤lt.
Returns:
See Also:
  `TypeInsertPoint`

#### getUnresolvedTPH

    public Menge<TypePlaceholder> getUnresolvedTPH(ResultSet resultSet)

Description copied from class: `Type`
Sucht nach TPHs in diesem Typ, denen das resultSet keinen Typ zuordnen kann.

Overrides:
  `getUnresolvedTPH` in class `Type`
Returns: