View Javadoc
1   package de.fhdw.wtf.common.ast;
2   
3   import de.fhdw.wtf.common.ast.visitor.NameReturnVisitor;
4   import de.fhdw.wtf.common.ast.visitor.NameVisitor;
5   import de.fhdw.wtf.common.ast.visitor.NameVisitorReturnBoolean;
6   import de.fhdw.wtf.common.ast.visitor.NameVisitorReturnName;
7   import de.fhdw.wtf.common.ast.visitor.NameVisitorReturnNameException;
8   import de.fhdw.wtf.common.exception.referencer.InvalidTypeReferenceException;
9   import de.fhdw.wtf.common.token.IdentifierToken;
10  import de.fhdw.wtf.common.token.Token;
11  
12  /**
13   * This class represents either a qualified name({@link QualifiedName}) or an unqualified name({@link UnqualifiedName}).
14   * 
15   */
16  public interface Name extends SyntaxObjectInterface {
17  	
18  	/**
19  	 * Add the identifierToken to the given hierarchy. Uses dummy-token as lastToken
20  	 * 
21  	 * @param identifierToken
22  	 *            new token to add.
23  	 * @return Name with added identifierToken
24  	 */
25  	Name addName(IdentifierToken identifierToken);
26  	
27  	/**
28  	 * Add the identifierToken to the given hierarchy.
29  	 * 
30  	 * @param lastToken
31  	 *            token to use as lastToken for Name
32  	 * @param identifierToken
33  	 *            new token to add.
34  	 * @return Name with added identifierToken
35  	 */
36  	Name addName(IdentifierToken identifierToken, Token lastToken);
37  	
38  	/**
39  	 * Visit-method for the {@link NameVisitorReturnName}-Visitor.
40  	 * 
41  	 * @param v
42  	 *            : NameVisitorForConcat
43  	 * @return : Name.
44  	 */
45  	Name visit(NameVisitorReturnName v);
46  	
47  	/**
48  	 * Visit-method for the {@link NameVisitor}-Visitor.
49  	 * 
50  	 * @param v
51  	 *            : NameVisitor.
52  	 * @throws InvalidTypeReferenceException
53  	 *             possible Exception
54  	 */
55  	void visit(NameVisitor v) throws InvalidTypeReferenceException;
56  	
57  	/**
58  	 * Visit-method for the {@link NameVisitorReturnBoolean}-Visitor.
59  	 * 
60  	 * @param v
61  	 *            : NameVisitor.
62  	 * @return Boolean
63  	 */
64  	boolean visit(NameVisitorReturnBoolean v);
65  	
66  	/**
67  	 * Visit-method for the {@link NameVisitorReturnNameException}-Visitor.
68  	 * 
69  	 * @param v
70  	 *            : NameVisitorException.
71  	 * @return Name
72  	 * @throws InvalidTypeReferenceException
73  	 *             possible Exception
74  	 */
75  	Name visit(NameVisitorReturnNameException<InvalidTypeReferenceException> v) throws InvalidTypeReferenceException;
76  	
77  	/**
78  	 * Visit-method for the {@link NameReturnVisitor}-Visitor.
79  	 * 
80  	 * @param v
81  	 *            Visitor
82  	 * @param <X>
83  	 *            ReturnType
84  	 * @return X
85  	 */
86  	<X> X visit(NameReturnVisitor<X> v);
87  	
88  	/**
89  	 * Concats <code>this</code> with the parameter <code>name</code>. Returns a new Name.
90  	 * 
91  	 * @param name
92  	 *            : Name.
93  	 * @return : Name.
94  	 */
95  	Name concat(Name name);
96  	
97  	/**
98  	 * This method returns true, if the last added name to <code>this</code> equals the first added part of
99  	 * <code>name</code>. False otherwise.
100 	 * 
101 	 * @param name
102 	 *            : Name.
103 	 * @return : boolean.
104 	 */
105 	boolean equalsPartial(Name name);
106 	
107 	/**
108 	 * Returns the last part of <code>this</code>.<br/>
109 	 * If <code>this</code> is an {@link UnqualifiedName} it will return itself.<br/>
110 	 * If <code>this</code> is a {@link QualifiedName} it will return the last UnqualifiedName of the QualifiedName.
111 	 * 
112 	 * @return : UnqualifiedName.
113 	 */
114 	UnqualifiedName getLastAddedName();
115 }