package com.redhat.ceylon.eclipse.code.correct; import org.eclipse.jface.text.Region; import org.eclipse.ltk.core.refactoring.TextChange; import org.eclipse.swt.graphics.Image; import com.redhat.ceylon.model.typechecker.model.Declaration; import com.redhat.ceylon.model.typechecker.model.Type; class CreateParameterProposal extends InitializerProposal { // @Deprecated // CreateParameterProposal(String def, String desc, // Declaration dec, Type type, // Image image, int offset, TextFileChange change, // int exitPos) { // super(desc, change, dec, type, // computeSelection(offset,def), // image, exitPos); // } CreateParameterProposal(String desc, Declaration dec, Type type, Region selection, Image image, TextChange change, int exitPos) { super(desc, change, dec, type, selection, image, exitPos); } // @Deprecated // private static void addCreateParameterProposal( // Collection<ICompletionProposal> proposals, // String def, String desc, Image image, // Declaration dec, // ModifiablePhasedUnit<IProject,IResource,IFolder,IFile> unit, // Tree.Declaration decNode, // Tree.ParameterList paramList, // Type returnType, // Set<Declaration> imports, Node node) { // IFile file = unit.getResourceFile(); // if (file == null) { // return; // } // TextFileChange change = // new TextFileChange("Add Parameter", file); // change.setEdit(new MultiTextEdit()); // IDocument doc = EditorUtil.getDocument(change); // int offset = paramList.getEndIndex()-1; // int il = (int) importProposals().applyImports(change, imports, // unit.getCompilationUnit(), doc); // change.addEdit(new InsertEdit(offset, def)); // int exitPos = node.getEndIndex(); // proposals.add(new CreateParameterProposal(def, // "Add " + desc + " to '" + dec.getName() + "'", // dec, returnType, image, offset+il, change, exitPos)); // } // // @Deprecated // private static void addCreateParameterAndAttributeProposal( // Collection<ICompletionProposal> proposals, // String pdef, String adef, String desc, // Image image, Declaration dec, ModifiablePhasedUnit<IProject,IResource,IFolder,IFile> unit, // Tree.Declaration decNode, // Tree.ParameterList paramList, Tree.Body body, // Type returnType, Node node) { // IFile file = unit.getResourceFile(); // if (file == null) { // return; // } // TextFileChange change = // new TextFileChange("Add Attribute", file); // change.setEdit(new MultiTextEdit()); // int offset = paramList.getEndIndex()-1; // IDocument doc = EditorUtil.getDocument(change); // String indent; // String indentAfter; // int offset2; // List<Tree.Statement> statements = body.getStatements(); // if (statements.isEmpty()) { // indentAfter = utilJ2C().indents().getDefaultLineDelimiter(doc) + // utilJ2C().indents().getIndent(decNode, doc); // indent = indentAfter + utilJ2C().indents().getDefaultIndent(); // offset2 = body.getStartIndex()+1; // } // else { // Tree.Statement statement = // statements.get(statements.size()-1); // indent = utilJ2C().indents().getDefaultLineDelimiter(doc) + // utilJ2C().indents().getIndent(statement, doc); // offset2 = statement.getEndIndex(); // indentAfter = ""; // } // HashSet<Declaration> decs = new HashSet<Declaration>(); // Tree.CompilationUnit cu = unit.getCompilationUnit(); // importProposals().importType(decs, returnType, cu); // int il = (int) importProposals().applyImports(change, decs, cu, doc); // change.addEdit(new InsertEdit(offset, pdef)); // change.addEdit(new InsertEdit(offset2, indent+adef+indentAfter)); // int exitPos = node.getEndIndex(); // proposals.add(new CreateParameterProposal(pdef, // "Add " + desc + " to '" + dec.getName() + "'", // dec, returnType, image, offset+il, change, exitPos)); // } // // @Deprecated // static void addCreateParameterProposal( // Collection<ICompletionProposal> proposals, // IProject project, // ValueFunctionDefinitionGenerator dg) { // if (Character.isLowerCase(dg.getBrokenName().codePointAt(0))) { // Tree.Declaration decl = // findDeclarationWithBody(dg.getRootNode(), // dg.getNode()); // if (decl == null || // decl.getDeclarationModel() == null || // decl.getDeclarationModel().isActual()) { // return; // } // // Tree.ParameterList paramList = getParameters(decl); // if (paramList != null) { // String def = dg.generate("", ""); // //TODO: really ugly and fragile way to strip off the trailing ; // String paramDef = // (paramList.getParameters().isEmpty() ? "" : ", ") + // def.substring(0, def.length() - (def.endsWith("{}")?3:1)); // String paramDesc = // "parameter '" + dg.getBrokenName() + "'"; // Unit u = dg.getRootNode().getUnit(); // if (u instanceof ModifiableSourceFile) { // ModifiableSourceFile msf = // (ModifiableSourceFile) u; // addCreateParameterProposal( // proposals, paramDef, paramDesc, // ADD_CORR, // decl.getDeclarationModel(), // msf.getPhasedUnit(), // decl, paramList, // dg.getReturnType(), // dg.getImports(), // dg.getNode()); // } // } // } // } // // @Deprecated // static void addCreateParameterProposals( // Tree.CompilationUnit cu, Node node, // ProblemLocation problem, // Collection<ICompletionProposal> proposals, // IProject project) { // FindInvocationVisitor fav = // new FindInvocationVisitor(node); // fav.visit(cu); // if (fav.result==null) return; // Tree.Primary prim = fav.result.getPrimary(); // if (prim instanceof Tree.MemberOrTypeExpression) { // Tree.MemberOrTypeExpression mte = // (Tree.MemberOrTypeExpression) prim; // Reference pr = mte.getTarget(); // if (pr!=null) { // Declaration d = pr.getDeclaration(); // Type t=null; // String parameterName=null; // if (node instanceof Tree.Term) { // Tree.Term term = (Tree.Term) node; // t = term.getTypeModel(); // if (t!=null) { // parameterName = // t.getDeclaration() // .getName(); // if (parameterName!=null) { // parameterName = // escaping_.get_().toInitialLowercase( // parameterName) // .replace("?", "") // .replace("[]", ""); // if ("string".equals(parameterName)) { // parameterName = "text"; // } // } // } // } // else if (node instanceof Tree.SpecifiedArgument) { // Tree.SpecifiedArgument sa = // (Tree.SpecifiedArgument) node; // Tree.SpecifierExpression se = // sa.getSpecifierExpression(); // if (se!=null) { // Tree.Expression e = // se.getExpression(); // if (e!=null) { // t = e.getTypeModel(); // } // } // parameterName = // sa.getIdentifier().getText(); // } // else if (node instanceof Tree.TypedArgument) { // Tree.TypedArgument ta = // (Tree.TypedArgument) node; // t = ta.getType().getTypeModel(); // parameterName = // ta.getIdentifier().getText(); // } // if (t!=null && parameterName!=null) { // t = node.getUnit().denotableType(t); // String defaultValue = // defaultValue(prim.getUnit(), t); // String parameterType = // t.asString(); // String def = parameterType + " " + // parameterName + // " = " + defaultValue; // String desc = "parameter '" + // parameterName +"'"; // addCreateParameterProposals(proposals, // project, def, desc, d, t, node); // String pdef = parameterName + // " = " + defaultValue; // String adef = parameterType + " " + // parameterName + ";"; // String padesc = "attribute '" + // parameterName +"'"; // addCreateParameterAndAttributeProposals( // proposals, project, pdef, adef, // padesc, d, t, node); // } // } // } // } // // @Deprecated // private static Tree.ParameterList getParameters( // Tree.Declaration decNode) { // if (decNode instanceof Tree.AnyClass) { // Tree.AnyClass ac = (Tree.AnyClass) decNode; // return ac.getParameterList(); // } // else if (decNode instanceof Tree.AnyMethod){ // Tree.AnyMethod am = (Tree.AnyMethod) decNode; // List<Tree.ParameterList> pls = // am.getParameterLists(); // return pls.isEmpty() ? null : pls.get(0); // } // else if (decNode instanceof Tree.Constructor) { // Tree.Constructor c = (Tree.Constructor) decNode; // return c.getParameterList(); // } // return null; // } // // @Deprecated // private static void addCreateParameterProposals( // Collection<ICompletionProposal> proposals, // IProject project, String def, String desc, // Declaration typeDec, Type t, // Node node) { // if (typeDec!=null && typeDec instanceof Functional) { // Unit u = typeDec.getUnit(); // if (u instanceof ModifiableSourceFile) { // ModifiableSourceFile cu = // (ModifiableSourceFile) u; // ModifiablePhasedUnit unit = cu.getPhasedUnit(); // FindDeclarationNodeVisitor fdv = // new FindDeclarationNodeVisitor(typeDec); // unit.getCompilationUnit().visit(fdv); // Tree.Declaration decNode = // (Tree.Declaration) // fdv.getDeclarationNode(); // Tree.ParameterList paramList = // getParameters(decNode); // if (paramList!=null) { // if (!paramList.getParameters().isEmpty()) { // def = ", " + def; // } // Set<Declaration> imports = // new HashSet<Declaration>(); // importProposals().importType(imports, t, // unit.getCompilationUnit()); // addCreateParameterProposal( // proposals, def, desc, // ADD_CORR, typeDec, unit, decNode, // paramList, t, imports, node); // } // } // } // } // // @Deprecated // private static void addCreateParameterAndAttributeProposals( // Collection<ICompletionProposal> proposals, // IProject project, String pdef, String adef, // String desc, Declaration typeDec, Type t, // Node node) { // if (typeDec instanceof ClassOrInterface) { // Unit u = typeDec.getUnit(); // if (u instanceof ModifiableSourceFile) { // ModifiableSourceFile msu = // (ModifiableSourceFile) u; // ModifiablePhasedUnit phasedUnit = // msu.getPhasedUnit(); // FindDeclarationNodeVisitor fdv = // new FindDeclarationNodeVisitor(typeDec); // phasedUnit.getCompilationUnit().visit(fdv); // Tree.Declaration decNode = // (Tree.Declaration) // fdv.getDeclarationNode(); // Tree.ParameterList paramList = // getParameters(decNode); // Tree.Body body = // getClassOrInterfaceBody(decNode); // if (body!=null // && paramList!=null) { // if (!paramList.getParameters().isEmpty()) { // pdef = ", " + pdef; // } // addCreateParameterAndAttributeProposal( // proposals, pdef, adef, desc, // ADD_CORR, typeDec, phasedUnit, decNode, // paramList, body, t, node); // } // } // } // } }