001    /*
002     * Copyright 2010-2013 JetBrains s.r.o.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.jetbrains.jet.rt.signature;
018    
019    import jet.typeinfo.TypeInfoVariance;
020    
021    /**
022     * @see SignatureVisitor
023     * @url http://confluence.jetbrains.net/display/JET/Jet+Signatures
024     */
025    public interface JetSignatureVisitor {
026    
027        /**
028         * Wildcard for an "extends" type argument.
029         */
030        char EXTENDS = '+';
031    
032        /**
033         * Wildcard for a "super" type argument.
034         */
035        char SUPER = '-';
036    
037        /**
038         * Wildcard for a normal type argument.
039         */
040        char INSTANCEOF = '=';
041    
042        /**
043         * Visits a formal type parameter.
044         *
045         * TODO should not store reified flag in signature
046         *
047         * @param name the name of the formal parameter.
048         */
049        JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance, boolean reified);
050    
051        void visitFormalTypeParameterEnd();
052    
053        /**
054         * Visits the class bound of the last visited formal type parameter.
055         *
056         * @return a non null visitor to visit the signature of the class bound.
057         */
058        JetSignatureVisitor visitClassBound();
059    
060        /**
061         * Visits an interface bound of the last visited formal type parameter.
062         *
063         * @return a non null visitor to visit the signature of the interface bound.
064         */
065        JetSignatureVisitor visitInterfaceBound();
066    
067        /**
068         * Visits the type of the super class.
069         *
070         * @return a non null visitor to visit the signature of the super class
071         *         type.
072         */
073        JetSignatureVisitor visitSuperclass();
074    
075        /**
076         * Visits the type of an interface implemented by the class.
077         *
078         * @return a non null visitor to visit the signature of the interface type.
079         */
080        JetSignatureVisitor visitInterface();
081    
082        /**
083         * Visits the type of a method parameter.
084         *
085         * @return a non null visitor to visit the signature of the parameter type.
086         */
087        JetSignatureVisitor visitParameterType();
088    
089        /**
090         * Visits the return type of the method.
091         *
092         * @return a non null visitor to visit the signature of the return type.
093         */
094        JetSignatureVisitor visitReturnType();
095    
096        /**
097         * Visits the type of a method exception.
098         *
099         * @return a non null visitor to visit the signature of the exception type.
100         */
101        JetSignatureVisitor visitExceptionType();
102    
103        /**
104         * Visits a signature corresponding to a primitive type.
105         *
106         * @param descriptor the descriptor of the primitive type, or 'V' for
107         *        <tt>void</tt>.
108         */
109        void visitBaseType(char descriptor, boolean nullable);
110    
111        /**
112         * Visits a signature corresponding to a type variable.
113         *
114         * @param name the name of the type variable.
115         */
116        void visitTypeVariable(String name, boolean nullable);
117    
118        /**
119         * Visits a signature corresponding to an array type.
120         *
121         * @return a non null visitor to visit the signature of the array element
122         *         type.
123         */
124        JetSignatureVisitor visitArrayType(boolean nullable, JetSignatureVariance wildcard);
125    
126        /**
127         * Starts the visit of a signature corresponding to a class or interface
128         * type.
129         *
130         * @param name the internal name of the class or interface.
131         */
132        void visitClassType(String name, boolean nullable, boolean forceReal);
133    
134        /**
135         * Visits an inner class.
136         *
137         * @param name the full name of the inner class.
138         */
139        void visitInnerClassType(String name, boolean nullable, boolean forceReal);
140    
141        /**
142         * Visits an unbounded type argument of the last visited class or inner
143         * class type.
144         */
145        void visitTypeArgument();
146    
147        /**
148         * Visits a type argument of the last visited class or inner class type.
149         *
150         * @param wildcard '+', '-' or '='.
151         * @return a non null visitor to visit the signature of the type argument.
152         */
153        JetSignatureVisitor visitTypeArgument(JetSignatureVariance wildcard);
154    
155        /**
156         * Ends the visit of a signature corresponding to a class or interface type.
157         */
158        void visitEnd();
159    }