/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sylvanaar.idea.Lua.intentions.base;
import com.intellij.psi.PsiElement;
import com.intellij.util.IncorrectOperationException;
import com.sylvanaar.idea.Lua.lang.psi.LuaPsiElementFactory;
import com.sylvanaar.idea.Lua.lang.psi.expressions.LuaExpression;
import com.sylvanaar.idea.Lua.lang.psi.statements.LuaStatementElement;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
/**
* User: Dmitry.Krasilschikov
* Date: 13.11.2007
*/
public class IntentionUtils {
public static LuaExpression replaceExpression(@NotNull String newExpression,
@NotNull LuaExpression expression) throws IncorrectOperationException {
final LuaPsiElementFactory factory = LuaPsiElementFactory.getInstance(expression.getProject());
final LuaExpression newCall = factory.createExpressionFromText(newExpression);
return (LuaExpression) expression.replaceWithExpression(newCall, true);
}
public static LuaStatementElement replaceStatement(@NonNls @NotNull String newStatement,
@NonNls @NotNull LuaStatementElement statement) throws
IncorrectOperationException {
final LuaPsiElementFactory factory = LuaPsiElementFactory.getInstance(statement.getProject());
final LuaStatementElement newCall = (LuaStatementElement) factory.createStatementFromText(newStatement);
return statement.replaceWithStatement(newCall);
}
// public static void createTemplateForMethod(PsiType[] argTypes,
// ChooseTypeExpression[] paramTypesExpressions,
// LuaFunctionDefinitionStatement method,
// GrMemberOwner owner,
// TypeConstraint[] constraints, boolean isConstructor) {
//
// Project project = owner.getProject();
// GrTypeElement typeElement = method.getReturnTypeElementLua();
// ChooseTypeExpression expr = new ChooseTypeExpression(constraints, PsiManager.getInstance(project));
// TemplateBuilderImpl builder = new TemplateBuilderImpl(method);
// if (!isConstructor) {
// assert typeElement != null;
// builder.replaceElement(typeElement, expr);
// }
// GrParameter[] parameters = method.getParameterList().getLuaParameters();
// assert parameters.length == argTypes.length;
// for (int i = 0; i < parameters.length; i++) {
// GrParameter parameter = parameters[i];
// GrTypeElement parameterTypeElement = parameter.getTypeElementLua();
// builder.replaceElement(parameterTypeElement, paramTypesExpressions[i]);
// builder.replaceElement(parameter.getNameIdentifierLua(), new ParameterNameExpression());
// }
// GrOpenBlock body = method.getBlock();
// assert body != null;
// PsiElement lbrace = body.getLBrace();
// assert lbrace != null;
// builder.setEndVariableAfter(lbrace);
//
// method = CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(method);
// Template template = builder.buildTemplate();
//
// Editor newEditor = QuickfixUtil.positionCursor(project, owner.getContainingFile(), method);
// TextRange range = method.getTextRange();
// newEditor.getDocument().deleteString(range.getStartOffset(), range.getEndOffset());
//
// TemplateManager manager = TemplateManager.getInstance(project);
// manager.startTemplate(newEditor, template);
// }
}