[jvm-lang] java: return if no method is found after reformat IDEA-188113

This commit is contained in:
Daniil Ovchinnikov
2018-03-12 21:34:56 +03:00
parent 3fcd22a5b5
commit 47bedfb488
6 changed files with 38 additions and 16 deletions

View File

@@ -31,10 +31,10 @@ internal class CreateGetterWithFieldAction(target: PsiClass, request: CreateMeth
override fun createRenderer(project: Project) = object : PropertyRenderer(project, target, request, propertyInfo) {
override fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression {
override fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression? {
val prototypeField = generatePrototypeField()
val prototype = generateSimpleGetterPrototype(prototypeField)
val accessor = insertAccessor(prototype)
val accessor = insertAccessor(prototype) ?: return null
val data = accessor.extractGetterTemplateData()
return builder.setupInput(data)
}

View File

@@ -52,19 +52,19 @@ internal class CreatePropertyAction(target: PsiClass, request: CreateMethodReque
return getter to setter
}
private fun insertPrototypes(): Pair<PsiMethod, PsiMethod> {
private fun insertPrototypes(): Pair<PsiMethod, PsiMethod>? {
val (getterPrototype, setterPrototype) = generatePrototypes()
return if (propertyKind == SETTER) {
// Technology isn't there yet. See related: WEB-26575.
// We can't recalculate template segments which start before the current segment,
// so we add the setter before the getter.
val setter = insertAccessor(setterPrototype)
val getter = insertAccessor(getterPrototype)
val setter = insertAccessor(setterPrototype) ?: return null
val getter = insertAccessor(getterPrototype) ?: return null
getter to setter
}
else {
val getter = insertAccessor(getterPrototype)
val setter = insertAccessor(setterPrototype)
val getter = insertAccessor(getterPrototype) ?: return null
val setter = insertAccessor(setterPrototype) ?: return null
getter to setter
}
}
@@ -83,8 +83,8 @@ internal class CreatePropertyAction(target: PsiClass, request: CreateMethodReque
*
* 3. Setter parameter name template is added in any case.
*/
override fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression {
val (getter, setter) = insertPrototypes()
override fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression? {
val (getter, setter) = insertPrototypes() ?: return null
val getterData = getter.extractGetterTemplateData()
val setterData = setter.extractSetterTemplateData()

View File

@@ -31,10 +31,10 @@ internal class CreateSetterWithFieldAction(target: PsiClass, request: CreateMeth
override fun createRenderer(project: Project) = object : PropertyRenderer(project, target, request, propertyInfo) {
override fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression {
override fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression? {
val prototypeField = generatePrototypeField()
val prototype = generateSimpleSetterPrototype(prototypeField, target)
val accessor = insertAccessor(prototype)
val accessor = insertAccessor(prototype) ?: return null
val data = accessor.extractSetterTemplateData()
val typeExpression = builder.setupInput(data)
builder.setupSetterParameter(data)

View File

@@ -27,7 +27,7 @@ internal abstract class PropertyRenderer(
nameKind: Pair<String, PropertyKind>
) {
protected val factory = JavaPsiFacade.getInstance(project).elementFactory
private val factory = JavaPsiFacade.getInstance(project).elementFactory
private val codeStyleManager = JavaCodeStyleManager.getInstance(project)!!
private val javaUsage = request as? CreateMethodFromJavaUsageRequest
private val isStatic = JvmModifier.STATIC in request.modifiers
@@ -64,7 +64,7 @@ internal abstract class PropertyRenderer(
if (!navigate()) return
val builder = TemplateBuilderImpl(target)
builder.setGreedyToRight(true)
val typeExpression = fillTemplate(builder)
val typeExpression = fillTemplate(builder) ?: return
val template = builder.buildInlineTemplate().apply {
isToShortenLongNames = true
}
@@ -72,10 +72,11 @@ internal abstract class PropertyRenderer(
TemplateManager.getInstance(project).startTemplate(targetEditor, template, listener)
}
protected abstract fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression
protected abstract fun fillTemplate(builder: TemplateBuilderImpl): RangeExpression?
protected fun insertAccessor(prototype: PsiMethod): PsiMethod {
return forcePsiPostprocessAndRestoreElement(target.add(prototype)) as PsiMethod
protected fun insertAccessor(prototype: PsiMethod): PsiMethod? {
val method = target.add(prototype) as PsiMethod
return forcePsiPostprocessAndRestoreElement(method)
}
private fun TemplateBuilderImpl.createTemplateContext(): TemplateContext {

View File

@@ -0,0 +1,12 @@
// "Create property 'appOutputPath' in 'X'" "true"
class X {
void initOutputChecker() {
getAppOutputPath();
}
protected RunContentDescriptor executeConfiguration() {
ApplicationManager.getApplication().invokeLater(() -> {
public void getAppOutputPath() {
return appOutputPath;
}

View File

@@ -0,0 +1,9 @@
// "Create property 'appOutputPath' in 'X'" "true"
class X {
void initOutputChecker() {
getAppOutpu<caret>tPath();
}
protected RunContentDescriptor executeConfiguration() {
ApplicationManager.getApplication().invokeLater(() -> {