blob: 0abeefb8498d9d394b0d9cefda9e1cedaa5551b6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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
* Sian January - initial version
*******************************************************************************/
package org.eclipse.ajdt.core.javaelements;
import java.util.List;
import org.aspectj.asm.IProgramElement;
import org.aspectj.asm.IProgramElement.Accessibility;
import org.aspectj.asm.IProgramElement.ExtraInformation;
import org.aspectj.asm.IProgramElement.Kind;
import org.aspectj.bridge.ISourceLocation;
import org.eclipse.ajdt.core.model.AJProjectModelFactory;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.JavaElement;
import org.eclipse.jdt.internal.core.SourceMethod;
/**
* Mocks up a source method that is below an aspect declaration
*
* hmmmm....what about binary methods?
* what about fields?
*/
public class MockSourceMethod extends SourceMethod {
private MethodElementInfo elementInfo;
public MockSourceMethod(JavaElement parent, String name,
String[] parameterTypes) {
super(parent, name, parameterTypes);
this.elementInfo = null;
}
public MockSourceMethod(JavaElement parent, String name,
String[] parameterTypes, MethodElementInfo elementInfo) {
super(parent, name, parameterTypes);
this.elementInfo = elementInfo;
}
public MockSourceMethod(JavaElement parent, String name, String[] parameterTypes, int offset, String accessibility) {
super(parent, name, parameterTypes);
elementInfo = new MethodElementInfo();
if (accessibility != null) {
if(accessibility.equals(Accessibility.PRIVATE.toString())) {
elementInfo.setAJAccessibility(Accessibility.PRIVATE);
} else if(accessibility.equals(Accessibility.PROTECTED.toString())) {
elementInfo.setAJAccessibility(Accessibility.PROTECTED);
} else if(accessibility.equals(Accessibility.PUBLIC.toString())) {
elementInfo.setAJAccessibility(Accessibility.PUBLIC);
} else if(accessibility.equals(Accessibility.PACKAGE.toString())) {
elementInfo.setAJAccessibility(Accessibility.PACKAGE);
} else if(accessibility.equals(Accessibility.PRIVILEGED.toString())) {
elementInfo.setAJAccessibility(Accessibility.PRIVILEGED);
}
}
elementInfo.setSourceRangeStart(offset);
elementInfo.setName(name.toCharArray());
elementInfo.setAJKind(Kind.METHOD);
}
public Kind getAJKind() throws JavaModelException {
return Kind.METHOD;
}
public Accessibility getAJAccessibility() throws JavaModelException {
return elementInfo.accessibility;
}
public List getAJModifiers() throws JavaModelException {
return elementInfo.modifiers;
}
public ExtraInformation getAJExtraInformation() throws JavaModelException {
return elementInfo.extra;
}
protected Object createElementInfo() {
if (elementInfo != null) {
return elementInfo;
}
try {
IProgramElement ipe = AJProjectModelFactory.getInstance().getModelForJavaElement(this)
.javaElementToProgramElement(this);
elementInfo = new MethodElementInfo();
ISourceLocation sourceLocation = ipe.getSourceLocation();
elementInfo.setSourceRangeStart(sourceLocation.getOffset());
elementInfo.setNameSourceStart(sourceLocation.getOffset());
elementInfo.setNameSourceEnd(sourceLocation.getOffset() + ipe.getName().length());
elementInfo.setAJExtraInfo(ipe.getExtraInfo());
elementInfo.setName(name.toCharArray());
elementInfo.setAJKind(IProgramElement.Kind.METHOD);
elementInfo.setAJModifiers(ipe.getModifiers());
elementInfo.setAJAccessibility(ipe.getAccessibility());
return elementInfo;
} catch (Exception e) {
// can fail for any of a number of reasons.
// return null so that we can try again later.
return null;
}
}
public static class MethodElementInfo extends AspectJMemberElementInfo {
}
}