List of usage examples for org.aspectj.asm IProgramElement getCorrespondingTypeSignature
public String getCorrespondingTypeSignature();
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; }