Minor refactoring. Replaced some ifs with asserts, added @NotNull/@Nullable annotations.

This commit is contained in:
Evgeny Gerashchenko
2012-09-05 15:38:40 +04:00
parent 089881e63b
commit ecf68127df
3 changed files with 33 additions and 23 deletions
@@ -31,6 +31,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.messages.MessageBusConnection;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.di.InjectorForJavaSemanticServices; import org.jetbrains.jet.di.InjectorForJavaSemanticServices;
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
@@ -99,9 +100,6 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements
public void invoke(@NotNull final Project project, final Editor editor, PsiFile file) throws IncorrectOperationException { public void invoke(@NotNull final Project project, final Editor editor, PsiFile file) throws IncorrectOperationException {
final PsiMethod method = findMethod(file, editor.getCaretModel().getOffset()); final PsiMethod method = findMethod(file, editor.getCaretModel().getOffset());
String signature = getDefaultSignature(project, (PsiMethod) method.getOriginalElement()); String signature = getDefaultSignature(project, (PsiMethod) method.getOriginalElement());
if (signature == null) {
return;
}
final MessageBusConnection busConnection = project.getMessageBus().connect(); final MessageBusConnection busConnection = project.getMessageBus().connect();
busConnection.subscribe(ExternalAnnotationsManager.TOPIC, new ExternalAnnotationsListener.Adapter() { busConnection.subscribe(ExternalAnnotationsManager.TOPIC, new ExternalAnnotationsListener.Adapter() {
@Override @Override
@@ -128,26 +126,35 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements
return new AddAnnotationFix(KOTLIN_SIGNATURE_ANNOTATION, method, signatureToNameValuePairs(method.getProject(), signature)); return new AddAnnotationFix(KOTLIN_SIGNATURE_ANNOTATION, method, signatureToNameValuePairs(method.getProject(), signature));
} }
@NotNull
private static String getDefaultSignature(@NotNull Project project, @NotNull PsiMethod method) { private static String getDefaultSignature(@NotNull Project project, @NotNull PsiMethod method) {
InjectorForJavaSemanticServices injector = new InjectorForJavaSemanticServices(BuiltinsScopeExtensionMode.ALL, project); InjectorForJavaSemanticServices injector = new InjectorForJavaSemanticServices(BuiltinsScopeExtensionMode.ALL, project);
JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver(); JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
FqName classFqName = new FqName(method.getContainingClass().getQualifiedName());
PsiClass containingClass = method.getContainingClass();
assert containingClass != null;
String qualifiedName = containingClass.getQualifiedName();
assert qualifiedName != null;
FqName classFqName = new FqName(qualifiedName);
if (method.getModifierList().hasModifierProperty(PsiModifier.STATIC)) { if (method.getModifierList().hasModifierProperty(PsiModifier.STATIC)) {
NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace(classFqName); NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace(classFqName);
if (namespaceDescriptor == null) return null; assert namespaceDescriptor != null: "Couldn't resolve namespace descriptor for " + classFqName;
namespaceDescriptor.getMemberScope().getFunctions(Name.identifier(method.getName())); namespaceDescriptor.getMemberScope().getFunctions(Name.identifier(method.getName()));
} }
else { else {
ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName); ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName);
if (classDescriptor == null) return null; assert classDescriptor != null: "Couldn't resolve class descriptor for " + classFqName;
classDescriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier(method.getName())); classDescriptor.getDefaultType().getMemberScope().getFunctions(Name.identifier(method.getName()));
} }
SimpleFunctionDescriptor functionDescriptor = injector.getBindingTrace().getBindingContext().get(BindingContext.FUNCTION, method); SimpleFunctionDescriptor functionDescriptor = injector.getBindingTrace().getBindingContext().get(BindingContext.FUNCTION, method);
assert functionDescriptor != null: "Couldn't find function descriptor for " + method.getName() + " in " + classFqName; assert functionDescriptor != null: "Couldn't find function descriptor for " + method.getName() + " in " + classFqName;
return RENDERER.render(functionDescriptor); return RENDERER.render(functionDescriptor);
} }
private static PsiMethod findMethod(PsiFile file, int offset) { @Nullable
private static PsiMethod findMethod(@NotNull PsiFile file, int offset) {
PsiElement element = file.findElementAt(offset); PsiElement element = file.findElementAt(offset);
PsiMethod res = PsiTreeUtil.getParentOfType(element, PsiMethod.class); PsiMethod res = PsiTreeUtil.getParentOfType(element, PsiMethod.class);
if (res == null) return null; if (res == null) return null;
@@ -160,9 +160,8 @@ class EditSignatureBalloon {
settings.setAdditionalPageAtBottom(false); settings.setAdditionalPageAtBottom(false);
settings.setAdditionalLinesCount(2); settings.setAdditionalLinesCount(2);
if (editor instanceof EditorEx) { assert editor instanceof EditorEx;
((EditorEx)editor).setEmbeddedIntoDialogWrapper(true); ((EditorEx)editor).setEmbeddedIntoDialogWrapper(true);
}
editor.getColorsScheme().setColor(EditorColors.CARET_ROW_COLOR, editor.getColorsScheme().getDefaultBackground()); editor.getColorsScheme().setColor(EditorColors.CARET_ROW_COLOR, editor.getColorsScheme().getDefaultBackground());
@@ -208,18 +207,20 @@ class EditSignatureBalloon {
} }
private void saveAndHide() { private void saveAndHide() {
balloon.hide();
final String newSignature = editor.getDocument().getText(); final String newSignature = editor.getDocument().getText();
if (!previousSignature.equals(newSignature)) { if (previousSignature.equals(newSignature)) {
new WriteCommandAction(project) { return;
@Override
protected void run(Result result) throws Throwable {
ExternalAnnotationsManager.getInstance(project).editExternalAnnotation(
method, KOTLIN_SIGNATURE_ANNOTATION, signatureToNameValuePairs(project, newSignature));
}
}.execute();
} }
balloon.hide(); new WriteCommandAction(project) {
@Override
protected void run(Result result) throws Throwable {
ExternalAnnotationsManager.getInstance(project).editExternalAnnotation(
method, KOTLIN_SIGNATURE_ANNOTATION, signatureToNameValuePairs(project, newSignature));
}
}.execute();
} }
static void invokeEditSignature(@NotNull PsiMethod element, @NotNull Editor editor, @Nullable Point point) { static void invokeEditSignature(@NotNull PsiMethod element, @NotNull Editor editor, @Nullable Point point) {
@@ -231,10 +232,11 @@ class EditSignatureBalloon {
if (pair.getName() == null || "value".equals(pair.getName())) { if (pair.getName() == null || "value".equals(pair.getName())) {
PsiAnnotationMemberValue value = pair.getValue(); PsiAnnotationMemberValue value = pair.getValue();
if (value != null) { if (value != null) {
PsiElement firstChild = value.getFirstChild();
VirtualFile virtualFile = value.getContainingFile().getVirtualFile(); VirtualFile virtualFile = value.getContainingFile().getVirtualFile();
if (firstChild != null && firstChild.getNode().getElementType() == JavaTokenType.STRING_LITERAL assert virtualFile != null;
&& virtualFile != null) {
PsiElement firstChild = value.getFirstChild();
if (firstChild != null && firstChild.getNode().getElementType() == JavaTokenType.STRING_LITERAL) {
new OpenFileDescriptor(value.getProject(), virtualFile, value.getTextOffset() + 1).navigate(true); new OpenFileDescriptor(value.getProject(), virtualFile, value.getTextOffset() + 1).navigate(true);
} }
else { else {
@@ -38,7 +38,8 @@ class KotlinSignatureUtil {
private KotlinSignatureUtil() { private KotlinSignatureUtil() {
} }
static PsiMethod getAnnotationOwner(PsiElement element) { @NotNull
static PsiMethod getAnnotationOwner(@NotNull PsiElement element) {
PsiMethod annotationOwner = element.getOriginalElement() instanceof PsiMethod PsiMethod annotationOwner = element.getOriginalElement() instanceof PsiMethod
? (PsiMethod) element.getOriginalElement() ? (PsiMethod) element.getOriginalElement()
: (PsiMethod) element; : (PsiMethod) element;