package bluej.parser;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import java.util.stream.Collectors;

import threadchecker.OnThread;
import threadchecker.Tag;
import bluej.debugger.gentype.GenTypeDeclTpar;
import bluej.debugger.gentype.GenTypeParameter;
import bluej.debugger.gentype.JavaType;
import bluej.debugger.gentype.MethodReflective;
import bluej.pkgmgr.JavadocResolver;
import bluej.utility.JavaUtils;


| Possible code completion for a method. | | @author Davin McCall | @OnThread(Tag.FXPlatform) public class MethodCompletion extends AssistContent{ @OnThread(Tag.Any) private final MethodReflective method; private JavadocResolver javadocResolver; private Map<String,GenTypeParameter> typeArgs;
| Construct a new method completion | @param method The method to represent | @param typeArgs The type arguments applied to the declaring class. For a method | call on a raw expression, will be null. | @param javadocResolver The javadoc resolver to use | public MethodCompletion(MethodReflective method, Map<String,GenTypeParameter> typeArgs, JavadocResolver javadocResolver) { this.method = method; if (typeArgs != null) { List<GenTypeDeclTpar> mtpars = method.getTparTypes(); if (! mtpars.isEmpty()) { Map<String,GenTypeParameter> fullArgMap = new HashMap<String,GenTypeParameter>(); fullArgMap.putAll(typeArgs); for (GenTypeDeclTpar mtpar : mtpars) { fullArgMap.put(mtpar.getTparName(), mtpar); } this.typeArgs = fullArgMap; } else { this.typeArgs = typeArgs; } } this.javadocResolver = javadocResolver; } @Override public String getDeclaringClass() { return method.getDeclaringType().getSimpleName(); } @Override @OnThread(Tag.Any) public String getName() { return method.getName(); } @Override public String getType() { return convertToSolid(method.getReturnType()).toString(true); } @Override @OnThread(Tag.FXPlatform) public String getJavadoc() { String jd = method.getJavaDoc(); if (jd == null && javadocResolver != null) { javadocResolver.getJavadoc(method.getDeclaringType(), Collections.singletonList(method)); jd = method.getJavaDoc(); if (jd == null) { method.setJavaDoc(""); } } return jd; } private JavaType convertToSolid(JavaType type) { if (! type.isPrimitive()) { if (typeArgs != null) { type = type.mapTparsToTypes(typeArgs).getTparCapture(); } else { type = type.getErasedType(); } } return type; } p.public static String buildDummyName(JavaType paramType, String paramName) { if (paramName != null) { return "_" + paramName + "_"; } else { return "_" + paramType.toString(true) + "_"; } } public CompletionKind getKind() { return CompletionKind.METHOD; }
| Gets a String that is the method's unique signature | @OnThread(Tag.FXPlatform) public String getSignature() { StringBuilder sig = new StringBuilder(); sig.append(getType()).append(" ").append(getName()).append("(") .append(getParams().stream().map(ParamInfo::getQualifiedType).collect(Collectors.joining(","))) .append(")"); return sig.toString(); } @Override @OnThread(Tag.FXPlatform) public List getParams() { getJavadoc(); ArrayList<ParamInfo> r = new ArrayList<>(); List<JavaType> paramTypes = method.getParamTypes(); List<String> paramNames = method.getParamNames(); for (int i = 0; i < paramTypes.size(); i++) { JavaType t = convertToSolid(paramTypes.get(i)); String paramName = paramNames == null ? null : paramNames.get(i); r.add(new ParamInfo(t.toString(), paramName, buildDummyName(t, paramName), javadocForParam(paramName))); } return r; } @OnThread(Tag.FXPlatform) private Supplier javadocForParam(String paramName) { final String javadocSrc = getJavadoc(); return () -> { JavaUtils.Javadoc javadoc = JavaUtils.parseJavadoc(javadocSrc); if (javadoc == null) return null; String target = "param " + paramName; for (String block : javadoc.getBlocks()) { if (block.startsWith(target) && Character.isWhitespace(block.charAt(target.length()))) { return block.substring(target.length() + 1).trim(); } } return null; }; } @Override public Access getAccessPermission() { return fromModifiers(method.getModifiers()); } }
top, use, map, class MethodCompletion

.   MethodCompletion
.   getDeclaringClass
.   getName
.   getType
.   getJavadoc
.   convertToSolid
.   buildDummyName
.   getKind
.   getSignature
.   getParams
.   javadocForParam
.   getAccessPermission




229 neLoCode + 8 LoComm