Converted to Kotlin

This commit is contained in:
Valentin Kipyatkov
2015-05-05 17:15:56 +03:00
parent 0ca492464b
commit f73c4b296e
3 changed files with 66 additions and 102 deletions
@@ -1,100 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.intentions;
import com.intellij.codeInsight.completion.InsertHandler;
import com.intellij.codeInsight.completion.InsertionContext;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.codeInsight.template.Expression;
import com.intellij.codeInsight.template.ExpressionContext;
import com.intellij.codeInsight.template.Result;
import com.intellij.codeInsight.template.TextResult;
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
import com.intellij.codeInsight.template.impl.TemplateState;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import java.util.Iterator;
import java.util.List;
public abstract class JetTypeLookupExpression<T> extends Expression {
protected final LookupElement[] lookupItems;
protected final T defaultItem;
private final String advertisementText;
public JetTypeLookupExpression(
List<T> lookupItems,
T defaultItem,
String advertisement
) {
this.advertisementText = advertisement;
this.defaultItem = defaultItem;
this.lookupItems = initLookupItems(lookupItems);
}
private LookupElement[] initLookupItems(List<T> lookupItems) {
LookupElement[] lookupElements = new LookupElement[lookupItems.size()];
Iterator<T> iterator = lookupItems.iterator();
for (int i = 0; i < lookupElements.length; i++) {
T suggestion = iterator.next();
lookupElements[i] = LookupElementBuilder.create(suggestion, getLookupString(suggestion)).withInsertHandler(
new InsertHandler<LookupElement>() {
@Override
public void handleInsert(InsertionContext context, LookupElement item) {
Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(context.getEditor());
TemplateState templateState = TemplateManagerImpl.getTemplateState(topLevelEditor);
if (templateState != null) {
TextRange range = templateState.getCurrentVariableRange();
if (range != null) {
topLevelEditor.getDocument()
.replaceString(range.getStartOffset(), range.getEndOffset(), getResult((T) item.getObject()));
}
}
}
});
}
return lookupElements;
}
public LookupElement[] calculateLookupItems(ExpressionContext context) {
return lookupItems.length > 1 ? lookupItems : null;
}
public Result calculateQuickResult(ExpressionContext context) {
return calculateResult(context);
}
public Result calculateResult(ExpressionContext context) {
return new TextResult(getLookupString(defaultItem));
}
@Override
public String getAdvertisingText() {
return advertisementText;
}
protected abstract String getLookupString(T element);
protected abstract String getResult(T element);
}
@@ -0,0 +1,64 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.intentions
import com.intellij.codeInsight.completion.InsertHandler
import com.intellij.codeInsight.completion.InsertionContext
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.codeInsight.template.Expression
import com.intellij.codeInsight.template.ExpressionContext
import com.intellij.codeInsight.template.Result
import com.intellij.codeInsight.template.TextResult
import com.intellij.codeInsight.template.impl.TemplateManagerImpl
import com.intellij.codeInsight.template.impl.TemplateState
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.util.TextRange
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil
public abstract class JetTypeLookupExpression<T : Any>(
lookupItems: List<T>,
protected val defaultItem: T,
private val advertisementText: String
) : Expression() {
protected abstract fun getLookupString(element: T): String
protected abstract fun getResult(element: T): String
protected val lookupItems: Array<LookupElement> = lookupItems.map { suggestion ->
LookupElementBuilder.create(suggestion, getLookupString(suggestion)).withInsertHandler(object : InsertHandler<LookupElement> {
override fun handleInsert(context: InsertionContext, item: LookupElement) {
val topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(context.getEditor())
val templateState = TemplateManagerImpl.getTemplateState(topLevelEditor)
if (templateState != null) {
val range = templateState.getCurrentVariableRange()
if (range != null) {
topLevelEditor.getDocument().replaceString(range.getStartOffset(), range.getEndOffset(), getResult(item.getObject() as T))
}
}
}
})
}.toTypedArray()
override fun calculateLookupItems(context: ExpressionContext) = if (lookupItems.size() > 1) lookupItems else null
override fun calculateQuickResult(context: ExpressionContext) = calculateResult(context)
override fun calculateResult(context: ExpressionContext) = TextResult(getLookupString(defaultItem))
override fun getAdvertisingText() = advertisementText
}
@@ -62,8 +62,8 @@ public class DoubleBangToIfThenIntention : JetSelfTargetingOffsetIndependentInte
object: JetTypeLookupExpression<String>(listOf(nullPtrExceptionText, kotlinNullPtrExceptionText),
nullPtrExceptionText, JetBundle.message("double.bang.to.if.then.choose.exception")) {
override fun getLookupString(element: String?) = element
override fun getResult(element: String?) = element
override fun getLookupString(element: String) = element
override fun getResult(element: String) = element
}
val project = element.getProject()