Add JetPsiFactory(JetElement) function and use it

This commit is contained in:
Pavel V. Talanov
2014-07-14 20:59:05 +04:00
parent 7269e383cf
commit ee036770c3
105 changed files with 192 additions and 220 deletions
@@ -100,7 +100,7 @@ public abstract class JetCodeFragment(
} }
fun importsAsImportList(): JetImportList? { fun importsAsImportList(): JetImportList? {
return JetPsiFactory(_project).createFile(_myImports.makeString("\n")).getImportList() return JetPsiFactory(this).createFile(_myImports.makeString("\n")).getImportList()
} }
override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) { } override fun setVisibilityChecker(checker: JavaCodeFragment.VisibilityChecker?) { }
@@ -46,7 +46,7 @@ public abstract class JetExpressionImpl extends JetElementImpl implements JetExp
PsiElement parent = getParent(); PsiElement parent = getParent();
if (parent instanceof JetExpression && newElement instanceof JetExpression && if (parent instanceof JetExpression && newElement instanceof JetExpression &&
JetPsiUtil.areParenthesesNecessary((JetExpression) newElement, this, (JetExpression) parent)) { JetPsiUtil.areParenthesesNecessary((JetExpression) newElement, this, (JetExpression) parent)) {
return super.replace(PsiPackage.JetPsiFactory(getProject()).createExpression("(" + newElement.getText() + ")")); return super.replace(PsiPackage.JetPsiFactory(this).createExpression("(" + newElement.getText() + ")"));
} }
return super.replace(newElement); return super.replace(newElement);
} }
@@ -44,7 +44,7 @@ public abstract class JetExpressionImplStub<T extends StubElement> extends JetEl
PsiElement parent = getParent(); PsiElement parent = getParent();
if (parent instanceof JetExpression && newElement instanceof JetExpression && if (parent instanceof JetExpression && newElement instanceof JetExpression &&
JetPsiUtil.areParenthesesNecessary((JetExpression) newElement, this, (JetExpression) parent)) { JetPsiUtil.areParenthesesNecessary((JetExpression) newElement, this, (JetExpression) parent)) {
return super.replace(PsiPackage.JetPsiFactory(getProject()).createExpression("(" + newElement.getText() + ")")); return super.replace(PsiPackage.JetPsiFactory(this).createExpression("(" + newElement.getText() + ")"));
} }
return super.replace(newElement); return super.replace(newElement);
} }
@@ -64,7 +64,7 @@ abstract class JetNamedDeclarationNotStubbed extends JetDeclarationImpl implemen
@Override @Override
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
return getNameIdentifier().replace(JetPsiFactory(getProject()).createNameIdentifier(name)); return getNameIdentifier().replace(JetPsiFactory(this).createNameIdentifier(name));
} }
@Override @Override
@@ -77,7 +77,7 @@ abstract class JetNamedDeclarationStub<T extends PsiJetStubWithFqName> extends J
@Override @Override
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
return getNameIdentifier().replace(JetPsiFactory(getProject()).createNameIdentifier(name)); return getNameIdentifier().replace(JetPsiFactory(this).createNameIdentifier(name));
} }
@Override @Override
@@ -49,7 +49,7 @@ public class JetObjectDeclarationName extends JetExpressionImpl {
} }
public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
return getNameIdentifier().replace(PsiPackage.JetPsiFactory(getProject()).createNameIdentifier(name)); return getNameIdentifier().replace(PsiPackage.JetPsiFactory(this).createNameIdentifier(name));
} }
@Override @Override
@@ -27,6 +27,7 @@ import org.jetbrains.jet.lexer.JetKeywordToken
import org.jetbrains.jet.plugin.JetFileType import org.jetbrains.jet.plugin.JetFileType
public fun JetPsiFactory(project: Project?): JetPsiFactory = JetPsiFactory(project!!) public fun JetPsiFactory(project: Project?): JetPsiFactory = JetPsiFactory(project!!)
public fun JetPsiFactory(contextElement: JetElement): JetPsiFactory = JetPsiFactory(contextElement.getProject())
public class JetPsiFactory(private val project: Project) { public class JetPsiFactory(private val project: Project) {
@@ -190,7 +191,7 @@ public class JetPsiFactory(private val project: Project) {
} }
public fun createWhenEntry(entryText: String): JetWhenEntry { public fun createWhenEntry(entryText: String): JetWhenEntry {
val function = createFunction("fun foo() { when(12) { $entryText } }") val function = createFunction("fun foo() { when(12) { " + entryText + " } }")
val whenEntry = PsiTreeUtil.findChildOfType(function, javaClass<JetWhenEntry>()) val whenEntry = PsiTreeUtil.findChildOfType(function, javaClass<JetWhenEntry>())
assert(whenEntry != null, "Couldn't generate when entry") assert(whenEntry != null, "Couldn't generate when entry")
@@ -200,8 +201,8 @@ public class JetPsiFactory(private val project: Project) {
} }
public fun createBlockStringTemplateEntry(expression: JetExpression): JetStringTemplateEntryWithExpression { public fun createBlockStringTemplateEntry(expression: JetExpression): JetStringTemplateEntryWithExpression {
val stringTemplateExpression = createExpression("\"\${${expression.getText()}}\"") as JetStringTemplateExpression val stringTemplateExpression = createExpression("\"\${" + expression.getText() + "}\"") as JetStringTemplateExpression
return stringTemplateExpression.getEntries().first() as JetStringTemplateEntryWithExpression return stringTemplateExpression.getEntries()[0] as JetStringTemplateEntryWithExpression
} }
public fun createImportDirective(path: String): JetImportDirective { public fun createImportDirective(path: String): JetImportDirective {
@@ -235,15 +236,15 @@ public class JetPsiFactory(private val project: Project) {
} }
public fun createClassLabel(labelName: String): JetSimpleNameExpression { public fun createClassLabel(labelName: String): JetSimpleNameExpression {
return (createExpression("this@$labelName") as JetThisExpression).getTargetLabel()!! return (createExpression("this@" + labelName) as JetThisExpression).getTargetLabel()!!
} }
public fun createFieldIdentifier(fieldName: String): JetExpression { public fun createFieldIdentifier(fieldName: String): JetExpression {
return createExpression("$$fieldName") return createExpression("$" + fieldName)
} }
public fun createBinaryExpression(lhs: String, op: String, rhs: String): JetBinaryExpression { public fun createBinaryExpression(lhs: String, op: String, rhs: String): JetBinaryExpression {
return createExpression("$lhs $op $rhs") as JetBinaryExpression return createExpression(lhs + " " + op + " " + rhs) as JetBinaryExpression
} }
public fun createBinaryExpression(lhs: JetExpression?, op: String, rhs: JetExpression?): JetBinaryExpression { public fun createBinaryExpression(lhs: JetExpression?, op: String, rhs: JetExpression?): JetBinaryExpression {
@@ -549,7 +550,7 @@ public class JetPsiFactory(private val project: Project) {
} }
public fun createFunctionBody(bodyText: String): JetExpression { public fun createFunctionBody(bodyText: String): JetExpression {
return createFunction("fun foo() {\n$bodyText\n}").getBodyExpression()!! return createFunction("fun foo() {\n" + bodyText + "\n}").getBodyExpression()!!
} }
public fun createEmptyClassObject(): JetClassObject { public fun createEmptyClassObject(): JetClassObject {
@@ -110,7 +110,7 @@ public fun JetBlockExpression.prependElement(element: JetElement): JetElement =
addBefore(element, getLBrace()!!.getNextSibling()!!)!! as JetElement addBefore(element, getLBrace()!!.getNextSibling()!!)!! as JetElement
public fun JetElement.wrapInBlock(): JetBlockExpression { public fun JetElement.wrapInBlock(): JetBlockExpression {
val block = JetPsiFactory(getProject()).createEmptyBody() as JetBlockExpression val block = JetPsiFactory(this).createEmptyBody() as JetBlockExpression
block.appendElement(this) block.appendElement(this)
return block return block
} }
@@ -17,7 +17,6 @@
package org.jetbrains.jet.lang.resolve; package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
@@ -173,17 +172,17 @@ public class DelegatedPropertyResolver {
ExpressionTypingContext context = ExpressionTypingContext.newContext( ExpressionTypingContext context = ExpressionTypingContext.newContext(
expressionTypingServices, trace, scope, expressionTypingServices, trace, scope,
DataFlowInfo.EMPTY, TypeUtils.NO_EXPECTED_TYPE); DataFlowInfo.EMPTY, TypeUtils.NO_EXPECTED_TYPE);
Project project = expressionTypingServices.getProject();
boolean hasThis = propertyDescriptor.getReceiverParameter() != null || propertyDescriptor.getExpectedThisObject() != null; boolean hasThis = propertyDescriptor.getReceiverParameter() != null || propertyDescriptor.getExpectedThisObject() != null;
List<JetExpression> arguments = Lists.newArrayList(); List<JetExpression> arguments = Lists.newArrayList();
arguments.add(JetPsiFactory(project).createExpression(hasThis ? "this" : "null")); JetPsiFactory psiFactory = JetPsiFactory(delegateExpression);
arguments.add(psiFactory.createExpression(hasThis ? "this" : "null"));
arguments.add(JetPsiFactory(project).createExpression(KotlinBuiltIns.getInstance().getPropertyMetadataImpl().getName().asString() + arguments.add(psiFactory.createExpression(KotlinBuiltIns.getInstance().getPropertyMetadataImpl().getName().asString() +
"(\"" + "(\"" +
propertyDescriptor.getName().asString() + propertyDescriptor.getName().asString() +
"\")")); "\")"));
if (!isGet) { if (!isGet) {
JetReferenceExpression fakeArgument = (JetReferenceExpression) createFakeExpressionOfType(expressionTypingServices.getProject(), trace, JetReferenceExpression fakeArgument = (JetReferenceExpression) createFakeExpressionOfType(expressionTypingServices.getProject(), trace,
@@ -195,7 +194,7 @@ public class DelegatedPropertyResolver {
} }
Name functionName = Name.identifier(isGet ? "get" : "set"); Name functionName = Name.identifier(isGet ? "get" : "set");
JetReferenceExpression fakeCalleeExpression = JetPsiFactory(project).createSimpleName(functionName.asString()); JetReferenceExpression fakeCalleeExpression = psiFactory.createSimpleName(functionName.asString());
ExpressionReceiver receiver = new ExpressionReceiver(delegateExpression, delegateType); ExpressionReceiver receiver = new ExpressionReceiver(delegateExpression, delegateType);
Call call = CallMaker.makeCallWithExpressions(fakeCalleeExpression, receiver, null, fakeCalleeExpression, arguments, Call.CallType.DEFAULT); Call call = CallMaker.makeCallWithExpressions(fakeCalleeExpression, receiver, null, fakeCalleeExpression, arguments, Call.CallType.DEFAULT);
@@ -264,7 +264,7 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
this.outerCall = call; this.outerCall = call;
this.explicitExtensionReceiver = explicitExtensionReceiver; this.explicitExtensionReceiver = explicitExtensionReceiver;
this.calleeExpressionAsThisObject = calleeExpressionAsThisObject; this.calleeExpressionAsThisObject = calleeExpressionAsThisObject;
this.fakeInvokeExpression = (JetSimpleNameExpression) JetPsiFactory(call.getCallElement().getProject()).createExpression( "invoke"); this.fakeInvokeExpression = (JetSimpleNameExpression) JetPsiFactory(call.getCallElement()).createExpression( "invoke");
} }
@NotNull @NotNull
@@ -109,8 +109,9 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor {
return getTypeInfoWhenOnlyOneBranchIsPresent( return getTypeInfoWhenOnlyOneBranchIsPresent(
elseBranch, elseScope, elseInfo, thenInfo, contextWithExpectedType, ifExpression, isStatement); elseBranch, elseScope, elseInfo, thenInfo, contextWithExpectedType, ifExpression, isStatement);
} }
JetBlockExpression thenBlock = JetPsiFactory(ifExpression.getProject()).wrapInABlock(thenBranch); JetPsiFactory psiFactory = JetPsiFactory(ifExpression);
JetBlockExpression elseBlock = JetPsiFactory(ifExpression.getProject()).wrapInABlock(elseBranch); JetBlockExpression thenBlock = psiFactory.wrapInABlock(thenBranch);
JetBlockExpression elseBlock = psiFactory.wrapInABlock(elseBranch);
Call callForIf = createCallForSpecialConstruction(ifExpression, ifExpression, Lists.newArrayList(thenBlock, elseBlock)); Call callForIf = createCallForSpecialConstruction(ifExpression, ifExpression, Lists.newArrayList(thenBlock, elseBlock));
MutableDataFlowInfoForArguments dataFlowInfoForArguments = MutableDataFlowInfoForArguments dataFlowInfoForArguments =
createDataFlowInfoForArgumentsForIfCall(callForIf, thenInfo, elseInfo); createDataFlowInfoForArgumentsForIfCall(callForIf, thenInfo, elseInfo);
@@ -209,19 +209,17 @@ public class ExpressionTypingUtils {
* Check that function or property with the given qualified name can be resolved in given scope and called on given receiver * Check that function or property with the given qualified name can be resolved in given scope and called on given receiver
* *
* @param callableFQN * @param callableFQN
* @param project
* @param scope * @param scope
* @return * @return
*/ */
public static List<CallableDescriptor> canFindSuitableCall( public static List<CallableDescriptor> canFindSuitableCall(
@NotNull FqName callableFQN, @NotNull FqName callableFQN,
@NotNull Project project,
@NotNull JetExpression receiverExpression, @NotNull JetExpression receiverExpression,
@NotNull JetType receiverType, @NotNull JetType receiverType,
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull ModuleDescriptor module @NotNull ModuleDescriptor module
) { ) {
JetImportDirective importDirective = JetPsiFactory(project).createImportDirective(callableFQN.asString()); JetImportDirective importDirective = JetPsiFactory(receiverExpression).createImportDirective(callableFQN.asString());
Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver() Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver()
.analyseImportReference(importDirective, scope, new BindingTraceContext(), module); .analyseImportReference(importDirective, scope, new BindingTraceContext(), module);
@@ -65,7 +65,7 @@ public class JetAddFunctionToClassifierAction implements QuestionAction {
} }
private static void addFunction( private static void addFunction(
@NotNull final Project project, @NotNull Project project,
@NotNull final ClassDescriptor typeDescriptor, @NotNull final ClassDescriptor typeDescriptor,
@NotNull final FunctionDescriptor functionDescriptor @NotNull final FunctionDescriptor functionDescriptor
) { ) {
@@ -82,7 +82,7 @@ public class JetAddFunctionToClassifierAction implements QuestionAction {
ApplicationManager.getApplication().runWriteAction(new Runnable() { ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { public void run() {
JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(project); JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(classifierDeclaration);
JetClassBody body = classifierDeclaration.getBody(); JetClassBody body = classifierDeclaration.getBody();
if (body == null) { if (body == null) {
PsiElement whitespaceBefore = classifierDeclaration.add(psiFactory.createWhiteSpace()); PsiElement whitespaceBefore = classifierDeclaration.add(psiFactory.createWhiteSpace());
@@ -119,14 +119,14 @@ public class JetChangeFunctionSignatureAction implements QuestionAction {
}; };
} }
private static void changeSignature(final JetNamedFunction element, final Project project, FunctionDescriptor signature) { private static void changeSignature(final JetNamedFunction element, Project project, FunctionDescriptor signature) {
final String signatureString = CodeInsightUtils.createFunctionSignatureStringFromDescriptor( final String signatureString = CodeInsightUtils.createFunctionSignatureStringFromDescriptor(
signature, signature,
/* shortTypeNames = */ false); /* shortTypeNames = */ false);
PsiDocumentManager.getInstance(project).commitAllDocuments(); PsiDocumentManager.getInstance(project).commitAllDocuments();
final JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(project); final JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(element);
CommandProcessor.getInstance().executeCommand(project, new Runnable() { CommandProcessor.getInstance().executeCommand(project, new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -244,7 +244,7 @@ public class JetShortNamesCache extends PsiShortNamesCache {
} }
}); });
for (FqName fqName : topLevelFunctionFqNames) { for (FqName fqName : topLevelFunctionFqNames) {
JetImportDirective importDirective = JetPsiFactory(project).createImportDirective(new ImportPath(fqName, false)); JetImportDirective importDirective = JetPsiFactory(expression).createImportDirective(new ImportPath(fqName, false));
Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver().analyseImportReference( Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver().analyseImportReference(
importDirective, jetScope, new BindingTraceContext(), resolveSession.getModuleDescriptor()); importDirective, jetScope, new BindingTraceContext(), resolveSession.getModuleDescriptor());
for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) { for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) {
@@ -314,7 +314,7 @@ public class JetShortNamesCache extends PsiShortNamesCache {
// Iterate through the function with attempt to resolve found functions // Iterate through the function with attempt to resolve found functions
for (FqName functionFQN : functionFQNs) { for (FqName functionFQN : functionFQNs) {
for (CallableDescriptor functionDescriptor : ExpressionTypingUtils.canFindSuitableCall( for (CallableDescriptor functionDescriptor : ExpressionTypingUtils.canFindSuitableCall(
functionFQN, project, receiverExpression, expressionType, scope, resolveSession.getModuleDescriptor())) { functionFQN, receiverExpression, expressionType, scope, resolveSession.getModuleDescriptor())) {
resultDescriptors.add(functionDescriptor); resultDescriptors.add(functionDescriptor);
} }
@@ -311,8 +311,8 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Refere
private object LengthenReferences { private object LengthenReferences {
private fun createQualifiedExpression(project: Project, text: String): JetDotQualifiedExpression { private fun createQualifiedExpression(psiFactory: JetPsiFactory, text: String): JetDotQualifiedExpression {
val newExpression = JetPsiFactory(project).createExpression(text) val newExpression = psiFactory.createExpression(text)
LOG.assertTrue(newExpression is JetDotQualifiedExpression, LOG.assertTrue(newExpression is JetDotQualifiedExpression,
"\"${newExpression.getText()}\" is ${newExpression.javaClass}," + "\"${newExpression.getText()}\" is ${newExpression.javaClass}," +
"not ${javaClass<JetDotQualifiedExpression>().getSimpleName()}." "not ${javaClass<JetDotQualifiedExpression>().getSimpleName()}."
@@ -325,18 +325,19 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor<Refere
val project = expression.getProject() val project = expression.getProject()
val parent = expression.getParent() val parent = expression.getParent()
val prefixToInsert = fqName.parent().asString() val prefixToInsert = fqName.parent().asString()
val psiFactory = JetPsiFactory(expression)
if (parent is JetCallExpression) { if (parent is JetCallExpression) {
val text = "$prefixToInsert.${parent.getText()}" val text = "$prefixToInsert.${parent.getText()}"
parent.replace(createQualifiedExpression(project, text)) parent.replace(createQualifiedExpression(psiFactory, text))
} }
else if (parent is JetUserType) { else if (parent is JetUserType) {
val typeReference = PsiTreeUtil.getParentOfType(expression, javaClass<JetTypeReference>()) val typeReference = PsiTreeUtil.getParentOfType(expression, javaClass<JetTypeReference>())
LOG.assertTrue(typeReference != null, "JetUserType is expected to have parent of type JetTypeReference:\n" + LOG.assertTrue(typeReference != null, "JetUserType is expected to have parent of type JetTypeReference:\n" +
"At: ${DiagnosticUtils.atLocation(expression)}\nFILE:\n${expression.getContainingFile()!!.getText()}") "At: ${DiagnosticUtils.atLocation(expression)}\nFILE:\n${expression.getContainingFile()!!.getText()}")
typeReference!!.replace(JetPsiFactory(project).createType("$prefixToInsert.${typeReference.getText()}")) typeReference!!.replace(psiFactory.createType("$prefixToInsert.${typeReference.getText()}"))
} }
else { else {
expression.replace(createQualifiedExpression(project, fqName.asString())) expression.replace(createQualifiedExpression(psiFactory, fqName.asString()))
} }
} }
@@ -82,8 +82,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
) { ) {
JetClassBody body = classOrObject.getBody(); JetClassBody body = classOrObject.getBody();
if (body == null) { if (body == null) {
Project project = classOrObject.getProject(); JetPsiFactory psiFactory = JetPsiFactory(classOrObject);
JetPsiFactory psiFactory = JetPsiFactory(project);
classOrObject.add(psiFactory.createWhiteSpace()); classOrObject.add(psiFactory.createWhiteSpace());
body = (JetClassBody) classOrObject.add(psiFactory.createEmptyClassBody()); body = (JetClassBody) classOrObject.add(psiFactory.createEmptyClassBody());
} }
@@ -191,7 +191,7 @@ public object ShortenReferences {
if (referenceExpression == null) return if (referenceExpression == null) return
val typeArgumentList = userType.getTypeArgumentList() val typeArgumentList = userType.getTypeArgumentList()
val text = referenceExpression.getText() + (if (typeArgumentList != null) typeArgumentList.getText() else "") val text = referenceExpression.getText() + (if (typeArgumentList != null) typeArgumentList.getText() else "")
val newUserType = JetPsiFactory(userType.getProject()).createType(text).getTypeElement()!! val newUserType = JetPsiFactory(userType).createType(text).getTypeElement()!!
userType.replace(newUserType) userType.replace(newUserType)
} }
} }
@@ -95,7 +95,7 @@ public class MoveDeclarationsOutHelper {
private static JetBinaryExpression createVariableAssignment(@NotNull JetProperty property) { private static JetBinaryExpression createVariableAssignment(@NotNull JetProperty property) {
String propertyName = property.getName(); String propertyName = property.getName();
assert propertyName != null : "Property should have a name " + property.getText(); assert propertyName != null : "Property should have a name " + property.getText();
JetBinaryExpression assignment = (JetBinaryExpression) JetPsiFactory(property.getProject()).createExpression(propertyName + " = x"); JetBinaryExpression assignment = (JetBinaryExpression) JetPsiFactory(property).createExpression(propertyName + " = x");
JetExpression right = assignment.getRight(); JetExpression right = assignment.getRight();
assert right != null : "Created binary expression should have a right part " + assignment.getText(); assert right != null : "Created binary expression should have a right part " + assignment.getText();
JetExpression initializer = property.getInitializer(); JetExpression initializer = property.getInitializer();
@@ -134,7 +134,7 @@ public class MoveDeclarationsOutHelper {
typeString = DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(propertyType); typeString = DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(propertyType);
} }
return JetPsiFactory(property.getProject()).createProperty(property.getName(), typeString, property.isVar(), initializer); return JetPsiFactory(property).createProperty(property.getName(), typeString, property.isVar(), initializer);
} }
private static boolean needToDeclareOut(@NotNull PsiElement element, int lastStatementOffset, @NotNull SearchScope scope) { private static boolean needToDeclareOut(@NotNull PsiElement element, int lastStatementOffset, @NotNull SearchScope scope) {
@@ -47,7 +47,7 @@ public class KotlinNotSurrounder extends KotlinExpressionSurrounder {
@Nullable @Nullable
@Override @Override
public TextRange surroundExpression(@NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) { public TextRange surroundExpression(@NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) {
JetPrefixExpression prefixExpr = (JetPrefixExpression) JetPsiFactory(project).createExpression("!(a)"); JetPrefixExpression prefixExpr = (JetPrefixExpression) JetPsiFactory(expression).createExpression("!(a)");
JetParenthesizedExpression parenthesizedExpression = (JetParenthesizedExpression) prefixExpr.getBaseExpression(); JetParenthesizedExpression parenthesizedExpression = (JetParenthesizedExpression) prefixExpr.getBaseExpression();
assert parenthesizedExpression != null : "JetParenthesizedExpression should exists for " + prefixExpr.getText() + " expression"; assert parenthesizedExpression != null : "JetParenthesizedExpression should exists for " + prefixExpr.getText() + " expression";
JetExpression expressionWithoutParentheses = parenthesizedExpression.getExpression(); JetExpression expressionWithoutParentheses = parenthesizedExpression.getExpression();
@@ -42,7 +42,7 @@ public class KotlinParenthesesSurrounder extends KotlinExpressionSurrounder {
@Nullable @Nullable
@Override @Override
public TextRange surroundExpression( @NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) { public TextRange surroundExpression( @NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) {
JetParenthesizedExpression parenthesizedExpression = (JetParenthesizedExpression) JetPsiFactory(project).createExpression("(a)"); JetParenthesizedExpression parenthesizedExpression = (JetParenthesizedExpression) JetPsiFactory(expression).createExpression("(a)");
JetExpression expressionWithoutParentheses = parenthesizedExpression.getExpression(); JetExpression expressionWithoutParentheses = parenthesizedExpression.getExpression();
assert expressionWithoutParentheses != null : "JetExpression should exists for " + parenthesizedExpression.getText() + " expression"; assert expressionWithoutParentheses != null : "JetExpression should exists for " + parenthesizedExpression.getText() + " expression";
expressionWithoutParentheses.replace(expression); expressionWithoutParentheses.replace(expression);
@@ -44,7 +44,7 @@ public class KotlinStringTemplateSurrounder extends KotlinExpressionSurrounder {
@Nullable @Nullable
@Override @Override
public TextRange surroundExpression(@NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) { public TextRange surroundExpression(@NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) {
JetStringTemplateExpression stringTemplateExpression = (JetStringTemplateExpression) JetPsiFactory(project).createExpression( JetStringTemplateExpression stringTemplateExpression = (JetStringTemplateExpression) JetPsiFactory(expression).createExpression(
getCodeTemplate(expression) getCodeTemplate(expression)
); );
JetStringTemplateEntry templateEntry = stringTemplateExpression.getEntries()[0]; JetStringTemplateEntry templateEntry = stringTemplateExpression.getEntries()[0];
@@ -49,7 +49,7 @@ public class KotlinWhenSurrounder extends KotlinExpressionSurrounder {
@Nullable @Nullable
@Override @Override
public TextRange surroundExpression(@NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) { public TextRange surroundExpression(@NotNull Project project, @NotNull Editor editor, @NotNull JetExpression expression) {
JetWhenExpression whenExpression = (JetWhenExpression) JetPsiFactory(project).createExpression(getCodeTemplate(expression)); JetWhenExpression whenExpression = (JetWhenExpression) JetPsiFactory(expression).createExpression(getCodeTemplate(expression));
JetExpression subjectExpression = whenExpression.getSubjectExpression(); JetExpression subjectExpression = whenExpression.getSubjectExpression();
assert subjectExpression != null : "JetExpression should exists for " + whenExpression.getText() + " expression"; assert subjectExpression != null : "JetExpression should exists for " + whenExpression.getText() + " expression";
subjectExpression.replace(expression); subjectExpression.replace(expression);
@@ -74,7 +74,7 @@ public class KotlinUnwrappers {
@Override @Override
protected void doUnwrap(PsiElement element, Context context) throws IncorrectOperationException { protected void doUnwrap(PsiElement element, Context context) throws IncorrectOperationException {
JetIfExpression ifExpr = (JetIfExpression) element; JetIfExpression ifExpr = (JetIfExpression) element;
context.replace(ifExpr, JetPsiFactory(ifExpr.getProject()).createIf(ifExpr.getCondition(), ifExpr.getThen(), null)); context.replace(ifExpr, JetPsiFactory(ifExpr).createIf(ifExpr.getCondition(), ifExpr.getThen(), null));
} }
} }
@@ -110,7 +110,7 @@ private fun addImportsToFile(newImportList: JetImportList?, tmpFile: JetFile) {
if (newImportList != null) { if (newImportList != null) {
val tmpFileImportList = tmpFile.getImportList() val tmpFileImportList = tmpFile.getImportList()
val packageDirective = tmpFile.getPackageDirective() val packageDirective = tmpFile.getPackageDirective()
val psiFactory = JetPsiFactory(tmpFile.getProject()) val psiFactory = JetPsiFactory(tmpFile)
if (tmpFileImportList == null) { if (tmpFileImportList == null) {
tmpFile.addAfter(psiFactory.createNewLine(), packageDirective) tmpFile.addAfter(psiFactory.createNewLine(), packageDirective)
tmpFile.addAfter(newImportList, tmpFile.getPackageDirective()) tmpFile.addAfter(newImportList, tmpFile.getPackageDirective())
@@ -126,7 +126,7 @@ private fun addDebugExpressionBeforeContextElement(codeFragment: JetCodeFragment
val parent = contextElement.getParent() val parent = contextElement.getParent()
if (parent == null) return null if (parent == null) return null
val psiFactory = JetPsiFactory(contextElement.getProject()) val psiFactory = JetPsiFactory(codeFragment)
parent.addBefore(psiFactory.createNewLine(), contextElement) parent.addBefore(psiFactory.createNewLine(), contextElement)
val debugExpression = codeFragment.getContentElement() val debugExpression = codeFragment.getContentElement()
@@ -53,7 +53,7 @@ public class AddBracesIntention : JetSelfTargetingIntention<JetExpressionImpl>("
if (element.getNextSibling()?.getText() == ";") { if (element.getNextSibling()?.getText() == ";") {
element.getNextSibling()!!.delete() element.getNextSibling()!!.delete()
} }
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val newElement = bodyNode!!.getPsi()!!.replace(psiFactory.createFunctionBody(bodyNode.getText())) val newElement = bodyNode!!.getPsi()!!.replace(psiFactory.createFunctionBody(bodyNode.getText()))
//handles the case of the block statement being on a new line //handles the case of the block statement being on a new line
@@ -61,7 +61,7 @@ public class ConvertAssertToIfWithThrowIntention : JetSelfTargetingIntention<Jet
val condition = args[0]?.getArgumentExpression() val condition = args[0]?.getArgumentExpression()
val lambdas = element.getFunctionLiteralArguments() val lambdas = element.getFunctionLiteralArguments()
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val messageExpr = val messageExpr =
if (args.size == 2) { if (args.size == 2) {
args[1]?.getArgumentExpression() args[1]?.getArgumentExpression()
@@ -71,7 +71,7 @@ public class ConvertIfWithThrowToAssertIntention :
"" ""
} }
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val negatedCondition = psiFactory.createExpression("!true") as JetPrefixExpression val negatedCondition = psiFactory.createExpression("!true") as JetPrefixExpression
negatedCondition.getBaseExpression()!!.replace(condition) negatedCondition.getBaseExpression()!!.replace(condition)
condition.replace(negatedCondition) condition.replace(negatedCondition)
@@ -54,7 +54,7 @@ public class ConvertNegatedBooleanSequenceIntention : JetSelfTargetingIntention<
"!(${bareExpressions.last()}", { negated, expression -> "$expression $operatorText $negated" } "!(${bareExpressions.last()}", { negated, expression -> "$expression $operatorText $negated" }
) )
val newExpression = JetPsiFactory(element.getProject()).createExpression("$negatedExpression)") val newExpression = JetPsiFactory(element).createExpression("$negatedExpression)")
val insertedElement = element.replace(newExpression) val insertedElement = element.replace(newExpression)
val insertedElementParent = insertedElement.getParent() as? JetParenthesizedExpression ?: return val insertedElementParent = insertedElement.getParent() as? JetParenthesizedExpression ?: return
@@ -64,7 +64,7 @@ public class ConvertNegatedExpressionWithDemorgansLawIntention : JetSelfTargetin
val negatedExpression = negatedElements.subList(0, negatedElements.lastIndex).foldRight( val negatedExpression = negatedElements.subList(0, negatedElements.lastIndex).foldRight(
"${negatedElements.last()}", { negated, exp -> "$exp $operatorText $negated" }) "${negatedElements.last()}", { negated, exp -> "$exp $operatorText $negated" })
val newExpression = JetPsiFactory(element.getProject()).createExpression(negatedExpression) val newExpression = JetPsiFactory(element).createExpression(negatedExpression)
element.replace(newExpression) element.replace(newExpression)
} }
@@ -44,7 +44,7 @@ public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() {
val oldBodyText = body.getText()!! val oldBodyText = body.getText()!!
val newBodyText = if (needReturn) "return ${oldBodyText}" else oldBodyText val newBodyText = if (needReturn) "return ${oldBodyText}" else oldBodyText
return JetPsiFactory(project).createFunctionBody(newBodyText) return JetPsiFactory(declaration).createFunctionBody(newBodyText)
} }
if (declaration is JetNamedFunction) { if (declaration is JetNamedFunction) {
@@ -32,7 +32,7 @@ public class ConvertToConcatenatedStringIntention : JetSelfTargetingIntention<Je
.makeString(separator = "+") .makeString(separator = "+")
.replaceAll("""$quote\+$quote""", "") .replaceAll("""$quote\+$quote""", "")
val replacement = JetPsiFactory(element.getProject()).createExpression(result) val replacement = JetPsiFactory(element).createExpression(result)
element.replace(replacement) element.replace(replacement)
} }
@@ -46,7 +46,7 @@ public class ConvertToExpressionBodyAction : PsiElementBaseIntentionAction() {
} }
val body = declaration.getBodyExpression()!! val body = declaration.getBodyExpression()!!
declaration.addBefore(JetPsiFactory(project).createEQ(), body) declaration.addBefore(JetPsiFactory(declaration).createEQ(), body)
body.replace(value) body.replace(value)
} }
@@ -62,6 +62,6 @@ public class ConvertToForEachFunctionCallIntention : JetSelfTargetingIntention<J
else -> body.getText() ?: throw AssertionError("Body of ForExpression shouldn't be empty: expressionText = ${element.getText()}") else -> body.getText() ?: throw AssertionError("Body of ForExpression shouldn't be empty: expressionText = ${element.getText()}")
}) })
element.replace(JetPsiFactory(element.getProject()).createExpression("${buildReceiverText(element)}.forEach { $bodyText }")) element.replace(JetPsiFactory(element).createExpression("${buildReceiverText(element)}.forEach { $bodyText }"))
} }
} }
@@ -113,6 +113,6 @@ public class ConvertToForEachLoopIntention : JetSelfTargetingIntention<JetExpres
val functionLiteral = getFunctionLiteralArgument(element)!! val functionLiteral = getFunctionLiteralArgument(element)!!
element.replace(JetPsiFactory(element.getProject()).createExpression(generateLoopText(receiver, functionLiteral))) element.replace(JetPsiFactory(element).createExpression(generateLoopText(receiver, functionLiteral)))
} }
} }
@@ -57,7 +57,7 @@ public class ConvertToStringTemplateIntention : JetSelfTargetingIntention<JetBin
val rightStr = mkString(element.getRight(), false) val rightStr = mkString(element.getRight(), false)
val resultStr = fold(element.getLeft(), rightStr) val resultStr = fold(element.getLeft(), rightStr)
val expr = JetPsiFactory(element.getProject()).createExpression(resultStr) val expr = JetPsiFactory(element).createExpression(resultStr)
element.replace(expr) element.replace(expr)
} }
@@ -28,6 +28,6 @@ public class InsertCurlyBracesToTemplateIntention : JetSelfTargetingIntention<Je
override fun applyTo(element: JetSimpleNameStringTemplateEntry, editor: Editor) { override fun applyTo(element: JetSimpleNameStringTemplateEntry, editor: Editor) {
val expression = element.getExpression() val expression = element.getExpression()
if (expression == null) return if (expression == null) return
element.replace(JetPsiFactory(element.getProject()).createBlockStringTemplateEntry(expression)) element.replace(JetPsiFactory(element).createBlockStringTemplateEntry(expression))
} }
} }
@@ -55,7 +55,7 @@ public class InsertExplicitTypeArguments : JetSelfTargetingIntention<JetCallExpr
val args = resolvedCall.getTypeArguments() val args = resolvedCall.getTypeArguments()
val types = resolvedCall.getCandidateDescriptor().getTypeParameters() val types = resolvedCall.getCandidateDescriptor().getTypeParameters()
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val typeArgs = types.map { val typeArgs = types.map {
assert(args[it] != null, "there is a null in the type arguments to transform") assert(args[it] != null, "there is a null in the type arguments to transform")
val typeToCompute = DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(args[it]!!); val typeToCompute = DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(args[it]!!);
@@ -64,7 +64,7 @@ public class InvertIfConditionIntention : JetSelfTargetingIntention<JetIfExpress
} }
override fun applyTo(element: JetIfExpression, editor: Editor) { override fun applyTo(element: JetIfExpression, editor: Editor) {
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
fun isNegatableOperator(token: IElementType): Boolean { fun isNegatableOperator(token: IElementType): Boolean {
return token in array(JetTokens.EQEQ, JetTokens.EXCLEQ, JetTokens.EQEQEQ, JetTokens.EXCLEQEQEQ, JetTokens.IS_KEYWORD, JetTokens.NOT_IS, JetTokens.IN_KEYWORD, JetTokens.NOT_IN, JetTokens.LT, JetTokens.LTEQ, JetTokens.GT, JetTokens.GTEQ) return token in array(JetTokens.EQEQ, JetTokens.EXCLEQ, JetTokens.EQEQEQ, JetTokens.EXCLEQEQEQ, JetTokens.IS_KEYWORD, JetTokens.NOT_IS, JetTokens.IN_KEYWORD, JetTokens.NOT_IN, JetTokens.LT, JetTokens.LTEQ, JetTokens.GT, JetTokens.GTEQ)
@@ -63,7 +63,7 @@ public class MakeTypeExplicitInLambdaIntention : JetSelfTargetingIntention<JetFu
val parameterString = valueParameters.map({descriptor -> "" + descriptor.getName() + val parameterString = valueParameters.map({descriptor -> "" + descriptor.getName() +
": " + DescriptorRenderer.SOURCE_CODE.renderType(descriptor.getType()) ": " + DescriptorRenderer.SOURCE_CODE.renderType(descriptor.getType())
}).makeString(", ", "(", ")") }).makeString(", ", "(", ")")
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val newParameterList = psiFactory.createParameterList(parameterString) val newParameterList = psiFactory.createParameterList(parameterString)
val oldParameterList = functionLiteral.getValueParameterList() val oldParameterList = functionLiteral.getValueParameterList()
if (oldParameterList != null) { if (oldParameterList != null) {
@@ -42,7 +42,7 @@ public class MakeTypeImplicitInLambdaIntention : JetSelfTargetingIntention<JetFu
val functionLiteral = element.getFunctionLiteral() val functionLiteral = element.getFunctionLiteral()
val oldParameterList = functionLiteral.getValueParameterList() val oldParameterList = functionLiteral.getValueParameterList()
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
if (hasExplicitReturnType(element)) { if (hasExplicitReturnType(element)) {
val childAfterParamList = oldParameterList?.getNextSibling() val childAfterParamList = oldParameterList?.getNextSibling()
val arrow = functionLiteral.getArrowNode()?.getPsi() val arrow = functionLiteral.getArrowNode()?.getPsi()
@@ -49,6 +49,6 @@ public class MoveLambdaInsideParenthesesIntention : JetSelfTargetingIntention<Je
sb.append("$literalName = ") sb.append("$literalName = ")
} }
val newExpression = "$funName${sb.toString()}${element.getFunctionLiteralArguments()[0].getText()})" val newExpression = "$funName${sb.toString()}${element.getFunctionLiteralArguments()[0].getText()})"
element.replace(JetPsiFactory(element.getProject()).createExpression(newExpression)) element.replace(JetPsiFactory(element).createExpression(newExpression))
} }
} }
@@ -49,6 +49,6 @@ public class MoveLambdaOutsideParenthesesIntention : JetSelfTargetingIntention<J
} else { } else {
"$calleeText$params $functionLiteral" "$calleeText$params $functionLiteral"
} }
element.replace(JetPsiFactory(element.getProject()).createExpression(newCall)) element.replace(JetPsiFactory(element).createExpression(newCall))
} }
} }
@@ -92,7 +92,7 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<JetExpressi
} }
val transformation = "$base.$call" val transformation = "$base.$call"
val transformed = JetPsiFactory(element.getProject()).createExpression(transformation) val transformed = JetPsiFactory(element).createExpression(transformation)
element.replace(transformed) element.replace(transformed)
} }
@@ -107,7 +107,7 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<JetExpressi
} }
val transformation = "$base.$call" val transformation = "$base.$call"
val transformed = JetPsiFactory(element.getProject()).createExpression(transformation) val transformed = JetPsiFactory(element).createExpression(transformation)
element.replace(transformed) element.replace(transformed)
} }
@@ -153,7 +153,7 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<JetExpressi
else -> return else -> return
} }
val transformed = JetPsiFactory(element.getProject()).createExpression(transformation) val transformed = JetPsiFactory(element).createExpression(transformation)
element.replace(transformed) element.replace(transformed)
} }
@@ -177,7 +177,7 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<JetExpressi
replaced = element replaced = element
} }
val transformed = JetPsiFactory(element.getProject()).createExpression(transformation) val transformed = JetPsiFactory(element).createExpression(transformation)
replaced.replace(transformed) replaced.replace(transformed)
} }
@@ -188,7 +188,7 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<JetExpressi
val funcLitArgs = element.getFunctionLiteralArguments() val funcLitArgs = element.getFunctionLiteralArguments()
val calleeText = callee.getText() val calleeText = callee.getText()
val transformation = if (argumentString == null) "$calleeText.invoke" else "$calleeText.invoke($argumentString)" val transformation = if (argumentString == null) "$calleeText.invoke" else "$calleeText.invoke($argumentString)"
val transformed = JetPsiFactory(element.getProject()).createExpression(transformation) val transformed = JetPsiFactory(element).createExpression(transformation)
funcLitArgs.forEach { transformed.add(it) } funcLitArgs.forEach { transformed.add(it) }
callee.getParent()!!.replace(transformed) callee.getParent()!!.replace(transformed)
} }
@@ -45,7 +45,7 @@ public class ReconstructTypeInCastOrIsAction extends PsiElementBaseIntentionActi
assert typeRef != null : "Must be checked by isAvailable(): " + element; assert typeRef != null : "Must be checked by isAvailable(): " + element;
JetType type = getReconstructedType(typeRef); JetType type = getReconstructedType(typeRef);
JetTypeReference newType = JetPsiFactory(project).createType(DescriptorRenderer.SOURCE_CODE.renderType(type)); JetTypeReference newType = JetPsiFactory(typeRef).createType(DescriptorRenderer.SOURCE_CODE.renderType(type));
JetTypeReference replaced = (JetTypeReference) typeRef.replace(newType); JetTypeReference replaced = (JetTypeReference) typeRef.replace(newType);
ShortenReferences.instance$.process(replaced); ShortenReferences.instance$.process(replaced);
} }
@@ -50,11 +50,10 @@ public class RemoveBracesIntention : JetSelfTargetingIntention<JetExpressionImpl
handleComments(element, jetBlockElement) handleComments(element, jetBlockElement)
val project = element.getProject()
val newElement = jetBlockElement.replace(firstStatement.copy()) val newElement = jetBlockElement.replace(firstStatement.copy())
if (expressionKind == ExpressionKind.DOWHILE) { if (expressionKind == ExpressionKind.DOWHILE) {
newElement.getParent()!!.addAfter(JetPsiFactory(project).createNewLine(), newElement) newElement.getParent()!!.addAfter(JetPsiFactory(element).createNewLine(), newElement)
} }
} }
@@ -64,11 +63,12 @@ public class RemoveBracesIntention : JetSelfTargetingIntention<JetExpressionImpl
while (sibling != null) { while (sibling != null) {
if (sibling is PsiComment) { if (sibling is PsiComment) {
//cleans up extra whitespace //cleans up extra whitespace
val psiFactory = JetPsiFactory(element)
if (element.getPrevSibling() is PsiWhiteSpace) { if (element.getPrevSibling() is PsiWhiteSpace) {
element.getPrevSibling()!!.replace(JetPsiFactory(element.getProject()).createNewLine()) element.getPrevSibling()!!.replace(psiFactory.createNewLine())
} }
val commentElement = element.getParent()!!.addBefore(sibling as PsiComment, element.getPrevSibling()) val commentElement = element.getParent()!!.addBefore(sibling as PsiComment, element.getPrevSibling())
element.getParent()!!.addBefore(JetPsiFactory(element.getProject()).createNewLine(), commentElement) element.getParent()!!.addBefore(psiFactory.createNewLine(), commentElement)
} }
sibling = sibling!!.getNextSibling() sibling = sibling!!.getNextSibling()
} }
@@ -46,6 +46,6 @@ public class RemoveCurlyBracesFromTemplateIntention : JetSelfTargetingIntention<
val tripleQuotes = parent.getFirstChild()?.getText()?.startsWith("\"\"\"") val tripleQuotes = parent.getFirstChild()?.getText()?.startsWith("\"\"\"")
if (tripleQuotes == null) return if (tripleQuotes == null) return
val newExpression = if (tripleQuotes) "\"\"\"${sb.toString()}\"\"\"" else "\"${sb.toString()}\"" val newExpression = if (tripleQuotes) "\"\"\"${sb.toString()}\"\"\"" else "\"${sb.toString()}\""
parent.replace(JetPsiFactory(element.getProject()).createExpression(newExpression)) parent.replace(JetPsiFactory(element).createExpression(newExpression))
} }
} }
@@ -43,7 +43,7 @@ public class ReplaceItWithExplicitFunctionLiteralParamIntention() : PsiElementBa
val funcExpr = DescriptorToSourceUtils.descriptorToDeclaration(target.getContainingDeclaration()!!) as JetFunctionLiteral val funcExpr = DescriptorToSourceUtils.descriptorToDeclaration(target.getContainingDeclaration()!!) as JetFunctionLiteral
val newExpr = JetPsiFactory(project).createExpression("{ it -> 42 }") as JetFunctionLiteralExpression val newExpr = JetPsiFactory(simpleNameExpression).createExpression("{ it -> 42 }") as JetFunctionLiteralExpression
funcExpr.addRangeAfter(newExpr.getFunctionLiteral().getValueParameterList(), funcExpr.addRangeAfter(newExpr.getFunctionLiteral().getValueParameterList(),
newExpr.getFunctionLiteral().getArrowNode()!!.getPsi(), newExpr.getFunctionLiteral().getArrowNode()!!.getPsi(),
funcExpr.getOpenBraceNode().getPsi()) funcExpr.getOpenBraceNode().getPsi())
@@ -42,7 +42,7 @@ public class ReplaceWithDotQualifiedMethodCallIntention : JetSelfTargetingIntent
} }
) )
val replacement = JetPsiFactory(element.getProject()).createExpression(replacementExpressionStringBuilder.toString()) val replacement = JetPsiFactory(element).createExpression(replacementExpressionStringBuilder.toString())
element.replace(replacement) element.replace(replacement)
} }
} }
@@ -109,7 +109,7 @@ public open class ReplaceWithInfixFunctionCallIntention : JetSelfTargetingIntent
functionLiteralArguments.first().getText() functionLiteralArguments.first().getText()
) )
val replacement = JetPsiFactory(element.getProject()).createExpression("$leftHandText $operatorText ${rightHandTextStringBuilder.toString()}") val replacement = JetPsiFactory(element).createExpression("$leftHandText $operatorText ${rightHandTextStringBuilder.toString()}")
parent.replace(replacement) parent.replace(replacement)
} }
@@ -111,6 +111,6 @@ public class ReplaceWithOperatorAssignIntention : JetSelfTargetingIntention<JetB
} }
} }
element.replace(JetPsiFactory(element.getProject()).createExpression(buildReplacement(element.getLeft() as JetSimpleNameExpression, element.getRight() as JetBinaryExpression, StringBuilder()))) element.replace(JetPsiFactory(element).createExpression(buildReplacement(element.getLeft() as JetSimpleNameExpression, element.getRight() as JetBinaryExpression, StringBuilder())))
} }
} }
@@ -53,6 +53,6 @@ public class ReplaceWithTraditionalAssignmentIntention : JetSelfTargetingIntenti
return replacementStringBuilder.toString() return replacementStringBuilder.toString()
} }
element.replace(JetPsiFactory(element.getProject()).createExpression(buildReplacement(element))) element.replace(JetPsiFactory(element).createExpression(buildReplacement(element)))
} }
} }
@@ -67,7 +67,7 @@ public class SimplifyBooleanWithConstantsIntention : JetSelfTargetingIntention<J
} }
private fun simplifyBoolean(element: JetExpression) : JetExpression { private fun simplifyBoolean(element: JetExpression) : JetExpression {
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
if (element.canBeReducedToTrue()) if (element.canBeReducedToTrue())
return psiFactory.createExpression("true") return psiFactory.createExpression("true")
if (element.canBeReducedToFalse()) if (element.canBeReducedToFalse())
@@ -115,7 +115,7 @@ public class SimplifyBooleanWithConstantsIntention : JetSelfTargetingIntention<J
operation: IElementType operation: IElementType
): JetExpression { ): JetExpression {
assert(booleanConstantOperand.canBeReducedToBooleanConstant(null), "should only be called when we know it can be reduced") assert(booleanConstantOperand.canBeReducedToBooleanConstant(null), "should only be called when we know it can be reduced")
val psiFactory = JetPsiFactory(otherOperand.getProject()) val psiFactory = JetPsiFactory(otherOperand)
if (booleanConstantOperand.canBeReducedToTrue() && operation == JetTokens.OROR) if (booleanConstantOperand.canBeReducedToTrue() && operation == JetTokens.OROR)
return psiFactory.createExpression("true") return psiFactory.createExpression("true")
if (booleanConstantOperand.canBeReducedToFalse() && operation == JetTokens.ANDAND) if (booleanConstantOperand.canBeReducedToFalse() && operation == JetTokens.ANDAND)
@@ -74,7 +74,7 @@ public class SimplifyNegatedBinaryExpressionIntention : JetSelfTargetingIntentio
val expression = element.unparenthesize()!! val expression = element.unparenthesize()!!
val invertedOperation = JetPsiUtil.getOperationToken(expression as JetOperationExpression)!!.negate()!! val invertedOperation = JetPsiUtil.getOperationToken(expression as JetOperationExpression)!!.negate()!!
val psiFactory = JetPsiFactory(expression.getProject()) val psiFactory = JetPsiFactory(expression)
element.replace( element.replace(
when (expression) { when (expression) {
is JetIsExpression -> { is JetIsExpression -> {
@@ -264,7 +264,7 @@ public class SpecifyTypeExplicitlyAction extends PsiElementBaseIntentionAction {
} }
private static void addTypeAnnotationSilently(Project project, JetNamedDeclaration namedDeclaration, PsiElement anchor) { private static void addTypeAnnotationSilently(Project project, JetNamedDeclaration namedDeclaration, PsiElement anchor) {
JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(project); JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(namedDeclaration);
namedDeclaration.addAfter(psiFactory.createType("Any"), anchor); namedDeclaration.addAfter(psiFactory.createType("Any"), anchor);
namedDeclaration.addAfter(psiFactory.createColon(), anchor); namedDeclaration.addAfter(psiFactory.createColon(), anchor);
} }
@@ -59,7 +59,7 @@ public class SplitIfIntention : JetSelfTargetingIntention<JetExpression>("split.
val elseExpression = ifExpression.getElse() val elseExpression = ifExpression.getElse()
val thenExpression = ifExpression.getThen() val thenExpression = ifExpression.getThen()
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
if (currentElement.getReferencedNameElementType() == JetTokens.ANDAND) { if (currentElement.getReferencedNameElementType() == JetTokens.ANDAND) {
ifExpression.replace( ifExpression.replace(
psiFactory.createIf(leftExpression, psiFactory.wrapInABlock( psiFactory.createIf(leftExpression, psiFactory.wrapInABlock(
@@ -80,7 +80,7 @@ public class SplitIfIntention : JetSelfTargetingIntention<JetExpression>("split.
val startOffset = element.getRight()!!.getTextOffset() - condition.getTextOffset() val startOffset = element.getRight()!!.getTextOffset() - condition.getTextOffset()
val rightString = condition.getText()!![startOffset, condition.getTextLength()].toString() val rightString = condition.getText()!![startOffset, condition.getTextLength()].toString()
return JetPsiFactory(element.getProject()).createExpression(rightString) return JetPsiFactory(element).createExpression(rightString)
} }
fun isCursorOnIfKeyword(element: JetIfExpression, editor: Editor): Boolean { fun isCursorOnIfKeyword(element: JetIfExpression, editor: Editor): Boolean {
@@ -61,7 +61,7 @@ public class SwapBinaryExpression : JetSelfTargetingIntention<JetBinaryExpressio
} }
val left = leftSubject(element)!! val left = leftSubject(element)!!
val right = rightSubject(element)!! val right = rightSubject(element)!!
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val newRight = psiFactory.createExpression(left.getText()!!) val newRight = psiFactory.createExpression(left.getText()!!)
val newLeft = psiFactory.createExpression(right.getText()!!) val newLeft = psiFactory.createExpression(right.getText()!!)
left.replace(newLeft) left.replace(newLeft)
@@ -27,21 +27,20 @@ import org.jetbrains.jet.lexer.JetTokens
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
fun specifyTypeExplicitly(declaration: JetNamedFunction, typeText: String) { fun specifyTypeExplicitly(declaration: JetNamedFunction, typeText: String) {
specifyTypeExplicitly(declaration, JetPsiFactory(declaration.getProject()).createType(typeText)) specifyTypeExplicitly(declaration, JetPsiFactory(declaration).createType(typeText))
} }
fun specifyTypeExplicitly(declaration: JetNamedFunction, `type`: JetType) { fun specifyTypeExplicitly(declaration: JetNamedFunction, `type`: JetType) {
if (`type`.isError()) return if (`type`.isError()) return
val typeReference = JetPsiFactory(declaration.getProject()).createType(DescriptorRenderer.SOURCE_CODE.renderType(`type`)) val typeReference = JetPsiFactory(declaration).createType(DescriptorRenderer.SOURCE_CODE.renderType(`type`))
specifyTypeExplicitly(declaration, typeReference) specifyTypeExplicitly(declaration, typeReference)
ShortenReferences.process(declaration.getReturnTypeRef()!!) ShortenReferences.process(declaration.getReturnTypeRef()!!)
} }
fun specifyTypeExplicitly(declaration: JetNamedFunction, typeReference: JetTypeReference) { fun specifyTypeExplicitly(declaration: JetNamedFunction, typeReference: JetTypeReference) {
val project = declaration.getProject()
val anchor = declaration.getValueParameterList() ?: return/*incomplete declaration*/ val anchor = declaration.getValueParameterList() ?: return/*incomplete declaration*/
declaration.addAfter(typeReference, anchor) declaration.addAfter(typeReference, anchor)
declaration.addAfter(JetPsiFactory(project).createColon(), anchor) declaration.addAfter(JetPsiFactory(declaration).createColon(), anchor)
} }
fun expressionType(expression: JetExpression): JetType? { fun expressionType(expression: JetExpression): JetType? {
@@ -50,7 +50,7 @@ public open class ReplaceBinaryInfixIntention : AttributeCallReplacementIntentio
val argument = (handleErrors(editor, call.getPositionalArguments()) ?: return)[0].getArgumentExpression() val argument = (handleErrors(editor, call.getPositionalArguments()) ?: return)[0].getArgumentExpression()
call.element.replace( call.element.replace(
JetPsiFactory(call.element.getProject()).createBinaryExpression( JetPsiFactory(call.element).createBinaryExpression(
call.element.getReceiverExpression(), call.element.getReceiverExpression(),
lookup(call.functionName)!!, // Lookup must succeed lookup(call.functionName)!!, // Lookup must succeed
argument argument
@@ -42,7 +42,7 @@ public open class ReplaceContainsIntention : AttributeCallReplacementIntention("
val argument = (handleErrors(editor, call.getPositionalArguments()) ?: return)[0].getArgumentExpression() val argument = (handleErrors(editor, call.getPositionalArguments()) ?: return)[0].getArgumentExpression()
// Append semicolon to previous statement if needed // Append semicolon to previous statement if needed
val psiFactory = JetPsiFactory(call.element.getProject()) val psiFactory = JetPsiFactory(call.element)
if (argument is JetFunctionLiteralExpression) { if (argument is JetFunctionLiteralExpression) {
val previousElement = JetPsiUtil.skipSiblingsBackwardByPredicate(call.element) { val previousElement = JetPsiUtil.skipSiblingsBackwardByPredicate(call.element) {
// I checked, it can't be null. // I checked, it can't be null.
@@ -29,7 +29,7 @@ public open class ReplaceGetIntention : AttributeCallReplacementIntention("repla
it.getArgumentExpression()?.getText() ?: "" it.getArgumentExpression()?.getText() ?: ""
}.makeString(", ") }.makeString(", ")
call.element.replace(JetPsiFactory(call.element.getProject()).createExpression( call.element.replace(JetPsiFactory(call.element).createExpression(
"${call.element.getReceiverExpression().getText()}[${argumentString}]" "${call.element.getReceiverExpression().getText()}[${argumentString}]"
)) ))
} }
@@ -26,7 +26,7 @@ public open class ReplaceInvokeIntention : AttributeCallReplacementIntention("re
} }
override fun replaceCall(call: CallDescription, editor: Editor) { override fun replaceCall(call: CallDescription, editor: Editor) {
call.element.replace(JetPsiFactory(call.element.getProject()).createExpression( call.element.replace(JetPsiFactory(call.element).createExpression(
call.element.getReceiverExpression().getText() + call.element.getReceiverExpression().getText() +
(call.callElement.getTypeArgumentList()?.getText() ?: "") + (call.callElement.getTypeArgumentList()?.getText() ?: "") +
(call.callElement.getValueArgumentList()?.getText() ?: "") + (call.callElement.getValueArgumentList()?.getText() ?: "") +
@@ -44,7 +44,7 @@ public open class ReplaceUnaryPrefixIntention : AttributeCallReplacementIntentio
} }
override fun replaceCall(call: CallDescription, editor: Editor) { override fun replaceCall(call: CallDescription, editor: Editor) {
call.element.replace(JetPsiFactory(call.element.getProject()).createExpression( call.element.replace(JetPsiFactory(call.element).createExpression(
lookup(call.functionName)!! + call.element.getReceiverExpression().getText() lookup(call.functionName)!! + call.element.getReceiverExpression().getText()
)) ))
} }
@@ -166,8 +166,6 @@ public class BranchedFoldingUtils {
} }
public static void foldIfExpressionWithAssignments(JetIfExpression ifExpression) { public static void foldIfExpressionWithAssignments(JetIfExpression ifExpression) {
Project project = ifExpression.getProject();
JetBinaryExpression thenAssignment = getFoldableBranchedAssignment(ifExpression.getThen()); JetBinaryExpression thenAssignment = getFoldableBranchedAssignment(ifExpression.getThen());
assertNotNull(thenAssignment); assertNotNull(thenAssignment);
@@ -175,7 +173,7 @@ public class BranchedFoldingUtils {
String op = thenAssignment.getOperationReference().getText(); String op = thenAssignment.getOperationReference().getText();
JetSimpleNameExpression lhs = (JetSimpleNameExpression) thenAssignment.getLeft(); JetSimpleNameExpression lhs = (JetSimpleNameExpression) thenAssignment.getLeft();
JetBinaryExpression assignment = JetPsiFactory(project).createBinaryExpression(lhs, op, ifExpression); JetBinaryExpression assignment = JetPsiFactory(ifExpression).createBinaryExpression(lhs, op, ifExpression);
JetIfExpression newIfExpression = (JetIfExpression)assignment.getRight(); JetIfExpression newIfExpression = (JetIfExpression)assignment.getRight();
assertNotNull(newIfExpression); assertNotNull(newIfExpression);
@@ -202,9 +200,7 @@ public class BranchedFoldingUtils {
} }
public static void foldIfExpressionWithReturns(JetIfExpression ifExpression) { public static void foldIfExpressionWithReturns(JetIfExpression ifExpression) {
Project project = ifExpression.getProject(); JetReturnExpression newReturnExpression = JetPsiFactory(ifExpression).createReturn(ifExpression);
JetReturnExpression newReturnExpression = JetPsiFactory(project).createReturn(ifExpression);
JetIfExpression newIfExpression = (JetIfExpression)newReturnExpression.getReturnedExpression(); JetIfExpression newIfExpression = (JetIfExpression)newReturnExpression.getReturnedExpression();
assertNotNull(newIfExpression); assertNotNull(newIfExpression);
@@ -231,8 +227,6 @@ public class BranchedFoldingUtils {
} }
public static void foldIfExpressionWithAsymmetricReturns(JetIfExpression ifExpression) { public static void foldIfExpressionWithAsymmetricReturns(JetIfExpression ifExpression) {
Project project = ifExpression.getProject();
JetExpression condition = ifExpression.getCondition(); JetExpression condition = ifExpression.getCondition();
JetExpression thenRoot = ifExpression.getThen(); JetExpression thenRoot = ifExpression.getThen();
JetExpression elseRoot = (JetExpression)JetPsiUtil.skipTrailingWhitespacesAndComments(ifExpression); JetExpression elseRoot = (JetExpression)JetPsiUtil.skipTrailingWhitespacesAndComments(ifExpression);
@@ -242,7 +236,7 @@ public class BranchedFoldingUtils {
assertNotNull(elseRoot); assertNotNull(elseRoot);
//noinspection ConstantConditions //noinspection ConstantConditions
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(ifExpression);
JetIfExpression newIfExpression = psiFactory.createIf(condition, thenRoot, elseRoot); JetIfExpression newIfExpression = psiFactory.createIf(condition, thenRoot, elseRoot);
JetReturnExpression newReturnExpression = psiFactory.createReturn(newIfExpression); JetReturnExpression newReturnExpression = psiFactory.createReturn(newIfExpression);
@@ -274,8 +268,6 @@ public class BranchedFoldingUtils {
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
public static void foldWhenExpressionWithAssignments(JetWhenExpression whenExpression) { public static void foldWhenExpressionWithAssignments(JetWhenExpression whenExpression) {
Project project = whenExpression.getProject();
assert !whenExpression.getEntries().isEmpty() : FOLD_WITHOUT_CHECK; assert !whenExpression.getEntries().isEmpty() : FOLD_WITHOUT_CHECK;
JetBinaryExpression firstAssignment = getFoldableBranchedAssignment(whenExpression.getEntries().get(0).getExpression()); JetBinaryExpression firstAssignment = getFoldableBranchedAssignment(whenExpression.getEntries().get(0).getExpression());
@@ -285,7 +277,7 @@ public class BranchedFoldingUtils {
String op = firstAssignment.getOperationReference().getText(); String op = firstAssignment.getOperationReference().getText();
JetSimpleNameExpression lhs = (JetSimpleNameExpression) firstAssignment.getLeft(); JetSimpleNameExpression lhs = (JetSimpleNameExpression) firstAssignment.getLeft();
JetBinaryExpression assignment = JetPsiFactory(project).createBinaryExpression(lhs, op, whenExpression); JetBinaryExpression assignment = JetPsiFactory(whenExpression).createBinaryExpression(lhs, op, whenExpression);
JetWhenExpression newWhenExpression = (JetWhenExpression)assignment.getRight(); JetWhenExpression newWhenExpression = (JetWhenExpression)assignment.getRight();
assertNotNull(newWhenExpression); assertNotNull(newWhenExpression);
@@ -306,11 +298,9 @@ public class BranchedFoldingUtils {
} }
public static void foldWhenExpressionWithReturns(JetWhenExpression whenExpression) { public static void foldWhenExpressionWithReturns(JetWhenExpression whenExpression) {
Project project = whenExpression.getProject();
assert !whenExpression.getEntries().isEmpty() : FOLD_WITHOUT_CHECK; assert !whenExpression.getEntries().isEmpty() : FOLD_WITHOUT_CHECK;
JetReturnExpression newReturnExpression = JetPsiFactory(project).createReturn(whenExpression); JetReturnExpression newReturnExpression = JetPsiFactory(whenExpression).createReturn(whenExpression);
JetWhenExpression newWhenExpression = (JetWhenExpression)newReturnExpression.getReturnedExpression(); JetWhenExpression newWhenExpression = (JetWhenExpression)newReturnExpression.getReturnedExpression();
assertNotNull(newWhenExpression); assertNotNull(newWhenExpression);
@@ -79,7 +79,6 @@ public class BranchedUnfoldingUtils {
} }
public static void unfoldAssignmentToIf(@NotNull JetBinaryExpression assignment, @NotNull Editor editor) { public static void unfoldAssignmentToIf(@NotNull JetBinaryExpression assignment, @NotNull Editor editor) {
Project project = assignment.getProject();
String op = assignment.getOperationReference().getText(); String op = assignment.getOperationReference().getText();
JetExpression lhs = assignment.getLeft(); JetExpression lhs = assignment.getLeft();
JetIfExpression ifExpression = (JetIfExpression) assignment.getRight(); JetIfExpression ifExpression = (JetIfExpression) assignment.getRight();
@@ -96,7 +95,7 @@ public class BranchedUnfoldingUtils {
assertNotNull(elseExpr); assertNotNull(elseExpr);
//noinspection ConstantConditions //noinspection ConstantConditions
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(assignment);
thenExpr.replace(psiFactory.createBinaryExpression(lhs, op, thenExpr)); thenExpr.replace(psiFactory.createBinaryExpression(lhs, op, thenExpr));
elseExpr.replace(psiFactory.createBinaryExpression(lhs, op, elseExpr)); elseExpr.replace(psiFactory.createBinaryExpression(lhs, op, elseExpr));
@@ -106,7 +105,6 @@ public class BranchedUnfoldingUtils {
} }
public static void unfoldAssignmentToWhen(@NotNull JetBinaryExpression assignment, @NotNull Editor editor) { public static void unfoldAssignmentToWhen(@NotNull JetBinaryExpression assignment, @NotNull Editor editor) {
Project project = assignment.getProject();
String op = assignment.getOperationReference().getText(); String op = assignment.getOperationReference().getText();
JetExpression lhs = assignment.getLeft(); JetExpression lhs = assignment.getLeft();
JetWhenExpression whenExpression = (JetWhenExpression) assignment.getRight(); JetWhenExpression whenExpression = (JetWhenExpression) assignment.getRight();
@@ -122,7 +120,7 @@ public class BranchedUnfoldingUtils {
assertNotNull(currExpr); assertNotNull(currExpr);
//noinspection ConstantConditions //noinspection ConstantConditions
currExpr.replace(JetPsiFactory(project).createBinaryExpression(lhs, op, currExpr)); currExpr.replace(JetPsiFactory(assignment).createBinaryExpression(lhs, op, currExpr));
} }
PsiElement resultElement = assignment.replace(newWhenExpression); PsiElement resultElement = assignment.replace(newWhenExpression);
@@ -141,7 +139,6 @@ public class BranchedUnfoldingUtils {
} }
public static void unfoldReturnToIf(@NotNull JetReturnExpression returnExpression) { public static void unfoldReturnToIf(@NotNull JetReturnExpression returnExpression) {
Project project = returnExpression.getProject();
JetIfExpression ifExpression = (JetIfExpression) returnExpression.getReturnedExpression(); JetIfExpression ifExpression = (JetIfExpression) returnExpression.getReturnedExpression();
assertNotNull(ifExpression); assertNotNull(ifExpression);
@@ -155,7 +152,7 @@ public class BranchedUnfoldingUtils {
assertNotNull(thenExpr); assertNotNull(thenExpr);
assertNotNull(elseExpr); assertNotNull(elseExpr);
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(returnExpression);
thenExpr.replace(psiFactory.createReturn(thenExpr)); thenExpr.replace(psiFactory.createReturn(thenExpr));
elseExpr.replace(psiFactory.createReturn(elseExpr)); elseExpr.replace(psiFactory.createReturn(elseExpr));
@@ -163,7 +160,6 @@ public class BranchedUnfoldingUtils {
} }
public static void unfoldReturnToWhen(@NotNull JetReturnExpression returnExpression) { public static void unfoldReturnToWhen(@NotNull JetReturnExpression returnExpression) {
Project project = returnExpression.getProject();
JetWhenExpression whenExpression = (JetWhenExpression) returnExpression.getReturnedExpression(); JetWhenExpression whenExpression = (JetWhenExpression) returnExpression.getReturnedExpression();
assertNotNull(whenExpression); assertNotNull(whenExpression);
@@ -176,7 +172,7 @@ public class BranchedUnfoldingUtils {
assertNotNull(currExpr); assertNotNull(currExpr);
currExpr.replace(JetPsiFactory(project).createReturn(currExpr)); currExpr.replace(JetPsiFactory(returnExpression).createReturn(currExpr));
} }
returnExpression.replace(newWhenExpression); returnExpression.replace(newWhenExpression);
@@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.psi.JetThrowExpression
import org.jetbrains.jet.lang.psi.JetPostfixExpression import org.jetbrains.jet.lang.psi.JetPostfixExpression
import org.jetbrains.jet.lang.psi.JetCallExpression import org.jetbrains.jet.lang.psi.JetCallExpression
import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.psi.JetElement
val NULL_PTR_EXCEPTION = "NullPointerException" val NULL_PTR_EXCEPTION = "NullPointerException"
val NULL_PTR_EXCEPTION_FQ = "java.lang.NullPointerException" val NULL_PTR_EXCEPTION_FQ = "java.lang.NullPointerException"
@@ -121,12 +122,12 @@ fun JetExpression.evaluatesTo(other: JetExpression): Boolean {
} }
fun JetExpression.convertToIfNotNullExpression(conditionLhs: JetExpression, thenClause: JetExpression, elseClause: JetExpression?): JetIfExpression { fun JetExpression.convertToIfNotNullExpression(conditionLhs: JetExpression, thenClause: JetExpression, elseClause: JetExpression?): JetIfExpression {
val condition = JetPsiFactory(this.getProject()).createExpression("${conditionLhs.getText()} != null") val condition = JetPsiFactory(this).createExpression("${conditionLhs.getText()} != null")
return this.convertToIfStatement(condition, thenClause, elseClause) return this.convertToIfStatement(condition, thenClause, elseClause)
} }
fun JetExpression.convertToIfNullExpression(conditionLhs: JetExpression, thenClause: JetExpression): JetIfExpression { fun JetExpression.convertToIfNullExpression(conditionLhs: JetExpression, thenClause: JetExpression): JetIfExpression {
val condition = JetPsiFactory(this.getProject()).createExpression("${conditionLhs.getText()} == null") val condition = JetPsiFactory(this).createExpression("${conditionLhs.getText()} == null")
return this.convertToIfStatement(condition, thenClause, null) return this.convertToIfStatement(condition, thenClause, null)
} }
@@ -144,8 +145,8 @@ fun JetIfExpression.introduceValueForCondition(occurrenceInThenClause: JetExpres
KotlinIntroduceVariableHandler.doRefactoring(project, editor, occurrenceInConditional, listOf(occurrenceInConditional, occurrenceInThenClause)) KotlinIntroduceVariableHandler.doRefactoring(project, editor, occurrenceInConditional, listOf(occurrenceInConditional, occurrenceInThenClause))
} }
fun PsiElement.replace(expressionAsString: String): PsiElement = fun JetElement.replace(expressionAsString: String): PsiElement =
this.replace(JetPsiFactory(this.getProject()).createExpression(expressionAsString)) this.replace(JetPsiFactory(this).createExpression(expressionAsString))
fun JetSimpleNameExpression.inlineIfDeclaredLocallyAndOnlyUsedOnceWithPrompt(editor: Editor) { fun JetSimpleNameExpression.inlineIfDeclaredLocallyAndOnlyUsedOnceWithPrompt(editor: Editor) {
val declaration = this.getReference()?.resolve() as JetDeclaration val declaration = this.getReference()?.resolve() as JetDeclaration
@@ -139,7 +139,7 @@ public fun JetWhenExpression.flatten(): JetWhenExpression {
val outerEntries = getEntries() val outerEntries = getEntries()
val innerEntries = nestedWhenExpression.getEntries() val innerEntries = nestedWhenExpression.getEntries()
val builder = JetPsiFactory(getProject()).WhenBuilder(subjectExpression) val builder = JetPsiFactory(this).WhenBuilder(subjectExpression)
for (entry in outerEntries) { for (entry in outerEntries) {
if (entry.isElse()) if (entry.isElse())
continue continue
@@ -156,7 +156,7 @@ public fun JetWhenExpression.flatten(): JetWhenExpression {
public fun JetWhenExpression.introduceSubject(): JetWhenExpression { public fun JetWhenExpression.introduceSubject(): JetWhenExpression {
val subject = getSubjectCandidate()!! val subject = getSubjectCandidate()!!
val builder = JetPsiFactory(getProject()).WhenBuilder(subject) val builder = JetPsiFactory(this).WhenBuilder(subject)
for (entry in getEntries()) { for (entry in getEntries()) {
val branchExpression = entry.getExpression() val branchExpression = entry.getExpression()
if (entry.isElse()) { if (entry.isElse()) {
@@ -203,7 +203,7 @@ public fun JetWhenExpression.introduceSubject(): JetWhenExpression {
public fun JetWhenExpression.eliminateSubject(): JetWhenExpression { public fun JetWhenExpression.eliminateSubject(): JetWhenExpression {
val subject = getSubjectExpression()!! val subject = getSubjectExpression()!!
val builder = JetPsiFactory(getProject()).WhenBuilder() val builder = JetPsiFactory(this).WhenBuilder()
for (entry in getEntries()) { for (entry in getEntries()) {
val branchExpression = entry.getExpression() val branchExpression = entry.getExpression()
@@ -264,7 +264,7 @@ public fun JetIfExpression.transformToWhen() {
override fun hasNext(): Boolean = expression != null override fun hasNext(): Boolean = expression != null
} }
val builder = JetPsiFactory(getProject()).WhenBuilder() val builder = JetPsiFactory(this).WhenBuilder()
branchIterator(this).forEach { ifExpression -> branchIterator(this).forEach { ifExpression ->
ifExpression.getCondition()?.let { condition -> ifExpression.getCondition()?.let { condition ->
val orBranches = condition.splitToOrBranches() val orBranches = condition.splitToOrBranches()
@@ -304,7 +304,7 @@ public fun JetWhenExpression.transformToIf() {
} }
} }
val builder = JetPsiFactory(getProject()).IfChainBuilder() val builder = JetPsiFactory(this).IfChainBuilder()
for (entry in getEntries()) { for (entry in getEntries()) {
val branch = entry.getExpression() val branch = entry.getExpression()
@@ -365,7 +365,7 @@ public fun JetWhenExpression.mergeWithNext() {
val block = if (this is JetBlockExpression) this else replaced(wrapInBlock()) val block = if (this is JetBlockExpression) this else replaced(wrapInBlock())
for (element in that.blockExpressionsOrSingle()) { for (element in that.blockExpressionsOrSingle()) {
val expression = block.appendElement(element) val expression = block.appendElement(element)
block.addBefore(JetPsiFactory(getProject()).createNewLine(), expression) block.addBefore(JetPsiFactory(this).createNewLine(), expression)
} }
block block
} }
@@ -45,11 +45,10 @@ public class DoubleBangToIfThenIntention : JetSelfTargetingIntention<JetPostfixE
element.getOperationToken() == JetTokens.EXCLEXCL element.getOperationToken() == JetTokens.EXCLEXCL
override fun applyTo(element: JetPostfixExpression, editor: Editor) { override fun applyTo(element: JetPostfixExpression, editor: Editor) {
val project = element.getProject()
val base = checkNotNull(JetPsiUtil.deparenthesize(element.getBaseExpression()), "Base expression cannot be null") val base = checkNotNull(JetPsiUtil.deparenthesize(element.getBaseExpression()), "Base expression cannot be null")
val expressionText = formatForUseInExceptionArgument(base.getText()!!) val expressionText = formatForUseInExceptionArgument(base.getText()!!)
val defaultException = JetPsiFactory(project).createExpression("throw $NULL_PTR_EXCEPTION()") val defaultException = JetPsiFactory(element).createExpression("throw $NULL_PTR_EXCEPTION()")
val isStatement = element.isStatement() val isStatement = element.isStatement()
val isStable = base.isStableVariable() val isStable = base.isStableVariable()
@@ -73,6 +72,7 @@ public class DoubleBangToIfThenIntention : JetSelfTargetingIntention<JetPostfixE
override fun getResult(element: String?) = element override fun getResult(element: String?) = element
} }
val project = element.getProject()
val manager = TemplateManagerImpl(project) val manager = TemplateManagerImpl(project)
val builder = TemplateBuilderImpl(thrownExpression) val builder = TemplateBuilderImpl(thrownExpression)
builder.replaceElement(thrownExpression, exceptionLookupExpression); builder.replaceElement(thrownExpression, exceptionLookupExpression);
@@ -39,7 +39,7 @@ public class SafeAccessToIfThenIntention : JetSelfTargetingIntention<JetSafeQual
val receiverTemplate = if (receiver is JetBinaryExpression) "(%s)" else "%s" val receiverTemplate = if (receiver is JetBinaryExpression) "(%s)" else "%s"
val receiverAsString = receiverTemplate.format(receiver.getText()) val receiverAsString = receiverTemplate.format(receiver.getText())
val psiFactory = JetPsiFactory(element.getProject()) val psiFactory = JetPsiFactory(element)
val dotQualifiedExpression = psiFactory.createExpression("${receiverAsString}.${selector!!.getText()}") val dotQualifiedExpression = psiFactory.createExpression("${receiverAsString}.${selector!!.getText()}")
val elseClause = if (element.isStatement()) null else psiFactory.createExpression("null") val elseClause = if (element.isStatement()) null else psiFactory.createExpression("null")
@@ -114,7 +114,7 @@ public class ConvertMemberToExtension extends BaseIntentionAction {
(returnTypeRef != null ? ": " + returnTypeRef.getText() : "") + (returnTypeRef != null ? ": " + returnTypeRef.getText() : "") +
body(member); body(member);
JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(project); JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(member);
JetDeclaration extension = psiFactory.<JetDeclaration>createDeclaration(extensionText); JetDeclaration extension = psiFactory.<JetDeclaration>createDeclaration(extensionText);
PsiElement added = file.addAfter(extension, outermostParent); PsiElement added = file.addAfter(extension, outermostParent);
@@ -96,8 +96,6 @@ public class DeclarationUtils {
// returns assignment which replaces initializer // returns assignment which replaces initializer
@NotNull @NotNull
public static JetBinaryExpression splitPropertyDeclaration(@NotNull JetProperty property) { public static JetBinaryExpression splitPropertyDeclaration(@NotNull JetProperty property) {
Project project = property.getProject();
PsiElement parent = property.getParent(); PsiElement parent = property.getParent();
assertNotNull(parent); assertNotNull(parent);
@@ -105,7 +103,7 @@ public class DeclarationUtils {
JetExpression initializer = property.getInitializer(); JetExpression initializer = property.getInitializer();
assertNotNull(initializer); assertNotNull(initializer);
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(property);
//noinspection ConstantConditions, unchecked //noinspection ConstantConditions, unchecked
JetBinaryExpression newInitializer = psiFactory.createBinaryExpression( JetBinaryExpression newInitializer = psiFactory.createBinaryExpression(
psiFactory.createSimpleName(property.getName()), "=", initializer psiFactory.createSimpleName(property.getName()), "=", initializer
@@ -58,7 +58,7 @@ public class AddFunctionBodyFix extends JetIntentionAction<JetFunction> {
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetFunction newElement = (JetFunction) element.copy(); JetFunction newElement = (JetFunction) element.copy();
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(file);
if (!(newElement.getLastChild() instanceof PsiWhiteSpace)) { if (!(newElement.getLastChild() instanceof PsiWhiteSpace)) {
newElement.add(psiFactory.createWhiteSpace()); newElement.add(psiFactory.createWhiteSpace());
} }
@@ -145,7 +145,7 @@ public class AddNameToArgumentFix extends JetIntentionAction<JetValueArgument> {
private static JetValueArgument getParsedArgumentWithName(@NotNull String name, @NotNull JetValueArgument argument) { private static JetValueArgument getParsedArgumentWithName(@NotNull String name, @NotNull JetValueArgument argument) {
JetExpression argumentExpression = argument.getArgumentExpression(); JetExpression argumentExpression = argument.getArgumentExpression();
assert argumentExpression != null : "Argument should be already parsed."; assert argumentExpression != null : "Argument should be already parsed.";
return JetPsiFactory(argument.getProject()).createArgumentWithName(name, argumentExpression); return JetPsiFactory(argument).createArgumentWithName(name, argumentExpression);
} }
@NotNull @NotNull
@@ -61,7 +61,7 @@ public class AddSemicolonAfterFunctionCallFix extends JetIntentionAction<JetCall
int caretOffset = editor.getCaretModel().getOffset(); int caretOffset = editor.getCaretModel().getOffset();
element.getParent().addRangeAfter(afterArgumentList, literal, element); element.getParent().addRangeAfter(afterArgumentList, literal, element);
element.deleteChildRange(afterArgumentList, literal); element.deleteChildRange(afterArgumentList, literal);
element.getParent().addAfter(JetPsiFactory(project).createSemicolon(), element); element.getParent().addAfter(JetPsiFactory(file).createSemicolon(), element);
editor.getCaretModel().moveToOffset(caretOffset + 1); editor.getCaretModel().moveToOffset(caretOffset + 1);
} }
@@ -59,7 +59,7 @@ public abstract class AddStarProjectionsFix extends JetIntentionAction<JetUserTy
assert element.getTypeArguments().isEmpty(); assert element.getTypeArguments().isEmpty();
String typeString = TypeReconstructionUtil.getTypeNameAndStarProjectionsString(element.getText(), argumentCount); String typeString = TypeReconstructionUtil.getTypeNameAndStarProjectionsString(element.getText(), argumentCount);
JetTypeElement replacement = JetPsiFactory(project).createType(typeString).getTypeElement(); JetTypeElement replacement = JetPsiFactory(file).createType(typeString).getTypeElement();
assert replacement != null : "No type element after parsing " + typeString; assert replacement != null : "No type element after parsing " + typeString;
element.replace(replacement); element.replace(replacement);
@@ -65,7 +65,7 @@ public class AddWhenElseBranchFix extends JetIntentionAction<JetWhenExpression>
PsiElement whenCloseBrace = element.getCloseBrace(); PsiElement whenCloseBrace = element.getCloseBrace();
assert (whenCloseBrace != null) : "isAvailable should check if close brace exist"; assert (whenCloseBrace != null) : "isAvailable should check if close brace exist";
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(file);
JetWhenEntry entry = psiFactory.createWhenEntry(ELSE_ENTRY_TEXT); JetWhenEntry entry = psiFactory.createWhenEntry(ELSE_ENTRY_TEXT);
PsiElement insertedBranch = element.addBefore(entry, whenCloseBrace); PsiElement insertedBranch = element.addBefore(entry, whenCloseBrace);
@@ -68,7 +68,7 @@ public class CastExpressionFix extends JetIntentionAction<JetExpression> {
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(file);
JetBinaryExpressionWithTypeRHS castedExpression = JetBinaryExpressionWithTypeRHS castedExpression =
(JetBinaryExpressionWithTypeRHS) psiFactory.createExpression("(" + element.getText() + ") as " + renderedType); (JetBinaryExpressionWithTypeRHS) psiFactory.createExpression("(" + element.getText() + ") as " + renderedType);
if (JetPsiUtil.areParenthesesUseless((JetParenthesizedExpression) castedExpression.getLeft())) { if (JetPsiUtil.areParenthesesUseless((JetParenthesizedExpression) castedExpression.getLeft())) {
@@ -67,7 +67,7 @@ public class ChangeAccessorTypeFix extends JetIntentionAction<JetPropertyAccesso
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetPropertyAccessor newElement = (JetPropertyAccessor) element.copy(); JetPropertyAccessor newElement = (JetPropertyAccessor) element.copy();
JetTypeReference newTypeReference = JetPsiFactory(project).createType(renderedType); JetTypeReference newTypeReference = JetPsiFactory(file).createType(renderedType);
if (element.isGetter()) { if (element.isGetter()) {
JetTypeReference returnTypeReference = newElement.getReturnTypeReference(); JetTypeReference returnTypeReference = newElement.getReturnTypeReference();
@@ -120,7 +120,7 @@ public class ChangeFunctionLiteralReturnTypeFix extends JetIntentionAction<JetFu
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
if (functionLiteralReturnTypeRef != null) { if (functionLiteralReturnTypeRef != null) {
functionLiteralReturnTypeRef.replace(JetPsiFactory(project).createType(renderedType)); functionLiteralReturnTypeRef.replace(JetPsiFactory(file).createType(renderedType));
} }
if (appropriateQuickFix != null && appropriateQuickFix.isAvailable(project, editor, file)) { if (appropriateQuickFix != null && appropriateQuickFix.isAvailable(project, editor, file)) {
appropriateQuickFix.invoke(project, editor, file); appropriateQuickFix.invoke(project, editor, file);
@@ -110,12 +110,12 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction<JetFunction>
else { else {
SpecifyTypeExplicitlyAction.removeTypeAnnotation(element); SpecifyTypeExplicitlyAction.removeTypeAnnotation(element);
if (!(KotlinBuiltIns.getInstance().isUnit(type) && element.hasBlockBody())) { if (!(KotlinBuiltIns.getInstance().isUnit(type) && element.hasBlockBody())) {
addReturnTypeAnnotation(project, element, renderedType); addReturnTypeAnnotation(element, renderedType);
} }
} }
} }
public static void addReturnTypeAnnotation(Project project, JetFunction function, String typeText) { public static void addReturnTypeAnnotation(JetFunction function, String typeText) {
PsiElement elementToPrecedeType = function.getValueParameterList(); PsiElement elementToPrecedeType = function.getValueParameterList();
if (elementToPrecedeType == null) elementToPrecedeType = function.getNameIdentifier(); if (elementToPrecedeType == null) elementToPrecedeType = function.getNameIdentifier();
assert elementToPrecedeType != null : "Return type of function without name can't mismatch anything"; assert elementToPrecedeType != null : "Return type of function without name can't mismatch anything";
@@ -123,7 +123,7 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction<JetFunction>
// if a function doesn't have a value parameter list, a syntax error is raised, and it should follow the function name // if a function doesn't have a value parameter list, a syntax error is raised, and it should follow the function name
elementToPrecedeType = elementToPrecedeType.getNextSibling(); elementToPrecedeType = elementToPrecedeType.getNextSibling();
} }
JetPsiFactory psiFactory = JetPsiFactory(project); JetPsiFactory psiFactory = JetPsiFactory(function);
function.addAfter(psiFactory.createType(typeText), elementToPrecedeType); function.addAfter(psiFactory.createType(typeText), elementToPrecedeType);
function.addAfter(psiFactory.createColon(), elementToPrecedeType); function.addAfter(psiFactory.createColon(), elementToPrecedeType);
} }
@@ -67,6 +67,6 @@ public class ChangeParameterTypeFix extends JetIntentionAction<JetParameter> {
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetTypeReference typeReference = element.getTypeReference(); JetTypeReference typeReference = element.getTypeReference();
assert typeReference != null : "Parameter without type annotation cannot cause type mismatch"; assert typeReference != null : "Parameter without type annotation cannot cause type mismatch";
typeReference.replace(JetPsiFactory(project).createType(renderedType)); typeReference.replace(JetPsiFactory(file).createType(renderedType));
} }
} }
@@ -46,7 +46,7 @@ public class ChangeToBackingFieldFix extends JetIntentionAction<JetSimpleNameExp
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetSimpleNameExpression backingField = (JetSimpleNameExpression) JetPsiFactory(project).createExpression("$" + element.getText()); JetSimpleNameExpression backingField = (JetSimpleNameExpression) JetPsiFactory(file).createExpression("$" + element.getText());
element.replace(backingField); element.replace(backingField);
} }
@@ -79,7 +79,7 @@ public class ChangeToConstructorInvocationFix extends JetIntentionAction<JetDele
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetDelegatorToSuperClass delegator = (JetDelegatorToSuperClass) element.copy(); JetDelegatorToSuperClass delegator = (JetDelegatorToSuperClass) element.copy();
JetClass aClass = JetPsiFactory(project).createClass("class A : " + delegator.getText() + "()"); JetClass aClass = JetPsiFactory(file).createClass("class A : " + delegator.getText() + "()");
List<JetDelegationSpecifier> delegationSpecifiers = aClass.getDelegationSpecifiers(); List<JetDelegationSpecifier> delegationSpecifiers = aClass.getDelegationSpecifiers();
assert delegationSpecifiers.size() == 1; assert delegationSpecifiers.size() == 1;
JetDelegationSpecifier specifier = delegationSpecifiers.iterator().next(); JetDelegationSpecifier specifier = delegationSpecifiers.iterator().next();
@@ -48,7 +48,7 @@ public class ChangeToFunctionInvocationFix extends JetIntentionAction<JetExpress
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetExpression reference = (JetExpression) element.copy(); JetExpression reference = (JetExpression) element.copy();
element.replace(JetPsiFactory(project).createExpression(reference.getText() + "()")); element.replace(JetPsiFactory(file).createExpression(reference.getText() + "()"));
} }
public static JetSingleIntentionActionFactory createFactory() { public static JetSingleIntentionActionFactory createFactory() {
@@ -55,7 +55,7 @@ public class ChangeToPropertyNameFix extends JetIntentionAction<JetSimpleNameExp
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
JetSimpleNameExpression propertyName = (JetSimpleNameExpression) JetPsiFactory(project).createExpression(getPropertyName()); JetSimpleNameExpression propertyName = (JetSimpleNameExpression) JetPsiFactory(file).createExpression(getPropertyName());
element.replace(propertyName); element.replace(propertyName);
} }
@@ -53,7 +53,7 @@ public class ChangeToStarProjectionFix extends JetIntentionAction<JetTypeElement
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
for (JetTypeReference typeReference : element.getTypeArgumentsAsTypes()) { for (JetTypeReference typeReference : element.getTypeArgumentsAsTypes()) {
if (typeReference != null) { if (typeReference != null) {
typeReference.replace(JetPsiFactory(project).createStar()); typeReference.replace(JetPsiFactory(file).createStar());
} }
} }
} }
@@ -56,7 +56,7 @@ public class ChangeTypeFix extends JetIntentionAction<JetTypeReference> {
@Override @Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
element.replace(JetPsiFactory(project).createType(renderedType)); element.replace(JetPsiFactory(file).createType(renderedType));
} }
@NotNull @NotNull
@@ -88,7 +88,7 @@ public class ChangeVariableMutabilityFix implements IntentionAction {
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
JetProperty property = getCorrespondingProperty(editor, (JetFile)file); JetProperty property = getCorrespondingProperty(editor, (JetFile)file);
assert property != null; assert property != null;
property.getValOrVarNode().getPsi().replace(JetPsiFactory(project).createValOrVarNode(isVar ? "val" : "var").getPsi()); property.getValOrVarNode().getPsi().replace(JetPsiFactory(property).createValOrVarNode(isVar ? "val" : "var").getPsi());
} }
@Override @Override
@@ -83,7 +83,7 @@ public class ChangeVariableTypeFix extends JetIntentionAction<JetVariableDeclara
SpecifyTypeExplicitlyAction.removeTypeAnnotation(element); SpecifyTypeExplicitlyAction.removeTypeAnnotation(element);
PsiElement nameIdentifier = element.getNameIdentifier(); PsiElement nameIdentifier = element.getNameIdentifier();
assert nameIdentifier != null : "ChangeVariableTypeFix applied to variable without name"; assert nameIdentifier != null : "ChangeVariableTypeFix applied to variable without name";
JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(project); JetPsiFactory psiFactory = PsiPackage.JetPsiFactory(file);
element.addAfter(psiFactory.createType(renderedType), nameIdentifier); element.addAfter(psiFactory.createType(renderedType), nameIdentifier);
element.addAfter(psiFactory.createColon(), nameIdentifier); element.addAfter(psiFactory.createColon(), nameIdentifier);
@@ -620,10 +620,9 @@ public class CreateFunctionFromUsageFix internal (
} }
private fun createFunctionSkeleton(): JetNamedFunction { private fun createFunctionSkeleton(): JetNamedFunction {
val project = currentFile.getProject()
val parametersString = parameters.indices.map { i -> "p$i: Any" }.makeString(", ") val parametersString = parameters.indices.map { i -> "p$i: Any" }.makeString(", ")
val returnTypeString = if (isUnit) "" else ": Any" val returnTypeString = if (isUnit) "" else ": Any"
val psiFactory = JetPsiFactory(project) val psiFactory = JetPsiFactory(currentFile)
if (isExtension) { if (isExtension) {
// create as extension function // create as extension function
val ownerTypeString = selectedReceiverType.renderedType!! val ownerTypeString = selectedReceiverType.renderedType!!
@@ -638,7 +637,7 @@ public class CreateFunctionFromUsageFix internal (
containingFile = ownerClass.getContainingJetFile() containingFile = ownerClass.getContainingJetFile()
NavigationUtil.activateFileWithPsiElement(containingFile) NavigationUtil.activateFileWithPsiElement(containingFile)
containingFileEditor = FileEditorManager.getInstance(project)!!.getSelectedTextEditor()!! containingFileEditor = FileEditorManager.getInstance(currentFile.getProject())!!.getSelectedTextEditor()!!
var classBody = ownerClass.getBody() var classBody = ownerClass.getBody()
if (classBody == null) { if (classBody == null) {
@@ -738,7 +737,7 @@ public class CreateFunctionFromUsageFix internal (
typeRefsToShorten: MutableList<JetTypeReference>, parameterTypeExpressions: List<TypeExpression>, typeRefsToShorten: MutableList<JetTypeReference>, parameterTypeExpressions: List<TypeExpression>,
returnTypeExpression: TypeExpression?) { returnTypeExpression: TypeExpression?) {
if (isExtension) { if (isExtension) {
val receiverTypeRef = JetPsiFactory(func.getProject()).createType(selectedReceiverType.theType.renderLong(typeParameterNameMap)) val receiverTypeRef = JetPsiFactory(func).createType(selectedReceiverType.theType.renderLong(typeParameterNameMap))
replaceWithLongerName(receiverTypeRef, selectedReceiverType.theType) replaceWithLongerName(receiverTypeRef, selectedReceiverType.theType)
val funcReceiverTypeRef = func.getReceiverTypeRef() val funcReceiverTypeRef = func.getReceiverTypeRef()
@@ -799,7 +798,7 @@ public class CreateFunctionFromUsageFix internal (
throw IncorrectOperationException("Failed to parse file template", e) throw IncorrectOperationException("Failed to parse file template", e)
} }
val newBodyExpression = JetPsiFactory(func.getProject()).createFunctionBody(bodyText) val newBodyExpression = JetPsiFactory(func).createFunctionBody(bodyText)
func.getBodyExpression()!!.replace(newBodyExpression) func.getBodyExpression()!!.replace(newBodyExpression)
} }
@@ -867,8 +866,7 @@ public class CreateFunctionFromUsageFix internal (
} }
private fun replaceWithLongerName(typeRef: JetTypeReference, theType: JetType) { private fun replaceWithLongerName(typeRef: JetTypeReference, theType: JetType) {
val project = typeRef.getProject() val fullyQualifiedReceiverTypeRef = JetPsiFactory(typeRef).createType(theType.renderLong(typeParameterNameMap))
val fullyQualifiedReceiverTypeRef = JetPsiFactory(project).createType(theType.renderLong(typeParameterNameMap))
typeRef.replace(fullyQualifiedReceiverTypeRef) typeRef.replace(fullyQualifiedReceiverTypeRef)
} }
@@ -53,14 +53,13 @@ public class KotlinSuppressIntentionAction(
} }
private fun suppressAtModifierListOwner(suppressAt: JetModifierListOwner, id: String) { private fun suppressAtModifierListOwner(suppressAt: JetModifierListOwner, id: String) {
val project = suppressAt.getProject()
val modifierList = suppressAt.getModifierList() val modifierList = suppressAt.getModifierList()
val psiFactory = JetPsiFactory(project) val psiFactory = JetPsiFactory(suppressAt)
if (modifierList == null) { if (modifierList == null) {
// create a modifier list from scratch // create a modifier list from scratch
val newModifierList = psiFactory.createModifierList(suppressAnnotationText(id)) val newModifierList = psiFactory.createModifierList(suppressAnnotationText(id))
val replaced = JetPsiUtil.replaceModifierList(suppressAt, newModifierList) val replaced = JetPsiUtil.replaceModifierList(suppressAt, newModifierList)
val whiteSpace = project.createWhiteSpace(kind) val whiteSpace = psiFactory.createWhiteSpace(kind)
suppressAt.addAfter(whiteSpace, replaced) suppressAt.addAfter(whiteSpace, replaced)
} }
else { else {
@@ -69,7 +68,7 @@ public class KotlinSuppressIntentionAction(
// no [suppress] annotation // no [suppress] annotation
val newAnnotation = psiFactory.createAnnotation(suppressAnnotationText(id)) val newAnnotation = psiFactory.createAnnotation(suppressAnnotationText(id))
val addedAnnotation = modifierList.addBefore(newAnnotation, modifierList.getFirstChild()) val addedAnnotation = modifierList.addBefore(newAnnotation, modifierList.getFirstChild())
val whiteSpace = project.createWhiteSpace(kind) val whiteSpace = psiFactory.createWhiteSpace(kind)
modifierList.addAfter(whiteSpace, addedAnnotation) modifierList.addAfter(whiteSpace, addedAnnotation)
} }
else { else {
@@ -94,12 +93,10 @@ public class KotlinSuppressIntentionAction(
val suppressAt = caretBox.expression val suppressAt = caretBox.expression
assert(suppressAt !is JetDeclaration, "Declarations should have been checked for above") assert(suppressAt !is JetDeclaration, "Declarations should have been checked for above")
val project = suppressAt.getProject()
val parentheses = JetPsiPrecedences.getPrecedence(suppressAt) > JetPsiPrecedences.PRECEDENCE_OF_PREFIX_EXPRESSION val parentheses = JetPsiPrecedences.getPrecedence(suppressAt) > JetPsiPrecedences.PRECEDENCE_OF_PREFIX_EXPRESSION
val placeholderText = "PLACEHOLDER_ID" val placeholderText = "PLACEHOLDER_ID"
val inner = if (parentheses) "($placeholderText)" else placeholderText val inner = if (parentheses) "($placeholderText)" else placeholderText
val annotatedExpression = JetPsiFactory(project).createExpression(suppressAnnotationText(id) + "\n" + inner) val annotatedExpression = JetPsiFactory(suppressAt).createExpression(suppressAnnotationText(id) + "\n" + inner)
val copy = suppressAt.copy()!! val copy = suppressAt.copy()!!
@@ -112,11 +109,9 @@ public class KotlinSuppressIntentionAction(
} }
private fun addArgumentToSuppressAnnotation(entry: JetAnnotationEntry, id: String) { private fun addArgumentToSuppressAnnotation(entry: JetAnnotationEntry, id: String) {
val project = entry.getProject()
// add new arguments to an existing entry // add new arguments to an existing entry
val args = entry.getValueArgumentList() val args = entry.getValueArgumentList()
val psiFactory = JetPsiFactory(project) val psiFactory = JetPsiFactory(entry)
val newArgList = psiFactory.createCallArguments("($id)") val newArgList = psiFactory.createCallArguments("($id)")
if (args == null) { if (args == null) {
// new argument list // new argument list
@@ -149,9 +144,9 @@ public class KotlinSuppressIntentionAction(
} }
public class AnnotationHostKind(val kind: String, val name: String, val newLineNeeded: Boolean) public class AnnotationHostKind(val kind: String, val name: String, val newLineNeeded: Boolean)
private fun Project.createWhiteSpace(kind: AnnotationHostKind): PsiElement {
val psiFactory = JetPsiFactory(this) private fun JetPsiFactory.createWhiteSpace(kind: AnnotationHostKind): PsiElement {
return if (kind.newLineNeeded) psiFactory.createNewLine() else psiFactory.createWhiteSpace() return if (kind.newLineNeeded) createNewLine() else createWhiteSpace()
} }
private class CaretBox<out E: JetExpression>( private class CaretBox<out E: JetExpression>(
@@ -73,7 +73,7 @@ public class MoveWhenElseBranchFix extends JetIntentionAction<JetWhenExpression>
int cursorOffset = editor.getCaretModel().getOffset() - elseEntry.getTextOffset(); int cursorOffset = editor.getCaretModel().getOffset() - elseEntry.getTextOffset();
PsiElement insertedBranch = element.addAfter(elseEntry, lastEntry); PsiElement insertedBranch = element.addAfter(elseEntry, lastEntry);
element.addAfter(JetPsiFactory(project).createNewLine(), lastEntry); element.addAfter(JetPsiFactory(file).createNewLine(), lastEntry);
element.deleteChildRange(elseEntry, elseEntry); element.deleteChildRange(elseEntry, elseEntry);
JetWhenEntry insertedWhenEntry = (JetWhenEntry) CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(insertedBranch); JetWhenEntry insertedWhenEntry = (JetWhenEntry) CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(insertedBranch);
@@ -77,7 +77,7 @@ public class ReplaceCallFix implements IntentionAction {
JetExpression selector = callExpression.getSelectorExpression(); JetExpression selector = callExpression.getSelectorExpression();
if (selector != null) { if (selector != null) {
JetQualifiedExpression newElement = (JetQualifiedExpression) JetPsiFactory(project).createExpression( JetQualifiedExpression newElement = (JetQualifiedExpression) JetPsiFactory(callExpression).createExpression(
callExpression.getReceiverExpression().getText() + (toSafe ? "?." : ".") + selector.getText() callExpression.getReceiverExpression().getText() + (toSafe ? "?." : ".") + selector.getText()
); );
@@ -54,7 +54,7 @@ public class ReplaceInfixCallFix extends JetIntentionAction<JetBinaryExpression>
assert left != null && right != null : "Preconditions checked by factory"; assert left != null && right != null : "Preconditions checked by factory";
String newText = left.getText() + "?." + element.getOperationReference().getText() String newText = left.getText() + "?." + element.getOperationReference().getText()
+ "(" + right.getText() + ")"; + "(" + right.getText() + ")";
JetQualifiedExpression newElement = (JetQualifiedExpression) JetPsiFactory(project).createExpression(newText); JetQualifiedExpression newElement = (JetQualifiedExpression) JetPsiFactory(file).createExpression(newText);
element.replace(newElement); element.replace(newElement);
} }
@@ -44,7 +44,7 @@ public abstract class ReplaceOperationInBinaryExpressionFix<T extends JetExpress
JetExpression left = ((JetBinaryExpressionWithTypeRHS) element).getLeft(); JetExpression left = ((JetBinaryExpressionWithTypeRHS) element).getLeft();
JetTypeReference right = ((JetBinaryExpressionWithTypeRHS) element).getRight(); JetTypeReference right = ((JetBinaryExpressionWithTypeRHS) element).getRight();
if (right != null) { if (right != null) {
JetExpression expression = PsiPackage.JetPsiFactory(project).createExpression(left.getText() + operation + right.getText()); JetExpression expression = PsiPackage.JetPsiFactory(file).createExpression(left.getText() + operation + right.getText());
element.replace(expression); element.replace(expression);
} }
} }
@@ -64,7 +64,7 @@ public class JetFunctionDefinitionUsage extends JetUsageInfo<PsiElement> {
//TODO use ChangeFunctionReturnTypeFix.invoke when JetTypeCodeFragment.getType() is ready //TODO use ChangeFunctionReturnTypeFix.invoke when JetTypeCodeFragment.getType() is ready
if (!KotlinBuiltIns.getInstance().getUnitType().toString().equals(returnTypeText)) if (!KotlinBuiltIns.getInstance().getUnitType().toString().equals(returnTypeText))
ChangeFunctionReturnTypeFix.addReturnTypeAnnotation(getProject(), function, returnTypeText); ChangeFunctionReturnTypeFix.addReturnTypeAnnotation(function, returnTypeText);
} }
} }
else else
@@ -103,7 +103,7 @@ class ExtractionData(
val originalStartOffset = originalElements.first?.let { e -> e.getTextRange()!!.getStartOffset() } val originalStartOffset = originalElements.first?.let { e -> e.getTextRange()!!.getStartOffset() }
private val itFakeDeclaration by Delegates.lazy { JetPsiFactory(project).createParameter("it", "Any?") } private val itFakeDeclaration by Delegates.lazy { JetPsiFactory(originalFile).createParameter("it", "Any?") }
val refOffsetToDeclaration by Delegates.lazy { val refOffsetToDeclaration by Delegates.lazy {
fun isExtractableIt(descriptor: DeclarationDescriptor, context: BindingContext): Boolean { fun isExtractableIt(descriptor: DeclarationDescriptor, context: BindingContext): Boolean {
@@ -71,7 +71,7 @@ class RenameReplacement(override val parameter: Parameter): ParameterReplacement
[suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")] [suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")]
override fun invoke(e: JetElement): JetElement { override fun invoke(e: JetElement): JetElement {
val thisExpr = e.getParent() as? JetThisExpression val thisExpr = e.getParent() as? JetThisExpression
return (thisExpr ?: e).replaced(JetPsiFactory(e.getProject()).createSimpleName(parameter.nameForRef)) return (thisExpr ?: e).replaced(JetPsiFactory(e).createSimpleName(parameter.nameForRef))
} }
} }
@@ -81,8 +81,7 @@ class AddPrefixReplacement(override val parameter: Parameter): ParameterReplacem
[suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")] [suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")]
override fun invoke(e: JetElement): JetElement { override fun invoke(e: JetElement): JetElement {
val selector = (e.getParent() as? JetCallExpression) ?: e val selector = (e.getParent() as? JetCallExpression) ?: e
val newExpr = selector.replace( val newExpr = selector.replace(JetPsiFactory(e).createExpression("${parameter.nameForRef}.${selector.getText()}")
JetPsiFactory(e.getProject()).createExpression("${parameter.nameForRef}.${selector.getText()}")
) as JetQualifiedExpression ) as JetQualifiedExpression
return with(newExpr.getSelectorExpression()!!) { if (this is JetCallExpression) getCalleeExpression()!! else this } return with(newExpr.getSelectorExpression()!!) { if (this is JetCallExpression) getCalleeExpression()!! else this }
@@ -797,9 +797,7 @@ fun ExtractionDescriptor.generateFunction(
inTempFile: Boolean = false, inTempFile: Boolean = false,
nameByOffset: MutableMap<Int, JetElement> = HashMap() nameByOffset: MutableMap<Int, JetElement> = HashMap()
): JetNamedFunction { ): JetNamedFunction {
val project = extractionData.project val psiFactory = JetPsiFactory(extractionData.originalFile)
val psiFactory = JetPsiFactory(project)
fun createFunction(): JetNamedFunction { fun createFunction(): JetNamedFunction {
return with(extractionData) { return with(extractionData) {
if (inTempFile) { if (inTempFile) {
@@ -271,7 +271,7 @@ public class KotlinInlineValHandler extends InlineActionHandler {
} }
} }
JetPsiFactory psiFactory = JetPsiFactory(containingFile.getProject()); JetPsiFactory psiFactory = JetPsiFactory(containingFile);
for (JetFunctionLiteralExpression functionLiteralExpression : functionsToAddParameters) { for (JetFunctionLiteralExpression functionLiteralExpression : functionsToAddParameters) {
JetFunctionLiteral functionLiteral = functionLiteralExpression.getFunctionLiteral(); JetFunctionLiteral functionLiteral = functionLiteralExpression.getFunctionLiteral();
@@ -334,7 +334,7 @@ public class KotlinInlineValHandler extends InlineActionHandler {
} }
} }
JetPsiFactory psiFactory = JetPsiFactory(containingFile.getProject()); JetPsiFactory psiFactory = JetPsiFactory(containingFile);
for (JetCallExpression call : callsToAddArguments) { for (JetCallExpression call : callsToAddArguments) {
call.addAfter(psiFactory.createTypeArguments("<" + typeArguments + ">"), call.getCalleeExpression()); call.addAfter(psiFactory.createTypeArguments("<" + typeArguments + ">"), call.getCalleeExpression());
ShortenReferences.instance$.process(call.getTypeArgumentList()); ShortenReferences.instance$.process(call.getTypeArgumentList());
@@ -379,11 +379,12 @@ public class KotlinInlineValHandler extends InlineActionHandler {
@NotNull PsiElement referenceElement, @NotNull PsiElement referenceElement,
@NotNull JetExpression newExpression @NotNull JetExpression newExpression
) { ) {
if (referenceElement.getParent() instanceof JetSimpleNameStringTemplateEntry && PsiElement parent = referenceElement.getParent();
if (parent instanceof JetSimpleNameStringTemplateEntry &&
!(newExpression instanceof JetSimpleNameExpression)) { !(newExpression instanceof JetSimpleNameExpression)) {
JetBlockStringTemplateEntry templateEntry = JetBlockStringTemplateEntry templateEntry =
(JetBlockStringTemplateEntry) referenceElement.getParent().replace( (JetBlockStringTemplateEntry) parent.replace(
JetPsiFactory(referenceElement.getProject()).createBlockStringTemplateEntry(newExpression)); JetPsiFactory((JetElement) parent).createBlockStringTemplateEntry(newExpression));
JetExpression expression = templateEntry.getExpression(); JetExpression expression = templateEntry.getExpression();
assert expression != null; assert expression != null;
return expression; return expression;

Some files were not shown because too many files have changed in this diff Show More