use of org.eclipse.jdt.core.dom.ParameterizedType in project eclipse.jdt.ls by eclipse.
the class IntroduceParameterRefactoring method addParameterInfo.
private void addParameterInfo(CompilationUnitRewrite cuRewrite) throws JavaModelException {
ITypeBinding typeBinding = Bindings.normalizeForDeclarationUse(fSelectedExpression.resolveTypeBinding(), fSelectedExpression.getAST());
String name = fParameterName != null ? fParameterName : guessedParameterName();
Expression expression = ASTNodes.getUnparenthesedExpression(fSelectedExpression);
ImportRewrite importRewrite = cuRewrite.getImportRewrite();
ImportRewriteContext importRewriteContext = new ContextSensitiveImportRewriteContext(fSelectedExpression, importRewrite);
String typeName = importRewrite.addImport(typeBinding, importRewriteContext);
String defaultValue = null;
if (expression instanceof ClassInstanceCreation && typeBinding.isParameterizedType()) {
ClassInstanceCreation classInstanceCreation = (ClassInstanceCreation) expression;
Type cicType = classInstanceCreation.getType();
if (cicType instanceof ParameterizedType && ((ParameterizedType) cicType).typeArguments().size() == 0) {
// expand the diamond:
AST ast = cuRewrite.getAST();
Type type = importRewrite.addImport(typeBinding, ast, importRewriteContext);
// Should not touch the original AST ...
classInstanceCreation.setType(type);
Map<String, String> settings = FormatterHandler.getCombinedDefaultFormatterSettings();
defaultValue = ASTNodes.asFormattedString(classInstanceCreation, 0, StubUtility.getLineDelimiterUsed(cuRewrite.getCu()), settings);
// ... so let's restore it right away.
classInstanceCreation.setType(cicType);
}
}
if (defaultValue == null) {
defaultValue = fSourceCU.getBuffer().getText(expression.getStartPosition(), expression.getLength());
}
fParameter = ParameterInfo.createInfoForAddedParameter(typeBinding, typeName, name, defaultValue);
if (fArguments == null) {
List<ParameterInfo> parameterInfos = fChangeSignatureProcessor.getParameterInfos();
int parametersCount = parameterInfos.size();
if (parametersCount > 0 && parameterInfos.get(parametersCount - 1).isOldVarargs()) {
parameterInfos.add(parametersCount - 1, fParameter);
} else {
parameterInfos.add(fParameter);
}
}
}
use of org.eclipse.jdt.core.dom.ParameterizedType in project eclipse.jdt.ls by eclipse.
the class QuickAssistProcessor method convertMethodRefernceToLambda.
/**
* Converts and replaces the given method reference with corresponding lambda
* expression in the given ASTRewrite.
*
* @param methodReference
* the method reference to convert
* @param functionalMethod
* the non-generic functional interface method to be implemented by
* the lambda expression
* @param astRoot
* the AST root
* @param rewrite
* the ASTRewrite
* @param linkedProposalModel
* to create linked proposals for lambda's parameters or
* <code>null</code> if linked proposals are not required
* @param createBlockBody
* <code>true</code> if lambda expression's body should be a block
*
* @return lambda expression used to replace the method reference in the given
* ASTRewrite
* @throws JavaModelException
* if an exception occurs while accessing the Java element
* corresponding to the <code>functionalMethod</code>
*/
public static LambdaExpression convertMethodRefernceToLambda(MethodReference methodReference, IMethodBinding functionalMethod, CompilationUnit astRoot, ASTRewrite rewrite, LinkedProposalModelCore linkedProposalModel, boolean createBlockBody) throws JavaModelException {
AST ast = astRoot.getAST();
LambdaExpression lambda = ast.newLambdaExpression();
String[] lambdaParamNames = getUniqueParameterNames(methodReference, functionalMethod);
List<VariableDeclaration> lambdaParameters = lambda.parameters();
for (int i = 0; i < lambdaParamNames.length; i++) {
String paramName = lambdaParamNames[i];
VariableDeclarationFragment lambdaParameter = ast.newVariableDeclarationFragment();
SimpleName name = ast.newSimpleName(paramName);
lambdaParameter.setName(name);
lambdaParameters.add(lambdaParameter);
if (linkedProposalModel != null) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), true).addPosition(rewrite.track(name), i == 0);
}
}
int noOfLambdaParameters = lambdaParamNames.length;
lambda.setParentheses(noOfLambdaParameters != 1);
ITypeBinding returnTypeBinding = functionalMethod.getReturnType();
// too often null, see bug 440000, bug 440344, bug 333665
IMethodBinding referredMethodBinding = methodReference.resolveMethodBinding();
if (methodReference instanceof CreationReference) {
CreationReference creationRef = (CreationReference) methodReference;
Type type = creationRef.getType();
if (type instanceof ArrayType) {
ArrayCreation arrayCreation = ast.newArrayCreation();
if (createBlockBody) {
Block blockBody = getBlockBodyForLambda(arrayCreation, returnTypeBinding, ast);
lambda.setBody(blockBody);
} else {
lambda.setBody(arrayCreation);
}
ArrayType arrayType = (ArrayType) type;
Type copiedElementType = (Type) rewrite.createCopyTarget(arrayType.getElementType());
arrayCreation.setType(ast.newArrayType(copiedElementType, arrayType.getDimensions()));
SimpleName name = ast.newSimpleName(lambdaParamNames[0]);
arrayCreation.dimensions().add(name);
if (linkedProposalModel != null) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), false).addPosition(rewrite.track(name), LinkedPositionGroup.NO_STOP);
}
} else {
ClassInstanceCreation cic = ast.newClassInstanceCreation();
if (createBlockBody) {
Block blockBody = getBlockBodyForLambda(cic, returnTypeBinding, ast);
lambda.setBody(blockBody);
} else {
lambda.setBody(cic);
}
ITypeBinding typeBinding = type.resolveBinding();
if (!(type instanceof ParameterizedType) && typeBinding != null && typeBinding.getTypeDeclaration().isGenericType()) {
cic.setType(ast.newParameterizedType((Type) rewrite.createCopyTarget(type)));
} else {
cic.setType((Type) rewrite.createCopyTarget(type));
}
List<SimpleName> invocationArgs = getInvocationArguments(ast, 0, noOfLambdaParameters, lambdaParamNames);
cic.arguments().addAll(invocationArgs);
if (linkedProposalModel != null) {
for (SimpleName name : invocationArgs) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), false).addPosition(rewrite.track(name), LinkedPositionGroup.NO_STOP);
}
}
cic.typeArguments().addAll(getCopiedTypeArguments(rewrite, methodReference.typeArguments()));
}
} else if (referredMethodBinding != null && Modifier.isStatic(referredMethodBinding.getModifiers())) {
MethodInvocation methodInvocation = ast.newMethodInvocation();
if (createBlockBody) {
Block blockBody = getBlockBodyForLambda(methodInvocation, returnTypeBinding, ast);
lambda.setBody(blockBody);
} else {
lambda.setBody(methodInvocation);
}
Expression expr = null;
boolean hasConflict = hasConflict(methodReference.getStartPosition(), referredMethodBinding, ScopeAnalyzer.METHODS | ScopeAnalyzer.CHECK_VISIBILITY, astRoot);
if (hasConflict || !Bindings.isSuperType(referredMethodBinding.getDeclaringClass(), ASTNodes.getEnclosingType(methodReference)) || methodReference.typeArguments().size() != 0) {
if (methodReference instanceof ExpressionMethodReference) {
ExpressionMethodReference expressionMethodReference = (ExpressionMethodReference) methodReference;
expr = (Expression) rewrite.createCopyTarget(expressionMethodReference.getExpression());
} else if (methodReference instanceof TypeMethodReference) {
Type type = ((TypeMethodReference) methodReference).getType();
ITypeBinding typeBinding = type.resolveBinding();
if (typeBinding != null) {
ImportRewrite importRewrite = CodeStyleConfiguration.createImportRewrite(astRoot, true);
expr = ast.newName(importRewrite.addImport(typeBinding));
}
}
}
methodInvocation.setExpression(expr);
SimpleName methodName = getMethodInvocationName(methodReference);
methodInvocation.setName((SimpleName) rewrite.createCopyTarget(methodName));
List<SimpleName> invocationArgs = getInvocationArguments(ast, 0, noOfLambdaParameters, lambdaParamNames);
methodInvocation.arguments().addAll(invocationArgs);
if (linkedProposalModel != null) {
for (SimpleName name : invocationArgs) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), false).addPosition(rewrite.track(name), LinkedPositionGroup.NO_STOP);
}
}
methodInvocation.typeArguments().addAll(getCopiedTypeArguments(rewrite, methodReference.typeArguments()));
} else if (methodReference instanceof SuperMethodReference) {
SuperMethodInvocation superMethodInvocation = ast.newSuperMethodInvocation();
if (createBlockBody) {
Block blockBody = getBlockBodyForLambda(superMethodInvocation, returnTypeBinding, ast);
lambda.setBody(blockBody);
} else {
lambda.setBody(superMethodInvocation);
}
Name superQualifier = ((SuperMethodReference) methodReference).getQualifier();
if (superQualifier != null) {
superMethodInvocation.setQualifier((Name) rewrite.createCopyTarget(superQualifier));
}
SimpleName methodName = getMethodInvocationName(methodReference);
superMethodInvocation.setName((SimpleName) rewrite.createCopyTarget(methodName));
List<SimpleName> invocationArgs = getInvocationArguments(ast, 0, noOfLambdaParameters, lambdaParamNames);
superMethodInvocation.arguments().addAll(invocationArgs);
if (linkedProposalModel != null) {
for (SimpleName name : invocationArgs) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), false).addPosition(rewrite.track(name), LinkedPositionGroup.NO_STOP);
}
}
superMethodInvocation.typeArguments().addAll(getCopiedTypeArguments(rewrite, methodReference.typeArguments()));
} else {
MethodInvocation methodInvocation = ast.newMethodInvocation();
if (createBlockBody) {
Block blockBody = getBlockBodyForLambda(methodInvocation, returnTypeBinding, ast);
lambda.setBody(blockBody);
} else {
lambda.setBody(methodInvocation);
}
boolean isTypeReference = isTypeReferenceToInstanceMethod(methodReference);
if (isTypeReference) {
SimpleName name = ast.newSimpleName(lambdaParamNames[0]);
methodInvocation.setExpression(name);
if (linkedProposalModel != null) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), false).addPosition(rewrite.track(name), LinkedPositionGroup.NO_STOP);
}
} else {
Expression expr = ((ExpressionMethodReference) methodReference).getExpression();
if (!(expr instanceof ThisExpression && methodReference.typeArguments().size() == 0)) {
methodInvocation.setExpression((Expression) rewrite.createCopyTarget(expr));
}
}
SimpleName methodName = getMethodInvocationName(methodReference);
methodInvocation.setName((SimpleName) rewrite.createCopyTarget(methodName));
List<SimpleName> invocationArgs = getInvocationArguments(ast, isTypeReference ? 1 : 0, noOfLambdaParameters, lambdaParamNames);
methodInvocation.arguments().addAll(invocationArgs);
if (linkedProposalModel != null) {
for (SimpleName name : invocationArgs) {
linkedProposalModel.getPositionGroup(name.getIdentifier(), false).addPosition(rewrite.track(name), LinkedPositionGroup.NO_STOP);
}
}
methodInvocation.typeArguments().addAll(getCopiedTypeArguments(rewrite, methodReference.typeArguments()));
}
rewrite.replace(methodReference, lambda, null);
return lambda;
}
use of org.eclipse.jdt.core.dom.ParameterizedType in project jbosstools-hibernate by jbosstools.
the class CollectEntityInfo method processFieldOrGetter.
public boolean processFieldOrGetter(Type type, List<String> list, boolean fieldFlag) {
if (type == null) {
return false;
}
if (type.isPrimitiveType()) {
PrimitiveType pt = (PrimitiveType) type;
if (!pt.getPrimitiveTypeCode().equals(PrimitiveType.BOOLEAN)) {
// this is candidate for primary id
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
if ("version".equalsIgnoreCase(name)) {
// $NON-NLS-1$
FieldGetterType versionFieldGetter = updateFieldGetter(entityInfo.getVersionFieldGetter(), fieldFlag);
entityInfo.setVersionFieldGetter(versionFieldGetter);
} else {
entityInfo.addPrimaryIdCandidate(name);
}
}
}
} else if (type.isSimpleType()) {
SimpleType st = (SimpleType) type;
ITypeBinding tb = st.resolveBinding();
if (tb != null) {
// $NON-NLS-1$
String entityFullyQualifiedName = "";
if (tb.getJavaElement() instanceof SourceType) {
SourceType sourceT = (SourceType) tb.getJavaElement();
entityFullyQualifiedName = sourceT.getFullyQualifiedName();
entityInfo.addDependency(entityFullyQualifiedName);
RefType refType2Use = tb.isEnum() ? RefType.ENUMERATED : RefType.MANY2ONE;
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
entityInfo.addReference(name, entityFullyQualifiedName, refType2Use);
}
} else if (tb.getJavaElement() instanceof BinaryType) {
ITypeBinding tbParent = tb.getTypeDeclaration().getSuperclass();
if (tbParent != null) {
if ("java.lang.Number".equals(tbParent.getBinaryName())) {
// $NON-NLS-1$
// this is candidate for primary id
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
if ("version".equalsIgnoreCase(name)) {
// $NON-NLS-1$
FieldGetterType versionFieldGetter = updateFieldGetter(entityInfo.getVersionFieldGetter(), fieldFlag);
entityInfo.setVersionFieldGetter(versionFieldGetter);
} else {
entityInfo.addPrimaryIdCandidate(name);
}
}
} else if ("java.util.Date".equals(tbParent.getBinaryName())) {
// $NON-NLS-1$
// this is candidate for version
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
if ("version".equalsIgnoreCase(name)) {
// $NON-NLS-1$
FieldGetterType versionFieldGetter = updateFieldGetter(entityInfo.getVersionFieldGetter(), fieldFlag);
entityInfo.setVersionFieldGetter(versionFieldGetter);
}
}
}
}
if ("java.lang.String".equals(tb.getBinaryName())) {
// $NON-NLS-1$
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
entityInfo.updateAnnotationColumn(name, null, false);
entityInfo.addPrimaryIdCandidate(name);
}
}
}
}
} else if (type.isArrayType()) {
ArrayType at = (ArrayType) type;
Type elementType = at.getElementType();
ITypeBinding tb = elementType.resolveBinding();
if (tb != null) {
if (tb.getJavaElement() instanceof SourceType) {
// $NON-NLS-1$
String entityFullyQualifiedName = "";
SourceType sourceT = (SourceType) tb.getJavaElement();
try {
entityFullyQualifiedName = sourceT.getFullyQualifiedParameterizedName();
} catch (JavaModelException e) {
// $NON-NLS-1$
HibernateConsolePlugin.getDefault().logErrorMessage("JavaModelException: ", e);
}
entityInfo.addDependency(entityFullyQualifiedName);
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
entityInfo.addReference(name, entityFullyQualifiedName, RefType.ONE2MANY);
}
}
}
} else if (type.isParameterizedType()) {
ParameterizedType pt = (ParameterizedType) type;
Type typeP = pt.getType();
ITypeBinding tb = typeP.resolveBinding();
if (tb != null) {
ITypeBinding[] interfaces = Utils.getAllInterfaces(tb);
// $NON-NLS-1$
String fullyQualifiedNameTypeName = "";
if (Utils.isImplementInterface(interfaces, "java.util.Collection")) {
// $NON-NLS-1$
// $NON-NLS-1$
fullyQualifiedNameTypeName = "java.util.Collection";
}
if (Utils.isImplementInterface(interfaces, "java.util.Map")) {
// $NON-NLS-1$
// $NON-NLS-1$
fullyQualifiedNameTypeName = "java.util.Map";
}
/*for (int i = 0; i < interfaces.length; i++) {
if (interfaces[i].getJavaElement() instanceof BinaryType) {
BinaryType binaryT = (BinaryType)interfaces[i].getJavaElement();
String tmp = binaryT.getFullyQualifiedName('.');
if (0 == "java.util.Collection".compareTo(tmp)) { //$NON-NLS-1$
fullyQualifiedNameTypeName = tmp;
break;
}
}
}*/
if (fullyQualifiedNameTypeName.length() > 0) {
Iterator<Type> typeArgsIt = pt.typeArguments().iterator();
while (typeArgsIt.hasNext()) {
typeP = typeArgsIt.next();
tb = typeP.resolveBinding();
// $NON-NLS-1$
String entityFullyQualifiedName = "";
if (tb.getJavaElement() instanceof SourceType) {
SourceType sourceT = (SourceType) tb.getJavaElement();
try {
entityFullyQualifiedName = sourceT.getFullyQualifiedParameterizedName();
} catch (JavaModelException e) {
// $NON-NLS-1$
HibernateConsolePlugin.getDefault().logErrorMessage("JavaModelException: ", e);
}
entityInfo.addDependency(entityFullyQualifiedName);
Iterator<String> itVarNames = list.iterator();
while (itVarNames.hasNext()) {
String name = itVarNames.next();
entityInfo.addReference(name, entityFullyQualifiedName, RefType.ONE2MANY);
}
}
}
}
}
} else if (type.isQualifiedType()) {
QualifiedType qt = (QualifiedType) type;
@SuppressWarnings("unused") ITypeBinding tb = qt.resolveBinding();
} else if (type.isWildcardType()) {
WildcardType wt = (WildcardType) type;
@SuppressWarnings("unused") ITypeBinding tb = wt.resolveBinding();
}
return true;
}
Aggregations