KotlinFormattingModelBuilder: J2K

This commit is contained in:
Dmitry Jemerov
2017-12-13 12:49:40 +01:00
parent 57844968b0
commit a2175c2ef5
@@ -14,52 +14,47 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.idea.formatter; package org.jetbrains.kotlin.idea.formatter
import com.intellij.formatting.FormattingModel; import com.intellij.formatting.FormattingModel
import com.intellij.formatting.FormattingModelBuilder; import com.intellij.formatting.FormattingModelBuilder
import com.intellij.formatting.FormattingModelProvider; import com.intellij.formatting.FormattingModelProvider
import com.intellij.formatting.Indent; import com.intellij.formatting.Indent
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode
import com.intellij.openapi.editor.impl.DocumentImpl; import com.intellij.openapi.editor.impl.DocumentImpl
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile
import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettings
import com.intellij.psi.formatter.FormattingDocumentModelImpl; import com.intellij.psi.formatter.FormattingDocumentModelImpl
import com.intellij.psi.formatter.PsiBasedFormattingModel; import com.intellij.psi.formatter.PsiBasedFormattingModel
import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.KotlinLanguage;
public class KotlinFormattingModelBuilder implements FormattingModelBuilder { class KotlinFormattingModelBuilder : FormattingModelBuilder {
@NotNull override fun createModel(element: PsiElement, settings: CodeStyleSettings): FormattingModel {
@Override val containingFile = element.containingFile.viewProvider.getPsi(KotlinLanguage.INSTANCE)
public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) { val block = KotlinBlock(
PsiFile containingFile = element.getContainingFile().getViewProvider().getPsi(KotlinLanguage.INSTANCE); containingFile.node, NodeAlignmentStrategy.getNullStrategy(), Indent.getNoneIndent(), null, settings,
KotlinBlock block = new KotlinBlock( createSpacingBuilder(settings, KotlinSpacingBuilderUtilImpl))
containingFile.getNode(), NodeAlignmentStrategy.getNullStrategy(), Indent.getNoneIndent(), null, settings,
KotlinSpacingRulesKt.createSpacingBuilder(settings, KotlinSpacingBuilderUtilImpl.INSTANCE));
//TODO: this is temporary code to allow formatting non-physical files in non-UI thread (used by conversion from Java to Kotlin) //TODO: this is temporary code to allow formatting non-physical files in non-UI thread (used by conversion from Java to Kotlin)
// it's needed until IDEA's issue with this document being created with wrong threading policy is fixed // it's needed until IDEA's issue with this document being created with wrong threading policy is fixed
if (!element.isPhysical()) { if (!element.isPhysical) {
FormattingDocumentModelImpl formattingDocumentModel = val formattingDocumentModel = FormattingDocumentModelImpl(DocumentImpl(containingFile.viewProvider.contents, true), containingFile)
new FormattingDocumentModelImpl(new DocumentImpl(containingFile.getViewProvider().getContents(), true), containingFile); return PsiBasedFormattingModel(containingFile, block, formattingDocumentModel)
return new PsiBasedFormattingModel(containingFile, block, formattingDocumentModel);
} }
if (element instanceof PsiFile) { if (element is PsiFile) {
FormattingModel collectChangesModel = CollectChangesWithoutApplyModelKt.createCollectFormattingChangesModel((PsiFile) element, block); val collectChangesModel = createCollectFormattingChangesModel(element, block)
if (collectChangesModel != null) { if (collectChangesModel != null) {
return collectChangesModel; return collectChangesModel
} }
} }
return FormattingModelProvider.createFormattingModelForPsiFile(element.getContainingFile(), block, settings); return FormattingModelProvider.createFormattingModelForPsiFile(element.containingFile, block, settings)
} }
@Override override fun getRangeAffectingIndent(psiFile: PsiFile, i: Int, astNode: ASTNode): TextRange? {
public TextRange getRangeAffectingIndent(PsiFile psiFile, int i, ASTNode astNode) { return null
return null;
} }
} }