SUPERTYPE_NOT_INITIALIZED_DEFAULT error removed
It was merged with SUPERTYPE_NOT_INITIALIZED.
This commit is contained in:
@@ -129,7 +129,6 @@ public interface Errors {
|
||||
DiagnosticFactory0<PsiElement> CYCLIC_INHERITANCE_HIERARCHY = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
DiagnosticFactory0<JetDelegatorToSuperClass> SUPERTYPE_NOT_INITIALIZED = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<JetDelegatorToSuperClass> SUPERTYPE_NOT_INITIALIZED_DEFAULT = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
DiagnosticFactory0<JetTypeReference> DELEGATION_NOT_TO_TRAIT = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<JetTypeReference> SUPERTYPE_NOT_A_CLASS_OR_TRAIT = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
-1
@@ -150,7 +150,6 @@ public class DefaultErrorMessages {
|
||||
|
||||
MAP.put(PROJECTION_ON_NON_CLASS_TYPE_ARGUMENT, "Projections are not allowed on type arguments of functions and properties");
|
||||
MAP.put(SUPERTYPE_NOT_INITIALIZED, "This type has a constructor, and thus must be initialized here");
|
||||
MAP.put(SUPERTYPE_NOT_INITIALIZED_DEFAULT, "Constructor invocation should be explicitly specified");
|
||||
MAP.put(NOTHING_TO_OVERRIDE, "''{0}'' overrides nothing", NAME);
|
||||
MAP.put(VIRTUAL_MEMBER_HIDDEN, "''{0}'' hides member of supertype ''{2}'' and needs ''override'' modifier", NAME, NAME, NAME);
|
||||
|
||||
|
||||
@@ -246,18 +246,7 @@ public class BodyResolver {
|
||||
if (classDescriptor == null) return;
|
||||
if (descriptor.getKind() != ClassKind.TRAIT && !classDescriptor.getConstructors().isEmpty() &&
|
||||
!ErrorUtils.isError(classDescriptor.getTypeConstructor()) && classDescriptor.getKind() != ClassKind.TRAIT) {
|
||||
boolean hasConstructorWithoutParams = false;
|
||||
for (ConstructorDescriptor constructor : classDescriptor.getConstructors()) {
|
||||
if (constructor.getValueParameters().isEmpty()) {
|
||||
hasConstructorWithoutParams = true;
|
||||
}
|
||||
}
|
||||
if (!hasConstructorWithoutParams) {
|
||||
trace.report(SUPERTYPE_NOT_INITIALIZED.on(specifier));
|
||||
}
|
||||
else {
|
||||
trace.report(SUPERTYPE_NOT_INITIALIZED_DEFAULT.on(specifier));
|
||||
}
|
||||
trace.report(SUPERTYPE_NOT_INITIALIZED.on(specifier));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
open class NoC
|
||||
class NoC1 : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT!>NoC<!>
|
||||
class NoC1 : <!SUPERTYPE_NOT_INITIALIZED!>NoC<!>
|
||||
|
||||
class WithC0() : NoC()
|
||||
open class WithC1() : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT!>NoC<!>
|
||||
class NoC2 : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT!>WithC1<!>
|
||||
open class WithC1() : <!SUPERTYPE_NOT_INITIALIZED!>NoC<!>
|
||||
class NoC2 : <!SUPERTYPE_NOT_INITIALIZED!>WithC1<!>
|
||||
class NoC3 : WithC1()
|
||||
class WithC2() : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT!>WithC1<!>
|
||||
class WithC2() : <!SUPERTYPE_NOT_INITIALIZED!>WithC1<!>
|
||||
|
||||
class WithPC0() {
|
||||
}
|
||||
@@ -14,7 +14,7 @@ class WithPC1(a : Int) {
|
||||
}
|
||||
|
||||
|
||||
class Foo() : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT, FINAL_SUPERTYPE!>WithPC0<!>, <!SYNTAX!>this<!>() {
|
||||
class Foo() : <!SUPERTYPE_NOT_INITIALIZED, FINAL_SUPERTYPE!>WithPC0<!>, <!SYNTAX!>this<!>() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -38,12 +38,12 @@ trait Test6 : <!FINAL_SUPERTYPE!>C1<!> {}
|
||||
|
||||
class CTest1() : OC1() {}
|
||||
|
||||
class CTest2 : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT!>C2<!> {}
|
||||
class CTest2 : <!SUPERTYPE_NOT_INITIALIZED!>C2<!> {}
|
||||
|
||||
class CTest3 : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT!>C2<!>, <!SUPERTYPE_NOT_INITIALIZED_DEFAULT, MANY_CLASSES_IN_SUPERTYPE_LIST!>C3<!> {}
|
||||
class CTest3 : <!SUPERTYPE_NOT_INITIALIZED!>C2<!>, <!SUPERTYPE_NOT_INITIALIZED, MANY_CLASSES_IN_SUPERTYPE_LIST!>C3<!> {}
|
||||
|
||||
class CTest4 : T1 {}
|
||||
|
||||
class CTest5 : T1, <!SUPERTYPE_APPEARS_TWICE!>T1<!> {}
|
||||
|
||||
class CTest6 : <!SUPERTYPE_NOT_INITIALIZED_DEFAULT, FINAL_SUPERTYPE!>C1<!> {}
|
||||
class CTest6 : <!SUPERTYPE_NOT_INITIALIZED, FINAL_SUPERTYPE!>C1<!> {}
|
||||
@@ -6,5 +6,5 @@ trait Foo<!CONSTRUCTOR_IN_TRAIT!>()<!> : bar<!SUPERTYPE_INITIALIZED_IN_TRAIT!>()
|
||||
trait Foo2 : bar, Foo {
|
||||
}
|
||||
|
||||
open class Foo1() : bar(), <!SUPERTYPE_NOT_INITIALIZED_DEFAULT, MANY_CLASSES_IN_SUPERTYPE_LIST, SUPERTYPE_APPEARS_TWICE!>bar<!>, Foo, <!SUPERTYPE_APPEARS_TWICE!>Foo<!><!NO_CONSTRUCTOR!>()<!> {}
|
||||
open class Foo12 : bar(), <!SUPERTYPE_NOT_INITIALIZED_DEFAULT, MANY_CLASSES_IN_SUPERTYPE_LIST, SUPERTYPE_APPEARS_TWICE!>bar<!> {}
|
||||
open class Foo1() : bar(), <!SUPERTYPE_NOT_INITIALIZED, MANY_CLASSES_IN_SUPERTYPE_LIST, SUPERTYPE_APPEARS_TWICE!>bar<!>, Foo, <!SUPERTYPE_APPEARS_TWICE!>Foo<!><!NO_CONSTRUCTOR!>()<!> {}
|
||||
open class Foo12 : bar(), <!SUPERTYPE_NOT_INITIALIZED, MANY_CLASSES_IN_SUPERTYPE_LIST, SUPERTYPE_APPEARS_TWICE!>bar<!> {}
|
||||
@@ -21,12 +21,16 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
||||
import org.jetbrains.jet.lang.psi.JetClass;
|
||||
import org.jetbrains.jet.lang.psi.JetDelegationSpecifier;
|
||||
import org.jetbrains.jet.lang.psi.JetDelegatorToSuperClass;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiFactory;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||
import org.jetbrains.jet.plugin.JetBundle;
|
||||
import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManager;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -48,6 +52,24 @@ public class ChangeToConstructorInvocationFix extends JetIntentionAction<JetDele
|
||||
return JetBundle.message("change.to.constructor.invocation");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
|
||||
JetTypeReference typeReference = element.getTypeReference();
|
||||
BindingContext context = KotlinCacheManager.getInstance(project).getDeclarationsFromProject().getBindingContext();
|
||||
JetType supertype = context.get(BindingContext.TYPE, typeReference);
|
||||
if (supertype == null) return false;
|
||||
ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(supertype);
|
||||
if (classDescriptor == null) return false;
|
||||
for (ConstructorDescriptor constructor : classDescriptor.getConstructors()) {
|
||||
boolean needsParametersPassed = false;
|
||||
for (ValueParameterDescriptor parameter : constructor.getValueParameters()) {
|
||||
needsParametersPassed |= !parameter.hasDefaultValue() && parameter.getVarargElementType() == null;
|
||||
}
|
||||
if (!needsParametersPassed) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
JetDelegatorToSuperClass delegator = (JetDelegatorToSuperClass) element.copy();
|
||||
|
||||
@@ -131,7 +131,7 @@ public class QuickFixes {
|
||||
factories.put(USELESS_SIMPLE_IMPORT, removeImportFixFactory);
|
||||
factories.put(USELESS_HIDDEN_IMPORT, removeImportFixFactory);
|
||||
|
||||
factories.put(SUPERTYPE_NOT_INITIALIZED_DEFAULT, ChangeToConstructorInvocationFix.createFactory());
|
||||
factories.put(SUPERTYPE_NOT_INITIALIZED, ChangeToConstructorInvocationFix.createFactory());
|
||||
factories.put(FUNCTION_CALL_EXPECTED, ChangeToFunctionInvocationFix.createFactory());
|
||||
|
||||
factories.put(CANNOT_CHANGE_ACCESS_PRIVILEGE, ChangeVisibilityModifierFix.createFactory());
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
// "Change to constructor invocation" "true"
|
||||
open class A(x : Int = 42, vararg y : Int) {}
|
||||
class B() : A<caret>() {}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
// "Change to constructor invocation" "true"
|
||||
open class A() {}
|
||||
class B() : A<caret>() {}
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Change to constructor invocation" "false"
|
||||
// ERROR: This type has a constructor, and thus must be initialized here
|
||||
open class A(x : Int) {}
|
||||
class B : A<caret> {}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
// "Change to constructor invocation" "true"
|
||||
open class A(x : Int = 42, vararg y : Int) {}
|
||||
class B() : A<caret> {}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
// "Change to constructor invocation" "true"
|
||||
open class A() {}
|
||||
class B() : A<caret> {}
|
||||
@@ -31,7 +31,7 @@ import org.jetbrains.jet.plugin.quickfix.AbstractQuickFixTest;
|
||||
/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("idea/testData/quickfix")
|
||||
@InnerTestClasses({QuickFixTestGenerated.Abstract.class, QuickFixTestGenerated.AddStarProjections.class, QuickFixTestGenerated.AutoImports.class, QuickFixTestGenerated.Expressions.class, QuickFixTestGenerated.Migration.class, QuickFixTestGenerated.Modifiers.class, QuickFixTestGenerated.Nullables.class, QuickFixTestGenerated.Override.class, QuickFixTestGenerated.TypeAddition.class, QuickFixTestGenerated.TypeImports.class, QuickFixTestGenerated.TypeProjection.class, QuickFixTestGenerated.UselessImports.class, QuickFixTestGenerated.Variables.class, QuickFixTestGenerated.When.class})
|
||||
@InnerTestClasses({QuickFixTestGenerated.Abstract.class, QuickFixTestGenerated.AddStarProjections.class, QuickFixTestGenerated.AutoImports.class, QuickFixTestGenerated.Expressions.class, QuickFixTestGenerated.Migration.class, QuickFixTestGenerated.Modifiers.class, QuickFixTestGenerated.Nullables.class, QuickFixTestGenerated.Override.class, QuickFixTestGenerated.SupertypeInitialization.class, QuickFixTestGenerated.TypeAddition.class, QuickFixTestGenerated.TypeImports.class, QuickFixTestGenerated.TypeProjection.class, QuickFixTestGenerated.UselessImports.class, QuickFixTestGenerated.Variables.class, QuickFixTestGenerated.When.class})
|
||||
public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
public void testAllFilesPresentInQuickfix() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix"), Pattern.compile("^before(\\w+)\\.kt$"), true);
|
||||
@@ -641,6 +641,29 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/supertypeInitialization")
|
||||
public static class SupertypeInitialization extends AbstractQuickFixTest {
|
||||
public void testAllFilesPresentInSupertypeInitialization() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/supertypeInitialization"), Pattern.compile("^before(\\w+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("beforeSupertypeNotInitialized.kt")
|
||||
public void testSupertypeNotInitialized() throws Exception {
|
||||
doTest("idea/testData/quickfix/supertypeInitialization/beforeSupertypeNotInitialized.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("beforeSupertypeNotInitializedDefaultParameters.kt")
|
||||
public void testSupertypeNotInitializedDefaultParameters() throws Exception {
|
||||
doTest("idea/testData/quickfix/supertypeInitialization/beforeSupertypeNotInitializedDefaultParameters.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("beforeSupertypeNotInitializedEmptyConstructor.kt")
|
||||
public void testSupertypeNotInitializedEmptyConstructor() throws Exception {
|
||||
doTest("idea/testData/quickfix/supertypeInitialization/beforeSupertypeNotInitializedEmptyConstructor.kt");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/quickfix/typeAddition")
|
||||
public static class TypeAddition extends AbstractQuickFixTest {
|
||||
public void testAllFilesPresentInTypeAddition() throws Exception {
|
||||
@@ -922,6 +945,7 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
suite.addTest(Modifiers.innerSuite());
|
||||
suite.addTest(Nullables.innerSuite());
|
||||
suite.addTestSuite(Override.class);
|
||||
suite.addTestSuite(SupertypeInitialization.class);
|
||||
suite.addTestSuite(TypeAddition.class);
|
||||
suite.addTestSuite(TypeImports.class);
|
||||
suite.addTestSuite(TypeProjection.class);
|
||||
|
||||
Reference in New Issue
Block a user