| /******************************************************************************* |
| * Copyright (c) 2001, 2007 Oracle 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: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.context.symbol.internal.impl; |
| |
| import java.io.IOException; |
| import java.io.Reader; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jdt.core.IMethod; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.ui.JavadocContentAccess; |
| import org.eclipse.jst.jsf.common.JSFCommonPlugin; |
| import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector; |
| import org.eclipse.jst.jsf.common.util.JDTBeanProperty; |
| import org.eclipse.jst.jsf.common.util.TypeUtil; |
| import org.eclipse.jst.jsf.context.symbol.IBeanMethodSymbol; |
| import org.eclipse.jst.jsf.context.symbol.IBeanPropertySymbol; |
| |
| /** |
| * Utility class for accessing jdt elements for jsf el symbols |
| */ |
| public class JavaUtil { |
| |
| private JavaUtil() { |
| // utility class |
| } |
| |
| /** |
| * @param method |
| * @return the javadoc text for the given method. Will return null if no javadoc is found |
| */ |
| public static String getMethodJavadoc(final IMethod method) { |
| try { |
| final Reader contentReader = JavadocContentAccess.getHTMLContentReader(method, true, true); |
| if (contentReader != null) { |
| return read(contentReader); |
| } |
| } catch (final JavaModelException e) { |
| JSFCommonPlugin.log(IStatus.WARNING, "error reading javadoc for method '" + method.getElementName() + "'.", e); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| return null; |
| } |
| |
| private static String read(final Reader rd) { |
| final StringBuffer buffer= new StringBuffer(); |
| final char[] readBuffer= new char[2048]; |
| |
| try { |
| int n= rd.read(readBuffer); |
| while (n > 0) { |
| buffer.append(readBuffer, 0, n); |
| n= rd.read(readBuffer); |
| } |
| return buffer.toString(); |
| } catch (final IOException x) { |
| // should not happen, but otherwise simply ignore |
| } |
| |
| return null; |
| } |
| |
| /** |
| * @param symbol - the method symbol to look for |
| * @return the IMethod for the given method symbol. Will return <code>null</code>, if none is found. |
| */ |
| public static IMethod findCorrespondingMethod(final IBeanMethodSymbol symbol) { |
| final IType type = symbol.getOwner().getType(); |
| final JDTBeanIntrospector introspector = new JDTBeanIntrospector(type); |
| final IMethod[] methods = introspector.getAllMethods(); |
| for (final IMethod method : methods) { |
| if (method.getElementName().equals(symbol.getName())) { |
| try { |
| final String currentMethodsSignature = TypeUtil.resolveMethodSignature(method.getDeclaringType(), |
| method.getSignature()); |
| if (currentMethodsSignature.equals(symbol.getSignature())) { |
| return method; |
| } |
| } catch (final JavaModelException e) { |
| JSFCommonPlugin.log(IStatus.WARNING, "error determining for method '" //$NON-NLS-1$ |
| + method.getElementName() + "'.", e); //$NON-NLS-1$ |
| } |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * @param propertySymbol - the property symbol to look for |
| * @return a JDTBeanProperty for the given property symbol |
| */ |
| public static JDTBeanProperty findCorrespondingJDTProperty(final IBeanPropertySymbol propertySymbol) { |
| final JDTBeanIntrospector introspector = new JDTBeanIntrospector(propertySymbol.getOwner().getType()); |
| return introspector.getProperties().get(propertySymbol.getName()); |
| } |
| } |