blob: 1054de3b37c2f679e4248b84d59b4d676b2551a1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.codeassist.select;
import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.lookup.*;
/**
* Node representing a Javadoc comment including code selection.
*/
public class SelectionJavadoc extends Javadoc {
Expression selectedNode;
public SelectionJavadoc(int sourceStart, int sourceEnd) {
super(sourceStart, sourceEnd);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.compiler.ast.Javadoc#print(int, java.lang.StringBuffer)
*/
public StringBuffer print(int indent, StringBuffer output) {
super.print(indent, output);
if (this.selectedNode != null) {
String selectedString = null;
if (this.selectedNode instanceof JavadocFieldReference) {
JavadocFieldReference fieldRef = (JavadocFieldReference) this.selectedNode;
if (fieldRef.methodBinding != null) {
selectedString = "<SelectOnMethod:"; //$NON-NLS-1$
} else {
selectedString = "<SelectOnField:"; //$NON-NLS-1$
}
} else if (this.selectedNode instanceof JavadocMessageSend) {
selectedString = "<SelectOnMethod:"; //$NON-NLS-1$
} else if (this.selectedNode instanceof JavadocAllocationExpression) {
selectedString = "<SelectOnConstructor:"; //$NON-NLS-1$
} else if (this.selectedNode instanceof JavadocSingleNameReference) {
selectedString = "<SelectOnLocalVariable:"; //$NON-NLS-1$
} else if (this.selectedNode instanceof JavadocSingleTypeReference) {
JavadocSingleTypeReference typeRef = (JavadocSingleTypeReference) this.selectedNode;
if (typeRef.packageBinding == null) {
selectedString = "<SelectOnType:"; //$NON-NLS-1$
}
} else if (this.selectedNode instanceof JavadocQualifiedTypeReference) {
JavadocQualifiedTypeReference typeRef = (JavadocQualifiedTypeReference) this.selectedNode;
if (typeRef.packageBinding == null) {
selectedString = "<SelectOnType:"; //$NON-NLS-1$
}
} else {
selectedString = "<SelectOnType:"; //$NON-NLS-1$
}
int pos = output.length()-3;
output.replace(pos-2,pos, selectedString+selectedNode+'>');
}
return output;
}
/**
* Resolve selected node if not null and throw exception to let clients know
* that it has been found.
*
* @throws SelectionNodeFound
*/
public void resolve(ClassScope scope) {
if (this.selectedNode != null) {
this.selectedNode.resolveType(scope);
Binding binding = null;
if (this.selectedNode instanceof JavadocFieldReference) {
JavadocFieldReference fieldRef = (JavadocFieldReference) this.selectedNode;
binding = fieldRef.binding;
if (binding == null && fieldRef.methodBinding != null) {
binding = fieldRef.methodBinding;
}
} else if (this.selectedNode instanceof JavadocMessageSend) {
binding = ((JavadocMessageSend) this.selectedNode).binding;
} else if (this.selectedNode instanceof JavadocAllocationExpression) {
binding = ((JavadocAllocationExpression) this.selectedNode).binding;
} else if (this.selectedNode instanceof JavadocSingleNameReference) {
binding = ((JavadocSingleNameReference) this.selectedNode).binding;
} else if (this.selectedNode instanceof JavadocSingleTypeReference) {
JavadocSingleTypeReference typeRef = (JavadocSingleTypeReference) this.selectedNode;
if (typeRef.packageBinding == null) {
binding = typeRef.resolvedType;
}
} else if (this.selectedNode instanceof JavadocQualifiedTypeReference) {
JavadocQualifiedTypeReference typeRef = (JavadocQualifiedTypeReference) this.selectedNode;
if (typeRef.packageBinding == null) {
binding = typeRef.resolvedType;
}
} else {
binding = this.selectedNode.resolvedType;
}
throw new SelectionNodeFound(binding);
}
}
/**
* Resolve selected node if not null and throw exception to let clients know
* that it has been found.
*
* @throws SelectionNodeFound
*/
public void resolve(MethodScope scope) {
if (this.selectedNode != null) {
this.selectedNode.resolveType(scope);
Binding binding = null;
if (this.selectedNode instanceof JavadocFieldReference) {
JavadocFieldReference fieldRef = (JavadocFieldReference) this.selectedNode;
binding = fieldRef.binding;
if (binding == null && fieldRef.methodBinding != null) {
binding = fieldRef.methodBinding;
}
} else if (this.selectedNode instanceof JavadocMessageSend) {
binding = ((JavadocMessageSend) this.selectedNode).binding;
} else if (this.selectedNode instanceof JavadocAllocationExpression) {
binding = ((JavadocAllocationExpression) this.selectedNode).binding;
} else if (this.selectedNode instanceof JavadocSingleNameReference) {
binding = ((JavadocSingleNameReference) this.selectedNode).binding;
} else if (this.selectedNode instanceof JavadocSingleTypeReference) {
JavadocSingleTypeReference typeRef = (JavadocSingleTypeReference) this.selectedNode;
if (typeRef.packageBinding == null) {
binding = typeRef.resolvedType;
}
} else if (this.selectedNode instanceof JavadocQualifiedTypeReference) {
JavadocQualifiedTypeReference typeRef = (JavadocQualifiedTypeReference) this.selectedNode;
if (typeRef.packageBinding == null) {
binding = typeRef.resolvedType;
}
} else {
binding = this.selectedNode.resolvedType;
}
throw new SelectionNodeFound(binding);
}
}
}