Example usage for org.aspectj.asm IProgramElement getCorrespondingTypeSignature

List of usage examples for org.aspectj.asm IProgramElement getCorrespondingTypeSignature

Introduction

In this page you can find the example usage for org.aspectj.asm IProgramElement getCorrespondingTypeSignature.

Prototype

public String getCorrespondingTypeSignature();

Source Link

Usage

From source file:org.eclipse.ajdt.core.parserbridge.ITDInserter.java

License:Open Source License

/**
 * Adds all children field and methods to this ITIT
 * @param ititAST//from w w  w  .j  a v a  2s  .  c  o  m
 * @param elt the AspectJ element that knows about children 
 */
private void populateITIT(TypeDeclaration ititAST, IProgramElement elt) {
    List<FieldDeclaration> fields = new LinkedList<FieldDeclaration>();
    List<FieldBinding> fieldBindings = new LinkedList<FieldBinding>();
    List<AbstractMethodDeclaration> methods = new LinkedList<AbstractMethodDeclaration>();
    List<MethodBinding> methodBindings = new LinkedList<MethodBinding>();

    for (IProgramElement child : elt.getChildren()) {
        if (child.getKind() == IProgramElement.Kind.FIELD) {
            FieldDeclaration field = createField(child, ititAST);
            fields.add(field);
            fieldBindings.add(new FieldBinding(field,
                    getReturnTypeBinding(child.getCorrespondingTypeSignature().toCharArray(), ititAST.binding),
                    field.modifiers, ititAST.binding));
        } else if (child.getKind() == IProgramElement.Kind.METHOD) {
            MethodDeclaration method = createMethod(child, ititAST, null);
            methods.add(method);
            methodBindings.add(new MethodBinding(method.modifiers, method.selector,
                    getReturnTypeBinding(child.getCorrespondingTypeSignature().toCharArray(), ititAST.binding),
                    getParameterBindings(elt, ititAST.binding), new ReferenceBinding[0], ititAST.binding));
        }
    }
    ititAST.fields = (FieldDeclaration[]) fields.toArray(new FieldDeclaration[0]);
    ititAST.methods = (AbstractMethodDeclaration[]) methods.toArray(new MethodDeclaration[0]);

    // figure out how to make type bindings and figure out method bindings
    ititAST.binding.setFields(fieldBindings.toArray(new FieldBinding[0]));
}

From source file:org.eclipse.ajdt.core.parserbridge.ITDInserter.java

License:Open Source License

private MethodDeclaration createMethod(IProgramElement method, TypeDeclaration type, IType handle) {
    MethodDeclaration decl = new MethodDeclaration(type.compilationResult);
    decl.scope = new MethodScope(type.scope, decl, true);

    String[] split = method.getName().split("\\.");
    decl.selector = split[split.length - 1].toCharArray();
    decl.modifiers = method.getRawModifiers();

    decl.returnType = createTypeReference(method.getCorrespondingType(true));
    decl.modifiers = method.getRawModifiers();
    Argument[] args = method.getParameterTypes() != null ? new Argument[method.getParameterTypes().size()]
            : new Argument[0];
    try {/*w  w w  .  ja va  2  s.  c  o  m*/
        ErasedTypeSignature sig = null;
        if (handle != null) {
            AJWorldFacade world = new AJWorldFacade(handle.getJavaProject().getProject());
            sig = world.getMethodTypeSignatures(
                    Signature.createTypeSignature(handle.getFullyQualifiedName(), true), method);
        }
        if (sig == null) {
            String[] params = new String[method.getParameterTypes().size()];
            for (int i = 0; i < params.length; i++) {
                params[i] = new String(Signature.getTypeErasure((char[]) method.getParameterTypes().get(i)));
            }
            sig = new ErasedTypeSignature(method.getCorrespondingTypeSignature(), params);
        }

        List<String> pNames = method.getParameterNames();
        // bug 270123... no parameter names if coming in from a jar and
        // not build with debug info...mock it up.
        if (pNames == null || pNames.size() != args.length) {
            pNames = new ArrayList<String>(args.length);
            for (int i = 0; i < args.length; i++) {
                pNames.add("args" + i);
            }
        }
        for (int i = 0; i < args.length; i++) {
            args[i] = new Argument(((String) pNames.get(i)).toCharArray(), 0,
                    createTypeReference(Signature.getElementType(sig.paramTypes[i])), 0);
        }

        decl.returnType = createTypeReferenceFromSignature(sig.returnTypeSig);
        decl.typeParameters = createTypeParameters(sig.typeParameters);
    } catch (Exception e) {
        AJLog.log("Exception occurred in ITDInserter.createMethod().  (Ignoring)");
        AJLog.log("Relevant method: " + method.getParent().getName() + "." + method.getName());
        List<String> pNames = method.getParameterNames();
        // bug 270123... no parameter names if coming in from a jar and
        // not build with debug info...mock it up.
        if (pNames == null || pNames.size() != args.length) {
            pNames = new ArrayList<String>(args.length);
            for (int i = 0; i < args.length; i++) {
                pNames.add("args" + i);
            }
        }
        for (int i = 0; i < args.length; i++) {
            args[i] = new Argument(((String) pNames.get(i)).toCharArray(), 0,
                    createTypeReference(new String((char[]) method.getParameterTypes().get(i))), 0);
        }
    }
    decl.arguments = args;
    return decl;
}