Package org.aspectj.tools.ajdoc

Source Code of org.aspectj.tools.ajdoc.StructureUtil

/* *******************************************************************
* Copyright (c) 2003 Contributors.
* 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:
*     Mik Kersten     initial implementation
* ******************************************************************/
package org.aspectj.tools.ajdoc;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.aspectj.asm.AsmManager;
import org.aspectj.asm.IProgramElement;
import org.aspectj.asm.IRelationship;

/**
* @author Mik Kersten
*/
public class StructureUtil {

 
  /**
   * @return  null if a relationship of that kind is not found
   */
  public static List/*IProgramElement*/ getTargets(IProgramElement node, IRelationship.Kind kind) {
      List relations = AsmManager.getDefault().getRelationshipMap().get(node);
    List targets = null;
      if (relations == null) return null;
    for (Iterator it = relations.iterator(); it.hasNext(); ) {
          IRelationship rtn = (IRelationship)it.next();
          if (rtn.getKind().equals(kind)) {
            targets = rtn.getTargets();
          }
       }
    return targets;
  }

  public static List/*IProgramElement*/ getDeclareTargets(IProgramElement node) {
      List relations = AsmManager.getDefault().getRelationshipMap().get(node);
    List targets = null;
      if (relations == null) return null;
    for (Iterator it = relations.iterator(); it.hasNext(); ) {
          IRelationship rtn = (IRelationship)it.next();
          if (rtn.getKind().isDeclareKind()) {
            targets = rtn.getTargets();
          }
       }
    return targets;
  }
 
  public static String getPackageDeclarationFromFile(File file) {
      IProgramElement fileNode = (IProgramElement)AsmManager.getDefault().getHierarchy().findElementForSourceFile(file.getAbsolutePath());
      String packageName = ((IProgramElement)fileNode.getChildren().get(0)).getPackageName();
      return packageName;
  }
 
  public static String genSignature(IProgramElement node) {
    StringBuffer sb = new StringBuffer();
   
    String accessibility = node.getAccessibility().toString();
    if (!accessibility.equals("package")) {
      sb.append(accessibility);
      sb.append(' ');
    }
   
    String modifiers = "";
    for (Iterator modIt = node.getModifiers().iterator(); modIt.hasNext(); ) {
      modifiers += modIt.next() + " ";
    }
 
    if (node.getKind().equals(IProgramElement.Kind.METHOD) ||
      node.getKind().equals(IProgramElement.Kind.FIELD)) {
      sb.append(node.getCorrespondingType());
      sb.append(' ');
    }

    if (node.getKind().equals(IProgramElement.Kind.CLASS)) {
      sb.append("class ");
    } else if (node.getKind().equals(IProgramElement.Kind.INTERFACE)) {
      sb.append("interface ");
    }

    sb.append(node.getName());
   
    if (node.getParameterTypes() != null ) {
      sb.append('(');
      for (int i = 0; i < node.getParameterTypes().size(); i++) {
        sb.append((String)node.getParameterTypes().get(i));
        sb.append(' ');
        sb.append((String)node.getParameterNames().get(i));
        if (i < node.getParameterTypes().size()-1) {
          sb.append(", ");
        }
      }
      sb.append(')');
    }
   
    return sb.toString();
  }

  public static boolean isAnonymous(IProgramElement node) {
    boolean isIntName = true;
    try {
      Integer.valueOf(node.getName());
    } catch (NumberFormatException nfe) {
      // !!! using exceptions for logic, fix
      isIntName = false;
    }
//    System.err.println(">>>>>>>> " + node.getName());
    return isIntName || node.getName().startsWith("new ");
//    return isIntName;
//    if (!isIntName) {
//      
//      return node.getName().startsWith("new ");
//    } else {
//      return false;
//    }
  }

  /**
   * @return  same path, but ending in ".java" instead of ".aj"
   */
  public static String translateAjPathName(String path) {
      if (path.endsWith(".aj")) {
        path = path.substring(0, path.lastIndexOf(".aj")) + ".java";
      }
      return path;
  }
}
TOP

Related Classes of org.aspectj.tools.ajdoc.StructureUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.