diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java
index 635893bbf6b..f96d049efe2 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java
@@ -23,13 +23,13 @@ import org.jetbrains.annotations.NotNull;
/**
* @author svtk
*/
-public abstract class AbstractDiagnostic
implements Diagnostic
{
- private final P psiElement;
+public abstract class AbstractDiagnostic implements ParametrizedDiagnostic {
+ private final E psiElement;
private final String message;
private final AbstractDiagnosticFactory factory;
private final Severity severity;
- public AbstractDiagnostic(@NotNull P psiElement, @NotNull AbstractDiagnosticFactory factory, @NotNull Severity severity, @NotNull String message) {
+ public AbstractDiagnostic(@NotNull E psiElement, @NotNull AbstractDiagnosticFactory factory, @NotNull Severity severity, @NotNull String message) {
this.psiElement = psiElement;
this.factory = factory;
this.severity = severity;
@@ -63,7 +63,7 @@ public abstract class AbstractDiagnostic implements Diagno
@Override
@NotNull
- public P getPsiElement() {
+ public E getPsiElement() {
return psiElement;
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Diagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Diagnostic.java
index 0aa0a399cf6..d4369a0513d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Diagnostic.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Diagnostic.java
@@ -26,7 +26,7 @@ import java.util.List;
/**
* @author abreslav
*/
-public interface Diagnostic {//todo
+public interface Diagnostic {
@NotNull
AbstractDiagnosticFactory getFactory();
@@ -38,7 +38,7 @@ public interface Diagnostic {//todo
Severity getSeverity();
@NotNull
- E getPsiElement();
+ PsiElement getPsiElement();
@NotNull
List getTextRanges();
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java
index a27ef4576c7..5e893eef3f1 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java
@@ -22,10 +22,10 @@ import org.jetbrains.annotations.NotNull;
/**
* @author svtk
*/
-public class DiagnosticFactory extends DiagnosticFactoryWithPsiElement
{
+public class DiagnosticFactory extends DiagnosticFactoryWithPsiElement {
protected final String message;
- protected DiagnosticFactory(Severity severity, String message, PositioningStrategy super P> positioningStrategy) {
+ protected DiagnosticFactory(Severity severity, String message, PositioningStrategy super E> positioningStrategy) {
super(severity, positioningStrategy);
this.message = message;
}
@@ -39,7 +39,7 @@ public class DiagnosticFactory extends DiagnosticFactoryWi
}
@NotNull
- public Diagnostic
on(@NotNull P element) {
- return new DiagnosticWithPsiElement
(element, this, severity, message);
+ public ParametrizedDiagnostic on(@NotNull E element) {
+ return new DiagnosticWithPsiElement(element, this, severity, message);
}
}
\ No newline at end of file
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory1.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory1.java
index 0c29562cfb8..c6e1d9d3f91 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory1.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory1.java
@@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull;
/**
* @author svtk
*/
-public class DiagnosticFactory1 extends DiagnosticFactoryWithMessageFormat
{
+public class DiagnosticFactory1 extends DiagnosticFactoryWithMessageFormat {
private final Renderer super A> renderer;
protected String makeMessage(@NotNull A argument) {
@@ -34,11 +34,11 @@ public class DiagnosticFactory1 extends DiagnosticFacto
}
@NotNull
- public DiagnosticWithPsiElement
on(@NotNull P element, @NotNull A argument) {
- return new DiagnosticWithPsiElement
(element, this, severity, makeMessage(argument));
+ public ParametrizedDiagnostic on(@NotNull E element, @NotNull A argument) {
+ return new DiagnosticWithPsiElement(element, this, severity, makeMessage(argument));
}
- protected DiagnosticFactory1(Severity severity, String message, PositioningStrategy super P> positioningStrategy, Renderer super A> renderer) {
+ protected DiagnosticFactory1(Severity severity, String message, PositioningStrategy super E> positioningStrategy, Renderer super A> renderer) {
super(severity, message, positioningStrategy);
this.renderer = renderer;
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory2.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory2.java
index 3dfc7b23b2f..8eb63ff8c04 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory2.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory2.java
@@ -22,7 +22,7 @@ import org.jetbrains.annotations.NotNull;
/**
* @author abreslav
*/
-public class DiagnosticFactory2 extends DiagnosticFactoryWithMessageFormat
{
+public class DiagnosticFactory2 extends DiagnosticFactoryWithMessageFormat {
private final Renderer super A> rendererForA;
private final Renderer super B> rendererForB;
@@ -39,12 +39,12 @@ public class DiagnosticFactory2 extends DiagnosticFa
}
@NotNull
- public Diagnostic
on(@NotNull P element, @NotNull A a, @NotNull B b) {
- return new DiagnosticWithPsiElement
(element, this, severity, makeMessage(a, b));
+ public ParametrizedDiagnostic on(@NotNull E element, @NotNull A a, @NotNull B b) {
+ return new DiagnosticWithPsiElement(element, this, severity, makeMessage(a, b));
}
- private DiagnosticFactory2(Severity severity, String message, PositioningStrategy super P> positioningStrategy, Renderer super A> rendererForA, Renderer super B> rendererForB) {
+ private DiagnosticFactory2(Severity severity, String message, PositioningStrategy super E> positioningStrategy, Renderer super A> rendererForA, Renderer super B> rendererForB) {
super(severity, message, positioningStrategy);
this.rendererForA = rendererForA;
this.rendererForB = rendererForB;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory3.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory3.java
index 92c46568cc2..caa5b8518e1 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory3.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory3.java
@@ -22,12 +22,12 @@ import org.jetbrains.annotations.NotNull;
/**
* @author svtk
*/
-public class DiagnosticFactory3 extends DiagnosticFactoryWithMessageFormat
{
+public class DiagnosticFactory3 extends DiagnosticFactoryWithMessageFormat {
private final Renderer super A> rendererForA;
private final Renderer super B> rendererForB;
private final Renderer super C> rendererForC;
- protected DiagnosticFactory3(Severity severity, String messageStub, PositioningStrategy super P> positioningStrategy, Renderer super A> rendererForA, Renderer super B> rendererForB, Renderer super C> rendererForC) {
+ protected DiagnosticFactory3(Severity severity, String messageStub, PositioningStrategy super E> positioningStrategy, Renderer super A> rendererForA, Renderer super B> rendererForB, Renderer super C> rendererForC) {
super(severity, messageStub, positioningStrategy);
this.rendererForA = rendererForA;
this.rendererForB = rendererForB;
@@ -66,7 +66,7 @@ public class DiagnosticFactory3 extends Diagnosti
return rendererForC.render(c);
}
@NotNull
- public DiagnosticWithPsiElement
on(@NotNull P element, @NotNull A a, @NotNull B b, @NotNull C c) {
- return new DiagnosticWithPsiElement
(element, this, severity, makeMessage(a, b, c));
+ public ParametrizedDiagnostic on(@NotNull E element, @NotNull A a, @NotNull B b, @NotNull C c) {
+ return new DiagnosticWithPsiElement(element, this, severity, makeMessage(a, b, c));
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java
index 67cd381b850..9478ec5191d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java
@@ -23,14 +23,14 @@ import java.text.MessageFormat;
/**
* @author abreslav
*/
-public abstract class DiagnosticFactoryWithMessageFormat extends DiagnosticFactoryWithPsiElement
{
+public abstract class DiagnosticFactoryWithMessageFormat extends DiagnosticFactoryWithPsiElement {
protected final MessageFormat messageFormat;
public DiagnosticFactoryWithMessageFormat(Severity severity, String message) {
this(severity, message, PositioningStrategies.DEFAULT);
}
- public DiagnosticFactoryWithMessageFormat(Severity severity, String message, PositioningStrategy super P> positioningStrategy) {
+ public DiagnosticFactoryWithMessageFormat(Severity severity, String message, PositioningStrategy super E> positioningStrategy) {
super(severity, positioningStrategy);
this.messageFormat = new MessageFormat(message);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithPsiElement.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithPsiElement.java
index 8d304b48266..54d5bdbd909 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithPsiElement.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithPsiElement.java
@@ -24,16 +24,16 @@ import java.util.List;
/**
* @author abreslav
*/
-public abstract class DiagnosticFactoryWithPsiElement extends AbstractDiagnosticFactory {
+public abstract class DiagnosticFactoryWithPsiElement extends AbstractDiagnosticFactory {
protected final Severity severity;
- protected final PositioningStrategy super P> positioningStrategy;
+ protected final PositioningStrategy super E> positioningStrategy;
- public DiagnosticFactoryWithPsiElement(Severity severity, PositioningStrategy super P> positioningStrategy) {
+ public DiagnosticFactoryWithPsiElement(Severity severity, PositioningStrategy super E> positioningStrategy) {
this.severity = severity;
this.positioningStrategy = positioningStrategy;
}
- protected List getTextRanges(Diagnostic diagnostic) {
+ protected List getTextRanges(ParametrizedDiagnostic diagnostic) {
return positioningStrategy.mark(diagnostic.getPsiElement());
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java
index 1a1a6b655ad..3301517555d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java
@@ -76,7 +76,7 @@ public class DiagnosticUtils {
}
@NotNull
- public static LineAndColumn getLineAndColumn(@NotNull Diagnostic extends PsiElement> diagnostic) {
+ public static LineAndColumn getLineAndColumn(@NotNull Diagnostic diagnostic) {
PsiFile file = diagnostic.getPsiFile();
Document document = file.getViewProvider().getDocument();
TextRange firstRange = diagnostic.getTextRanges().iterator().next();
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java
index 45aeb8f45f9..a73ce08470a 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java
@@ -25,15 +25,15 @@ import java.util.List;
/**
* @author svtk
*/
-public class DiagnosticWithPsiElement extends AbstractDiagnostic
{
- public DiagnosticWithPsiElement(@NotNull P psiElement, @NotNull DiagnosticFactoryWithPsiElement
factory, @NotNull Severity severity, @NotNull String message) {
+public class DiagnosticWithPsiElement extends AbstractDiagnostic {
+ public DiagnosticWithPsiElement(@NotNull E psiElement, @NotNull DiagnosticFactoryWithPsiElement factory, @NotNull Severity severity, @NotNull String message) {
super(psiElement, factory, severity, message);
}
@NotNull
@Override
- public DiagnosticFactoryWithPsiElement getFactory() {
- return (DiagnosticFactoryWithPsiElement
)super.getFactory();
+ public DiagnosticFactoryWithPsiElement getFactory() {
+ return (DiagnosticFactoryWithPsiElement)super.getFactory();
}
@NotNull
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParametrizedDiagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParametrizedDiagnostic.java
new file mode 100644
index 00000000000..ae6d0222699
--- /dev/null
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParametrizedDiagnostic.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2000-2012 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.jet.lang.diagnostics;
+
+import com.intellij.psi.PsiElement;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author svtk
+ */
+public interface ParametrizedDiagnostic extends Diagnostic {
+ @NotNull
+ @Override
+ E getPsiElement();
+}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java
index 4e371dbbee8..97b7cd76836 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java
@@ -27,9 +27,9 @@ import java.util.List;
/**
* @author svtk
*/
-public class PositioningStrategy {
+public class PositioningStrategy {
@NotNull
- public List mark(@NotNull P element) {
+ public List mark(@NotNull E element) {
return markElement(element);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnostic.java
index 90ab6e7df87..33a36149de1 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnostic.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnostic.java
@@ -30,7 +30,7 @@ import java.util.List;
/**
* @author abreslav
*/
-public interface RedeclarationDiagnostic extends Diagnostic {
+public interface RedeclarationDiagnostic extends Diagnostic {
class SimpleRedeclarationDiagnostic extends AbstractDiagnostic implements RedeclarationDiagnostic {
public SimpleRedeclarationDiagnostic(@NotNull PsiElement psiElement, @NotNull String name, RedeclarationDiagnosticFactory factory) {
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java
index 9b2c69aaba3..c4ed3117f6d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java
@@ -257,7 +257,7 @@ public class BodyResolver {
private void resolveAnonymousInitializers(JetClassOrObject jetClassOrObject, MutableClassDescriptor classDescriptor) {
if (!context.completeAnalysisNeeded(jetClassOrObject)) return;
List anonymousInitializers = jetClassOrObject.getAnonymousInitializers();
- if (jetClassOrObject.hasPrimaryConstructor()) {
+ if (classDescriptor.getUnsubstitutedPrimaryConstructor() != null) {
ConstructorDescriptor primaryConstructor = classDescriptor.getUnsubstitutedPrimaryConstructor();
assert primaryConstructor != null;
final JetScope scopeForInitializers = classDescriptor.getScopeForInitializers();
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java
index 5a3e5285b59..b02d1970d2e 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java
@@ -155,11 +155,6 @@ public class DeclarationsChecker {
}
if ((memberDescriptor.getVisibility() == Visibility.PUBLIC || memberDescriptor.getVisibility() == Visibility.PROTECTED) &&
hasDeferredType && nameIdentifier != null) {
-
- JetType returnType = memberDescriptor.getReturnType();
- if (returnType instanceof DeferredType) {
- returnType = ((DeferredType) returnType).getActualType();
- }
context.getTrace().report(PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE.on(nameIdentifier));
}
}
diff --git a/compiler/testData/diagnostics/tests/AnonymousInitializers.jet b/compiler/testData/diagnostics/tests/AnonymousInitializers.jet
index 515ed807058..b8922a192bb 100644
--- a/compiler/testData/diagnostics/tests/AnonymousInitializers.jet
+++ b/compiler/testData/diagnostics/tests/AnonymousInitializers.jet
@@ -1,4 +1,4 @@
-class NoC {
+trait NoC {
{
}
diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java
index 01b1b024011..14e0c526f8c 100644
--- a/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java
+++ b/idea/src/org/jetbrains/jet/plugin/quickfix/AddModifierFix.java
@@ -16,6 +16,7 @@
package org.jetbrains.jet.plugin.quickfix;
+import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
@@ -23,16 +24,19 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
-import org.jetbrains.jet.lang.psi.JetModifierList;
-import org.jetbrains.jet.lang.psi.JetModifierListOwner;
-import org.jetbrains.jet.lang.psi.JetPropertyAccessor;
-import org.jetbrains.jet.lang.psi.JetPsiFactory;
+import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lexer.JetKeywordToken;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.JetBundle;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.jetbrains.jet.lexer.JetTokens.*;
+
/**
* @author svtk
*/
@@ -40,7 +44,7 @@ public class AddModifierFix extends JetIntentionAction {
private final JetKeywordToken modifier;
private final JetToken[] modifiersThanCanBeReplaced;
- private AddModifierFix(@NotNull JetModifierListOwner element, JetKeywordToken modifier, JetToken[] modifiersThanCanBeReplaced) {
+ private AddModifierFix(@NotNull JetModifierListOwner element, @NotNull JetKeywordToken modifier, @Nullable JetToken[] modifiersThanCanBeReplaced) {
super(element);
this.modifier = modifier;
this.modifiersThanCanBeReplaced = modifiersThanCanBeReplaced;
@@ -67,7 +71,7 @@ public class AddModifierFix extends JetIntentionAction {
@NotNull
@Override
public String getText() {
- if (modifier == JetTokens.ABSTRACT_KEYWORD || modifier == JetTokens.OPEN_KEYWORD) {
+ if (modifier == ABSTRACT_KEYWORD || modifier == JetTokens.OPEN_KEYWORD) {
return JetBundle.message("make.element.modifier", getElementName(element), modifier.getValue());
}
return JetBundle.message("add.modifier", modifier.getValue());
@@ -85,7 +89,7 @@ public class AddModifierFix extends JetIntentionAction {
}
@NotNull
- private static JetModifierListOwner addModifier(@NotNull PsiElement element, @NotNull JetKeywordToken modifier, JetToken[] modifiersThanCanBeReplaced, @NotNull Project project) {
+ private static JetModifierListOwner addModifier(@NotNull PsiElement element, @NotNull JetKeywordToken modifier, @Nullable JetToken[] modifiersThanCanBeReplaced, @NotNull Project project) {
JetModifierListOwner newElement = (JetModifierListOwner) (element.copy());
JetModifierList modifierList = newElement.getModifierList();
@@ -98,12 +102,14 @@ public class AddModifierFix extends JetIntentionAction {
}
else {
boolean replaced = false;
- for (JetToken modifierThanCanBeReplaced : modifiersThanCanBeReplaced) {
- if (modifierList.hasModifier(modifierThanCanBeReplaced)) {
- PsiElement openModifierPsi = modifierList.getModifierNode(modifierThanCanBeReplaced).getPsi();
- assert openModifierPsi != null;
- openModifierPsi.replace(listWithModifier.getFirstChild());
- replaced = true;
+ if (modifiersThanCanBeReplaced != null) {
+ for (JetToken modifierThanCanBeReplaced : modifiersThanCanBeReplaced) {
+ if (modifierList.hasModifier(modifierThanCanBeReplaced)) {
+ PsiElement openModifierPsi = modifierList.getModifierNode(modifierThanCanBeReplaced).getPsi();
+ assert openModifierPsi != null;
+ openModifierPsi.replace(listWithModifier.getFirstChild());
+ replaced = true;
+ }
}
}
if (!replaced) {
@@ -120,14 +126,25 @@ public class AddModifierFix extends JetIntentionAction {
return true;
}
- public static JetIntentionActionFactory createFactory(final JetKeywordToken modifier, final JetToken[] modifiersThatCanBeReplaced) {
+ public static JetIntentionActionFactory createFactory(final JetKeywordToken modifier, final Class modifierOwnerClass) {
return new JetIntentionActionFactory() {
@Override
- public JetIntentionAction createAction(Diagnostic diagnostic) {
- JetModifierListOwner modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, JetModifierListOwner.class);
+ public IntentionAction createAction(Diagnostic diagnostic) {
+ JetModifierListOwner modifierListOwner = QuickFixUtil.getParentElementOfType(diagnostic, modifierOwnerClass);
if (modifierListOwner == null) return null;
- return new AddModifierFix(modifierListOwner, modifier, modifiersThatCanBeReplaced);
+ return new AddModifierFix(modifierListOwner, modifier, MODIFIERS_THAT_CAN_BE_REPLACED.get(modifier));
}
};
}
+
+ public static JetIntentionActionFactory createFactory(final JetKeywordToken modifier) {
+ return createFactory(modifier, JetModifierListOwner.class);
+ }
+
+ private static Map MODIFIERS_THAT_CAN_BE_REPLACED = new HashMap();
+ static {
+ MODIFIERS_THAT_CAN_BE_REPLACED.put(ABSTRACT_KEYWORD, new JetToken[]{OPEN_KEYWORD, FINAL_KEYWORD});
+ MODIFIERS_THAT_CAN_BE_REPLACED.put(OVERRIDE_KEYWORD, new JetToken[]{OPEN_KEYWORD});
+ MODIFIERS_THAT_CAN_BE_REPLACED.put(OPEN_KEYWORD, new JetToken[]{FINAL_KEYWORD});
+ }
}
diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/FakeDiagnosticForQuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/FakeDiagnosticForQuickFixes.java
deleted file mode 100644
index e671aa61083..00000000000
--- a/idea/src/org/jetbrains/jet/plugin/quickfix/FakeDiagnosticForQuickFixes.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2000-2012 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.jet.plugin.quickfix;
-
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.jet.lang.diagnostics.AbstractDiagnosticFactory;
-import org.jetbrains.jet.lang.diagnostics.Diagnostic;
-import org.jetbrains.jet.lang.diagnostics.Severity;
-
-import java.util.List;
-
-/**
- * @author svtk
- */
-public class FakeDiagnosticForQuickFixes implements Diagnostic {
- private final PsiElement element;
-
- public FakeDiagnosticForQuickFixes(PsiElement element) {
- this.element = element;
- }
-
- @NotNull
- @Override
- public AbstractDiagnosticFactory getFactory() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public String getMessage() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public Severity getSeverity() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public PsiElement getPsiElement() {
- return element;
- }
-
- @NotNull
- @Override
- public List getTextRanges() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public PsiFile getPsiFile() {
- return element.getContainingFile();
- }
-}
diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixUtil.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixUtil.java
index f8edb96cca1..66b0190b83c 100644
--- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixUtil.java
+++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixUtil.java
@@ -40,16 +40,6 @@ public class QuickFixUtil {
private QuickFixUtil() {
}
- public static JetIntentionActionFactory createFactoryRedirectingAdditionalInfoToAnotherFactory(final JetIntentionActionFactory factory, final Class aClass) {
- return new JetIntentionActionFactory() {
- @Override
- public IntentionAction createAction(Diagnostic diagnostic) {
- T element = getParentElementOfType(diagnostic, aClass);
- return factory.createAction(new FakeDiagnosticForQuickFixes(element));
- }
- };
- }
-
public static boolean removePossiblyWhiteSpace(ASTDelegatePsiElement element, PsiElement possiblyWhiteSpace) {
if (possiblyWhiteSpace instanceof PsiWhiteSpace) {
element.deleteChildInternal(possiblyWhiteSpace.getNode());
diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java
index f568bb5c301..00a85b3c867 100644
--- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java
+++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java
@@ -19,15 +19,15 @@ package org.jetbrains.jet.plugin.quickfix;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.intellij.codeInsight.intention.IntentionAction;
-import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.diagnostics.AbstractDiagnosticFactory;
+import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.JetClass;
-import org.jetbrains.jet.lexer.JetToken;
-import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler;
import java.util.Collection;
+import static org.jetbrains.jet.lexer.JetTokens.*;
+
/**
* @author svtk
*/
@@ -47,8 +47,8 @@ public class QuickFixes {
private QuickFixes() {}
static {
- JetIntentionActionFactory removeAbstractModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(JetTokens.ABSTRACT_KEYWORD);
- JetIntentionActionFactory addAbstractModifierFactory = AddModifierFix.createFactory(JetTokens.ABSTRACT_KEYWORD, new JetToken[]{JetTokens.OPEN_KEYWORD, JetTokens.FINAL_KEYWORD});
+ JetIntentionActionFactory removeAbstractModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD);
+ JetIntentionActionFactory addAbstractModifierFactory = AddModifierFix.createFactory(ABSTRACT_KEYWORD);
factories.put(Errors.ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS, removeAbstractModifierFactory);
factories.put(Errors.ABSTRACT_PROPERTY_NOT_IN_CLASS, removeAbstractModifierFactory);
@@ -67,7 +67,7 @@ public class QuickFixes {
factories.put(Errors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT, addAbstractModifierFactory);
- JetIntentionActionFactory addAbstractToClassFactory = QuickFixUtil.createFactoryRedirectingAdditionalInfoToAnotherFactory(addAbstractModifierFactory, JetClass.class);
+ JetIntentionActionFactory addAbstractToClassFactory = AddModifierFix.createFactory(ABSTRACT_KEYWORD, JetClass.class);
factories.put(Errors.ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, removeAbstractModifierFactory);
factories.put(Errors.ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS, addAbstractToClassFactory);
@@ -85,8 +85,8 @@ public class QuickFixes {
factories.put(Errors.NON_MEMBER_ABSTRACT_FUNCTION, removeAbstractModifierFactory);
factories.put(Errors.NON_MEMBER_FUNCTION_NO_BODY, addFunctionBodyFactory);
- factories.put(Errors.NOTHING_TO_OVERRIDE, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(JetTokens.OVERRIDE_KEYWORD));
- factories.put(Errors.VIRTUAL_MEMBER_HIDDEN, AddModifierFix.createFactory(JetTokens.OVERRIDE_KEYWORD, new JetToken[] {JetTokens.OPEN_KEYWORD}));
+ factories.put(Errors.NOTHING_TO_OVERRIDE, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OVERRIDE_KEYWORD));
+ factories.put(Errors.VIRTUAL_MEMBER_HIDDEN, AddModifierFix.createFactory(OVERRIDE_KEYWORD));
factories.put(Errors.USELESS_CAST_STATIC_ASSERT_IS_FINE, ReplaceOperationInBinaryExpressionFix.createChangeCastToStaticAssertFactory());
factories.put(Errors.USELESS_CAST, RemoveRightPartOfBinaryExpressionFix.createRemoveCastFactory());
@@ -99,13 +99,12 @@ public class QuickFixes {
JetIntentionActionFactory removeRedundantModifierFactory = RemoveModifierFix.createRemoveModifierFactory(true);
factories.put(Errors.REDUNDANT_MODIFIER, removeRedundantModifierFactory);
- factories.put(Errors.ABSTRACT_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(JetTokens.ABSTRACT_KEYWORD, true));
- factories.put(Errors.OPEN_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(JetTokens.OPEN_KEYWORD, true));
- factories.put(Errors.TRAIT_CAN_NOT_BE_FINAL, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(JetTokens.FINAL_KEYWORD));
+ factories.put(Errors.ABSTRACT_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(ABSTRACT_KEYWORD, true));
+ factories.put(Errors.OPEN_MODIFIER_IN_TRAIT, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD, true));
+ factories.put(Errors.TRAIT_CAN_NOT_BE_FINAL, RemoveModifierFix.createRemoveModifierFromListOwnerFactory(FINAL_KEYWORD));
- JetIntentionActionFactory addOpenModifierFactory = AddModifierFix.createFactory(JetTokens.OPEN_KEYWORD, new JetToken[]{JetTokens.FINAL_KEYWORD});
- JetIntentionActionFactory removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(JetTokens.OPEN_KEYWORD);
- factories.put(Errors.NON_FINAL_MEMBER_IN_FINAL_CLASS, QuickFixUtil.createFactoryRedirectingAdditionalInfoToAnotherFactory(addOpenModifierFactory, JetClass.class));
+ JetIntentionActionFactory removeOpenModifierFactory = RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD);
+ factories.put(Errors.NON_FINAL_MEMBER_IN_FINAL_CLASS, AddModifierFix.createFactory(OPEN_KEYWORD, JetClass.class));
factories.put(Errors.NON_FINAL_MEMBER_IN_FINAL_CLASS, removeOpenModifierFactory);
JetIntentionActionFactory removeModifierFactory = RemoveModifierFix.createRemoveModifierFactory();
diff --git a/idea/testData/checker/AnonymousInitializers.jet b/idea/testData/checker/AnonymousInitializers.jet
index f5f5db7a224..5fdfd561edb 100644
--- a/idea/testData/checker/AnonymousInitializers.jet
+++ b/idea/testData/checker/AnonymousInitializers.jet
@@ -1,4 +1,4 @@
-class NoC {
+trait NoC {
{
}