本文整理汇总了Java中org.eclipse.xtext.xbase.XClosure.getFormalParameters方法的典型用法代码示例。如果您正苦于以下问题:Java XClosure.getFormalParameters方法的具体用法?Java XClosure.getFormalParameters怎么用?Java XClosure.getFormalParameters使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.eclipse.xtext.xbase.XClosure
的用法示例。
在下文中一共展示了XClosure.getFormalParameters方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: checkClosureParameterTypes
import org.eclipse.xtext.xbase.XClosure; //导入方法依赖的package包/类
@Check
public void checkClosureParameterTypes(XClosure closure) {
if (closure.getFormalParameters().isEmpty())
return;
LightweightTypeReference closureType = getActualType(closure);
if (closureType != null && closureType.isUnknown())
return;
boolean checkedClosure = false;
for (JvmFormalParameter p : closure.getFormalParameters()) {
if (p.getParameterType() == null) {
if (!checkedClosure) {
LightweightTypeReference type = getExpectedType(closure);
if (type == null) {
error("There is no context to infer the closure's argument types from. Consider typing the arguments or put the closures into a typed context.",
closure, null, INSIGNIFICANT_INDEX, TOO_LITTLE_TYPE_INFORMATION);
return;
} else {
JvmOperation operation = getServices().getFunctionTypes().findImplementingOperation(type);
if (operation == null) {
error("There is no context to infer the closure's argument types from. Consider typing the arguments or use the closures in a more specific context.",
closure, null, INSIGNIFICANT_INDEX, TOO_LITTLE_TYPE_INFORMATION);
return;
}
}
checkedClosure = true;
}
LightweightTypeReference parameterType = getActualType(closure, p);
if (parameterType == null) {
error("There is no context to infer the closure's argument types from. Consider typing the arguments or use the closures in a more specific context.",
closure, null, INSIGNIFICANT_INDEX, TOO_LITTLE_TYPE_INFORMATION);
return;
}
}
}
}
示例2: toAnonymousClass
import org.eclipse.xtext.xbase.XClosure; //导入方法依赖的package包/类
protected ITreeAppendable toAnonymousClass(final XClosure closure, final ITreeAppendable b, LightweightTypeReference type,
JvmOperation operation) {
b.append("new ");
b.append(type);
b.append("() {");
b.increaseIndentation();
try {
b.openScope();
String selfVariable = null;
if (needSyntheticSelfVariable(closure, type)) {
b.newLine().append("final ");
b.append(type).append(" ");
selfVariable = b.declareVariable(type.getType(), "_self");
b.append(selfVariable);
b.append(" = this;");
}
final LightweightTypeReference returnType = getClosureOperationReturnType(type, operation);
appendOperationVisibility(b, operation);
if (!operation.getTypeParameters().isEmpty()) {
appendTypeParameters(b, operation, type);
}
b.append(returnType);
b.append(" ").append(operation.getSimpleName());
b.append("(");
List<JvmFormalParameter> closureParams = closure.getFormalParameters();
boolean isVarArgs = operation.isVarArgs();
for (int i = 0; i < closureParams.size(); i++) {
JvmFormalParameter closureParam = closureParams.get(i);
LightweightTypeReference parameterType = getClosureOperationParameterType(type, operation, i);
if (isVarArgs && i == closureParams.size()-1 && parameterType.isArray()) {
appendClosureParameterVarArgs(closureParam, parameterType.getComponentType(), b);
} else {
appendClosureParameter(closureParam, parameterType, b);
}
if (i != closureParams.size() - 1)
b.append(", ");
}
b.append(")");
if(!operation.getExceptions().isEmpty()) {
b.append(" throws ");
for (int i = 0; i < operation.getExceptions().size(); ++i) {
serialize(operation.getExceptions().get(i), closure, b, false, false, false, false);
if(i != operation.getExceptions().size() -1)
b.append(", ");
}
}
b.append(" {");
b.increaseIndentation();
if (selfVariable == null) {
reassignThisInClosure(b, type.getType());
} else {
// We have already assigned the closure type to _self, so don't assign it again
reassignThisInClosure(b, null);
}
compile(closure.getExpression(), b, returnType, newHashSet(operation.getExceptions()));
closeBlock(b);
} finally {
b.closeScope();
}
return b.decreaseIndentation().newLine().append("}");
}
示例3: toLambda
import org.eclipse.xtext.xbase.XClosure; //导入方法依赖的package包/类
protected ITreeAppendable toLambda(XClosure closure, ITreeAppendable b, LightweightTypeReference type,
JvmOperation operation, boolean writeExplicitTargetType) {
if (writeExplicitTargetType) {
b.append("((");
b.append(type);
b.append(") ");
}
try {
b.openPseudoScope();
b.append("(");
List<JvmFormalParameter> closureParams = closure.getFormalParameters();
boolean isVarArgs = operation.isVarArgs();
for (int i = 0; i < closureParams.size(); i++) {
JvmFormalParameter closureParam = closureParams.get(i);
LightweightTypeReference parameterType = getClosureOperationParameterType(type, operation, i);
if (isVarArgs && i == closureParams.size()-1 && parameterType.isArray()) {
b.append(parameterType.getComponentType());
b.append("...");
} else {
b.append(parameterType);
}
b.append(" ");
String proposedParamName = makeJavaIdentifier(closureParam.getName());
// Usually a normal variable would suffice here. The 'unique name' variable is a workaround for
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=445949
String name = b.declareUniqueNameVariable(closureParam, proposedParamName);
b.append(name);
if (i != closureParams.size() - 1)
b.append(", ");
}
b.append(") -> {");
b.increaseIndentation();
LightweightTypeReference returnType = getClosureOperationReturnType(type, operation);
compile(closure.getExpression(), b, returnType, newHashSet(operation.getExceptions()));
closeBlock(b);
} finally {
b.closeScope();
}
if (writeExplicitTargetType) {
b.append(")");
}
return b;
}