-/*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.compiler.ast;
-
-import org.eclipse.jdt.internal.compiler.ASTVisitor;
-import org.eclipse.jdt.internal.compiler.env.IConstants;
-import org.eclipse.jdt.internal.compiler.lookup.*;
-import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
-import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
-
-
-public class JavadocArgumentExpression extends Expression {
- public char[] token;
- public Argument argument;
-
- public JavadocArgumentExpression(char[] name, int startPos, int endPos, TypeReference typeRef) {
- this.token = name;
- this.sourceStart = startPos;
- this.sourceEnd = endPos;
- long pos = (((long) startPos) << 32) + endPos;
- this.argument = new Argument(name, pos, typeRef, IConstants.AccDefault);
- this.bits |= InsideJavadoc;
- }
-
- /*
- * Resolves type on a Block or Class scope.
- */
- private TypeBinding internalResolveType(Scope scope) {
- this.constant = NotAConstant;
- if (this.resolvedType != null) { // is a shared type reference which was already resolved
- if (!this.resolvedType.isValidBinding()) {
- return null; // already reported error
- }
- }
- else {
- if (this.argument != null) {
- TypeReference typeRef = this.argument.type;
- if (typeRef != null) {
- this.resolvedType = typeRef.getTypeBinding(scope);
- typeRef.resolvedType = this.resolvedType;
- if (!this.resolvedType.isValidBinding()) {
- scope.problemReporter().javadocInvalidType(typeRef, this.resolvedType, scope.getDeclarationModifiers());
- return null;
- }
- if (isTypeUseDeprecated(this.resolvedType, scope)) {
- scope.problemReporter().javadocDeprecatedType(this.resolvedType, typeRef, scope.getDeclarationModifiers());
- return null;
- }
- return this.resolvedType;
- }
- }
- }
- return null;
- }
-
- public StringBuffer printExpression(int indent, StringBuffer output) {
- if (this.argument == null) {
- if (this.token != null) {
- output.append(this.token);
- }
- }
- else {
- this.argument.print(indent, output);
- }
- return output;
- }
-
- public void resolve(BlockScope scope) {
- if (this.argument != null) {
- this.argument.resolve(scope);
- }
- }
-
- public TypeBinding resolveType(BlockScope scope) {
- return internalResolveType(scope);
- }
-
- public TypeBinding resolveType(ClassScope scope) {
- return internalResolveType(scope);
- }
-
- /* (non-Javadoc)
- * Redefine to capture javadoc specific signatures
- * @see org.eclipse.jdt.internal.compiler.ast.ASTNode#traverse(org.eclipse.jdt.internal.compiler.ASTVisitor, org.eclipse.jdt.internal.compiler.lookup.BlockScope)
- */
- public void traverse(ASTVisitor visitor, BlockScope blockScope) {
- if (visitor.visit(this, blockScope)) {
- if (this.argument != null) {
- this.argument.traverse(visitor, blockScope);
- }
- }
- visitor.endVisit(this, blockScope);
- }
-}