/**
* Copyright (c) 2008 Borland Software Corp.
*
* 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:
* Alexander Shatalin (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.xpand.migration;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.gmf.internal.xpand.expression.SyntaxConstants;
import org.eclipse.gmf.internal.xpand.expression.ast.DeclaredParameter;
import org.eclipse.gmf.internal.xpand.expression.ast.Identifier;
import org.eclipse.gmf.internal.xpand.xtend.ast.JavaExtensionStatement;
public class JavaExtensionDescriptor {
public static final String NATIVE_LIBRARY_CLASS_PREFIX = "Native";
private String extensionName;
private String className;
private String methodName;
private EClassifier returnType;
private List<EClassifier> parameterTypes = new ArrayList<EClassifier>();
private List<String> parameterNames = new ArrayList<String>();
private List<String> javaParameterTypes = new ArrayList<String>();
private boolean staticQvtoCall;
public static String getNativeLibraryName(JavaExtensionStatement extension) {
String name = extension.getExtensionFile().getFullyQualifiedName();
int delimiterIndex = name.lastIndexOf(SyntaxConstants.NS_DELIM);
if (delimiterIndex < 0) {
return NATIVE_LIBRARY_CLASS_PREFIX + name;
}
String packageName = name.substring(0, delimiterIndex);
name = name.substring(delimiterIndex + SyntaxConstants.NS_DELIM.length());
return packageName + SyntaxConstants.NS_DELIM + NATIVE_LIBRARY_CLASS_PREFIX + name;
}
public JavaExtensionDescriptor(JavaExtensionStatement javaExtension, MigrationExecutionContext ctx) {
extensionName = javaExtension.getName();
className = javaExtension.getJavaType().getValue();
methodName = javaExtension.getJavaMethod().getValue();
assert javaExtension.getReturnTypeIdentifier() != null;
returnType = ctx.getTypeForName(javaExtension.getReturnTypeIdentifier().getValue());
for (DeclaredParameter parameter : javaExtension.getFormalParameters()) {
parameterTypes.add(ctx.getTypeForName(parameter.getType().getValue()));
parameterNames.add(parameter.getName().getValue());
}
assert javaExtension.getFormalParameters().size() == javaExtension.getJavaParameterTypes().size();
for (Identifier paramType : javaExtension.getJavaParameterTypes()) {
javaParameterTypes.add(paramType.getValue());
}
staticQvtoCall = OperationCallTrace.isStaticQvtoCall(ctx, javaExtension);
}
public String getExtensionName() {
return extensionName;
}
public String getClassName() {
return className;
}
public String getMethodName() {
return methodName;
}
public EClassifier getReturnType() {
return returnType;
}
public List<EClassifier> getParameterTypes() {
return parameterTypes;
}
public List<String> getParameterNames() {
return parameterNames;
}
public List<String> getJavaParameterTypes() {
return javaParameterTypes;
}
public boolean isStaticQvtoCall() {
return staticQvtoCall;
}
}