Type tupleFromParameterList() { if (params.getParameters().isEmpty()) { return n.getUnit().getEmptyType(); } List<Type> types = new ArrayList<>(params.getParameters().size()); int firstDefaulted = -1; int count = 0; for (Tree.Parameter p : params.getParameters()) { types.add(p.getParameterModel().getType()); if (p.getParameterModel().isDefaulted()) firstDefaulted = count; count++; } return n.getUnit() .getTupleType( types, params .getParameters() .get(params.getParameters().size() - 1) .getParameterModel() .isSequenced(), params .getParameters() .get(params.getParameters().size() - 1) .getParameterModel() .isAtLeastOne(), firstDefaulted); }
private static void addPackageCompletions( final int offset, final String prefix, Node node, List<ICompletionProposal> result, final int len, String pfp, final CeylonParseController cpc, final boolean withBody) { // TODO: someday it would be nice to propose from all packages // and auto-add the module dependency! /*TypeChecker tc = CeylonBuilder.getProjectTypeChecker(cpc.getProject().getRawProject()); if (tc!=null) { for (Module m: tc.getContext().getModules().getListOfModules()) {*/ // Set<Package> packages = new HashSet<Package>(); Unit unit = node.getUnit(); if (unit != null) { // a null unit can occur if we have not finished parsing the file Module module = unit.getPackage().getModule(); for (final Package p : module.getAllPackages()) { // if (!packages.contains(p)) { // packages.add(p); // if ( p.getModule().equals(module) || p.isShared() ) { final String pkg = escapePackageName(p); if (!pkg.isEmpty() && pkg.startsWith(pfp)) { boolean already = false; if (!pfp.equals(pkg)) { // don't add already imported packages, unless // it is an exact match to the typed path for (ImportList il : node.getUnit().getImportLists()) { if (il.getImportedScope() == p) { already = true; break; } } } if (!already) { result.add( new PackageProposal( offset, prefix, withBody, len, p, pkg + (withBody ? " { ... }" : ""), cpc)); } } // } } } }
public static String getModuleLabel(Node decl) { return decl.getUnit() == null ? "unknown module" : getLabel(decl.getUnit().getPackage().getModule()); }
@Deprecated // replaced by RefineFormalMembersQuickFix.ceylon private void refineFormalMembers(IDocument document) throws ExecutionException { if (rootNode == null) return; TextChange change = new DocumentChange("Refine Members", document); change.setEdit(new MultiTextEdit()); // TODO: copy/pasted from CeylonQuickFixAssistant Tree.Body body; int offset; if (node instanceof Tree.ClassDefinition) { ClassDefinition classDefinition = (Tree.ClassDefinition) node; body = classDefinition.getClassBody(); offset = -1; } else if (node instanceof Tree.InterfaceDefinition) { Tree.InterfaceDefinition interfaceDefinition = (Tree.InterfaceDefinition) node; body = interfaceDefinition.getInterfaceBody(); offset = -1; } else if (node instanceof Tree.ObjectDefinition) { Tree.ObjectDefinition objectDefinition = (Tree.ObjectDefinition) node; body = objectDefinition.getClassBody(); offset = -1; } else if (node instanceof Tree.ObjectExpression) { Tree.ObjectExpression objectExpression = (Tree.ObjectExpression) node; body = objectExpression.getClassBody(); offset = -1; } else if (node instanceof Tree.ClassBody || node instanceof Tree.InterfaceBody) { body = (Tree.Body) node; IEditorPart editor = getCurrentEditor(); if (editor instanceof CeylonEditor) { CeylonEditor ce = (CeylonEditor) editor; offset = ce.getSelection().getOffset(); } else { offset = -1; } } else { return; } if (body == null) { return; } boolean isInterface = body instanceof Tree.InterfaceBody; List<Tree.Statement> statements = body.getStatements(); String indent; // String bodyIndent = getIndent(body, document); String bodyIndent = utilJ2C().indents().getIndent(node, document); String delim = utilJ2C().indents().getDefaultLineDelimiter(document); if (statements.isEmpty()) { indent = delim + bodyIndent + utilJ2C().indents().getDefaultIndent(); if (offset < 0) { offset = body.getStartIndex() + 1; } } else { Tree.Statement statement = statements.get(statements.size() - 1); indent = delim + utilJ2C().indents().getIndent(statement, document); if (offset < 0) { offset = statement.getEndIndex(); } } StringBuilder result = new StringBuilder(); Set<Declaration> already = new HashSet<Declaration>(); ClassOrInterface ci = (ClassOrInterface) node.getScope(); Unit unit = node.getUnit(); Set<String> ambiguousNames = new HashSet<String>(); // TODO: does not return unrefined overloaded // versions of a method with one overlaad // already refined Collection<DeclarationWithProximity> proposals = ci.getMatchingMemberDeclarations(unit, ci, "", 0).values(); for (DeclarationWithProximity dwp : proposals) { Declaration dec = dwp.getDeclaration(); for (Declaration d : overloads(dec)) { try { if (d.isFormal() && ci.isInheritedFromSupertype(d)) { appendRefinementText(isInterface, indent, result, ci, unit, d); importProposals().importSignatureTypes(d, rootNode, already); ambiguousNames.add(d.getName()); } } catch (Exception e) { e.printStackTrace(); } } } for (TypeDeclaration superType : ci.getSupertypeDeclarations()) { for (Declaration m : superType.getMembers()) { try { if (m.getName() != null && m.isShared()) { Declaration r = ci.getMember(m.getName(), null, false); if ((r == null || !r.refines(m) && !r.getContainer().equals(ci)) && ambiguousNames.add(m.getName())) { appendRefinementText(isInterface, indent, result, ci, unit, m); importProposals().importSignatureTypes(m, rootNode, already); } } } catch (Exception e) { e.printStackTrace(); } } } try { if (document.getChar(offset) == '}' && result.length() > 0) { result.append(delim).append(bodyIndent); } } catch (BadLocationException e) { e.printStackTrace(); } importProposals().applyImports(change, already, rootNode, document); change.addEdit(new InsertEdit(offset, result.toString())); change.initializeValidationData(null); try { getWorkspace().run(new PerformChangeOperation(change), new NullProgressMonitor()); } catch (CoreException ce) { ce.printStackTrace(); } }