package bluej.parser;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

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


| Created by neil on 07/09/15. | public class ConstructorCompletion extends AssistContent{ private final ConstructorReflective con; private final String className; private final JavadocResolver javadocResolver; private final Map<String,GenTypeParameter> typeArgs; public ConstructorCompletion(ConstructorReflective c, Map<String,GenTypeParameter> typeArgs, JavadocResolver javadocResolver) { this.con = c; className = c.getDeclaringType().getSimpleName(); this.javadocResolver = javadocResolver; this.typeArgs = typeArgs; } @Override public Access getAccessPermission() { return fromModifiers(con.getModifiers()); } @Override public String getDeclaringClass() { return con.getDeclaringType().getSimpleName(); } @Override public String getJavadoc() { String jd = con.getJavaDoc(); if (jd == null && javadocResolver != null) { javadocResolver.getJavadoc(con.getDeclaringType(), Collections.singletonList(con)); jd = con.getJavaDoc(); } return jd; } @Override public CompletionKind getKind() { return CompletionKind.CONSTRUCTOR; } @Override public @OnThread(Tag.Any) String getName() { return className; } @Override @OnThread(Tag.FXPlatform) public List getParams() { getJavadoc(); ArrayList<ParamInfo> r = new ArrayList<>(); List<JavaType> paramTypes = con.getParamTypes(); List<String> paramNames = con.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, MethodCompletion.buildDummyName(t, paramName), javadocForParam(paramName))); } return r; } @Override public String getType() { return getDeclaringClass(); } private JavaType convertToSolid(JavaType type) { if (! type.isPrimitive()) { if (typeArgs != null) { type = type.mapTparsToTypes(typeArgs).getTparCapture(); } else { type = type.getErasedType(); } } return type; } @OnThread(Tag.FXPlatform) private Supplier javadocForParam(String paramName) { 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; }; } }
top, use, map, class ConstructorCompletion

.   ConstructorCompletion
.   getAccessPermission
.   getDeclaringClass
.   getJavadoc
.   getKind
.   getParams
.   getType
.   convertToSolid
.   javadocForParam




164 neLoCode + 1 LoComm