001    /* Copyright (c) 2014, Erik Hogeman <Erik.Hogemn@gmail.com>
002     * All rights reserved.
003     *
004     * Redistribution and use in source and binary forms, with or without
005     * modification, are permitted provided that the following conditions are met:
006     *
007     *     * Redistributions of source code must retain the above copyright notice,
008     *       this list of conditions and the following disclaimer.
009     *     * Redistributions in binary form must reproduce the above copyright
010     *       notice, this list of conditions and the following disclaimer in the
011     *       documentation and/or other materials provided with the distribution.
012     *     * Neither the name of the Lund University nor the names of its
013     *       contributors may be used to endorse or promote products derived from
014     *       this software without specific prior written permission.
015     *
016     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
017     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
018     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
019     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
020     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
021     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
022     * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
023     * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
024     * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
025     * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
026     * POSSIBILITY OF SUCH DAMAGE.
027     */
028    aspect Variables {
029      InferredParameterDeclaration implements Variable;
030      syn boolean InferredParameterDeclaration.isParameter() = true;
031      syn boolean InferredParameterDeclaration.isClassVariable() = false;
032      syn boolean InferredParameterDeclaration.isInstanceVariable() = false;
033      syn boolean InferredParameterDeclaration.isConstructorParameter() = false;
034      syn boolean InferredParameterDeclaration.isExceptionHandlerParameter() = false;
035      syn boolean InferredParameterDeclaration.isMethodParameter() = false;
036      syn boolean InferredParameterDeclaration.isLocalVariable() = false;
037      syn boolean InferredParameterDeclaration.isFinal() = false;
038      syn boolean InferredParameterDeclaration.isVolatile() = false;
039      syn boolean InferredParameterDeclaration.isBlank() = true;
040      syn boolean InferredParameterDeclaration.isStatic() = false;
041      syn boolean InferredParameterDeclaration.isSynthetic() = false;
042    
043      eq InferredParameterDeclaration.sourceVariableDecl() = this;
044    
045      syn Modifiers InferredParameterDeclaration.getModifiers() = null;
046    
047      syn boolean InferredParameterDeclaration.hasInit() = false;
048    
049      syn Expr InferredParameterDeclaration.getInit() {
050        throw new UnsupportedOperationException();
051      }
052    
053      syn Constant InferredParameterDeclaration.constant() {
054        throw new UnsupportedOperationException();
055      }
056    
057      syn Collection<TypeDecl> InferredParameterDeclaration.throwTypes() = null;
058    
059      syn TypeDecl InferredParameterDeclaration.type() = inferredType();
060    
061      syn TypeDecl InferredParameterDeclaration.hostType() {
062        if (getParent().getParent() instanceof LambdaExpr) {
063          return ((LambdaExpr)getParent().getParent()).hostType();
064        } else {
065          return ((LambdaExpr)getParent().getParent().getParent()).hostType();
066        }
067      }
068    }