From 7e4b8e9d595e45baa9d87cdb8282f02759e73abc Mon Sep 17 00:00:00 2001 From: Tor Norbye Date: Wed, 30 May 2012 14:54:39 -0700 Subject: Fix nullness annotations Eclipse 4.2 includes analysis support for @Nullable and @NonNull annotations. However, it requires these annotations to be *repeated* on every single method implementing or overriding a superclass or interface method (!). This changeset basically applies the quickfixes to inline these annotations. It also changes the retention of our nullness annotations from source to class, since without this Eclipse believes that a @NonNull annotation downstream is a redefinition of a @Nullable annotation. Finally, the null analysis revealed a dozen or so places where the nullness annotation was either wrong, or some null checking on parameters or return values needed to be done. Change-Id: I43b4e56e2d025a8a4c92a8873f55c13cdbc4c1cb --- common/src/com/android/annotations/NonNull.java | 2 +- .../com/android/annotations/NonNullByDefault.java | 2 +- common/src/com/android/annotations/Nullable.java | 2 +- common/src/com/android/util/PositionXmlParser.java | 2 +- .../ide/common/layout/AbsoluteLayoutRule.java | 26 ++++++---- .../android/ide/common/layout/AdapterViewRule.java | 12 +++-- .../android/ide/common/layout/BaseLayoutRule.java | 58 ++++++++++++--------- .../android/ide/common/layout/BaseViewRule.java | 30 ++++++----- .../ide/common/layout/CalendarViewRule.java | 6 ++- .../ide/common/layout/DialerFilterRule.java | 6 ++- .../android/ide/common/layout/EditTextRule.java | 19 ++++--- .../android/ide/common/layout/FragmentRule.java | 6 ++- .../android/ide/common/layout/FrameLayoutRule.java | 33 +++++++----- .../android/ide/common/layout/GridLayoutRule.java | 44 ++++++++++------ .../android/ide/common/layout/GridViewRule.java | 6 ++- .../common/layout/HorizontalScrollViewRule.java | 14 +++-- .../ide/common/layout/IgnoredLayoutRule.java | 5 +- .../android/ide/common/layout/ImageButtonRule.java | 6 ++- .../android/ide/common/layout/ImageViewRule.java | 6 ++- .../com/android/ide/common/layout/IncludeRule.java | 4 +- .../ide/common/layout/LinearLayoutRule.java | 45 ++++++++++------ .../android/ide/common/layout/ListViewRule.java | 6 ++- .../com/android/ide/common/layout/MapViewRule.java | 4 +- .../com/android/ide/common/layout/MergeRule.java | 4 +- .../ide/common/layout/PropertyCallback.java | 8 +-- .../common/layout/PropertySettingNodeHandler.java | 3 +- .../ide/common/layout/QuickContactBadgeRule.java | 4 +- .../android/ide/common/layout/RadioGroupRule.java | 6 ++- .../ide/common/layout/RelativeLayoutRule.java | 60 +++++++++++++--------- .../android/ide/common/layout/ScrollViewRule.java | 14 +++-- .../com/android/ide/common/layout/SeekBarRule.java | 6 ++- .../ide/common/layout/SlidingDrawerRule.java | 6 ++- .../com/android/ide/common/layout/TabHostRule.java | 6 ++- .../android/ide/common/layout/TableLayoutRule.java | 38 +++++++++----- .../android/ide/common/layout/TableRowRule.java | 16 ++++-- .../com/android/ide/common/layout/WebViewRule.java | 6 ++- .../android/ide/common/layout/ZoomButtonRule.java | 6 ++- .../ide/common/layout/grid/GridLayoutPainter.java | 4 +- .../common/layout/relative/GuidelinePainter.java | 3 +- .../common/resources/platform/AttributeInfo.java | 8 +-- .../adt/internal/actions/DexDumpAction.java | 5 +- .../adt/internal/actions/SdkManagerAction.java | 5 +- .../eclipse/adt/internal/build/BuildHelper.java | 5 +- .../editors/animator/AnimationEditorDelegate.java | 6 ++- .../editors/color/ColorEditorDelegate.java | 6 ++- .../editors/drawable/DrawableEditorDelegate.java | 6 ++- .../formatting/AndroidXmlFormattingStrategy.java | 2 +- .../editors/layout/LayoutEditorDelegate.java | 4 +- .../internal/editors/layout/gle2/GCWrapper.java | 31 +++++------ .../editors/layout/gle2/SimpleAttribute.java | 7 +-- .../editors/layout/gle2/SimpleElement.java | 14 ++--- .../editors/layout/gre/ClientRulesEngine.java | 47 +++++++++-------- .../adt/internal/editors/layout/gre/NodeProxy.java | 44 ++++++++++------ .../layout/properties/XmlPropertyEditor.java | 45 +++++++++------- .../refactoring/ChangeLayoutRefactoring.java | 3 +- .../layout/refactoring/ChangeViewRefactoring.java | 3 +- .../refactoring/ExtractIncludeRefactoring.java | 3 +- .../refactoring/ExtractStyleRefactoring.java | 3 +- .../layout/refactoring/UnwrapRefactoring.java | 3 +- .../UseCompoundDrawableRefactoring.java | 3 +- .../layout/refactoring/WrapInRefactoring.java | 3 +- .../internal/editors/manifest/ManifestInfo.java | 3 +- .../internal/editors/menu/MenuEditorDelegate.java | 6 ++- .../editors/otherxml/OtherXmlEditorDelegate.java | 6 ++- .../editors/values/ValuesEditorDelegate.java | 6 ++- .../adt/internal/lint/EclipseLintClient.java | 55 +++++++++++++------- .../adt/internal/lint/GlobalLintConfiguration.java | 10 ++-- .../ide/eclipse/adt/internal/lint/LintColumn.java | 36 ++++++------- .../adt/internal/lint/LintFixGenerator.java | 2 +- .../internal/lint/ProjectLintConfiguration.java | 3 +- .../internal/preferences/LintPreferencePage.java | 2 +- .../adt/internal/wizards/export/ExportWizard.java | 5 +- .../wizards/templates/TemplateHandler.java | 3 ++ .../.settings/org.eclipse.jdt.core.prefs | 7 ++- .../lint/ProjectLintConfigurationTest.java | 12 +++-- .../android/ide/common/layout/LayoutTestBase.java | 41 ++++++++------- .../android/ide/common/layout/TestAttribute.java | 7 +-- .../ide/common/layout/TestAttributeInfo.java | 9 ++-- .../android/ide/common/layout/TestDragElement.java | 14 ++--- .../android/ide/common/layout/TestGraphics.java | 31 +++++------ .../com/android/ide/common/layout/TestNode.java | 31 ++++++----- .../com/android/tools/lint/LintCliXmlParser.java | 19 +++---- .../src/com/android/tools/lint/LombokParser.java | 13 +++-- lint/cli/src/com/android/tools/lint/Main.java | 45 +++++++++++----- .../lint/client/api/DefaultConfiguration.java | 7 ++- .../tools/lint/client/api/IssueRegistry.java | 4 +- .../android/tools/lint/client/api/JavaVisitor.java | 2 +- .../android/tools/lint/client/api/LintClient.java | 2 +- .../android/tools/lint/client/api/LintDriver.java | 40 +++++++++------ .../tools/lint/client/api/LintListener.java | 3 +- .../com/android/tools/lint/client/api/SdkInfo.java | 5 +- .../android/tools/lint/detector/api/Category.java | 2 +- .../tools/lint/detector/api/ClassContext.java | 6 ++- .../android/tools/lint/detector/api/Detector.java | 4 +- .../com/android/tools/lint/detector/api/Issue.java | 2 +- .../tools/lint/detector/api/JavaContext.java | 3 +- .../android/tools/lint/detector/api/Location.java | 4 +- .../android/tools/lint/detector/api/Severity.java | 11 ++-- .../tools/lint/checks/AccessibilityDetector.java | 5 +- .../lint/checks/AlwaysShowActionDetector.java | 12 ++--- .../com/android/tools/lint/checks/ApiDetector.java | 16 +++--- .../com/android/tools/lint/checks/ApiLookup.java | 2 +- .../tools/lint/checks/ArraySizeDetector.java | 15 ++---- .../tools/lint/checks/BuiltinIssueRegistry.java | 3 +- .../android/tools/lint/checks/ButtonDetector.java | 6 +-- .../tools/lint/checks/ChildCountDetector.java | 5 +- .../tools/lint/checks/ColorUsageDetector.java | 10 ++-- .../tools/lint/checks/DeprecationDetector.java | 7 +-- .../tools/lint/checks/DetectMissingPrefix.java | 5 +- .../tools/lint/checks/DuplicateIdDetector.java | 17 +++--- .../tools/lint/checks/ExtraTextDetector.java | 7 +-- .../tools/lint/checks/FieldGetterDetector.java | 7 +-- .../tools/lint/checks/FragmentDetector.java | 7 +-- .../tools/lint/checks/GridLayoutDetector.java | 5 +- .../android/tools/lint/checks/HandlerDetector.java | 7 +-- .../lint/checks/HardcodedDebugModeDetector.java | 7 +-- .../tools/lint/checks/HardcodedValuesDetector.java | 5 +- .../android/tools/lint/checks/IconDetector.java | 13 ++--- .../lint/checks/InefficientWeightDetector.java | 5 +- .../tools/lint/checks/JavaPerformanceDetector.java | 7 +-- .../tools/lint/checks/ManifestOrderDetector.java | 11 ++-- .../android/tools/lint/checks/MathDetector.java | 7 +-- .../lint/checks/MergeRootFrameLayoutDetector.java | 7 +-- .../tools/lint/checks/NamespaceDetector.java | 5 +- .../lint/checks/NestedScrollingWidgetDetector.java | 9 ++-- .../lint/checks/ObsoleteLayoutParamsDetector.java | 9 ++-- .../android/tools/lint/checks/OnClickDetector.java | 11 ++-- .../tools/lint/checks/OverdrawDetector.java | 17 +++--- .../tools/lint/checks/PrivateResourceDetector.java | 5 +- .../tools/lint/checks/ProguardDetector.java | 7 +-- .../android/tools/lint/checks/PxUsageDetector.java | 5 +- .../tools/lint/checks/RegistrationDetector.java | 9 ++-- .../tools/lint/checks/ScrollViewChildDetector.java | 10 ++-- .../android/tools/lint/checks/SdCardDetector.java | 7 +-- .../tools/lint/checks/SecurityDetector.java | 16 +++--- .../lint/checks/SetJavaScriptEnabledDetector.java | 14 ++--- .../tools/lint/checks/SharedPrefsDetector.java | 13 ++--- .../tools/lint/checks/StateListDetector.java | 7 +-- .../tools/lint/checks/StringFormatDetector.java | 19 +++---- .../tools/lint/checks/StyleCycleDetector.java | 7 +-- .../tools/lint/checks/TextFieldDetector.java | 5 +- .../tools/lint/checks/TextViewDetector.java | 5 +- .../android/tools/lint/checks/ToastDetector.java | 13 ++--- .../tools/lint/checks/TooManyViewsDetector.java | 9 ++-- .../tools/lint/checks/TranslationDetector.java | 19 +++---- .../tools/lint/checks/TypographyDetector.java | 9 ++-- .../tools/lint/checks/UnusedResourceDetector.java | 25 +++++---- .../lint/checks/UseCompoundDrawableDetector.java | 5 +- .../tools/lint/checks/UselessViewDetector.java | 5 +- .../android/tools/lint/checks/Utf8Detector.java | 5 +- .../tools/lint/checks/ViewConstructorDetector.java | 7 +-- .../tools/lint/checks/ViewTypeDetector.java | 13 +++-- .../android/tools/lint/checks/WrongIdDetector.java | 15 +++--- .../tools/lint/checks/WrongImportDetector.java | 5 +- .../android/ide/common/api/AbstractViewRule.java | 49 +++++++++--------- .../android/ide/common/api/IClientRulesEngine.java | 4 +- .../com/android/ide/common/api/IMenuCallback.java | 13 +++++ rule_api/src/com/android/ide/common/api/INode.java | 2 +- .../src/com/android/ide/common/api/RuleAction.java | 10 ++-- .../src/com/android/ide/common/api/Segment.java | 4 +- .../com/android/ide/common/api/SegmentType.java | 17 +++++- .../android/sdklib/internal/avd/AvdManager.java | 5 +- .../sdklib/internal/build/KeystoreHelper.java | 5 +- .../repository/archives/ArchiveInstaller.java | 5 +- .../internal/repository/packages/ToolPackage.java | 5 +- .../sdkuilib/internal/widgets/AvdSelector.java | 5 +- 166 files changed, 1117 insertions(+), 766 deletions(-) diff --git a/common/src/com/android/annotations/NonNull.java b/common/src/com/android/annotations/NonNull.java index e306a31..973ebb6 100644 --- a/common/src/com/android/annotations/NonNull.java +++ b/common/src/com/android/annotations/NonNull.java @@ -32,7 +32,7 @@ import java.lang.annotation.Target; * This is a marker annotation and it has no specific attributes. */ @Documented -@Retention(RetentionPolicy.SOURCE) +@Retention(RetentionPolicy.CLASS) @Target({METHOD,PARAMETER,LOCAL_VARIABLE,FIELD}) public @interface NonNull { } diff --git a/common/src/com/android/annotations/NonNullByDefault.java b/common/src/com/android/annotations/NonNullByDefault.java index 23903d1..3db891c 100644 --- a/common/src/com/android/annotations/NonNullByDefault.java +++ b/common/src/com/android/annotations/NonNullByDefault.java @@ -41,7 +41,7 @@ import java.lang.annotation.Target; * This is a marker annotation and it has no specific attributes. */ @Documented -@Retention(RetentionPolicy.SOURCE) +@Retention(RetentionPolicy.CLASS) @Target({PACKAGE, TYPE}) public @interface NonNullByDefault { } diff --git a/common/src/com/android/annotations/Nullable.java b/common/src/com/android/annotations/Nullable.java index 376c1f6..d9c3861 100755 --- a/common/src/com/android/annotations/Nullable.java +++ b/common/src/com/android/annotations/Nullable.java @@ -43,7 +43,7 @@ import java.lang.annotation.Target; * This is a marker annotation and it has no specific attributes. */ @Documented -@Retention(RetentionPolicy.SOURCE) +@Retention(RetentionPolicy.CLASS) @Target({METHOD, PARAMETER, LOCAL_VARIABLE, FIELD}) public @interface Nullable { } diff --git a/common/src/com/android/util/PositionXmlParser.java b/common/src/com/android/util/PositionXmlParser.java index 052348d..6eee96f 100644 --- a/common/src/com/android/util/PositionXmlParser.java +++ b/common/src/com/android/util/PositionXmlParser.java @@ -677,7 +677,7 @@ public class PositionXmlParser { } @Override - public void setEnd(Position end) { + public void setEnd(@NonNull Position end) { mEnd = end; } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java index 57406d5..d7adbae 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java @@ -16,11 +16,13 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_X; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_Y; import static com.android.ide.common.layout.LayoutConstants.VALUE_N_DP; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -45,7 +47,7 @@ import java.util.Map; public class AbsoluteLayoutRule extends BaseLayoutRule { @Override - public List getSelectionHint(INode parentNode, INode childNode) { + public List getSelectionHint(@NonNull INode parentNode, @NonNull INode childNode) { List infos = new ArrayList(2); infos.add("AbsoluteLayout is deprecated."); infos.add("Use other layouts instead."); @@ -56,8 +58,8 @@ public class AbsoluteLayoutRule extends BaseLayoutRule { // The AbsoluteLayout accepts any drag'n'drop anywhere on its surface. @Override - public DropFeedback onDropEnter(INode targetNode, Object targetView, - final IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, + final @Nullable IDragElement[] elements) { if (elements.length == 0) { return null; @@ -65,7 +67,8 @@ public class AbsoluteLayoutRule extends BaseLayoutRule { DropFeedback df = new DropFeedback(null, new IFeedbackPainter() { @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, + @NonNull DropFeedback feedback) { // Paint callback for the AbsoluteLayout. // This is called by the canvas when a draw is needed. drawFeedback(gc, node, elements, feedback); @@ -128,8 +131,8 @@ public class AbsoluteLayoutRule extends BaseLayoutRule { } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { // Update the data used by the DropFeedback.paintCallback above. feedback.userData = p; feedback.requestPaint = true; @@ -138,13 +141,14 @@ public class AbsoluteLayoutRule extends BaseLayoutRule { } @Override - public void onDropLeave(INode targetNode, IDragElement[] elements, DropFeedback feedback) { + public void onDropLeave(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback) { // Nothing to do. } @Override - public void onDropped(final INode targetNode, final IDragElement[] elements, - final DropFeedback feedback, final Point p) { + public void onDropped(final @NonNull INode targetNode, final @NonNull IDragElement[] elements, + final @Nullable DropFeedback feedback, final @NonNull Point p) { final Rect b = targetNode.getBounds(); if (!b.isValid()) { @@ -158,7 +162,7 @@ public class AbsoluteLayoutRule extends BaseLayoutRule { targetNode.editXml("Add elements to AbsoluteLayout", new INodeHandler() { @Override - public void handle(INode node) { + public void handle(@NonNull INode node) { boolean first = true; Point offset = null; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AdapterViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AdapterViewRule.java index 5b23e34..28f5fc9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AdapterViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AdapterViewRule.java @@ -15,6 +15,8 @@ */ package com.android.ide.common.layout; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -27,12 +29,14 @@ import com.android.ide.common.api.Rect; /** Rule for AdapterView subclasses that don't have more specific rules */ public class AdapterViewRule extends BaseLayoutRule { @Override - public DropFeedback onDropEnter(INode targetNode, Object targetView, IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, + @Nullable IDragElement[] elements) { // You are not allowed to insert children into AdapterViews; you must // use the dedicated addView methods etc dynamically DropFeedback dropFeedback = new DropFeedback(null, new IFeedbackPainter() { @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, + @NonNull DropFeedback feedback) { Rect b = node.getBounds(); if (b.isValid()) { gc.useStyle(DrawingStyle.DROP_RECIPIENT); @@ -50,8 +54,8 @@ public class AdapterViewRule extends BaseLayoutRule { } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { feedback.invalidTarget = true; return feedback; } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseLayoutRule.java index 581788b..6f76b51 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseLayoutRule.java @@ -16,7 +16,6 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_ABOVE; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_ALIGN_BASELINE; @@ -52,7 +51,10 @@ import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_Y; import static com.android.ide.common.layout.LayoutConstants.VALUE_FILL_PARENT; import static com.android.ide.common.layout.LayoutConstants.VALUE_MATCH_PARENT; import static com.android.ide.common.layout.LayoutConstants.VALUE_WRAP_CONTENT; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IAttributeInfo; @@ -114,11 +116,13 @@ public class BaseLayoutRule extends BaseViewRule { IMenuCallback actionCallback = new IMenuCallback() { @Override - public void action(RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action(@NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + final @Nullable Boolean newValue) { parentNode.editXml("Change Margins", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { String uri = ANDROID_URI; String all = first.getStringAttr(uri, ATTR_LAYOUT_MARGIN); String left = first.getStringAttr(uri, ATTR_LAYOUT_MARGIN_LEFT); @@ -154,8 +158,8 @@ public class BaseLayoutRule extends BaseViewRule { final INode first = targets.get(0); ChoiceProvider provider = new ChoiceProvider() { @Override - public void addChoices(List titles, List iconUrls, - List ids) { + public void addChoices(@NonNull List titles, @NonNull List iconUrls, + @NonNull List ids) { IAttributeInfo info = first.getAttributeInfo(ANDROID_URI, attributeName); if (info != null) { // Generate list of possible gravity value constants @@ -180,8 +184,10 @@ public class BaseLayoutRule extends BaseViewRule { } @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); final List targets = children == null || children.size() == 0 ? @@ -192,8 +198,11 @@ public class BaseLayoutRule extends BaseViewRule { // Shared action callback IMenuCallback actionCallback = new IMenuCallback() { @Override - public void action(RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action( + @NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + final @Nullable Boolean newValue) { final String actionId = action.getId(); final String undoLabel; if (actionId.equals(ACTION_FILL_WIDTH)) { @@ -205,7 +214,7 @@ public class BaseLayoutRule extends BaseViewRule { } parentNode.editXml(undoLabel, new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { String attribute = actionId.equals(ACTION_FILL_WIDTH) ? ATTR_LAYOUT_WIDTH : ATTR_LAYOUT_HEIGHT; String value; @@ -244,7 +253,8 @@ public class BaseLayoutRule extends BaseViewRule { * Derived layouts should override this behavior if not appropriate. */ @Override - public void onPaste(INode targetNode, Object targetView, IDragElement[] elements) { + public void onPaste(@NonNull INode targetNode, @Nullable Object targetView, + @NonNull IDragElement[] elements) { DropFeedback feedback = onDropEnter(targetNode, targetView, elements); if (feedback != null) { Point p = targetNode.getBounds().getTopLeft(); @@ -576,7 +586,7 @@ public class BaseLayoutRule extends BaseViewRule { targetNode.editXml("Insert Elements", new INodeHandler() { @Override - public void handle(INode node) { + public void handle(@NonNull INode node) { // Now write the new elements. int insertPos = initialInsertPos; for (IDragElement element : elements) { @@ -606,9 +616,9 @@ public class BaseLayoutRule extends BaseViewRule { } @Override - public DropFeedback onResizeBegin(INode child, INode parent, - SegmentType horizontalEdge, SegmentType verticalEdge, - Object childView, Object parentView) { + public DropFeedback onResizeBegin(@NonNull INode child, @NonNull INode parent, + @Nullable SegmentType horizontalEdge, @Nullable SegmentType verticalEdge, + @Nullable Object childView, @Nullable Object parentView) { ResizeState state = createResizeState(parent, parentView, child); state.horizontalEdgeType = horizontalEdge; state.verticalEdgeType = verticalEdge; @@ -618,7 +628,8 @@ public class BaseLayoutRule extends BaseViewRule { Map sizes = mRulesEngine.measureChildren(parent, new IClientRulesEngine.AttributeFilter() { @Override - public String getAttribute(INode node, String namespace, String localName) { + public String getAttribute(@NonNull INode node, @Nullable String namespace, + @NonNull String localName) { // Change attributes to wrap_content if (ATTR_LAYOUT_WIDTH.equals(localName) && SdkConstants.NS_RESOURCES.equals(namespace)) { @@ -638,7 +649,8 @@ public class BaseLayoutRule extends BaseViewRule { return new DropFeedback(state, new IFeedbackPainter() { @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, + @NonNull DropFeedback feedback) { ResizeState resizeState = (ResizeState) feedback.userData; if (resizeState != null && resizeState.bounds != null) { paintResizeFeedback(gc, node, resizeState); @@ -737,8 +749,8 @@ public class BaseLayoutRule extends BaseViewRule { } @Override - public void onResizeUpdate(DropFeedback feedback, INode child, INode parent, - Rect newBounds, int modifierMask) { + public void onResizeUpdate(@Nullable DropFeedback feedback, @NonNull INode child, + @NonNull INode parent, @NonNull Rect newBounds, int modifierMask) { ResizeState state = (ResizeState) feedback.userData; state.bounds = newBounds; state.modifierMask = modifierMask; @@ -799,14 +811,14 @@ public class BaseLayoutRule extends BaseViewRule { } @Override - public void onResizeEnd(DropFeedback feedback, INode child, final INode parent, - final Rect newBounds) { + public void onResizeEnd(@Nullable DropFeedback feedback, @NonNull INode child, + final @NonNull INode parent, final @NonNull Rect newBounds) { final Rect oldBounds = child.getBounds(); if (oldBounds.w != newBounds.w || oldBounds.h != newBounds.h) { final ResizeState state = (ResizeState) feedback.userData; child.editXml("Resize", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { setNewSizeBounds(state, n, parent, oldBounds, newBounds, state.horizontalEdgeType, state.verticalEdgeType); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseViewRule.java index 507bed5..4cc5f5e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/BaseViewRule.java @@ -94,7 +94,7 @@ public class BaseViewRule extends AbstractViewRule { new HashMap>(); @Override - public boolean onInitialize(String fqcn, IClientRulesEngine engine) { + public boolean onInitialize(@NonNull String fqcn, @NonNull IClientRulesEngine engine) { this.mRulesEngine = engine; // This base rule can handle any class so we don't need to filter on @@ -124,7 +124,8 @@ public class BaseViewRule extends AbstractViewRule { * - List of all other simple toggle attributes. */ @Override - public void addContextMenuActions(List actions, final INode selectedNode) { + public void addContextMenuActions(@NonNull List actions, + final @NonNull INode selectedNode) { String width = null; String currentWidth = selectedNode.getStringAttr(ANDROID_URI, ATTR_LAYOUT_WIDTH); @@ -155,9 +156,9 @@ public class BaseViewRule extends AbstractViewRule { final IMenuCallback onChange = new IMenuCallback() { @Override public void action( - final RuleAction action, - final List selectedNodes, - final String valueId, final Boolean newValue) { + final @NonNull RuleAction action, + final @NonNull List selectedNodes, + final @Nullable String valueId, final @Nullable Boolean newValue) { String fullActionId = action.getId(); boolean isProp = fullActionId.startsWith(PROP_PREFIX); final String actionId = isProp ? @@ -425,14 +426,14 @@ public class BaseViewRule extends AbstractViewRule { onChange /*callback*/, null /*icon*/, 50, true /*supportsMultipleNodes*/, new ActionProvider() { @Override - public List getNestedActions(INode node) { + public @NonNull List getNestedActions(@NonNull INode node) { List propertyActionTypes = new ArrayList(); propertyActionTypes.add(RuleAction.createChoices( "recent", "Recent", //$NON-NLS-1$ onChange /*callback*/, null /*icon*/, 10, true /*supportsMultipleNodes*/, new ActionProvider() { @Override - public List getNestedActions(INode n) { + public @NonNull List getNestedActions(@NonNull INode n) { List propertyActions = new ArrayList(); addRecentPropertyActions(propertyActions, n, onChange); return propertyActions; @@ -449,7 +450,7 @@ public class BaseViewRule extends AbstractViewRule { onChange /*callback*/, null /*icon*/, 60, true /*supportsMultipleNodes*/, new ActionProvider() { @Override - public List getNestedActions(INode n) { + public @NonNull List getNestedActions(@NonNull INode n) { List propertyActions = new ArrayList(); addPropertyActions(propertyActions, n, onChange, null, true); return propertyActions; @@ -463,7 +464,7 @@ public class BaseViewRule extends AbstractViewRule { onChange /*callback*/, null /*icon*/, 80, true /*supportsMultipleNodes*/, new ActionProvider() { @Override - public List getNestedActions(INode n) { + public @NonNull List getNestedActions(@NonNull INode n) { List propertyActions = new ArrayList(); addPropertyActions(propertyActions, n, onChange, null, false); return propertyActions; @@ -527,7 +528,7 @@ public class BaseViewRule extends AbstractViewRule { onChange /*callback*/, null /*icon*/, sortPriority++, true /*supportsMultipleNodes*/, new ActionProvider() { @Override - public List getNestedActions(INode n) { + public @NonNull List getNestedActions(@NonNull INode n) { List propertyActions = new ArrayList(); addPropertyActions(propertyActions, n, onChange, definedBy, false); return propertyActions; @@ -744,7 +745,8 @@ public class BaseViewRule extends AbstractViewRule { */ private static ChoiceProvider BOOLEAN_CHOICE_PROVIDER = new ChoiceProvider() { @Override - public void addChoices(List titles, List iconUrls, List ids) { + public void addChoices(@NonNull List titles, @NonNull List iconUrls, + @NonNull List ids) { titles.add("True"); ids.add(TRUE_ID); @@ -772,7 +774,8 @@ public class BaseViewRule extends AbstractViewRule { } @Override - public void addChoices(List titles, List iconUrls, List ids) { + public void addChoices(@NonNull List titles, @NonNull List iconUrls, + @NonNull List ids) { for (Entry entry : mProperty.getChoices().entrySet()) { ids.add(entry.getKey()); titles.add(entry.getValue()); @@ -888,7 +891,8 @@ public class BaseViewRule extends AbstractViewRule { * an indication of where to paste. */ @Override - public void onPaste(INode targetNode, Object targetView, IDragElement[] elements) { + public void onPaste(@NonNull INode targetNode, @Nullable Object targetView, + @NonNull IDragElement[] elements) { // INode parent = targetNode.getParent(); if (parent != null) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/CalendarViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/CalendarViewRule.java index c580d8a..c509b95 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/CalendarViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/CalendarViewRule.java @@ -16,10 +16,11 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -30,7 +31,8 @@ import com.android.ide.common.api.InsertType; public class CalendarViewRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); // CalendarViews need a lot of space, and the wrapping doesn't seem to work diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/DialerFilterRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/DialerFilterRule.java index e7a129b..86855ae 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/DialerFilterRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/DialerFilterRule.java @@ -16,13 +16,14 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_BELOW; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; import static com.android.ide.common.layout.LayoutConstants.ATTR_TEXT; import static com.android.ide.common.layout.LayoutConstants.FQCN_EDIT_TEXT; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -33,7 +34,8 @@ import com.android.ide.common.api.InsertType; public class DialerFilterRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); // A DialerFilter requires a couple of nested EditTexts with fixed ids: diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/EditTextRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/EditTextRule.java index 875756b..dc60086 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/EditTextRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/EditTextRule.java @@ -16,10 +16,12 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_EMS; import static com.android.ide.eclipse.adt.internal.editors.layout.descriptors.LayoutDescriptors.REQUEST_FOCUS; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IMenuCallback; import com.android.ide.common.api.INode; import com.android.ide.common.api.INodeHandler; @@ -35,7 +37,8 @@ import java.util.List; public class EditTextRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (parent != null) { @@ -57,7 +60,8 @@ public class EditTextRule extends BaseViewRule { * Adds a "Request Focus" menu item. */ @Override - public void addContextMenuActions(List actions, final INode selectedNode) { + public void addContextMenuActions(@NonNull List actions, + final @NonNull INode selectedNode) { super.addContextMenuActions(actions, selectedNode); final boolean hasFocus = hasFocus(selectedNode); @@ -65,11 +69,14 @@ public class EditTextRule extends BaseViewRule { IMenuCallback onChange = new IMenuCallback() { @Override - public void action(RuleAction menuAction, List selectedNodes, - String valueId, Boolean newValue) { + public void action( + @NonNull RuleAction menuAction, + @NonNull List selectedNodes, + @Nullable String valueId, + @Nullable Boolean newValue) { selectedNode.editXml(label, new INodeHandler() { @Override - public void handle(INode node) { + public void handle(@NonNull INode node) { INode focus = findFocus(findRoot(node)); if (focus != null && focus.getParent() != null) { focus.getParent().removeChild(focus); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FragmentRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FragmentRule.java index fdef082..533795d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FragmentRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FragmentRule.java @@ -15,9 +15,10 @@ */ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_NAME; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -27,7 +28,8 @@ import com.android.ide.common.api.InsertType; */ public class FragmentRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { // When dropping a fragment tag, ask the user which layout to include. if (insertType == InsertType.CREATE) { // NOT InsertType.CREATE_PREVIEW String fqcn = mRulesEngine.displayFragmentSourceInput(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FrameLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FrameLayoutRule.java index 8a93fef..bbe4f1d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FrameLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/FrameLayoutRule.java @@ -16,11 +16,13 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_GRAVITY; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -50,15 +52,16 @@ public class FrameLayoutRule extends BaseLayoutRule { // The FrameLayout accepts any drag'n'drop anywhere on its surface. @Override - public DropFeedback onDropEnter(INode targetNode, Object targetView, - final IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, + final @Nullable IDragElement[] elements) { if (elements.length == 0) { return null; } return new DropFeedback(null, new IFeedbackPainter() { @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, + @NonNull DropFeedback feedback) { drawFeedback(gc, node, elements, feedback); } }); @@ -113,21 +116,22 @@ public class FrameLayoutRule extends BaseLayoutRule { } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { feedback.userData = p; feedback.requestPaint = true; return feedback; } @Override - public void onDropLeave(INode targetNode, IDragElement[] elements, DropFeedback feedback) { + public void onDropLeave(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback) { // ignore } @Override - public void onDropped(final INode targetNode, final IDragElement[] elements, - final DropFeedback feedback, final Point p) { + public void onDropped(final @NonNull INode targetNode, final @NonNull IDragElement[] elements, + final @Nullable DropFeedback feedback, final @NonNull Point p) { Rect b = targetNode.getBounds(); if (!b.isValid()) { return; @@ -141,7 +145,7 @@ public class FrameLayoutRule extends BaseLayoutRule { targetNode.editXml("Add elements to FrameLayout", new INodeHandler() { @Override - public void handle(INode node) { + public void handle(@NonNull INode node) { // Now write the new elements. for (IDragElement element : elements) { @@ -159,8 +163,10 @@ public class FrameLayoutRule extends BaseLayoutRule { } @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); actions.add(RuleAction.createSeparator(25)); actions.add(createMarginAction(parentNode, children)); @@ -170,7 +176,8 @@ public class FrameLayoutRule extends BaseLayoutRule { } @Override - public void onChildInserted(INode node, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { // Look at the fill preferences and fill embedded layouts etc String fqcn = node.getFqcn(); IViewMetadata metadata = mRulesEngine.getMetadata(fqcn); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridLayoutRule.java index c51d229..a737251 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridLayoutRule.java @@ -16,7 +16,6 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_COLUMN; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_GRAVITY; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_ROW; @@ -30,7 +29,10 @@ import static com.android.ide.common.layout.LayoutConstants.GRAVITY_VALUE_FILL_V import static com.android.ide.common.layout.LayoutConstants.GRAVITY_VALUE_LEFT; import static com.android.ide.common.layout.LayoutConstants.VALUE_HORIZONTAL; import static com.android.ide.common.layout.LayoutConstants.VALUE_TRUE; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -148,8 +150,10 @@ public class GridLayoutRule extends BaseLayoutRule { } @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); String namespace = getNamespace(parentNode); @@ -174,11 +178,14 @@ public class GridLayoutRule extends BaseLayoutRule { IMenuCallback actionCallback = new IMenuCallback() { @Override - public void action(final RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action( + final @NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + final @Nullable Boolean newValue) { parentNode.editXml("Add/Remove Row/Column", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { String id = action.getId(); if (id.equals(ACTION_SHOW_STRUCTURE)) { sShowStructure = !sShowStructure; @@ -268,15 +275,16 @@ public class GridLayoutRule extends BaseLayoutRule { } @Override - public DropFeedback onDropEnter(INode targetNode, Object targetView, IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, + @Nullable IDragElement[] elements) { GridDropHandler userData = new GridDropHandler(this, targetNode, targetView); IFeedbackPainter painter = GridLayoutPainter.createDropFeedbackPainter(this, elements); return new DropFeedback(userData, painter); } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { feedback.requestPaint = true; GridDropHandler handler = (GridDropHandler) feedback.userData; @@ -286,8 +294,8 @@ public class GridLayoutRule extends BaseLayoutRule { } @Override - public void onDropped(final INode targetNode, final IDragElement[] elements, - DropFeedback feedback, Point p) { + public void onDropped(final @NonNull INode targetNode, final @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { Rect b = targetNode.getBounds(); if (!b.isValid()) { return; @@ -319,7 +327,8 @@ public class GridLayoutRule extends BaseLayoutRule { } @Override - public void onChildInserted(INode node, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { if (insertType == InsertType.MOVE_WITHIN) { // Don't adjust widths/heights/weights when just moving within a single layout return; @@ -386,7 +395,7 @@ public class GridLayoutRule extends BaseLayoutRule { } @Override - public void onRemovingChildren(List deleted, INode parent) { + public void onRemovingChildren(@NonNull List deleted, @NonNull INode parent) { super.onRemovingChildren(deleted, parent); // Attempt to clean up spacer objects for any newly-empty rows or columns @@ -521,8 +530,8 @@ public class GridLayoutRule extends BaseLayoutRule { } @Override - public void paintSelectionFeedback(IGraphics graphics, INode parentNode, - List childNodes, Object view) { + public void paintSelectionFeedback(@NonNull IGraphics graphics, @NonNull INode parentNode, + @NonNull List childNodes, @Nullable Object view) { super.paintSelectionFeedback(graphics, parentNode, childNodes, view); if (sShowStructure) { @@ -569,7 +578,10 @@ public class GridLayoutRule extends BaseLayoutRule { * approach #3 above. */ @Override - public void onPaste(INode targetNode, Object targetView, IDragElement[] elements) { + public void onPaste( + @NonNull INode targetNode, + @Nullable Object targetView, + @NonNull IDragElement[] elements) { DropFeedback feedback = onDropEnter(targetNode, targetView, elements); if (feedback != null) { Rect b = targetNode.getBounds(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridViewRule.java index bc3de5e..7eb3474 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/GridViewRule.java @@ -16,10 +16,11 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; import static com.android.ide.common.layout.LayoutConstants.ATTR_NUM_COLUMNS; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -30,7 +31,8 @@ import com.android.ide.common.api.InsertType; public class GridViewRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); node.setAttribute(ANDROID_URI, ATTR_LAYOUT_WIDTH, getFillParentValueName()); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/HorizontalScrollViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/HorizontalScrollViewRule.java index b2ea435..e7be263 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/HorizontalScrollViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/HorizontalScrollViewRule.java @@ -16,13 +16,15 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; import static com.android.ide.common.layout.LayoutConstants.ATTR_ORIENTATION; import static com.android.ide.common.layout.LayoutConstants.FQCN_LINEAR_LAYOUT; import static com.android.ide.common.layout.LayoutConstants.VALUE_HORIZONTAL; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -39,7 +41,8 @@ import com.android.ide.common.api.Rect; public class HorizontalScrollViewRule extends FrameLayoutRule { @Override - public void onChildInserted(INode child, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode child, @NonNull INode parent, + @NonNull InsertType insertType) { super.onChildInserted(child, parent, insertType); // The child of the ScrollView should fill in both directions @@ -49,7 +52,8 @@ public class HorizontalScrollViewRule extends FrameLayoutRule { } @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { @@ -62,8 +66,8 @@ public class HorizontalScrollViewRule extends FrameLayoutRule { } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { DropFeedback f = super.onDropMove(targetNode, elements, feedback, p); // HorizontalScrollViews only allow a single child diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IgnoredLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IgnoredLayoutRule.java index 999c6a0..3a65a86 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IgnoredLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IgnoredLayoutRule.java @@ -16,6 +16,8 @@ package com.android.ide.common.layout; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; import com.android.ide.common.api.INode; @@ -32,7 +34,8 @@ import com.android.ide.common.api.INode; */ public abstract class IgnoredLayoutRule extends BaseLayoutRule { @Override - public DropFeedback onDropEnter(INode targetNode, Object targetView, IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, + @Nullable IDragElement[] elements) { // Do nothing; this layout rule corresponds to a layout that // should not be handled as a layout by the visual editor - usually // because some widget is extending a layout for implementation purposes diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageButtonRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageButtonRule.java index e1afb56..364a3b6 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageButtonRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageButtonRule.java @@ -16,9 +16,10 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_SRC; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -29,7 +30,8 @@ import com.android.ide.common.api.InsertType; public class ImageButtonRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); // When dropping an include tag, ask the user which layout to include. diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageViewRule.java index b255c14..08ef17c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ImageViewRule.java @@ -16,9 +16,10 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_SRC; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -29,7 +30,8 @@ import com.android.ide.common.api.InsertType; public class ImageViewRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); // When dropping an include tag, ask the user which layout to include. diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IncludeRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IncludeRule.java index a451257..978455a 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IncludeRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/IncludeRule.java @@ -17,6 +17,7 @@ package com.android.ide.common.layout; import static com.android.ide.eclipse.adt.internal.editors.layout.descriptors.LayoutDescriptors.ATTR_LAYOUT; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -26,7 +27,8 @@ import com.android.ide.common.api.InsertType; */ public class IncludeRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { // When dropping an include tag, ask the user which layout to include. if (insertType == InsertType.CREATE) { // NOT InsertType.CREATE_PREVIEW String include = mRulesEngine.displayIncludeSourceInput(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java index 8f8ea02..04373e1 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java @@ -16,7 +16,6 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_BASELINE_ALIGNED; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_GRAVITY; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; @@ -29,7 +28,10 @@ import static com.android.ide.common.layout.LayoutConstants.VALUE_HORIZONTAL; import static com.android.ide.common.layout.LayoutConstants.VALUE_VERTICAL; import static com.android.ide.common.layout.LayoutConstants.VALUE_WRAP_CONTENT; import static com.android.ide.common.layout.LayoutConstants.VALUE_ZERO_DP; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.annotations.VisibleForTesting; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; @@ -123,8 +125,10 @@ public class LinearLayoutRule extends BaseLayoutRule { } @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); if (supportsOrientation()) { Choices action = RuleAction.createChoices( @@ -146,7 +150,7 @@ public class LinearLayoutRule extends BaseLayoutRule { if (!isVertical(parentNode)) { String current = parentNode.getStringAttr(ANDROID_URI, ATTR_BASELINE_ALIGNED); boolean isAligned = current == null || Boolean.valueOf(current); - actions.add(RuleAction.createToggle(null, "Toggle Baseline Alignment", + actions.add(RuleAction.createToggle(ACTION_BASELINE, "Toggle Baseline Alignment", isAligned, new PropertyCallback(Collections.singletonList(parentNode), "Change Baseline Alignment", @@ -167,11 +171,14 @@ public class LinearLayoutRule extends BaseLayoutRule { // Weights IMenuCallback actionCallback = new IMenuCallback() { @Override - public void action(final RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action( + final @NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + final @Nullable Boolean newValue) { parentNode.editXml("Change Weight", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { String id = action.getId(); if (id.equals(ACTION_WEIGHT)) { String weight = @@ -266,8 +273,8 @@ public class LinearLayoutRule extends BaseLayoutRule { // ==== Drag'n'drop support ==== @Override - public DropFeedback onDropEnter(final INode targetNode, Object targetView, - final IDragElement[] elements) { + public DropFeedback onDropEnter(final @NonNull INode targetNode, @Nullable Object targetView, + final @Nullable IDragElement[] elements) { if (elements.length == 0) { return null; @@ -345,7 +352,8 @@ public class LinearLayoutRule extends BaseLayoutRule { new IFeedbackPainter() { @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, + @NonNull DropFeedback feedback) { // Paint callback for the LinearLayout. This is called // by the canvas when a draw is needed. drawFeedback(gc, node, elements, feedback); @@ -466,8 +474,8 @@ public class LinearLayoutRule extends BaseLayoutRule { } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { Rect b = targetNode.getBounds(); if (!b.isValid()) { return feedback; @@ -532,13 +540,14 @@ public class LinearLayoutRule extends BaseLayoutRule { } @Override - public void onDropLeave(INode targetNode, IDragElement[] elements, DropFeedback feedback) { + public void onDropLeave(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback) { // ignore } @Override - public void onDropped(final INode targetNode, final IDragElement[] elements, - final DropFeedback feedback, final Point p) { + public void onDropped(final @NonNull INode targetNode, final @NonNull IDragElement[] elements, + final @Nullable DropFeedback feedback, final @NonNull Point p) { LinearDropData data = (LinearDropData) feedback.userData; final int initialInsertPos = data.getInsertPos(); @@ -546,7 +555,8 @@ public class LinearLayoutRule extends BaseLayoutRule { } @Override - public void onChildInserted(INode node, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { if (insertType == InsertType.MOVE_WITHIN) { // Don't adjust widths/heights/weights when just moving within a single // LinearLayout @@ -775,7 +785,8 @@ public class LinearLayoutRule extends BaseLayoutRule { unweightedSizes = mRulesEngine.measureChildren(layout, new IClientRulesEngine.AttributeFilter() { @Override - public String getAttribute(INode n, String namespace, String localName) { + public String getAttribute(@NonNull INode n, @Nullable String namespace, + @NonNull String localName) { // Clear out layout weights; we need to measure the unweighted sizes // of the children if (ATTR_LAYOUT_WEIGHT.equals(localName) diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ListViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ListViewRule.java index 7420714..4088ab8 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ListViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ListViewRule.java @@ -16,9 +16,10 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -32,7 +33,8 @@ import com.android.ide.common.api.InsertType; public class ListViewRule extends AdapterViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); node.setAttribute(ANDROID_URI, ATTR_LAYOUT_WIDTH, getFillParentValueName()); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MapViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MapViewRule.java index b6d0ba2..c2e78a4 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MapViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MapViewRule.java @@ -18,6 +18,7 @@ package com.android.ide.common.layout; import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -31,7 +32,8 @@ import com.android.ide.common.api.InsertType; public class MapViewRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MergeRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MergeRule.java index 12358f9..9cef9c4 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MergeRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/MergeRule.java @@ -16,6 +16,7 @@ package com.android.ide.common.layout; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.RuleAction; @@ -29,7 +30,8 @@ public class MergeRule extends FrameLayoutRule { // on top of each other at (0,0) @Override - public void addContextMenuActions(List actions, final INode selectedNode) { + public void addContextMenuActions(@NonNull List actions, + final @NonNull INode selectedNode) { // Deliberately ignore super.getContextMenu(); we don't want to attempt to list // properties for the tag } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertyCallback.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertyCallback.java index ac1635c..da2614e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertyCallback.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertyCallback.java @@ -16,6 +16,8 @@ package com.android.ide.common.layout; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IMenuCallback; import com.android.ide.common.api.INode; import com.android.ide.common.api.INodeHandler; @@ -54,8 +56,8 @@ public class PropertyCallback implements IMenuCallback { // ---- Implements IMenuCallback ---- @Override - public void action(RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action(@NonNull RuleAction action, @NonNull List selectedNodes, + final @Nullable String valueId, final @Nullable Boolean newValue) { if (mTargetNodes != null && mTargetNodes.size() > 0) { selectedNodes = mTargetNodes; } @@ -65,7 +67,7 @@ public class PropertyCallback implements IMenuCallback { final List nodes = selectedNodes; selectedNodes.get(0).editXml(mUndoLabel, new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { for (INode targetNode : nodes) { if (valueId != null) { targetNode.setAttribute(mUri, mAttribute, valueId); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertySettingNodeHandler.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertySettingNodeHandler.java index ad3ddad..13c8842 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertySettingNodeHandler.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/PropertySettingNodeHandler.java @@ -15,6 +15,7 @@ */ package com.android.ide.common.layout; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.INodeHandler; @@ -35,7 +36,7 @@ class PropertySettingNodeHandler implements INodeHandler { } @Override - public void handle(INode node) { + public void handle(@NonNull INode node) { node.setAttribute(mNamespaceUri, mAttribute, mValue); } } \ No newline at end of file diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/QuickContactBadgeRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/QuickContactBadgeRule.java index f6372fd..0164794 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/QuickContactBadgeRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/QuickContactBadgeRule.java @@ -15,6 +15,7 @@ */ package com.android.ide.common.layout; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -24,7 +25,8 @@ import com.android.ide.common.api.InsertType; */ public class QuickContactBadgeRule extends ImageViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { // Deliberately override onCreate such that we don't populate a default // image; at design time layoutlib will supply the system default contacts // image. diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RadioGroupRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RadioGroupRule.java index 280019e..5ae0e92 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RadioGroupRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RadioGroupRule.java @@ -15,11 +15,12 @@ */ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_CHECKED; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; import static com.android.ide.common.layout.LayoutConstants.VALUE_TRUE; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -30,7 +31,8 @@ import com.android.ide.common.api.InsertType; */ public class RadioGroupRule extends LinearLayoutRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RelativeLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RelativeLayoutRule.java index f587bef..e9cd5d5 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RelativeLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/RelativeLayoutRule.java @@ -16,7 +16,6 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_GRAVITY; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_ABOVE; @@ -40,7 +39,10 @@ import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_TO_RIGHT import static com.android.ide.common.layout.LayoutConstants.ID_PREFIX; import static com.android.ide.common.layout.LayoutConstants.NEW_ID_PREFIX; import static com.android.ide.common.layout.LayoutConstants.VALUE_TRUE; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; import com.android.ide.common.api.IGraphics; @@ -93,7 +95,7 @@ public class RelativeLayoutRule extends BaseLayoutRule { // ==== Selection ==== @Override - public List getSelectionHint(INode parentNode, INode childNode) { + public List getSelectionHint(@NonNull INode parentNode, @NonNull INode childNode) { List infos = new ArrayList(18); addAttr(ATTR_LAYOUT_ABOVE, childNode, infos); addAttr(ATTR_LAYOUT_BELOW, childNode, infos); @@ -131,8 +133,8 @@ public class RelativeLayoutRule extends BaseLayoutRule { } @Override - public void paintSelectionFeedback(IGraphics graphics, INode parentNode, - List childNodes, Object view) { + public void paintSelectionFeedback(@NonNull IGraphics graphics, @NonNull INode parentNode, + @NonNull List childNodes, @Nullable Object view) { super.paintSelectionFeedback(graphics, parentNode, childNodes, view); boolean showDependents = true; @@ -150,14 +152,15 @@ public class RelativeLayoutRule extends BaseLayoutRule { // ==== Drag'n'drop support ==== @Override - public DropFeedback onDropEnter(INode targetNode, Object targetView, IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, + @Nullable IDragElement[] elements) { return new DropFeedback(new MoveHandler(targetNode, elements, mRulesEngine), new GuidelinePainter()); } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { if (elements == null || elements.length == 0) { return null; } @@ -174,12 +177,13 @@ public class RelativeLayoutRule extends BaseLayoutRule { } @Override - public void onDropLeave(INode targetNode, IDragElement[] elements, DropFeedback feedback) { + public void onDropLeave(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback) { } @Override - public void onDropped(final INode targetNode, final IDragElement[] elements, - final DropFeedback feedback, final Point p) { + public void onDropped(final @NonNull INode targetNode, final @NonNull IDragElement[] elements, + final @Nullable DropFeedback feedback, final @NonNull Point p) { final MoveHandler state = (MoveHandler) feedback.userData; final Map> idMap = getDropIdMap(targetNode, elements, @@ -187,7 +191,7 @@ public class RelativeLayoutRule extends BaseLayoutRule { targetNode.editXml("Dropped", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { int index = -1; // Remove cycles @@ -235,7 +239,8 @@ public class RelativeLayoutRule extends BaseLayoutRule { } @Override - public void onChildInserted(INode node, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { // TODO: Handle more generically some way to ensure that widgets with no // intrinsic size get some minimum size until they are attached on multiple // opposing sides. @@ -246,7 +251,7 @@ public class RelativeLayoutRule extends BaseLayoutRule { } @Override - public void onRemovingChildren(List deleted, INode parent) { + public void onRemovingChildren(@NonNull List deleted, @NonNull INode parent) { super.onRemovingChildren(deleted, parent); // Remove any attachments pointing to the deleted nodes. @@ -286,29 +291,30 @@ public class RelativeLayoutRule extends BaseLayoutRule { // ==== Resize Support ==== @Override - public DropFeedback onResizeBegin(INode child, INode parent, - SegmentType horizontalEdgeType, SegmentType verticalEdgeType, - Object childView, Object parentView) { + public DropFeedback onResizeBegin(@NonNull INode child, @NonNull INode parent, + @Nullable SegmentType horizontalEdgeType, @Nullable SegmentType verticalEdgeType, + @Nullable Object childView, @Nullable Object parentView) { ResizeHandler state = new ResizeHandler(parent, child, mRulesEngine, horizontalEdgeType, verticalEdgeType); return new DropFeedback(state, new GuidelinePainter()); } @Override - public void onResizeUpdate(DropFeedback feedback, INode child, INode parent, Rect newBounds, + public void onResizeUpdate(@Nullable DropFeedback feedback, @NonNull INode child, + @NonNull INode parent, @NonNull Rect newBounds, int modifierMask) { ResizeHandler state = (ResizeHandler) feedback.userData; state.updateResize(feedback, child, newBounds, modifierMask); } @Override - public void onResizeEnd(DropFeedback feedback, INode child, INode parent, - final Rect newBounds) { + public void onResizeEnd(@Nullable DropFeedback feedback, @NonNull INode child, + @NonNull INode parent, final @NonNull Rect newBounds) { final ResizeHandler state = (ResizeHandler) feedback.userData; child.editXml("Resize", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { state.removeCycles(); state.applyConstraints(n); } @@ -318,8 +324,10 @@ public class RelativeLayoutRule extends BaseLayoutRule { // ==== Layout Actions Bar ==== @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); actions.add(createGravityAction(Collections.singletonList(parentNode), @@ -329,13 +337,15 @@ public class RelativeLayoutRule extends BaseLayoutRule { IMenuCallback callback = new IMenuCallback() { @Override - public void action(RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action(@NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + final @Nullable Boolean newValue) { final String id = action.getId(); if (id.equals(ACTION_CENTER_VERTICAL)|| id.equals(ACTION_CENTER_HORIZONTAL)) { parentNode.editXml("Center", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { if (id.equals(ACTION_CENTER_VERTICAL)) { for (INode child : children) { centerVertically(child); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ScrollViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ScrollViewRule.java index 2114f39..1296c76 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ScrollViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ScrollViewRule.java @@ -16,11 +16,13 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; import static com.android.ide.common.layout.LayoutConstants.FQCN_LINEAR_LAYOUT; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -37,7 +39,8 @@ import com.android.ide.common.api.Rect; public class ScrollViewRule extends FrameLayoutRule { @Override - public void onChildInserted(INode child, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode child, @NonNull INode parent, + @NonNull InsertType insertType) { super.onChildInserted(child, parent, insertType); // The child of the ScrollView should fill in both directions @@ -47,7 +50,8 @@ public class ScrollViewRule extends FrameLayoutRule { } @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { @@ -59,8 +63,8 @@ public class ScrollViewRule extends FrameLayoutRule { } @Override - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { DropFeedback f = super.onDropMove(targetNode, elements, feedback, p); // ScrollViews only allow a single child diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SeekBarRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SeekBarRule.java index c65dec9..7c26859 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SeekBarRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SeekBarRule.java @@ -16,9 +16,10 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -29,7 +30,8 @@ import com.android.ide.common.api.InsertType; public class SeekBarRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); // A SeekBar isn't useful with wrap_content because it packs itself down to diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SlidingDrawerRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SlidingDrawerRule.java index 73a5031..12ab448 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SlidingDrawerRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/SlidingDrawerRule.java @@ -15,14 +15,15 @@ */ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_CONTENT; import static com.android.ide.common.layout.LayoutConstants.ATTR_HANDLE; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; import static com.android.ide.common.layout.LayoutConstants.ATTR_TEXT; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -34,7 +35,8 @@ import com.android.ide.common.api.InsertType; public class SlidingDrawerRule extends BaseLayoutRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TabHostRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TabHostRule.java index 099a760..6724392 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TabHostRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TabHostRule.java @@ -16,7 +16,6 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; @@ -26,7 +25,9 @@ import static com.android.ide.common.layout.LayoutConstants.FQCN_LINEAR_LAYOUT; import static com.android.ide.common.layout.LayoutConstants.FQCN_TAB_WIDGET; import static com.android.ide.common.layout.LayoutConstants.VALUE_VERTICAL; import static com.android.ide.common.layout.LayoutConstants.VALUE_WRAP_CONTENT; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -40,7 +41,8 @@ public class TabHostRule extends IgnoredLayoutRule { // the child elements yourself, e.g. via addTab() etc. @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableLayoutRule.java index ceb562d..b2cb1e4 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableLayoutRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableLayoutRule.java @@ -17,6 +17,8 @@ package com.android.ide.common.layout; import static com.android.ide.common.layout.LayoutConstants.FQCN_TABLE_ROW; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IClientRulesEngine; import com.android.ide.common.api.IMenuCallback; @@ -60,7 +62,8 @@ public class TableLayoutRule extends LinearLayoutRule { } @Override - public void onChildInserted(INode child, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode child, @NonNull INode parent, + @NonNull InsertType insertType) { // Overridden to inhibit the setting of layout_width/layout_height since // it should always be match_parent } @@ -69,13 +72,17 @@ public class TableLayoutRule extends LinearLayoutRule { * Add an explicit "Add Row" action to the context menu */ @Override - public void addContextMenuActions(List actions, final INode selectedNode) { + public void addContextMenuActions(@NonNull List actions, + final @NonNull INode selectedNode) { super.addContextMenuActions(actions, selectedNode); IMenuCallback addTab = new IMenuCallback() { @Override - public void action(RuleAction action, List selectedNodes, - final String valueId, Boolean newValue) { + public void action( + @NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + @Nullable Boolean newValue) { final INode node = selectedNode; INode newRow = node.appendChild(FQCN_TABLE_ROW); mRulesEngine.select(Collections.singletonList(newRow)); @@ -85,8 +92,10 @@ public class TableLayoutRule extends LinearLayoutRule { } @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); addTableLayoutActions(mRulesEngine, actions, parentNode, children); } @@ -99,11 +108,14 @@ public class TableLayoutRule extends LinearLayoutRule { final List children) { IMenuCallback actionCallback = new IMenuCallback() { @Override - public void action(final RuleAction action, List selectedNodes, - final String valueId, final Boolean newValue) { + public void action( + final @NonNull RuleAction action, + @NonNull List selectedNodes, + final @Nullable String valueId, + final @Nullable Boolean newValue) { parentNode.editXml("Add/Remove Table Row", new INodeHandler() { @Override - public void handle(INode n) { + public void handle(@NonNull INode n) { if (action.getId().equals(ACTION_ADD_ROW)) { // Determine the index of the selection, if any; if there is // a selection, insert the row before the current row, otherwise @@ -171,7 +183,8 @@ public class TableLayoutRule extends LinearLayoutRule { } @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { @@ -183,8 +196,9 @@ public class TableLayoutRule extends LinearLayoutRule { } @Override - public DropFeedback onResizeBegin(INode child, INode parent, SegmentType horizontalEdge, - SegmentType verticalEdge, Object childView, Object parentView) { + public DropFeedback onResizeBegin(@NonNull INode child, @NonNull INode parent, + @Nullable SegmentType horizontalEdge, @Nullable SegmentType verticalEdge, + @Nullable Object childView, @Nullable Object parentView) { // Children of a table layout cannot set their widths (it is controlled by column // settings on the table). They can set their heights (though for TableRow, the // height is always wrap_content). diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableRowRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableRowRule.java index f372866..af6f7a0 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableRowRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/TableRowRule.java @@ -17,6 +17,8 @@ package com.android.ide.common.layout; import static com.android.ide.common.layout.LayoutConstants.FQCN_TABLE_LAYOUT; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; @@ -41,15 +43,18 @@ public class TableRowRule extends LinearLayoutRule { } @Override - public void onChildInserted(INode child, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode child, @NonNull INode parent, + @NonNull InsertType insertType) { // Overridden to inhibit the setting of layout_width/layout_height since // the table row will enforce match_parent and wrap_content for width and height // respectively. } @Override - public void addLayoutActions(List actions, final INode parentNode, - final List children) { + public void addLayoutActions( + @NonNull List actions, + final @NonNull INode parentNode, + final @NonNull List children) { super.addLayoutActions(actions, parentNode, children); // Also apply table-specific actions on the table row such that you can @@ -65,8 +70,9 @@ public class TableRowRule extends LinearLayoutRule { } @Override - public DropFeedback onResizeBegin(INode child, INode parent, SegmentType horizontalEdge, - SegmentType verticalEdge, Object childView, Object parentView) { + public DropFeedback onResizeBegin(@NonNull INode child, @NonNull INode parent, + @Nullable SegmentType horizontalEdge, @Nullable SegmentType verticalEdge, + @Nullable Object childView, @Nullable Object parentView) { // No resizing in TableRows; the width is *always* match_parent and the height is // *always* wrap_content. return null; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/WebViewRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/WebViewRule.java index 5224df0..b2c8413 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/WebViewRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/WebViewRule.java @@ -16,10 +16,11 @@ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.IViewRule; import com.android.ide.common.api.InsertType; @@ -32,7 +33,8 @@ public class WebViewRule extends IgnoredLayoutRule { // into; it's an AbsoluteLayout for implementation purposes. @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ZoomButtonRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ZoomButtonRule.java index 5714392..3456fb9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ZoomButtonRule.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/ZoomButtonRule.java @@ -15,15 +15,17 @@ */ package com.android.ide.common.layout; -import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_SRC; +import static com.android.util.XmlUtils.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode; import com.android.ide.common.api.InsertType; public class ZoomButtonRule extends BaseViewRule { @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, + @NonNull InsertType insertType) { super.onCreate(node, parent, insertType); if (insertType.isCreate()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/grid/GridLayoutPainter.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/grid/GridLayoutPainter.java index 3a73558..461ca2b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/grid/GridLayoutPainter.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/grid/GridLayoutPainter.java @@ -19,6 +19,7 @@ import static com.android.ide.common.layout.GridLayoutRule.GRID_SIZE; import static com.android.ide.common.layout.GridLayoutRule.MARGIN_SIZE; import static com.android.ide.common.layout.grid.GridModel.UNDEFINED; +import com.android.annotations.NonNull; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IDragElement; @@ -127,7 +128,8 @@ public class GridLayoutPainter { // Implements IFeedbackPainter @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, + @NonNull DropFeedback feedback) { Rect b = node.getBounds(); if (!b.isValid()) { return; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/relative/GuidelinePainter.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/relative/GuidelinePainter.java index b37a6ed..46038ee 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/relative/GuidelinePainter.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/relative/GuidelinePainter.java @@ -23,6 +23,7 @@ import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_PREFIX; import static com.android.ide.common.layout.LayoutConstants.ID_PREFIX; import static com.android.ide.common.layout.LayoutConstants.NEW_ID_PREFIX; +import com.android.annotations.NonNull; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IFeedbackPainter; @@ -45,7 +46,7 @@ import java.util.Set; public final class GuidelinePainter implements IFeedbackPainter { // ---- Implements IFeedbackPainter ---- @Override - public void paint(IGraphics gc, INode node, DropFeedback feedback) { + public void paint(@NonNull IGraphics gc, @NonNull INode node, @NonNull DropFeedback feedback) { GuidelineHandler state = (GuidelineHandler) feedback.userData; for (INode dragged : state.mDraggedNodes) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/resources/platform/AttributeInfo.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/resources/platform/AttributeInfo.java index 7b3e8a3..05f0adf 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/resources/platform/AttributeInfo.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/resources/platform/AttributeInfo.java @@ -86,13 +86,13 @@ public class AttributeInfo implements IAttributeInfo { /** Returns the XML Name of the attribute */ @Override - public String getName() { + public @NonNull String getName() { return mName; } /** Returns the formats of the attribute. Cannot be null. * Should have at least one format. */ @Override - public EnumSet getFormats() { + public @NonNull EnumSet getFormats() { return mFormats; } /** Returns the values for enums. null for other types. */ @@ -107,7 +107,7 @@ public class AttributeInfo implements IAttributeInfo { } /** Returns a short javadoc, .i.e. the first sentence. */ @Override - public String getJavaDoc() { + public @NonNull String getJavaDoc() { return mJavaDoc; } /** Returns the documentation for deprecated attributes. Null if not deprecated. */ @@ -157,7 +157,7 @@ public class AttributeInfo implements IAttributeInfo { * this attribute */ @Override - public String getDefinedBy() { + public @NonNull String getDefinedBy() { return mDefinedBy; } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/DexDumpAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/DexDumpAction.java index 7345a04..48e01df 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/DexDumpAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/DexDumpAction.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.actions; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AdtUtils; import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity; @@ -172,7 +173,7 @@ public class DexDumpAction implements IObjectActionDelegate { Wait.WAIT_FOR_READERS, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { try { writer.write(line); @@ -182,7 +183,7 @@ public class DexDumpAction implements IObjectActionDelegate { } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, line); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/SdkManagerAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/SdkManagerAction.java index 0ff50b5..ce9030e 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/SdkManagerAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/SdkManagerAction.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.actions; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.build.DexWrapper; import com.android.ide.eclipse.adt.internal.sdk.AdtConsoleSdkLog; @@ -98,12 +99,12 @@ public class SdkManagerAction implements IWorkbenchWindowActionDelegate, IObject Wait.ASYNC, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { // Ignore stdout } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { logger.printf("[SDK Manager] %s", line); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java index 0f556f9..799cf0e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BuildHelper.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.build; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidPrintStream; @@ -1065,7 +1066,7 @@ public class BuildHelper { @SuppressWarnings("unused") @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { // If benchmarking always print the lines that // correspond to benchmarking info returned by ADT @@ -1080,7 +1081,7 @@ public class BuildHelper { } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { results.add(line); if (BuildVerbosity.VERBOSE == AdtPrefs.getPrefs().getBuildVerbosity()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/animator/AnimationEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/animator/AnimationEditorDelegate.java index 153bc79..7c7051d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/animator/AnimationEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/animator/AnimationEditorDelegate.java @@ -18,6 +18,8 @@ package com.android.ide.eclipse.adt.internal.editors.animator; import static com.android.ide.eclipse.adt.AdtConstants.EDITORS_NAMESPACE; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtUtils; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlDelegate; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor; @@ -41,8 +43,8 @@ public class AnimationEditorDelegate extends CommonXmlDelegate { @Override @SuppressWarnings("unchecked") public AnimationEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.ANIM == type || ResourceFolderType.ANIMATOR == type) { return new AnimationEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/color/ColorEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/color/ColorEditorDelegate.java index 53edea9..3389683 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/color/ColorEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/color/ColorEditorDelegate.java @@ -18,6 +18,8 @@ package com.android.ide.eclipse.adt.internal.editors.color; import static com.android.ide.eclipse.adt.AdtConstants.EDITORS_NAMESPACE; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlDelegate; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor; import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor; @@ -39,8 +41,8 @@ public class ColorEditorDelegate extends CommonXmlDelegate { @Override @SuppressWarnings("unchecked") public ColorEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.COLOR == type) { return new ColorEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/drawable/DrawableEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/drawable/DrawableEditorDelegate.java index 69d82bd..a54fa8c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/drawable/DrawableEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/drawable/DrawableEditorDelegate.java @@ -18,6 +18,8 @@ package com.android.ide.eclipse.adt.internal.editors.drawable; import static com.android.ide.eclipse.adt.AdtConstants.EDITORS_NAMESPACE; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlDelegate; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor; import com.android.ide.eclipse.adt.internal.editors.descriptors.DocumentDescriptor; @@ -40,8 +42,8 @@ public class DrawableEditorDelegate extends CommonXmlDelegate { @Override @SuppressWarnings("unchecked") public DrawableEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.DRAWABLE == type) { return new DrawableEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/formatting/AndroidXmlFormattingStrategy.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/formatting/AndroidXmlFormattingStrategy.java index 23a5d35..41795d2 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/formatting/AndroidXmlFormattingStrategy.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/formatting/AndroidXmlFormattingStrategy.java @@ -270,7 +270,7 @@ public class AndroidXmlFormattingStrategy extends ContextBasedFormattingStrategy replaceEnd = document.getLength(); } else { root = DomUtilities.getCommonAncestor(startNode, endNode); - initialDepth = DomUtilities.getDepth(root) - 1; + initialDepth = root != null ? DomUtilities.getDepth(root) - 1 : 0; // Regions must be non-null since the DOM nodes are non null, but Eclipse null // analysis doesn't realize it: diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java index 89dd263..8d7b02e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditorDelegate.java @@ -100,8 +100,8 @@ public class LayoutEditorDelegate extends CommonXmlDelegate @Override @SuppressWarnings("unchecked") public LayoutEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.LAYOUT == type) { return new LayoutEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GCWrapper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GCWrapper.java index 664d473..354517e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GCWrapper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/GCWrapper.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.editors.layout.gle2; +import com.android.annotations.NonNull; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.IColor; import com.android.ide.common.api.IGraphics; @@ -135,7 +136,7 @@ public class GCWrapper implements IGraphics { //------------- @Override - public IColor registerColor(int rgb) { + public @NonNull IColor registerColor(int rgb) { checkGC(); Integer key = Integer.valueOf(rgb); @@ -163,13 +164,13 @@ public class GCWrapper implements IGraphics { } @Override - public IColor getForeground() { + public @NonNull IColor getForeground() { Color c = getGc().getForeground(); return new ColorWrapper(c); } @Override - public IColor getBackground() { + public @NonNull IColor getBackground() { Color c = getGc().getBackground(); return new ColorWrapper(c); } @@ -180,13 +181,13 @@ public class GCWrapper implements IGraphics { } @Override - public void setForeground(IColor color) { + public void setForeground(@NonNull IColor color) { checkGC(); getGc().setForeground(((ColorWrapper) color).getColor()); } @Override - public void setBackground(IColor color) { + public void setBackground(@NonNull IColor color) { checkGC(); getGc().setBackground(((ColorWrapper) color).getColor()); } @@ -203,7 +204,7 @@ public class GCWrapper implements IGraphics { } @Override - public void setLineStyle(LineStyle style) { + public void setLineStyle(@NonNull LineStyle style) { int swtStyle = 0; switch (style) { case LINE_SOLID: @@ -254,7 +255,7 @@ public class GCWrapper implements IGraphics { } @Override - public void drawLine(Point p1, Point p2) { + public void drawLine(@NonNull Point p1, @NonNull Point p2) { drawLine(p1.x, p1.y, p2.x, p2.y); } @@ -272,12 +273,12 @@ public class GCWrapper implements IGraphics { } @Override - public void drawRect(Point p1, Point p2) { + public void drawRect(@NonNull Point p1, @NonNull Point p2) { drawRect(p1.x, p1.y, p2.x, p2.y); } @Override - public void drawRect(Rect r) { + public void drawRect(@NonNull Rect r) { checkGC(); useStrokeAlpha(); int x = mHScale.translate(r.x); @@ -299,12 +300,12 @@ public class GCWrapper implements IGraphics { } @Override - public void fillRect(Point p1, Point p2) { + public void fillRect(@NonNull Point p1, @NonNull Point p2) { fillRect(p1.x, p1.y, p2.x, p2.y); } @Override - public void fillRect(Rect r) { + public void fillRect(@NonNull Rect r) { checkGC(); useFillAlpha(); int x = mHScale.translate(r.x); @@ -368,7 +369,7 @@ public class GCWrapper implements IGraphics { // strings @Override - public void drawString(String string, int x, int y) { + public void drawString(@NonNull String string, int x, int y) { checkGC(); useStrokeAlpha(); x = mHScale.translate(x); @@ -382,7 +383,7 @@ public class GCWrapper implements IGraphics { } @Override - public void drawBoxedStrings(int x, int y, List strings) { + public void drawBoxedStrings(int x, int y, @NonNull List strings) { checkGC(); x = mHScale.translate(x); @@ -414,14 +415,14 @@ public class GCWrapper implements IGraphics { } @Override - public void drawString(String string, Point topLeft) { + public void drawString(@NonNull String string, @NonNull Point topLeft) { drawString(string, topLeft.x, topLeft.y); } // Styles @Override - public void useStyle(DrawingStyle style) { + public void useStyle(@NonNull DrawingStyle style) { checkGC(); // Look up the specific SWT style which defines the actual diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleAttribute.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleAttribute.java index b4a4772..198c164 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleAttribute.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleAttribute.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.editors.layout.gle2; +import com.android.annotations.NonNull; import com.android.ide.common.api.INode.IAttribute; import java.util.regex.Matcher; @@ -58,19 +59,19 @@ public class SimpleAttribute implements IAttribute { * Can be empty for an attribute without a namespace but is never null. */ @Override - public String getUri() { + public @NonNull String getUri() { return mUri; } /** Returns the XML local name of the attribute. Cannot be null nor empty. */ @Override - public String getName() { + public @NonNull String getName() { return mName; } /** Returns the value of the attribute. Cannot be null. Can be empty. */ @Override - public String getValue() { + public @NonNull String getValue() { return mValue; } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElement.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElement.java index e9abb06..4feff25 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElement.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SimpleElement.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.editors.layout.gle2; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IDragElement; import com.android.ide.common.api.Rect; @@ -69,7 +71,7 @@ public class SimpleElement implements IDragElement { * a View to inflate. */ @Override - public String getFqcn() { + public @NonNull String getFqcn() { return mFqcn; } @@ -79,7 +81,7 @@ public class SimpleElement implements IDragElement { * from the object palette (unless it successfully rendered a preview) */ @Override - public Rect getBounds() { + public @NonNull Rect getBounds() { return mBounds; } @@ -98,12 +100,12 @@ public class SimpleElement implements IDragElement { * is no suitable parent. This is null when {@link #getParentFqcn()} is null. */ @Override - public Rect getParentBounds() { + public @NonNull Rect getParentBounds() { return mParentBounds; } @Override - public IDragAttribute[] getAttributes() { + public @NonNull IDragAttribute[] getAttributes() { if (mCachedAttributes == null) { mCachedAttributes = mAttributes.toArray(new IDragAttribute[mAttributes.size()]); } @@ -111,7 +113,7 @@ public class SimpleElement implements IDragElement { } @Override - public IDragAttribute getAttribute(String uri, String localName) { + public IDragAttribute getAttribute(@Nullable String uri, @NonNull String localName) { for (IDragAttribute attr : mAttributes) { if (attr.getUri().equals(uri) && attr.getName().equals(localName)) { return attr; @@ -122,7 +124,7 @@ public class SimpleElement implements IDragElement { } @Override - public IDragElement[] getInnerElements() { + public @NonNull IDragElement[] getInnerElements() { if (mCachedElements == null) { mCachedElements = mElements.toArray(new IDragElement[mElements.size()]); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java index e08bfc1..e793983 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java @@ -21,6 +21,8 @@ import static com.android.sdklib.SdkConstants.CLASS_V4_FRAGMENT; import static com.android.tools.lint.detector.api.LintConstants.AUTO_URI; import static com.android.tools.lint.detector.api.LintConstants.URI_PREFIX; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IClientRulesEngine; import com.android.ide.common.api.INode; import com.android.ide.common.api.IValidator; @@ -110,12 +112,12 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public String getFqcn() { + public @NonNull String getFqcn() { return mFqcn; } @Override - public void debugPrintf(String msg, Object... params) { + public void debugPrintf(@NonNull String msg, Object... params) { AdtPlugin.printToConsole( mFqcn == null ? "" : mFqcn, String.format(msg, params) @@ -123,12 +125,12 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public IViewRule loadRule(String fqcn) { + public IViewRule loadRule(@NonNull String fqcn) { return mRulesEngine.loadRule(fqcn, fqcn); } @Override - public void displayAlert(String message) { + public void displayAlert(@NonNull String message) { MessageDialog.openInformation( AdtPlugin.getDisplay().getActiveShell(), mFqcn, // title @@ -136,7 +138,8 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public String displayInput(String message, String value, final IValidator filter) { + public String displayInput(@NonNull String message, @Nullable String value, + final @Nullable IValidator filter) { IInputValidator validator = null; if (filter != null) { validator = new IInputValidator() { @@ -166,26 +169,26 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public IViewMetadata getMetadata(final String fqcn) { + public @NonNull IViewMetadata getMetadata(final @NonNull String fqcn) { return new IViewMetadata() { @Override - public String getDisplayName() { + public @NonNull String getDisplayName() { // This also works when there is no "." return fqcn.substring(fqcn.lastIndexOf('.') + 1); } @Override - public FillPreference getFillPreference() { + public @NonNull FillPreference getFillPreference() { return ViewMetadataRepository.get().getFillPreference(fqcn); } @Override - public Margins getInsets() { + public @NonNull Margins getInsets() { return mRulesEngine.getEditor().getCanvasControl().getInsets(fqcn); } @Override - public List getTopAttributes() { + public @NonNull List getTopAttributes() { return ViewMetadataRepository.get().getTopAttributes(fqcn); } }; @@ -205,10 +208,9 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public IValidator getResourceValidator() { - // When https://review.source.android.com/#change,20168 is integrated, - // change this to - //return ResourceNameValidator.create(false, mDelegate.getProject(), ResourceType.ID); + public @Nullable IValidator getResourceValidator() { + //return ResourceNameValidator.create(false, mRulesEngine.getEditor().getProject(), + // ResourceType.ID); return null; } @@ -242,7 +244,8 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public String displayResourceInput(String resourceTypeName, String currentValue) { + public String displayResourceInput(@NonNull String resourceTypeName, + @Nullable String currentValue) { return displayResourceInput(resourceTypeName, currentValue, null); } @@ -254,8 +257,8 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public String[] displayMarginInput(String all, String left, String right, String top, - String bottom) { + public String[] displayMarginInput(@Nullable String all, @Nullable String left, + @Nullable String right, @Nullable String top, @Nullable String bottom) { GraphicalEditorPart editor = mRulesEngine.getEditor(); IProject project = editor.getProject(); if (project != null) { @@ -282,7 +285,7 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public void select(final Collection nodes) { + public void select(final @NonNull Collection nodes) { LayoutCanvas layoutCanvas = mRulesEngine.getEditor().getCanvasControl(); final SelectionManager selectionManager = layoutCanvas.getSelectionManager(); selectionManager.select(nodes); @@ -440,8 +443,8 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public Map measureChildren(INode parent, - IClientRulesEngine.AttributeFilter filter) { + public Map measureChildren(@NonNull INode parent, + @Nullable IClientRulesEngine.AttributeFilter filter) { RenderService renderService = RenderService.create(mRulesEngine.getEditor()); Map map = renderService.measureChildren(parent, filter); if (map == null) { @@ -502,7 +505,7 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public String getUniqueId(String fqcn) { + public @NonNull String getUniqueId(@NonNull String fqcn) { UiDocumentNode root = mRulesEngine.getEditor().getModel(); String prefix = fqcn.substring(fqcn.lastIndexOf('.') + 1); prefix = Character.toLowerCase(prefix.charAt(0)) + prefix.substring(1); @@ -510,7 +513,7 @@ class ClientRulesEngine implements IClientRulesEngine { } @Override - public String getAppNameSpace() { + public @NonNull String getAppNameSpace() { IProject project = mRulesEngine.getEditor().getProject(); ProjectState projectState = Sdk.getProjectState(project); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/NodeProxy.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/NodeProxy.java index ea464c1..3cd9729 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/NodeProxy.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/NodeProxy.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.editors.layout.gre; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IAttributeInfo; import com.android.ide.common.api.INode; import com.android.ide.common.api.INodeHandler; @@ -86,16 +88,19 @@ public class NodeProxy implements INode { } @Override - public Rect getBounds() { + public @NonNull Rect getBounds() { return mBounds; } @Override - public Margins getMargins() { + public @NonNull Margins getMargins() { ViewHierarchy viewHierarchy = mFactory.getCanvas().getViewHierarchy(); CanvasViewInfo view = viewHierarchy.findViewInfoFor(this); if (view != null) { - return view.getMargins(); + Margins margins = view.getMargins(); + if (margins != null) { + return margins; + } } return NO_MARGINS; @@ -133,14 +138,15 @@ public class NodeProxy implements INode { } @Override - public String getFqcn() { + public @NonNull String getFqcn() { if (mNode != null) { ElementDescriptor desc = mNode.getDescriptor(); if (desc instanceof ViewElementDescriptor) { return ((ViewElementDescriptor) desc).getFullClassName(); } } - return null; + + return ""; } @@ -189,7 +195,7 @@ public class NodeProxy implements INode { } @Override - public INode[] getChildren() { + public @NonNull INode[] getChildren() { if (mNode != null) { List uiChildren = mNode.getUiChildren(); List nodes = new ArrayList(uiChildren.size()); @@ -209,7 +215,7 @@ public class NodeProxy implements INode { // ---- XML Editing --- @Override - public void editXml(String undoName, final INodeHandler c) { + public void editXml(@NonNull String undoName, final @NonNull INodeHandler c) { final AndroidXmlEditor editor = mNode.getEditor(); if (editor != null) { @@ -238,17 +244,17 @@ public class NodeProxy implements INode { } @Override - public INode appendChild(String viewFqcn) { + public @NonNull INode appendChild(@NonNull String viewFqcn) { return insertOrAppend(viewFqcn, -1); } @Override - public INode insertChildAt(String viewFqcn, int index) { + public @NonNull INode insertChildAt(@NonNull String viewFqcn, int index) { return insertOrAppend(viewFqcn, index); } @Override - public void removeChild(INode node) { + public void removeChild(@NonNull INode node) { checkEditOK(); ((NodeProxy) node).mNode.deleteXmlNode(); @@ -320,7 +326,10 @@ public class NodeProxy implements INode { } @Override - public boolean setAttribute(String uri, String name, String value) { + public boolean setAttribute( + @Nullable String uri, + @NonNull String name, + @Nullable String value) { checkEditOK(); UiAttributeNode attr = mNode.setAttributeValue(name, uri, value, true /* override */); @@ -345,7 +354,7 @@ public class NodeProxy implements INode { } @Override - public String getStringAttr(String uri, String attrName) { + public String getStringAttr(@Nullable String uri, @NonNull String attrName) { UiElementNode uiNode = mNode; if (attrName == null) { @@ -378,7 +387,7 @@ public class NodeProxy implements INode { } @Override - public IAttributeInfo getAttributeInfo(String uri, String attrName) { + public IAttributeInfo getAttributeInfo(@Nullable String uri, @NonNull String attrName) { UiElementNode uiNode = mNode; if (attrName == null) { @@ -399,7 +408,7 @@ public class NodeProxy implements INode { } @Override - public IAttributeInfo[] getDeclaredAttributes() { + public @NonNull IAttributeInfo[] getDeclaredAttributes() { AttributeDescriptor[] descs = mNode.getAttributeDescriptors(); int n = descs.length; @@ -413,7 +422,7 @@ public class NodeProxy implements INode { } @Override - public List getAttributeSources() { + public @NonNull List getAttributeSources() { ElementDescriptor descriptor = mNode.getDescriptor(); if (descriptor instanceof ViewElementDescriptor) { return ((ViewElementDescriptor) descriptor).getAttributeSources(); @@ -423,7 +432,7 @@ public class NodeProxy implements INode { } @Override - public IAttribute[] getLiveAttributes() { + public @NonNull IAttribute[] getLiveAttributes() { UiElementNode uiNode = mNode; if (uiNode.getXmlNode() != null) { @@ -446,7 +455,8 @@ public class NodeProxy implements INode { } } } - return null; + + return new IAttribute[0]; } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlPropertyEditor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlPropertyEditor.java index 628cda6..a7a863c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlPropertyEditor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/XmlPropertyEditor.java @@ -309,21 +309,26 @@ class XmlPropertyEditor extends AbstractTextPropertyEditor { ResourceType type = null; List types = null; if (formats.contains(Format.FLAG)) { - FlagXmlPropertyDialog dialog = + String[] flagValues = attributeInfo.getFlagValues(); + if (flagValues != null) { + FlagXmlPropertyDialog dialog = new FlagXmlPropertyDialog(propertyTable.getShell(), "Select Flag Values", false /* radio */, - attributeInfo.getFlagValues(), xmlProperty); - - dialog.open(); - return; + flagValues, xmlProperty); + dialog.open(); + return; + } } else if (formats.contains(Format.ENUM)) { - FlagXmlPropertyDialog dialog = + String[] enumValues = attributeInfo.getEnumValues(); + if (enumValues != null) { + FlagXmlPropertyDialog dialog = new FlagXmlPropertyDialog(propertyTable.getShell(), "Select Enum Value", true /* radio */, - attributeInfo.getEnumValues(), xmlProperty); - dialog.open(); - return; + enumValues, xmlProperty); + dialog.open(); + return; + } } else { for (Format format : formats) { ResourceType t = format.getResourceType(); @@ -379,16 +384,18 @@ class XmlPropertyEditor extends AbstractTextPropertyEditor { } else if (type != null) { // Single resource type: use a resource chooser GraphicalEditorPart graphicalEditor = xmlProperty.getGraphicalEditor(); - String currentValue = (String) property.getValue(); - // TODO: Add validator factory? - String resource = ResourceChooser.chooseResource(graphicalEditor, - type, currentValue, null /* validator */); - // Returns null for cancel, "" for clear and otherwise a new value - if (resource != null) { - if (resource.length() > 0) { - property.setValue(resource); - } else { - property.setValue(null); + if (graphicalEditor != null) { + String currentValue = (String) property.getValue(); + // TODO: Add validator factory? + String resource = ResourceChooser.chooseResource(graphicalEditor, + type, currentValue, null /* validator */); + // Returns null for cancel, "" for clear and otherwise a new value + if (resource != null) { + if (resource.length() > 0) { + property.setValue(resource); + } else { + property.setValue(null); + } } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeLayoutRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeLayoutRefactoring.java index abbfa11..99369ee 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeLayoutRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeLayoutRefactoring.java @@ -39,6 +39,7 @@ import static com.android.ide.common.layout.LayoutConstants.VALUE_WRAP_CONTENT; import static com.android.ide.eclipse.adt.AdtConstants.EXT_XML; import static com.android.util.XmlUtils.ANDROID_NS_NAME_PREFIX; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.descriptors.AttributeDescriptor; @@ -218,7 +219,7 @@ public class ChangeLayoutRefactoring extends VisualRefactoring { } @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { String name = getViewClass(mTypeFqcn); IFile file = mDelegate.getEditor().getInputFile(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeViewRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeViewRefactoring.java index 967a880..9cf3a3f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeViewRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ChangeViewRefactoring.java @@ -21,6 +21,7 @@ import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_PREFIX; import static com.android.ide.common.layout.LayoutConstants.ATTR_TEXT; import static com.android.ide.eclipse.adt.AdtConstants.EXT_XML; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.internal.editors.descriptors.AttributeDescriptor; import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate; @@ -150,7 +151,7 @@ public class ChangeViewRefactoring extends VisualRefactoring { } @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { String name = getViewClass(mTypeFqcn); IFile file = mDelegate.getEditor().getInputFile(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractIncludeRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractIncludeRefactoring.java index eb89304..657c9ec 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractIncludeRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractIncludeRefactoring.java @@ -34,6 +34,7 @@ import static com.android.util.XmlUtils.XMLNS; import static com.android.util.XmlUtils.XMLNS_COLON; import com.android.AndroidConstants; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; @@ -221,7 +222,7 @@ public class ExtractIncludeRefactoring extends VisualRefactoring { // ---- Actual implementation of Extract as Include modification computation ---- @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { String extractedText = getExtractedText(); String namespaceDeclarations = computeNamespaceDeclarations(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractStyleRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractStyleRefactoring.java index c6e965d..1c7dd72 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractStyleRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/ExtractStyleRefactoring.java @@ -36,6 +36,7 @@ import static com.android.util.XmlUtils.ANDROID_NS_NAME; import static com.android.util.XmlUtils.ANDROID_NS_NAME_PREFIX; import static com.android.util.XmlUtils.XMLNS_COLON; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.common.rendering.api.ResourceValue; import com.android.ide.common.resources.ResourceResolver; @@ -322,7 +323,7 @@ public class ExtractStyleRefactoring extends VisualRefactoring { } @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { List changes = new ArrayList(); if (mChosenAttributes.size() == 0) { return changes; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UnwrapRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UnwrapRefactoring.java index 050a787..e333629 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UnwrapRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UnwrapRefactoring.java @@ -20,6 +20,7 @@ import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_HEIGHT; import static com.android.ide.common.layout.LayoutConstants.ATTR_LAYOUT_WIDTH; import static com.android.ide.eclipse.adt.AdtConstants.EXT_XML; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.internal.editors.formatting.XmlFormatStyle; import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate; @@ -166,7 +167,7 @@ public class UnwrapRefactoring extends VisualRefactoring { } @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { // (1) If the removed parent is the root container, transfer its // namespace declarations // (2) Remove the root element completely diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UseCompoundDrawableRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UseCompoundDrawableRefactoring.java index 8f9beab..453daa8 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UseCompoundDrawableRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/UseCompoundDrawableRefactoring.java @@ -33,6 +33,7 @@ import static com.android.ide.eclipse.adt.AdtConstants.EXT_XML; import static com.android.tools.lint.detector.api.LintConstants.IMAGE_VIEW; import static com.android.tools.lint.detector.api.LintConstants.TEXT_VIEW; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.internal.editors.formatting.XmlFormatPreferences; import com.android.ide.eclipse.adt.internal.editors.formatting.XmlFormatStyle; @@ -189,7 +190,7 @@ public class UseCompoundDrawableRefactoring extends VisualRefactoring { } @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { String androidNsPrefix = getAndroidNamespacePrefix(); IFile file = mDelegate.getEditor().getInputFile(); List changes = new ArrayList(); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/WrapInRefactoring.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/WrapInRefactoring.java index d043085..08a951b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/WrapInRefactoring.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/WrapInRefactoring.java @@ -26,6 +26,7 @@ import static com.android.ide.common.layout.LayoutConstants.VALUE_WRAP_CONTENT; import static com.android.ide.eclipse.adt.AdtConstants.EXT_XML; import static com.android.util.XmlUtils.ANDROID_NS_NAME_PREFIX; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor; import com.android.ide.eclipse.adt.internal.editors.formatting.XmlFormatStyle; @@ -175,7 +176,7 @@ public class WrapInRefactoring extends VisualRefactoring { } @Override - protected List computeChanges(IProgressMonitor monitor) { + protected @NonNull List computeChanges(IProgressMonitor monitor) { // (1) Insert the new container in front of the beginning of the // first wrapped view // (2) If the container is the new root, transfer namespace declarations diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestInfo.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestInfo.java index 2f10f68..8479b0d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestInfo.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestInfo.java @@ -78,6 +78,7 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -488,7 +489,7 @@ public class ManifestInfo { try { IJavaProject javaProject = BaseProjectHelper.getJavaProject(project); if (javaProject == null) { - return null; + return Collections.emptyList(); } // TODO - look around a bit more and see if we can figure out whether the // call if from within a setContentView call! diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditorDelegate.java index faca295..b5056d9 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/menu/MenuEditorDelegate.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.editors.menu; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlDelegate; @@ -43,8 +45,8 @@ public class MenuEditorDelegate extends CommonXmlDelegate { @Override @SuppressWarnings("unchecked") public MenuEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.MENU == type) { return new MenuEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/otherxml/OtherXmlEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/otherxml/OtherXmlEditorDelegate.java index 138ff95..7d74516 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/otherxml/OtherXmlEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/otherxml/OtherXmlEditorDelegate.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.editors.otherxml; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlDelegate; @@ -36,8 +38,8 @@ public class OtherXmlEditorDelegate extends CommonXmlDelegate { @Override @SuppressWarnings("unchecked") public OtherXmlEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.XML == type) { return new OtherXmlEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/values/ValuesEditorDelegate.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/values/ValuesEditorDelegate.java index f253b30..94a6771 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/values/ValuesEditorDelegate.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/values/ValuesEditorDelegate.java @@ -16,6 +16,8 @@ package com.android.ide.eclipse.adt.internal.editors.values; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlDelegate; @@ -43,8 +45,8 @@ public class ValuesEditorDelegate extends CommonXmlDelegate { @Override @SuppressWarnings("unchecked") public ValuesEditorDelegate createForFile( - CommonXmlEditor delegator, - ResourceFolderType type) { + @NonNull CommonXmlEditor delegator, + @Nullable ResourceFolderType type) { if (ResourceFolderType.VALUES == type) { return new ValuesEditorDelegate(delegator); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/EclipseLintClient.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/EclipseLintClient.java index b5810a4..e7c81c5 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/EclipseLintClient.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/EclipseLintClient.java @@ -188,7 +188,8 @@ public class EclipseLintClient extends LintClient implements IDomParser { // ----- Extends LintClient ----- @Override - public void log(Severity severity, Throwable exception, String format, Object... args) { + public void log(@NonNull Severity severity, @Nullable Throwable exception, + @Nullable String format, @Nullable Object... args) { if (exception == null) { AdtPlugin.log(IStatus.WARNING, format, args); } else { @@ -213,7 +214,7 @@ public class EclipseLintClient extends LintClient implements IDomParser { // ----- Implements IDomParser ----- @Override - public Document parseXml(XmlContext context) { + public Document parseXml(@NonNull XmlContext context) { // Map File to IFile IFile file = AdtUtils.fileToIFile(context.file); if (file == null || !file.exists()) { @@ -277,7 +278,19 @@ public class EclipseLintClient extends LintClient implements IDomParser { @NonNull @Override - public Configuration getConfiguration(Project project) { + public Configuration getConfiguration(@NonNull Project project) { + return getConfigurationFor(project); + } + + /** + * Same as {@link #getConfiguration(Project)}, but {@code project} can be + * null in which case the global configuration is returned. + * + * @param project the project to look up + * @return a corresponding configuration + */ + @NonNull + public Configuration getConfigurationFor(@Nullable Project project) { if (project != null) { IProject eclipseProject = getProject(project); if (eclipseProject != null) { @@ -287,10 +300,10 @@ public class EclipseLintClient extends LintClient implements IDomParser { return GlobalLintConfiguration.get(); } - @Override - public void report(Context context, Issue issue, Severity s, Location location, - String message, Object data) { + public void report(@NonNull Context context, @NonNull Issue issue, @NonNull Severity s, + @Nullable Location location, + @NonNull String message, @Nullable Object data) { int severity = getMarkerSeverity(s); IMarker marker = null; if (location != null) { @@ -399,7 +412,8 @@ public class EclipseLintClient extends LintClient implements IDomParser { } } - LayoutEditorDelegate delegate = LayoutEditorDelegate.fromEditor(AdtUtils.getActiveEditor()); + IEditorPart activeEditor = AdtUtils.getActiveEditor(); + LayoutEditorDelegate delegate = LayoutEditorDelegate.fromEditor(activeEditor); if (delegate != null) { delegate.getGraphicalEditor().getLayoutActionBar().updateErrorIndicator(); } @@ -645,7 +659,7 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public String readFile(File f) { + public @NonNull String readFile(@NonNull File f) { // Map File to IFile IFile file = AdtUtils.fileToIFile(f); if (file == null || !file.exists()) { @@ -684,13 +698,14 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public Location getLocation(XmlContext context, Node node) { + public @NonNull Location getLocation(@NonNull XmlContext context, @NonNull Node node) { IStructuredModel model = (IStructuredModel) context.getProperty(MODEL_PROPERTY); return new LazyLocation(context.file, model.getStructuredDocument(), (IndexedRegion) node); } @Override - public Handle createLocationHandle(final XmlContext context, final Node node) { + public @NonNull Handle createLocationHandle(final @NonNull XmlContext context, + final @NonNull Node node) { IStructuredModel model = (IStructuredModel) context.getProperty(MODEL_PROPERTY); return new LazyLocation(context.file, model.getStructuredDocument(), (IndexedRegion) node); } @@ -810,12 +825,13 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public Class replaceDetector(Class detectorClass) { + public @NonNull Class replaceDetector( + @NonNull Class detectorClass) { return detectorClass; } @Override - public void dispose(XmlContext context, Document document) { + public void dispose(@NonNull XmlContext context, @NonNull Document document) { IStructuredModel model = (IStructuredModel) context.getProperty(MODEL_PROPERTY); assert model != null : context.file; if (model != null) { @@ -885,7 +901,7 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public Location resolve() { + public @NonNull Location resolve() { return this; } } @@ -915,7 +931,7 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public lombok.ast.Node parseJava(JavaContext context) { + public lombok.ast.Node parseJava(@NonNull JavaContext context) { if (USE_ECLIPSE_PARSER) { // Use Eclipse's compiler EcjTreeConverter converter = new EcjTreeConverter(); @@ -1010,19 +1026,22 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public Location getLocation(JavaContext context, lombok.ast.Node node) { + public @NonNull Location getLocation(@NonNull JavaContext context, + @NonNull lombok.ast.Node node) { lombok.ast.Position position = node.getPosition(); return Location.create(context.file, context.getContents(), position.getStart(), position.getEnd()); } @Override - public Handle createLocationHandle(JavaContext context, lombok.ast.Node node) { + public @NonNull Handle createLocationHandle(@NonNull JavaContext context, + @NonNull lombok.ast.Node node) { return new LocationHandle(context.file, node); } @Override - public void dispose(JavaContext context, lombok.ast.Node compilationUnit) { + public void dispose(@NonNull JavaContext context, + @NonNull lombok.ast.Node compilationUnit) { } /* Handle for creating positions cheaply and returning full fledged locations later */ @@ -1037,7 +1056,7 @@ public class EclipseLintClient extends LintClient implements IDomParser { } @Override - public Location resolve() { + public @NonNull Location resolve() { lombok.ast.Position pos = mNode.getPosition(); return Location.create(mFile, null /*contents*/, pos.getStart(), pos.getEnd()); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java index 646d752..5870501 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/GlobalLintConfiguration.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.lint; import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs; import com.android.tools.lint.client.api.Configuration; @@ -54,7 +55,7 @@ class GlobalLintConfiguration extends Configuration { } @Override - public Severity getSeverity(Issue issue) { + public Severity getSeverity(@NonNull Issue issue) { if (mSeverities == null) { IssueRegistry registry = EclipseLintClient.getRegistry(); mSeverities = new HashMap(); @@ -94,14 +95,15 @@ class GlobalLintConfiguration extends Configuration { } @Override - public void ignore(Context context, Issue issue, Location location, String message, - Object data) { + public void ignore(@NonNull Context context, @NonNull Issue issue, + @Nullable Location location, @NonNull String message, + @Nullable Object data) { throw new UnsupportedOperationException( "Can't ignore() in global configurations"); //$NON-NLS-1$ } @Override - public void setSeverity(Issue issue, Severity severity) { + public void setSeverity(@NonNull Issue issue, @Nullable Severity severity) { if (mSeverities == null) { // Force initialization getSeverity(issue); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintColumn.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintColumn.java index 34af83b..297d94b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintColumn.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintColumn.java @@ -146,7 +146,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "Description"; } @@ -156,12 +156,12 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { return getStyledValue(marker).toString(); } @Override - public StyledString getStyledValue(IMarker marker) { + public StyledString getStyledValue(@NonNull IMarker marker) { StyledString styledString = new StyledString(); String message = marker.getAttribute(IMarker.MESSAGE, ""); @@ -177,7 +177,7 @@ abstract class LintColumn implements Comparator { } @Override - public Image getImage(IMarker marker) { + public Image getImage(@NonNull IMarker marker) { int severity = marker.getAttribute(IMarker.SEVERITY, 0); ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages(); switch (severity) { @@ -199,7 +199,7 @@ abstract class LintColumn implements Comparator { } @Override - public Font getFont(IMarker marker) { + public Font getFont(@NonNull IMarker marker) { int severity = marker.getAttribute(IMarker.SEVERITY, 0); if (severity == IMarker.SEVERITY_ERROR) { return JFaceResources.getFontRegistry().getBold( @@ -277,7 +277,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "Category"; } @@ -287,7 +287,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { Issue issue = mList.getIssue(marker); if (issue != null) { return issue.getCategory().getFullName(); @@ -303,7 +303,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "Location"; } @@ -313,12 +313,12 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { return getStyledValue(marker).toString(); } @Override - public StyledString getStyledValue(IMarker marker) { + public StyledString getStyledValue(@NonNull IMarker marker) { StyledString styledString = new StyledString(); // Combined location @@ -378,7 +378,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "File"; } @@ -393,7 +393,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { if (marker.getResource() instanceof IFile) { return marker.getResource().getName(); } else { @@ -408,7 +408,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "Path"; } @@ -423,7 +423,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { return marker.getResource().getFullPath().toOSString(); } } @@ -434,7 +434,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "Line"; } @@ -454,7 +454,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { int line = getLine(marker); if (line >= 1) { return Integer.toString(line); @@ -483,7 +483,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getColumnHeaderText() { + public @NonNull String getColumnHeaderText() { return "Priority"; } @@ -503,7 +503,7 @@ abstract class LintColumn implements Comparator { } @Override - public String getValue(IMarker marker) { + public String getValue(@NonNull IMarker marker) { int priority = getPriority(marker); if (priority > 0) { return Integer.toString(priority); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFixGenerator.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFixGenerator.java index c81c0fc..32da203 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFixGenerator.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFixGenerator.java @@ -226,7 +226,7 @@ public class LintFixGenerator implements IMarkerResolutionGenerator2, IQuickAssi File dir = AdtUtils.getAbsolutePath(eclipseProject).toFile(); project = mClient.getProject(dir, dir); } - Configuration configuration = mClient.getConfiguration(project); + Configuration configuration = mClient.getConfigurationFor(project); if (thisFileOnly && configuration instanceof DefaultConfiguration) { File file = AdtUtils.getAbsolutePath(resource).toFile(); ((DefaultConfiguration) configuration).ignore(issue, file); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfiguration.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfiguration.java index 77cd115..9e4ca12 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfiguration.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfiguration.java @@ -15,6 +15,7 @@ */ package com.android.ide.eclipse.adt.internal.lint; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AdtUtils; @@ -79,7 +80,7 @@ class ProjectLintConfiguration extends DefaultConfiguration { } @Override - public Severity getSeverity(Issue issue) { + public @NonNull Severity getSeverity(@NonNull Issue issue) { Severity severity = super.getSeverity(issue); if (mFatalOnly && severity != Severity.FATAL) { return Severity.IGNORE; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/LintPreferencePage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/LintPreferencePage.java index b2d7361..0bc2bfd 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/LintPreferencePage.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/preferences/LintPreferencePage.java @@ -165,7 +165,7 @@ public class LintPreferencePage extends PropertyPage implements IWorkbenchPrefer File dir = AdtUtils.getAbsolutePath(mProject).toFile(); project = mClient.getProject(dir, dir); } - mConfiguration = mClient.getConfiguration(project); + mConfiguration = mClient.getConfigurationFor(project); mSearch = new Text(container, SWT.SEARCH | SWT.ICON_CANCEL | SWT.ICON_SEARCH); mSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/ExportWizard.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/ExportWizard.java index 8fcf902..d7ace9a 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/ExportWizard.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/ExportWizard.java @@ -16,6 +16,7 @@ package com.android.ide.eclipse.adt.internal.wizards.export; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity; import com.android.ide.eclipse.adt.internal.project.ExportHelper; @@ -547,7 +548,7 @@ public final class ExportWizard extends Wizard implements IExportWizard { Wait.WAIT_FOR_READERS, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, line); @@ -555,7 +556,7 @@ public final class ExportWizard extends Wizard implements IExportWizard { } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { output.add(line); } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateHandler.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateHandler.java index dc0c898..4f107fb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateHandler.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateHandler.java @@ -532,6 +532,9 @@ class TemplateHandler { xml = out.toString(); } else { xml = readTemplateTextResource(from); + if (xml == null) { + return; + } } String currentXml = Files.toString(to, Charsets.UTF_8); diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/com.android.ide.eclipse.tests/.settings/org.eclipse.jdt.core.prefs index 5381a0e..bc45534 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/.settings/org.eclipse.jdt.core.prefs +++ b/eclipse/plugins/com.android.ide.eclipse.tests/.settings/org.eclipse.jdt.core.prefs @@ -1,9 +1,10 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore org.eclipse.jdt.core.compiler.annotation.nonnull=com.android.annotations.NonNull org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=com.android.annotations.NonNullByDefault org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled org.eclipse.jdt.core.compiler.annotation.nullable=com.android.annotations.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve @@ -36,7 +37,9 @@ org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=error org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled @@ -45,9 +48,11 @@ org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignor org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error org.eclipse.jdt.core.compiler.problem.nullReference=error org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java index 202d768..9f0783f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/lint/ProjectLintConfigurationTest.java @@ -15,6 +15,8 @@ */ package com.android.ide.eclipse.adt.internal.lint; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.eclipse.adt.internal.editors.layout.refactoring.AdtProjectTest; import com.android.tools.lint.checks.DuplicateIdDetector; import com.android.tools.lint.checks.UnusedResourceDetector; @@ -208,12 +210,14 @@ public class ProjectLintConfigurationTest extends AdtProjectTest { private static class TestClient extends LintClient { @Override - public void report(Context context, Issue issue, Severity severity, Location location, - String message, Object data) { + public void report(@NonNull Context context, @NonNull Issue issue, + @NonNull Severity severity, @Nullable Location location, + @NonNull String message, @Nullable Object data) { } @Override - public void log(Severity severity, Throwable exception, String format, Object... args) { + public void log(@NonNull Severity severity, @Nullable Throwable exception, + @Nullable String format, @Nullable Object... args) { } @Override @@ -222,7 +226,7 @@ public class ProjectLintConfigurationTest extends AdtProjectTest { } @Override - public String readFile(File file) { + public @NonNull String readFile(@NonNull File file) { return null; } diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java index e382132..312df7d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LayoutTestBase.java @@ -19,6 +19,8 @@ package com.android.ide.common.layout; import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.DropFeedback; import com.android.ide.common.api.IClientRulesEngine; import com.android.ide.common.api.IDragElement; @@ -198,47 +200,48 @@ public class LayoutTestBase extends TestCase { } @Override - public void debugPrintf(String msg, Object... params) { + public void debugPrintf(@NonNull String msg, Object... params) { fail("Not supported in tests yet"); } @Override - public void displayAlert(String message) { + public void displayAlert(@NonNull String message) { fail("Not supported in tests yet"); } @Override - public String displayInput(String message, String value, IValidator filter) { + public String displayInput(@NonNull String message, @Nullable String value, + @Nullable IValidator filter) { fail("Not supported in tests yet"); return null; } @Override - public String getFqcn() { + public @NonNull String getFqcn() { return mFqn; } @Override - public IViewMetadata getMetadata(final String fqcn) { + public @NonNull IViewMetadata getMetadata(final @NonNull String fqcn) { return new IViewMetadata() { @Override - public String getDisplayName() { + public @NonNull String getDisplayName() { // This also works when there is no "." return fqcn.substring(fqcn.lastIndexOf('.') + 1); } @Override - public FillPreference getFillPreference() { + public @NonNull FillPreference getFillPreference() { return ViewMetadataRepository.get().getFillPreference(fqcn); } @Override - public Margins getInsets() { + public @NonNull Margins getInsets() { return null; } @Override - public List getTopAttributes() { + public @NonNull List getTopAttributes() { return ViewMetadataRepository.get().getTopAttributes(fqcn); } }; @@ -250,7 +253,7 @@ public class LayoutTestBase extends TestCase { } @Override - public IViewRule loadRule(String fqcn) { + public IViewRule loadRule(@NonNull String fqcn) { fail("Not supported in tests yet"); return null; } @@ -262,20 +265,21 @@ public class LayoutTestBase extends TestCase { } @Override - public IValidator getResourceValidator() { + public @NonNull IValidator getResourceValidator() { fail("Not supported in tests yet"); return null; } @Override - public String displayResourceInput(String resourceTypeName, String currentValue) { + public String displayResourceInput(@NonNull String resourceTypeName, + @Nullable String currentValue) { fail("Not supported in tests yet"); return null; } @Override - public String[] displayMarginInput(String all, String left, String right, String top, - String bottom) { + public String[] displayMarginInput(@Nullable String all, @Nullable String left, + @Nullable String right, @Nullable String top, @Nullable String bottom) { fail("Not supported in tests yet"); return null; } @@ -287,7 +291,7 @@ public class LayoutTestBase extends TestCase { } @Override - public void select(Collection nodes) { + public void select(@NonNull Collection nodes) { fail("Not supported in tests yet"); } @@ -308,7 +312,8 @@ public class LayoutTestBase extends TestCase { } @Override - public Map measureChildren(INode parent, AttributeFilter filter) { + public Map measureChildren(@NonNull INode parent, + @Nullable AttributeFilter filter) { return null; } @@ -319,7 +324,7 @@ public class LayoutTestBase extends TestCase { } @Override - public String getUniqueId(String prefix) { + public @NonNull String getUniqueId(@NonNull String prefix) { fail("Not supported in tests yet"); return null; } @@ -337,7 +342,7 @@ public class LayoutTestBase extends TestCase { } @Override - public String getAppNameSpace() { + public @NonNull String getAppNameSpace() { fail("Not supported in tests yet"); return null; } diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttribute.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttribute.java index a1a2af7..76840b1 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttribute.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttribute.java @@ -15,6 +15,7 @@ */ package com.android.ide.common.layout; +import com.android.annotations.NonNull; import com.android.ide.common.api.IDragElement.IDragAttribute; import com.android.ide.common.api.INode.IAttribute; import com.android.ide.eclipse.adt.internal.editors.uimodel.UiAttributeNode; @@ -35,17 +36,17 @@ public class TestAttribute implements IAttribute, IDragAttribute { } @Override - public String getName() { + public @NonNull String getName() { return mName; } @Override - public String getUri() { + public @NonNull String getUri() { return mUri; } @Override - public String getValue() { + public @NonNull String getValue() { return mValue; } diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java index f4f83c1..69984bd 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestAttributeInfo.java @@ -15,6 +15,7 @@ */ package com.android.ide.common.layout; +import com.android.annotations.NonNull; import com.android.ide.common.api.IAttributeInfo; import java.util.EnumSet; @@ -59,22 +60,22 @@ public class TestAttributeInfo implements IAttributeInfo { } @Override - public EnumSet getFormats() { + public @NonNull EnumSet getFormats() { return mFormats; } @Override - public String getJavaDoc() { + public @NonNull String getJavaDoc() { return mJavadoc; } @Override - public String getName() { + public @NonNull String getName() { return mName; } @Override - public String getDefinedBy() { + public @NonNull String getDefinedBy() { return mDefinedBy; } } \ No newline at end of file diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestDragElement.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestDragElement.java index 4a3b4e8..eb0a432 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestDragElement.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestDragElement.java @@ -18,6 +18,8 @@ package com.android.ide.common.layout; import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IDragElement; import com.android.ide.common.api.Rect; @@ -100,7 +102,7 @@ public class TestDragElement implements IDragElement { // ==== IDragElement ==== @Override - public IDragAttribute getAttribute(String uri, String localName) { + public IDragAttribute getAttribute(@Nullable String uri, @NonNull String localName) { if (mAttributes == null) { return new TestAttribute(uri, localName, ""); } @@ -109,22 +111,22 @@ public class TestDragElement implements IDragElement { } @Override - public IDragAttribute[] getAttributes() { + public @NonNull IDragAttribute[] getAttributes() { return mAttributes.values().toArray(new IDragAttribute[mAttributes.size()]); } @Override - public Rect getBounds() { + public @NonNull Rect getBounds() { return mRect; } @Override - public String getFqcn() { + public @NonNull String getFqcn() { return mFqcn; } @Override - public IDragElement[] getInnerElements() { + public @NonNull IDragElement[] getInnerElements() { if (mChildren == null) { return new IDragElement[0]; } @@ -133,7 +135,7 @@ public class TestDragElement implements IDragElement { } @Override - public Rect getParentBounds() { + public @NonNull Rect getParentBounds() { return mParent != null ? mParent.getBounds() : null; } diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestGraphics.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestGraphics.java index 04f6259..ec93210 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestGraphics.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestGraphics.java @@ -16,6 +16,7 @@ package com.android.ide.common.layout; +import com.android.annotations.NonNull; import com.android.ide.common.api.DrawingStyle; import com.android.ide.common.api.IColor; import com.android.ide.common.api.IGraphics; @@ -51,7 +52,7 @@ public class TestGraphics implements IGraphics { // ==== IGraphics ==== @Override - public void drawBoxedStrings(int x, int y, List strings) { + public void drawBoxedStrings(int x, int y, @NonNull List strings) { mDrawn.add("drawBoxedStrings(" + x + "," + y + "," + strings + ")"); } @@ -61,7 +62,7 @@ public class TestGraphics implements IGraphics { } @Override - public void drawLine(Point p1, Point p2) { + public void drawLine(@NonNull Point p1, @NonNull Point p2) { mDrawn.add("drawLine(" + p1 + "," + p2 + ")"); } @@ -71,22 +72,22 @@ public class TestGraphics implements IGraphics { } @Override - public void drawRect(Point p1, Point p2) { + public void drawRect(@NonNull Point p1, @NonNull Point p2) { mDrawn.add("drawRect(" + p1 + "," + p2 + ")"); } @Override - public void drawRect(Rect r) { + public void drawRect(@NonNull Rect r) { mDrawn.add("drawRect(" + rectToString(r) + ")"); } @Override - public void drawString(String string, int x, int y) { + public void drawString(@NonNull String string, int x, int y) { mDrawn.add("drawString(" + x + "," + y + "," + string + ")"); } @Override - public void drawString(String string, Point topLeft) { + public void drawString(@NonNull String string, @NonNull Point topLeft) { mDrawn.add("drawString(" + string + "," + topLeft + ")"); } @@ -96,12 +97,12 @@ public class TestGraphics implements IGraphics { } @Override - public void fillRect(Point p1, Point p2) { + public void fillRect(@NonNull Point p1, @NonNull Point p2) { mDrawn.add("fillRect(" + p1 + "," + p2 + ")"); } @Override - public void fillRect(Rect r) { + public void fillRect(@NonNull Rect r) { mDrawn.add("fillRect(" + rectToString(r) + ")"); } @@ -111,7 +112,7 @@ public class TestGraphics implements IGraphics { } @Override - public IColor getBackground() { + public @NonNull IColor getBackground() { return mBackground; } @@ -121,12 +122,12 @@ public class TestGraphics implements IGraphics { } @Override - public IColor getForeground() { + public @NonNull IColor getForeground() { return mForeground; } @Override - public IColor registerColor(int rgb) { + public @NonNull IColor registerColor(int rgb) { mDrawn.add("registerColor(" + Integer.toHexString(rgb) + ")"); return new TestColor(rgb); } @@ -138,19 +139,19 @@ public class TestGraphics implements IGraphics { } @Override - public void setBackground(IColor color) { + public void setBackground(@NonNull IColor color) { mDrawn.add("setBackground(" + color + ")"); mBackground = color; } @Override - public void setForeground(IColor color) { + public void setForeground(@NonNull IColor color) { mDrawn.add("setForeground(" + color + ")"); mForeground = color; } @Override - public void setLineStyle(LineStyle style) { + public void setLineStyle(@NonNull LineStyle style) { mDrawn.add("setLineStyle(" + style + ")"); } @@ -160,7 +161,7 @@ public class TestGraphics implements IGraphics { } @Override - public void useStyle(DrawingStyle style) { + public void useStyle(@NonNull DrawingStyle style) { mDrawn.add("useStyle(" + style + ")"); } diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java index 575c958..8984f38 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/TestNode.java @@ -18,6 +18,8 @@ package com.android.ide.common.layout; import static com.android.util.XmlUtils.ANDROID_URI; import static com.android.ide.common.layout.LayoutConstants.ATTR_ID; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.api.IAttributeInfo; import com.android.ide.common.api.INode; import com.android.ide.common.api.INodeHandler; @@ -94,12 +96,12 @@ public class TestNode implements INode { // ==== INODE ==== @Override - public INode appendChild(String viewFqcn) { + public @NonNull INode appendChild(@NonNull String viewFqcn) { return insertChildAt(viewFqcn, mChildren.size()); } @Override - public void editXml(String undoName, INodeHandler callback) { + public void editXml(@NonNull String undoName, @NonNull INodeHandler callback) { callback.handle(this); } @@ -108,32 +110,32 @@ public class TestNode implements INode { } @Override - public IAttributeInfo getAttributeInfo(String uri, String attrName) { + public IAttributeInfo getAttributeInfo(@Nullable String uri, @NonNull String attrName) { return mAttributeInfos.get(uri + attrName); } @Override - public Rect getBounds() { + public @NonNull Rect getBounds() { return mBounds; } @Override - public INode[] getChildren() { + public @NonNull INode[] getChildren() { return mChildren.toArray(new INode[mChildren.size()]); } @Override - public IAttributeInfo[] getDeclaredAttributes() { + public @NonNull IAttributeInfo[] getDeclaredAttributes() { return mAttributeInfos.values().toArray(new IAttributeInfo[mAttributeInfos.size()]); } @Override - public String getFqcn() { + public @NonNull String getFqcn() { return mFqcn; } @Override - public IAttribute[] getLiveAttributes() { + public @NonNull IAttribute[] getLiveAttributes() { return mAttributes.values().toArray(new IAttribute[mAttributes.size()]); } @@ -153,7 +155,7 @@ public class TestNode implements INode { } @Override - public String getStringAttr(String uri, String attrName) { + public String getStringAttr(@Nullable String uri, @NonNull String attrName) { IAttribute attr = mAttributes.get(uri + attrName); if (attr == null) { return null; @@ -163,7 +165,7 @@ public class TestNode implements INode { } @Override - public INode insertChildAt(String viewFqcn, int index) { + public @NonNull INode insertChildAt(@NonNull String viewFqcn, int index) { TestNode child = new TestNode(viewFqcn); if (index == -1) { mChildren.add(child); @@ -175,7 +177,7 @@ public class TestNode implements INode { } @Override - public void removeChild(INode node) { + public void removeChild(@NonNull INode node) { int index = mChildren.indexOf(node); if (index != -1) { removeChild(index); @@ -183,7 +185,8 @@ public class TestNode implements INode { } @Override - public boolean setAttribute(String uri, String localName, String value) { + public boolean setAttribute(@Nullable String uri, @NonNull String localName, + @Nullable String value) { mAttributes.put(uri + localName, new TestAttribute(uri, localName, value)); return true; } @@ -200,12 +203,12 @@ public class TestNode implements INode { } @Override - public Margins getMargins() { + public @NonNull Margins getMargins() { return null; } @Override - public List getAttributeSources() { + public @NonNull List getAttributeSources() { return mAttributeSources != null ? mAttributeSources : Collections.emptyList(); } diff --git a/lint/cli/src/com/android/tools/lint/LintCliXmlParser.java b/lint/cli/src/com/android/tools/lint/LintCliXmlParser.java index e777e99..c13c41d 100644 --- a/lint/cli/src/com/android/tools/lint/LintCliXmlParser.java +++ b/lint/cli/src/com/android/tools/lint/LintCliXmlParser.java @@ -16,6 +16,7 @@ package com.android.tools.lint; +import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.tools.lint.client.api.IDomParser; import com.android.tools.lint.client.api.IssueRegistry; @@ -40,7 +41,7 @@ import java.io.UnsupportedEncodingException; */ public class LintCliXmlParser extends PositionXmlParser implements IDomParser { @Override - public Document parseXml(XmlContext context) { + public Document parseXml(@NonNull XmlContext context) { try { // Do we need to provide an input stream for encoding? String xml = context.getContents(); @@ -70,22 +71,22 @@ public class LintCliXmlParser extends PositionXmlParser implements IDomParser { } @Override - public Location getLocation(XmlContext context, Node node) { + public @NonNull Location getLocation(@NonNull XmlContext context, @NonNull Node node) { OffsetPosition pos = (OffsetPosition) getPosition(node); if (pos != null) { return Location.create(context.file, pos, (OffsetPosition) pos.getEnd()); } - return null; + return Location.create(context.file); } @Override - public Handle createLocationHandle(XmlContext context, Node node) { + public @NonNull Handle createLocationHandle(@NonNull XmlContext context, @NonNull Node node) { return new LocationHandle(context.file, node); } @Override - protected OffsetPosition createPosition(int line, int column, int offset) { + protected @NonNull OffsetPosition createPosition(int line, int column, int offset) { return new OffsetPosition(line, column, offset); } @@ -143,7 +144,7 @@ public class LintCliXmlParser extends PositionXmlParser implements IDomParser { } @Override - public void setEnd(com.android.util.PositionXmlParser.Position end) { + public void setEnd(@NonNull com.android.util.PositionXmlParser.Position end) { mEnd = end; } @@ -155,7 +156,7 @@ public class LintCliXmlParser extends PositionXmlParser implements IDomParser { } @Override - public void dispose(XmlContext context, Document document) { + public void dispose(@NonNull XmlContext context, @NonNull Document document) { } /* Handle for creating DOM positions cheaply and returning full fledged locations later */ @@ -170,13 +171,13 @@ public class LintCliXmlParser extends PositionXmlParser implements IDomParser { } @Override - public Location resolve() { + public @NonNull Location resolve() { OffsetPosition pos = (OffsetPosition) getPosition(mNode); if (pos != null) { return Location.create(mFile, pos, (OffsetPosition) pos.getEnd()); } - return null; + return Location.create(mFile); } @Override diff --git a/lint/cli/src/com/android/tools/lint/LombokParser.java b/lint/cli/src/com/android/tools/lint/LombokParser.java index 15b1073..2c263c6 100644 --- a/lint/cli/src/com/android/tools/lint/LombokParser.java +++ b/lint/cli/src/com/android/tools/lint/LombokParser.java @@ -16,6 +16,7 @@ package com.android.tools.lint; +import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.tools.lint.client.api.IJavaParser; import com.android.tools.lint.detector.api.JavaContext; @@ -39,7 +40,7 @@ import lombok.ast.grammar.Source; public class LombokParser implements IJavaParser { @Override - public Node parseJava(JavaContext context) { + public Node parseJava(@NonNull JavaContext context) { try { Source source = new Source(context.getContents(), context.file.getName()); List nodes = source.getNodes(); @@ -95,19 +96,21 @@ public class LombokParser implements IJavaParser { } @Override - public Location getLocation(JavaContext context, lombok.ast.Node node) { + public @NonNull Location getLocation( + @NonNull JavaContext context, + @NonNull lombok.ast.Node node) { lombok.ast.Position position = node.getPosition(); return Location.create(context.file, context.getContents(), position.getStart(), position.getEnd()); } @Override - public Handle createLocationHandle(JavaContext context, Node node) { + public @NonNull Handle createLocationHandle(@NonNull JavaContext context, @NonNull Node node) { return new LocationHandle(context.file, node); } @Override - public void dispose(JavaContext context, Node compilationUnit) { + public void dispose(@NonNull JavaContext context, @NonNull Node compilationUnit) { } /* Handle for creating positions cheaply and returning full fledged locations later */ @@ -122,7 +125,7 @@ public class LombokParser implements IJavaParser { } @Override - public Location resolve() { + public @NonNull Location resolve() { Position pos = mNode.getPosition(); return Location.create(mFile, null /*contents*/, pos.getStart(), pos.getEnd()); } diff --git a/lint/cli/src/com/android/tools/lint/Main.java b/lint/cli/src/com/android/tools/lint/Main.java index 6a40cb3..68d68b4 100644 --- a/lint/cli/src/com/android/tools/lint/Main.java +++ b/lint/cli/src/com/android/tools/lint/Main.java @@ -21,6 +21,7 @@ import static com.android.tools.lint.client.api.IssueRegistry.PARSER_ERROR; import static com.android.tools.lint.detector.api.LintConstants.DOT_XML; import static com.android.tools.lint.detector.api.LintUtils.endsWith; +import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.android.tools.lint.checks.BuiltinIssueRegistry; import com.android.tools.lint.client.api.Configuration; @@ -886,7 +887,11 @@ public class Main extends LintClient { } @Override - public void log(Severity severity, Throwable exception, String format, Object... args) { + public void log( + @NonNull Severity severity, + @Nullable Throwable exception, + @Nullable String format, + @Nullable Object... args) { System.out.flush(); if (!mQuiet) { // Place the error message on a line of its own since we're printing '.' etc @@ -907,7 +912,7 @@ public class Main extends LintClient { } @Override - public Configuration getConfiguration(Project project) { + public Configuration getConfiguration(@NonNull Project project) { return new CliConfiguration(mDefaultConfiguration, project); } @@ -934,8 +939,13 @@ public class Main extends LintClient { } @Override - public void report(Context context, Issue issue, Severity severity, Location location, - String message, Object data) { + public void report( + @NonNull Context context, + @NonNull Issue issue, + @NonNull Severity severity, + @Nullable Location location, + @NonNull String message, + @Nullable Object data) { assert context.isEnabled(issue); if (severity == Severity.IGNORE) { @@ -1041,7 +1051,7 @@ public class Main extends LintClient { } @Override - public String readFile(File file) { + public @NonNull String readFile(@NonNull File file) { try { return LintUtils.getEncodedString(file); } catch (IOException e) { @@ -1067,7 +1077,7 @@ public class Main extends LintClient { } @Override - public Severity getSeverity(Issue issue) { + public @NonNull Severity getSeverity(@NonNull Issue issue) { Severity severity = computeSeverity(issue); if (mAllErrors && severity != Severity.IGNORE) { @@ -1082,7 +1092,7 @@ public class Main extends LintClient { } @Override - protected Severity getDefaultSeverity(Issue issue) { + protected @NonNull Severity getDefaultSeverity(@NonNull Issue issue) { if (mWarnAll) { return issue.getDefaultSeverity(); } @@ -1090,7 +1100,7 @@ public class Main extends LintClient { return super.getDefaultSeverity(issue); } - private Severity computeSeverity(Issue issue) { + private Severity computeSeverity(@NonNull Issue issue) { Severity severity = super.getSeverity(issue); String id = issue.getId(); @@ -1123,25 +1133,32 @@ public class Main extends LintClient { private class ProgressPrinter implements LintListener { @Override - public void update(LintDriver lint, EventType type, Context context) { + public void update( + @NonNull LintDriver lint, + @NonNull EventType type, + @Nullable Context context) { switch (type) { - case SCANNING_PROJECT: + case SCANNING_PROJECT: { + String name = context != null ? context.getProject().getName() : "?"; if (lint.getPhase() > 1) { System.out.print(String.format( "\nScanning %1$s (Phase %2$d): ", - context.getProject().getName(), + name, lint.getPhase())); } else { System.out.print(String.format( "\nScanning %1$s: ", - context.getProject().getName())); + name)); } break; - case SCANNING_LIBRARY_PROJECT: + } + case SCANNING_LIBRARY_PROJECT: { + String name = context != null ? context.getProject().getName() : "?"; System.out.print(String.format( "\n - %1$s: ", - context.getProject().getName())); + name)); break; + } case SCANNING_FILE: System.out.print('.'); break; diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultConfiguration.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultConfiguration.java index 6dc4804..665368c 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultConfiguration.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultConfiguration.java @@ -202,7 +202,12 @@ public class DefaultConfiguration extends Configuration { message = String.format(message, args); } message = "Failed to parse lint.xml configuration file: " + message; - mClient.report(new Context(null, mProject, mProject, mConfigFile), + LintDriver driver = new LintDriver(new IssueRegistry() { + @Override @NonNull public List getIssues() { + return Collections.emptyList(); + } + }, mClient); + mClient.report(new Context(driver, mProject, mProject, mConfigFile), IssueRegistry.LINT_ERROR, mProject.getConfiguration().getSeverity(IssueRegistry.LINT_ERROR), Location.create(mConfigFile), message, null); diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/IssueRegistry.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/IssueRegistry.java index 74df385..cf45b2e 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/IssueRegistry.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/IssueRegistry.java @@ -57,7 +57,7 @@ public abstract class IssueRegistry { Category.CORRECTNESS, 10, Severity.ERROR, - null, + Detector.class, Scope.RESOURCE_FILE_SCOPE); /** @@ -78,7 +78,7 @@ public abstract class IssueRegistry { Category.LINT, 10, Severity.ERROR, - null, + Detector.class, Scope.RESOURCE_FILE_SCOPE); /** diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/JavaVisitor.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/JavaVisitor.java index 1dbf915..3b641d0 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/JavaVisitor.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/JavaVisitor.java @@ -1172,7 +1172,7 @@ public class JavaVisitor { } @Override - public boolean visitMethodInvocation(@NonNull MethodInvocation node) { + public boolean visitMethodInvocation(MethodInvocation node) { if (mVisitMethods) { String methodName = node.astName().getDescription(); List list = mMethodDetectors.get(methodName); diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintClient.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintClient.java index 27741b1..93e311e 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintClient.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintClient.java @@ -232,7 +232,7 @@ public abstract class LintClient { * the create flag was false, or if for some reason the directory * could not be created */ - @NonNull + @Nullable public File getCacheDir(boolean create) { String home = System.getProperty("user.home"); String relative = ".android" + File.separator + "cache"; //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java index f0bbae6..05c5765 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java @@ -538,7 +538,7 @@ public class LintDriver { continue; } else { parent = parent.getParentFile(); - if (isProjectDir(parent)) { + if (parent != null && isProjectDir(parent)) { registerProjectFile(fileToProject, file, parent, parent); continue; } @@ -718,7 +718,7 @@ public class LintDriver { // Must provide an issue since API guarantees that the issue parameter // is valid Issue.create("Lint", "", "", Category.PERFORMANCE, 0, Severity.INFORMATIONAL, //$NON-NLS-1$ - null, EnumSet.noneOf(Scope.class)), + Detector.class, EnumSet.noneOf(Scope.class)), Severity.INFORMATIONAL, null /*range*/, "Lint canceled by user", null); @@ -762,9 +762,9 @@ public class LintDriver { } } if (xmlDetectors.size() > 0) { - if (project.getSubset() != null) { - checkIndividualResources(project, main, xmlDetectors, - project.getSubset()); + List files = project.getSubset(); + if (files != null) { + checkIndividualResources(project, main, xmlDetectors, files); } else { File res = new File(project.getDir(), RES_FOLDER); if (res.exists() && xmlDetectors.size() > 0) { @@ -783,9 +783,9 @@ public class LintDriver { List checks = union(mScopeDetectors.get(Scope.JAVA_FILE), mScopeDetectors.get(Scope.ALL_JAVA_FILES)); if (checks != null && checks.size() > 0) { - if (project.getSubset() != null) { - checkIndividualJavaFiles(project, main, checks, - project.getSubset()); + List files = project.getSubset(); + if (files != null) { + checkIndividualJavaFiles(project, main, checks, files); } else { List sourceFolders = project.getJavaSourceFolders(); checkJava(project, main, sourceFolders, checks); @@ -931,8 +931,9 @@ public class LintDriver { /** Check the classes in this project (and if applicable, in any library projects */ private void checkClasses(Project project, Project main) { - if (project.getSubset() != null) { - checkIndividualClassFiles(project, main, project.getSubset()); + List files = project.getSubset(); + if (files != null) { + checkIndividualClassFiles(project, main, files); return; } @@ -1119,7 +1120,8 @@ public class LintDriver { for (ClassEntry entry : entries) { try { ClassReader reader = new ClassReader(entry.bytes); - int flags = ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES; + int flags = ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG + | ClassReader.SKIP_FRAMES; reader.accept(visitor, flags); } catch (Throwable t) { mClient.log(null, "Error processing %1$s: broken class file?", entry.path()); @@ -1345,7 +1347,10 @@ public class LintDriver { return null; } - mCurrentVisitor = new XmlVisitor(mClient.getDomParser(), applicableChecks); + IDomParser parser = mClient.getDomParser(); + if (parser != null) { + mCurrentVisitor = new XmlVisitor(parser, applicableChecks); + } } return mCurrentVisitor; @@ -1466,7 +1471,7 @@ public class LintDriver { } /** Notifies listeners, if any, that the given event has occurred */ - private void fireEvent(@NonNull LintListener.EventType type, @NonNull Context context) { + private void fireEvent(@NonNull LintListener.EventType type, @Nullable Context context) { if (mListeners != null) { for (int i = 0, n = mListeners.size(); i < n; i++) { LintListener listener = mListeners.get(i); @@ -1553,7 +1558,7 @@ public class LintDriver { } @Override - public List getJavaLibraries(Project project) { + public @NonNull List getJavaLibraries(@NonNull Project project) { return mDelegate.getJavaLibraries(project); } @@ -1565,13 +1570,14 @@ public class LintDriver { @Override @NonNull - public Class replaceDetector(Class detectorClass) { + public Class replaceDetector( + @NonNull Class detectorClass) { return mDelegate.replaceDetector(detectorClass); } @Override @NonNull - public SdkInfo getSdkInfo(Project project) { + public SdkInfo getSdkInfo(@NonNull Project project) { return mDelegate.getSdkInfo(project); } @@ -1588,7 +1594,7 @@ public class LintDriver { } @Override - public File findResource(String relativePath) { + public File findResource(@NonNull String relativePath) { return mDelegate.findResource(relativePath); } } diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintListener.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintListener.java index 777100d..2247a6d 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintListener.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintListener.java @@ -17,6 +17,7 @@ package com.android.tools.lint.client.api; import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Context; import com.google.common.annotations.Beta; @@ -65,5 +66,5 @@ public interface LintListener { * @param context the context providing additional information */ public void update(@NonNull LintDriver driver, @NonNull EventType type, - @NonNull Context context); + @Nullable Context context); } diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/SdkInfo.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/SdkInfo.java index b16747c..5ff7f90 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/SdkInfo.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/SdkInfo.java @@ -42,11 +42,12 @@ public abstract class SdkInfo { if (parentViewFqcn.equals(childViewFqcn)) { return true; } - childViewFqcn = getParentViewClass(childViewFqcn); - if (childViewFqcn == null) { + String parent = getParentViewClass(childViewFqcn); + if (parent == null) { // Unknown view - err on the side of caution return true; } + childViewFqcn = parent; } return false; diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Category.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Category.java index 6978ef0..ba8e5b5 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Category.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Category.java @@ -125,7 +125,7 @@ public final class Category implements Comparable { } @Override - public int compareTo(@NonNull Category other) { + public int compareTo(Category other) { if (other.mPriority == mPriority) { if (mParent == other) { return 1; diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/ClassContext.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/ClassContext.java index 7b3cffd..3c6842e 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/ClassContext.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/ClassContext.java @@ -254,7 +254,11 @@ public class ClassContext extends Context { * @param data any associated data, or null */ @Override - public void report(Issue issue, Location location, String message, Object data) { + public void report( + @NonNull Issue issue, + @Nullable Location location, + @NonNull String message, + @Nullable Object data) { if (mDriver.isSuppressed(issue, mClassNode)) { return; } diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Detector.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Detector.java index c795606..c8f9fd2 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Detector.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Detector.java @@ -372,7 +372,9 @@ public abstract class Detector { * @return the expected speed of this detector */ @NonNull - public abstract Speed getSpeed(); + public Speed getSpeed() { + return Speed.NORMAL; + } // ---- Dummy implementations to make implementing XmlScanner easier: ---- diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Issue.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Issue.java index 9f42fb4..0ac8805 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Issue.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Issue.java @@ -219,7 +219,7 @@ public final class Issue implements Comparable { * @param other the {@link Issue} to compare this issue to */ @Override - public int compareTo(@NonNull Issue other) { + public int compareTo(Issue other) { return getId().compareTo(other.getId()); } diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/JavaContext.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/JavaContext.java index d7c1e6e..ae86568 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/JavaContext.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/JavaContext.java @@ -74,7 +74,8 @@ public class JavaContext extends Context { } @Override - public void report(Issue issue, Location location, String message, Object data) { + public void report(@NonNull Issue issue, @Nullable Location location, + @NonNull String message, @Nullable Object data) { if (mDriver.isSuppressed(issue, compilationUnit)) { return; } diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java index 9d61047..167de42 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java @@ -110,7 +110,7 @@ public class Location { * * @param secondary a secondary location associated with this location */ - public void setSecondary(@NonNull Location secondary) { + public void setSecondary(@Nullable Location secondary) { this.mSecondary = secondary; } @@ -197,7 +197,7 @@ public class Location { public static Location create( @NonNull File file, @NonNull Position start, - @NonNull Position end) { + @Nullable Position end) { return new Location(file, start, end); } diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Severity.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Severity.java index d0bbd7b..cde61bd 100644 --- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Severity.java +++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Severity.java @@ -31,30 +31,36 @@ public enum Severity { * Fatal: Use sparingly because a warning marked as fatal will be * considered critical and will abort Export APK etc in ADT */ + @NonNull FATAL("Fatal"), /** * Errors: The issue is known to be a real error that must be addressed. */ + @NonNull ERROR("Error"), /** * Warning: Probably a problem. */ + @NonNull WARNING("Warning"), /** * Information only: Might not be a problem, but the check has found * something interesting to say about the code. */ + @NonNull INFORMATIONAL("Information"), /** * Ignore: The user doesn't want to see this issue */ + @NonNull IGNORE("Ignore"); - private String mDisplay; + @NonNull + private final String mDisplay; private Severity(@NonNull String display) { mDisplay = display; @@ -65,8 +71,7 @@ public enum Severity { * * @return a description of the severity */ - @NonNull - public String getDescription() { + public @NonNull String getDescription() { return mDisplay; } } \ No newline at end of file diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java index abc08b2..323f88a 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/AccessibilityDetector.java @@ -21,6 +21,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_CONTENT_DES import static com.android.tools.lint.detector.api.LintConstants.IMAGE_BUTTON; import static com.android.tools.lint.detector.api.LintConstants.IMAGE_VIEW; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -62,7 +63,7 @@ public class AccessibilityDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -75,7 +76,7 @@ public class AccessibilityDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (!element.hasAttributeNS(ANDROID_URI, ATTR_CONTENT_DESCRIPTION)) { context.report(ISSUE, element, context.getLocation(element), "[Accessibility] Missing contentDescription attribute on image", null); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/AlwaysShowActionDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/AlwaysShowActionDetector.java index 9bbb4c1..bc5eaae 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/AlwaysShowActionDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/AlwaysShowActionDetector.java @@ -98,7 +98,7 @@ public class AlwaysShowActionDetector extends ResourceXmlDetector implements Jav } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -108,12 +108,12 @@ public class AlwaysShowActionDetector extends ResourceXmlDetector implements Jav } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { mFileAttributes = null; } @Override - public void afterCheckFile(Context context) { + public void afterCheckFile(@NonNull Context context) { if (mFileAttributes != null) { assert context instanceof XmlContext; // mAFilettributes is only set in XML files @@ -161,7 +161,7 @@ public class AlwaysShowActionDetector extends ResourceXmlDetector implements Jav } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mAlwaysFields != null && !mHasIfRoomRefs) { for (Location location : mAlwaysFields) { context.report(ISSUE, location, @@ -174,7 +174,7 @@ public class AlwaysShowActionDetector extends ResourceXmlDetector implements Jav // ---- Implements XmlScanner ---- @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { if (mFileAttributes == null) { mFileAttributes = new ArrayList(); } @@ -190,7 +190,7 @@ public class AlwaysShowActionDetector extends ResourceXmlDetector implements Jav } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { return new FieldAccessChecker(context); } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java index 4f6df4f..9eae7c4 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java @@ -94,17 +94,17 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.SLOW; } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { mApiDatabase = ApiLookup.get(context.getClient()); // We can't look up the minimum API required by the project here: // The manifest file hasn't been processed yet in the -before- project hook. @@ -130,7 +130,7 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { if (mApiDatabase == null) { return; } @@ -158,7 +158,7 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (mApiDatabase == null) { return; } @@ -234,7 +234,7 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc @SuppressWarnings("rawtypes") @Override - public void checkClass(final ClassContext context, ClassNode classNode) { + public void checkClass(final @NonNull ClassContext context, @NonNull ClassNode classNode) { if (mApiDatabase == null) { return; } @@ -319,7 +319,7 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc owner = classNode.superName; } - do { + while (owner != null) { int api = mApiDatabase.getCallVersion(owner, name, desc); if (api > minSdk) { String fqcn = owner.replace('/', '.') + '#' + name; @@ -339,7 +339,7 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc } else { owner = null; } - } while (owner != null); + } } else if (type == AbstractInsnNode.FIELD_INSN) { FieldInsnNode node = (FieldInsnNode) instruction; String name = node.name; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiLookup.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiLookup.java index dd5585b..4186028 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiLookup.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiLookup.java @@ -739,7 +739,7 @@ public class ApiLookup { return -1; } - private int findMember(int classNumber, @NonNull String name, @NonNull String desc) { + private int findMember(int classNumber, @NonNull String name, @Nullable String desc) { // The index array contains class indexes from 0 to classCount and // member indices from classCount to mIndices.length. int low = mClassCount; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ArraySizeDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ArraySizeDetector.java index 568e885..92743b8 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ArraySizeDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ArraySizeDetector.java @@ -22,6 +22,7 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_ARRAY; import static com.android.tools.lint.detector.api.LintConstants.TAG_INTEGER_ARRAY; import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING_ARRAY; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.client.api.LintDriver; import com.android.tools.lint.detector.api.Category; @@ -32,7 +33,6 @@ import com.android.tools.lint.detector.api.Location; import com.android.tools.lint.detector.api.ResourceXmlDetector; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; -import com.android.tools.lint.detector.api.Speed; import com.android.tools.lint.detector.api.XmlContext; import com.android.util.Pair; @@ -91,16 +91,11 @@ public class ArraySizeDetector extends ResourceXmlDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.VALUES; } @Override - public Speed getSpeed() { - return Speed.NORMAL; - } - - @Override public Collection getApplicableElements() { return Arrays.asList( TAG_ARRAY, @@ -110,14 +105,14 @@ public class ArraySizeDetector extends ResourceXmlDetector { } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { mFileToArrayCount = new HashMap>(30); } } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { // Check that all arrays for the same name have the same number of translations @@ -222,7 +217,7 @@ public class ArraySizeDetector extends ResourceXmlDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { int phase = context.getPhase(); Attr attribute = element.getAttributeNode(ATTR_NAME); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java index 0645d56..146da7f 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/BuiltinIssueRegistry.java @@ -19,6 +19,7 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintUtils.assertionsEnabled; import static com.android.tools.lint.detector.api.LintUtils.endsWith; +import com.android.annotations.NonNull; import com.android.prefs.AndroidLocation; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.tools.lint.client.api.IssueRegistry; @@ -173,7 +174,7 @@ public class BuiltinIssueRegistry extends IssueRegistry { } @Override - public List getIssues() { + public @NonNull List getIssues() { return sIssues; } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java index 9321561..b644b14 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java @@ -178,7 +178,7 @@ public class ButtonDetector extends ResourceXmlDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -193,7 +193,7 @@ public class ButtonDetector extends ResourceXmlDetector { } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { int phase = context.getPhase(); if (phase == 1 && mApplicableResources != null) { // We found resources for the string "Cancel"; perform a second pass @@ -214,7 +214,7 @@ public class ButtonDetector extends ResourceXmlDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { // This detector works in two passes. // In pass 1, it looks in layout files for hardcoded strings of "Cancel", or // references to @string/cancel or @android:string/cancel. diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ChildCountDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ChildCountDetector.java index 5a14f75..2f4503b 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ChildCountDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ChildCountDetector.java @@ -22,6 +22,7 @@ import static com.android.tools.lint.detector.api.LintConstants.LIST_VIEW; import static com.android.tools.lint.detector.api.LintConstants.REQUEST_FOCUS; import static com.android.tools.lint.detector.api.LintConstants.SCROLL_VIEW; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -74,7 +75,7 @@ public class ChildCountDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -90,7 +91,7 @@ public class ChildCountDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { int childCount = LintUtils.getChildCount(element); String tagName = element.getTagName(); if (tagName.equals(SCROLL_VIEW) || tagName.equals(HORIZONTAL_SCROLL_VIEW)) { diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ColorUsageDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ColorUsageDetector.java index e6d077a..dc3410b 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ColorUsageDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ColorUsageDetector.java @@ -18,6 +18,8 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.RESOURCE_CLZ_COLOR; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -60,12 +62,12 @@ public class ColorUsageDetector extends Detector implements Detector.JavaScanner } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -77,8 +79,8 @@ public class ColorUsageDetector extends Detector implements Detector.JavaScanner } @Override - public void visitResourceReference(JavaContext context, AstVisitor visitor, - Node select, String type, String name, boolean isFramework) { + public void visitResourceReference(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull Node select, @NonNull String type, @NonNull String name, boolean isFramework) { if (type.equals(RESOURCE_CLZ_COLOR)) { while (select.getParent() instanceof Select) { select = select.getParent(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java index 25c247d..952224c 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java @@ -28,6 +28,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_PASSWORD; import static com.android.tools.lint.detector.api.LintConstants.ATTR_PHONE_NUMBER; import static com.android.tools.lint.detector.api.LintConstants.ATTR_SINGLE_LINE; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -64,7 +65,7 @@ public class DeprecationDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -119,13 +120,13 @@ public class DeprecationDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { context.report(ISSUE, element, context.getLocation(element), String.format("%1$s is deprecated", element.getTagName()), null); } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { if (!ANDROID_URI.equals(attribute.getNamespaceURI())) { return; } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DetectMissingPrefix.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DetectMissingPrefix.java index 6ea7899..8a9c0a9 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DetectMissingPrefix.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DetectMissingPrefix.java @@ -23,6 +23,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_STYLE; import static com.android.tools.lint.detector.api.LintConstants.VIEW_TAG; import static com.android.tools.lint.detector.api.LintConstants.XMLNS_PREFIX; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -70,7 +71,7 @@ public class DetectMissingPrefix extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -80,7 +81,7 @@ public class DetectMissingPrefix extends LayoutDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String uri = attribute.getNamespaceURI(); if (uri == null || uri.length() == 0) { String name = attribute.getName(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DuplicateIdDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DuplicateIdDetector.java index bbb3de5..c8e34c5 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DuplicateIdDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DuplicateIdDetector.java @@ -24,6 +24,7 @@ import static com.android.tools.lint.detector.api.LintConstants.INCLUDE; import static com.android.tools.lint.detector.api.LintConstants.LAYOUT_RESOURCE_PREFIX; import static com.android.tools.lint.detector.api.LintConstants.NEW_ID_RESOURCE_PREFIX; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; @@ -103,12 +104,12 @@ public class DuplicateIdDetector extends LayoutDetector { @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.LAYOUT || folderType == ResourceFolderType.MENU; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -123,14 +124,14 @@ public class DuplicateIdDetector extends LayoutDetector { } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { if (context.getPhase() == 1) { mIds = new HashSet(); } } @Override - public void afterCheckFile(Context context) { + public void afterCheckFile(@NonNull Context context) { if (context.getPhase() == 1) { // Store this layout's set of ids for full project analysis in afterCheckProject mFileToIds.put(context.file, mIds); @@ -140,7 +141,7 @@ public class DuplicateIdDetector extends LayoutDetector { } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { mFileToIds = new HashMap>(); mIncludes = new HashMap>(); @@ -148,7 +149,7 @@ public class DuplicateIdDetector extends LayoutDetector { } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { // Look for duplicates if (mIncludes.size() > 0) { @@ -201,7 +202,7 @@ public class DuplicateIdDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { // Record include graph such that we can look for inter-layout duplicates after the // project has been fully checked @@ -241,7 +242,7 @@ public class DuplicateIdDetector extends LayoutDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { assert attribute.getName().equals(ATTR_ID) || attribute.getLocalName().equals(ATTR_ID); String id = attribute.getValue(); if (context.getPhase() == 1) { diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ExtraTextDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ExtraTextDetector.java index e0665df..7e2ecb2 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ExtraTextDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ExtraTextDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.DefaultPosition; @@ -59,7 +60,7 @@ public class ExtraTextDetector extends ResourceXmlDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.LAYOUT || folderType == ResourceFolderType.MENU || folderType == ResourceFolderType.ANIMATOR @@ -69,12 +70,12 @@ public class ExtraTextDetector extends ResourceXmlDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public void visitDocument(XmlContext context, Document document) { + public void visitDocument(@NonNull XmlContext context, @NonNull Document document) { mFoundText = false; visitNode(context, document); } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/FieldGetterDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/FieldGetterDetector.java index 656c226..7d8deab 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/FieldGetterDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/FieldGetterDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; import com.android.tools.lint.detector.api.Context; @@ -72,12 +73,12 @@ public class FieldGetterDetector extends Detector implements Detector.ClassScann } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -85,7 +86,7 @@ public class FieldGetterDetector extends Detector implements Detector.ClassScann @SuppressWarnings("rawtypes") @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { List pendingCalls = null; int currentLine = 0; List methodList = classNode.methods; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/FragmentDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/FragmentDetector.java index 37b22ea..6839004 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/FragmentDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/FragmentDetector.java @@ -20,6 +20,7 @@ import static com.android.tools.lint.detector.api.LintConstants.CONSTRUCTOR_NAME import static com.android.tools.lint.detector.api.LintConstants.FRAGMENT; import static com.android.tools.lint.detector.api.LintConstants.FRAGMENT_V4; +import com.android.annotations.NonNull; import com.android.tools.lint.client.api.LintDriver; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; @@ -77,19 +78,19 @@ public class FragmentDetector extends Detector implements ClassScanner { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } // ---- Implements ClassScanner ---- @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { if ((classNode.access & Opcodes.ACC_ABSTRACT) != 0) { // Ignore abstract classes since they are clearly (and by definition) not intended to // be instantiated. We're looking for accidental non-static or missing constructor diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/GridLayoutDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/GridLayoutDetector.java index 762a4b5..6e8d8a3 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/GridLayoutDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/GridLayoutDetector.java @@ -22,6 +22,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_LAYOUT_COLU import static com.android.tools.lint.detector.api.LintConstants.ATTR_LAYOUT_ROW; import static com.android.tools.lint.detector.api.LintConstants.ATTR_ROW_COUNT; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -60,7 +61,7 @@ public class GridLayoutDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -85,7 +86,7 @@ public class GridLayoutDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { int declaredRowCount = getInt(element, ATTR_ROW_COUNT, -1); int declaredColumnCount = getInt(element, ATTR_COLUMN_COUNT, -1); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/HandlerDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/HandlerDetector.java index 425edac..9efd666 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/HandlerDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/HandlerDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; import com.android.tools.lint.detector.api.Context; @@ -60,19 +61,19 @@ public class HandlerDetector extends Detector implements ClassScanner { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } // ---- Implements ClassScanner ---- @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { if (classNode.name.indexOf('$') == -1) { return; } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedDebugModeDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedDebugModeDetector.java index df8c728..1237e1b 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedDebugModeDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedDebugModeDetector.java @@ -20,6 +20,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ANDROID_MANIFEST import static com.android.tools.lint.detector.api.LintConstants.ANDROID_URI; import static com.android.tools.lint.detector.api.LintConstants.ATTR_DEBUGGABLE; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -65,12 +66,12 @@ public class HardcodedDebugModeDetector extends Detector implements Detector.Xml } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return file.getName().equals(ANDROID_MANIFEST_XML); } @@ -82,7 +83,7 @@ public class HardcodedDebugModeDetector extends Detector implements Detector.Xml } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { if (attribute.getNamespaceURI().equals(ANDROID_URI)) { //if (attribute.getOwnerElement().getTagName().equals(TAG_APPLICATION)) { context.report(ISSUE, attribute, context.getLocation(attribute), diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedValuesDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedValuesDetector.java index 09a3ffc..3665303 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedValuesDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/HardcodedValuesDetector.java @@ -23,6 +23,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_LABEL; import static com.android.tools.lint.detector.api.LintConstants.ATTR_PROMPT; import static com.android.tools.lint.detector.api.LintConstants.ATTR_TEXT; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -66,7 +67,7 @@ public class HardcodedValuesDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -82,7 +83,7 @@ public class HardcodedValuesDetector extends LayoutDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String value = attribute.getValue(); if (value.length() > 0 && (value.charAt(0) != '@' && value.charAt(0) != '?')) { // Make sure this is really one of the android: attributes diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/IconDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/IconDetector.java index c687d74..adee77d 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/IconDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/IconDetector.java @@ -34,6 +34,7 @@ import static com.android.tools.lint.detector.api.LintConstants.RES_FOLDER; import static com.android.tools.lint.detector.api.LintConstants.TAG_APPLICATION; import static com.android.tools.lint.detector.api.LintUtils.endsWith; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -258,22 +259,22 @@ public class IconDetector extends Detector implements Detector.XmlScanner { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.SLOW; } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { mApplicationIcon = null; } @Override - public void afterCheckLibraryProject(Context context) { + public void afterCheckLibraryProject(@NonNull Context context) { checkResourceFolder(context, context.getProject().getDir()); } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { checkResourceFolder(context, context.getProject().getDir()); } @@ -1203,7 +1204,7 @@ public class IconDetector extends Detector implements Detector.XmlScanner { // XML detector: Skim manifest @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return file.getName().equals(ANDROID_MANIFEST_XML); } @@ -1213,7 +1214,7 @@ public class IconDetector extends Detector implements Detector.XmlScanner { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { assert element.getTagName().equals(TAG_APPLICATION); mApplicationIcon = element.getAttributeNS(ANDROID_URI, ATTR_ICON); if (mApplicationIcon.startsWith(DRAWABLE_RESOURCE_PREFIX)) { diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/InefficientWeightDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/InefficientWeightDetector.java index 84216d1..3fd5573 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/InefficientWeightDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/InefficientWeightDetector.java @@ -25,6 +25,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_ORIENTATION import static com.android.tools.lint.detector.api.LintConstants.LINEAR_LAYOUT; import static com.android.tools.lint.detector.api.LintConstants.VALUE_VERTICAL; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -100,7 +101,7 @@ public class InefficientWeightDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -110,7 +111,7 @@ public class InefficientWeightDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { List children = LintUtils.getChildren(element); // See if there is exactly one child with a weight boolean multipleWeights = false; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/JavaPerformanceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/JavaPerformanceDetector.java index e99005c..0073d06 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/JavaPerformanceDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/JavaPerformanceDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -139,12 +140,12 @@ public class JavaPerformanceDetector extends Detector implements Detector.JavaSc } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -160,7 +161,7 @@ public class JavaPerformanceDetector extends Detector implements Detector.JavaSc } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { return new PerformanceVisitor(context); } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java index cf75ae5..b116eb9 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java @@ -31,6 +31,7 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_USES_LIBRARY import static com.android.tools.lint.detector.api.LintConstants.TAG_USES_PERMISSION; import static com.android.tools.lint.detector.api.LintConstants.TAG_USES_SDK; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -159,23 +160,23 @@ public class ManifestOrderDetector extends Detector implements Detector.XmlScann private String mPackage; @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return file.getName().equals(ANDROID_MANIFEST_XML); } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { mSeenApplication = false; mSeenUsesSdk = 0; } @Override - public void afterCheckFile(Context context) { + public void afterCheckFile(@NonNull Context context) { if (mSeenUsesSdk == 0 && context.isEnabled(USES_SDK)) { context.report(USES_SDK, Location.create(context.file), "Manifest should specify a minimum API level with " + @@ -209,7 +210,7 @@ public class ManifestOrderDetector extends Detector implements Detector.XmlScann } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { String tag = element.getTagName(); Node parentNode = element.getParentNode(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/MathDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/MathDetector.java index 06258dd..daefda7 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/MathDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/MathDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; import com.android.tools.lint.detector.api.Context; @@ -68,12 +69,12 @@ public class MathDetector extends Detector implements Detector.ClassScanner { } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -81,7 +82,7 @@ public class MathDetector extends Detector implements Detector.ClassScanner { @SuppressWarnings("rawtypes") @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { List methodList = classNode.methods; for (Object m : methodList) { MethodNode method = (MethodNode) m; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/MergeRootFrameLayoutDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/MergeRootFrameLayoutDetector.java index 4cb96b5..5ed0257 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/MergeRootFrameLayoutDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/MergeRootFrameLayoutDetector.java @@ -103,17 +103,18 @@ public class MergeRootFrameLayoutDetector extends LayoutDetector implements Dete } @Override + @NonNull public Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return LintUtils.isXmlFile(file) || LintUtils.endsWith(file.getName(), DOT_JAVA); } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mPending != null && mWhitelistedLayouts != null) { // Process all the root FrameLayouts that are eligible, and generate // suggestions for replacements for any layouts that are included @@ -146,7 +147,7 @@ public class MergeRootFrameLayoutDetector extends LayoutDetector implements Dete } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { String tag = element.getTagName(); if (tag.equals(INCLUDE)) { String layout = element.getAttribute(ATTR_LAYOUT); // NOTE: Not in android: namespace diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java index 88a9dd5..e760a9c 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java @@ -22,6 +22,7 @@ import static com.android.tools.lint.detector.api.LintConstants.AUTO_URI; import static com.android.tools.lint.detector.api.LintConstants.URI_PREFIX; import static com.android.tools.lint.detector.api.LintConstants.XMLNS_PREFIX; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -102,12 +103,12 @@ public class NamespaceDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public void visitDocument(XmlContext context, Document document) { + public void visitDocument(@NonNull XmlContext context, @NonNull Document document) { boolean haveCustomNamespace = false; Element root = document.getDocumentElement(); NamedNodeMap attributes = root.getAttributes(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/NestedScrollingWidgetDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/NestedScrollingWidgetDetector.java index 9ca8017..d6cdbd6 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/NestedScrollingWidgetDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/NestedScrollingWidgetDetector.java @@ -22,6 +22,7 @@ import static com.android.tools.lint.detector.api.LintConstants.HORIZONTAL_SCROL import static com.android.tools.lint.detector.api.LintConstants.LIST_VIEW; import static com.android.tools.lint.detector.api.LintConstants.SCROLL_VIEW; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Issue; @@ -62,13 +63,13 @@ public class NestedScrollingWidgetDetector extends LayoutDetector { } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { mVisitingHorizontalScroll = 0; mVisitingVerticalScroll = 0; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -103,7 +104,7 @@ public class NestedScrollingWidgetDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { boolean vertical = isVerticalScroll(element); if (vertical) { mVisitingVerticalScroll++; @@ -129,7 +130,7 @@ public class NestedScrollingWidgetDetector extends LayoutDetector { } @Override - public void visitElementAfter(XmlContext context, Element element) { + public void visitElementAfter(@NonNull XmlContext context, @NonNull Element element) { if (isVerticalScroll(element)) { mVisitingVerticalScroll--; assert mVisitingVerticalScroll >= 0; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ObsoleteLayoutParamsDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ObsoleteLayoutParamsDetector.java index 4002bd5..9972604 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ObsoleteLayoutParamsDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ObsoleteLayoutParamsDetector.java @@ -63,6 +63,7 @@ import static com.android.tools.lint.detector.api.LintConstants.RELATIVE_LAYOUT; import static com.android.tools.lint.detector.api.LintConstants.TABLE_ROW; import static com.android.tools.lint.detector.api.LintConstants.VIEW_TAG; +import com.android.annotations.NonNull; import com.android.tools.lint.client.api.IDomParser; import com.android.tools.lint.client.api.SdkInfo; import com.android.tools.lint.detector.api.Category; @@ -218,7 +219,7 @@ public class ObsoleteLayoutParamsDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -233,7 +234,7 @@ public class ObsoleteLayoutParamsDetector extends LayoutDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String name = attribute.getLocalName(); if (name != null && name.startsWith(ATTR_LAYOUT_PREFIX) && ANDROID_URI.equals(attribute.getNamespaceURI())) { @@ -296,7 +297,7 @@ public class ObsoleteLayoutParamsDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { String layout = element.getAttribute(ATTR_LAYOUT); if (layout.startsWith(LAYOUT_RESOURCE_PREFIX)) { // Ignore @android:layout/ layouts layout = layout.substring(LAYOUT_RESOURCE_PREFIX.length()); @@ -320,7 +321,7 @@ public class ObsoleteLayoutParamsDetector extends LayoutDetector { } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mIncludes == null) { return; } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/OnClickDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/OnClickDetector.java index 14370f3..75fda79 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/OnClickDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/OnClickDetector.java @@ -18,6 +18,7 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.ATTR_ON_CLICK; +import com.android.annotations.NonNull; import com.android.tools.lint.client.api.LintDriver; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; @@ -81,17 +82,17 @@ public class OnClickDetector extends LayoutDetector implements ClassScanner { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mNames != null && mNames.size() > 0 && mHaveBytecode) { List names = new ArrayList(mNames.keySet()); Collections.sort(names); @@ -129,7 +130,7 @@ public class OnClickDetector extends LayoutDetector implements ClassScanner { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String value = attribute.getValue(); if (value.isEmpty() || value.trim().isEmpty()) { context.report(ISSUE, attribute, context.getLocation(attribute), @@ -170,7 +171,7 @@ public class OnClickDetector extends LayoutDetector implements ClassScanner { @SuppressWarnings("rawtypes") @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { if (mNames == null) { // No onClick attributes in the XML files return; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/OverdrawDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/OverdrawDetector.java index 51790e5..12f9b04 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/OverdrawDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/OverdrawDetector.java @@ -35,6 +35,7 @@ import static com.android.tools.lint.detector.api.LintConstants.TRANSPARENT_COLO import static com.android.tools.lint.detector.api.LintConstants.VALUE_DISABLED; import static com.android.tools.lint.detector.api.LintUtils.endsWith; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; @@ -148,7 +149,7 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { // Look in layouts for drawable resources return super.appliesTo(folderType) // and in resource files for theme definitions @@ -158,12 +159,12 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return LintUtils.isXmlFile(file) || LintUtils.endsWith(file.getName(), DOT_JAVA); } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -194,7 +195,7 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mRootAttributes != null) { for (Pair pair : mRootAttributes) { Location location = pair.getFirst(); @@ -260,7 +261,7 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca // ---- Implements XmlScanner ---- @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { // Only consider the root element's background if (attribute.getOwnerDocument().getDocumentElement() == attribute.getOwnerElement()) { // If the drawable is a non-repeated pattern then the overdraw might be @@ -321,7 +322,7 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { if (endsWith(context.file.getName(), DOT_XML)) { // Drawable XML files should not be considered for overdraw, except for 's. // The bitmap elements are handled in the scanBitmap() method; it will clear @@ -339,7 +340,7 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { String tag = element.getTagName(); if (tag.equals(TAG_STYLE)) { scanTheme(element); @@ -470,7 +471,7 @@ public class OverdrawDetector extends LayoutDetector implements Detector.JavaSca } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { return new OverdrawVisitor(); } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/PrivateResourceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/PrivateResourceDetector.java index 2b37f82..7d909ae 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/PrivateResourceDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/PrivateResourceDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.ResourceXmlDetector; @@ -52,7 +53,7 @@ public class PrivateResourceDetector extends ResourceXmlDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -62,7 +63,7 @@ public class PrivateResourceDetector extends ResourceXmlDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String value = attribute.getNodeValue(); if (value.startsWith("@*android:")) { //$NON-NLS-1$ context.report(ISSUE, attribute, context.getLocation(attribute), diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ProguardDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ProguardDetector.java index c062507..41af3b1 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ProguardDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ProguardDetector.java @@ -19,6 +19,7 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.PROGUARD_CONFIG; import static com.android.tools.lint.detector.api.LintConstants.PROJECT_PROPERTIES; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -91,7 +92,7 @@ public class ProguardDetector extends Detector { EnumSet.of(Scope.PROGUARD_FILE)); @Override - public void run(Context context) { + public void run(@NonNull Context context) { String contents = context.getContents(); if (contents != null) { if (context.isEnabled(WRONGKEEP)) { @@ -151,12 +152,12 @@ public class ProguardDetector extends Detector { } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/PxUsageDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/PxUsageDetector.java index cb37d5f..f87abcc 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/PxUsageDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/PxUsageDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -59,7 +60,7 @@ public class PxUsageDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -69,7 +70,7 @@ public class PxUsageDetector extends LayoutDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String value = attribute.getValue(); if (value.endsWith("px") && value.matches("\\d+px")) { //$NON-NLS-1$ if (value.charAt(0) == '0') { diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/RegistrationDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/RegistrationDetector.java index 0f16244..1d55109 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/RegistrationDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/RegistrationDetector.java @@ -24,6 +24,7 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_PROVIDER; import static com.android.tools.lint.detector.api.LintConstants.TAG_RECEIVER; import static com.android.tools.lint.detector.api.LintConstants.TAG_SERVICE; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; import com.android.tools.lint.detector.api.Context; @@ -85,12 +86,12 @@ public class RegistrationDetector extends LayoutDetector implements ClassScanner } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @@ -102,7 +103,7 @@ public class RegistrationDetector extends LayoutDetector implements ClassScanner } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { String fqcn = getFqcn(element); String tag = element.getTagName(); String frameworkClass = tagToClass(tag); @@ -148,7 +149,7 @@ public class RegistrationDetector extends LayoutDetector implements ClassScanner // ---- Implements ClassScanner ---- @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { // Abstract classes do not need to be registered if ((classNode.access & Opcodes.ACC_ABSTRACT) != 0) { return; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ScrollViewChildDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ScrollViewChildDetector.java index 8ba2bc4..e5db5f1 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ScrollViewChildDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ScrollViewChildDetector.java @@ -24,6 +24,7 @@ import static com.android.tools.lint.detector.api.LintConstants.SCROLL_VIEW; import static com.android.tools.lint.detector.api.LintConstants.VALUE_FILL_PARENT; import static com.android.tools.lint.detector.api.LintConstants.VALUE_MATCH_PARENT; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -64,7 +65,7 @@ public class ScrollViewChildDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -77,13 +78,16 @@ public class ScrollViewChildDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { List children = LintUtils.getChildren(element); boolean isHorizontal = HORIZONTAL_SCROLL_VIEW.equals(element.getTagName()); String attributeName = isHorizontal ? ATTR_LAYOUT_WIDTH : ATTR_LAYOUT_HEIGHT; for (Element child : children) { Attr sizeNode = child.getAttributeNodeNS(ANDROID_URI, attributeName); - String value = sizeNode != null ? sizeNode.getValue() : null; + if (sizeNode == null) { + return; + } + String value = sizeNode.getValue(); if (VALUE_FILL_PARENT.equals(value) || VALUE_MATCH_PARENT.equals(value)) { String msg = String.format("This %1$s should use android:%2$s=\"wrap_content\"", child.getTagName(), attributeName); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SdCardDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SdCardDetector.java index b239d57..d5e3a88 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SdCardDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SdCardDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -59,12 +60,12 @@ public class SdCardDetector extends Detector implements Detector.JavaScanner { } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -76,7 +77,7 @@ public class SdCardDetector extends Detector implements Detector.JavaScanner { } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { return new StringChecker(context); } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SecurityDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SecurityDetector.java index 807d515..c9848eb 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SecurityDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SecurityDetector.java @@ -32,6 +32,8 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_PATH_PERMISS import static com.android.tools.lint.detector.api.LintConstants.TAG_PROVIDER; import static com.android.tools.lint.detector.api.LintConstants.TAG_SERVICE; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -147,11 +149,11 @@ public class SecurityDetector extends Detector implements Detector.XmlScanner, } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return file.getName().equals(ANDROID_MANIFEST_XML); } @@ -167,7 +169,7 @@ public class SecurityDetector extends Detector implements Detector.XmlScanner, } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { String tag = element.getTagName(); if (tag.equals(TAG_SERVICE)) { checkService(context, element); @@ -264,7 +266,8 @@ public class SecurityDetector extends Detector implements Detector.XmlScanner, } if (!hasPermission) { - context.report(EXPORTED_PROVIDER, element, context.getLocation(element), + context.report(EXPORTED_PROVIDER, element, + context.getLocation(element), "Exported content providers can provide access to " + "potentially sensitive data", null); @@ -288,7 +291,8 @@ public class SecurityDetector extends Detector implements Detector.XmlScanner, } @Override - public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) { + public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull MethodInvocation node) { StrictListAccessor args = node.astArguments(); Iterator iterator = args.iterator(); while (iterator.hasNext()) { @@ -297,7 +301,7 @@ public class SecurityDetector extends Detector implements Detector.XmlScanner, } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { return new IdentifierVisitor(context); } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SetJavaScriptEnabledDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SetJavaScriptEnabledDetector.java index e711816..8653944 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SetJavaScriptEnabledDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SetJavaScriptEnabledDetector.java @@ -16,20 +16,20 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Detector; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.JavaContext; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; -import com.android.tools.lint.detector.api.Speed; - -import lombok.ast.MethodInvocation; import java.util.Collections; import java.util.List; import lombok.ast.AstVisitor; +import lombok.ast.MethodInvocation; /** * Looks for invocations of android.webkit.WebSettings.setJavaScriptEnabled. @@ -52,15 +52,11 @@ public class SetJavaScriptEnabledDetector extends Detector implements Detector.J public SetJavaScriptEnabledDetector() { } - @Override - public Speed getSpeed() { - return Speed.NORMAL; - } - // ---- Implements JavaScanner ---- @Override - public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) { + public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull MethodInvocation node) { if (node.astArguments().size() == 1 && !node.astArguments().first().toString().equals("false")) { //$NON-NLS-1$ context.report(ISSUE, node, context.getLocation(node), diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SharedPrefsDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SharedPrefsDetector.java index 525ab6d..b8c86bf 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/SharedPrefsDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/SharedPrefsDetector.java @@ -15,6 +15,8 @@ */ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -22,7 +24,6 @@ import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.JavaContext; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; -import com.android.tools.lint.detector.api.Speed; import java.io.File; import java.util.Collections; @@ -61,16 +62,11 @@ public class SharedPrefsDetector extends Detector implements Detector.JavaScanne } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } - @Override - public Speed getSpeed() { - return Speed.NORMAL; - } - // ---- Implements JavaScanner ---- @Override @@ -94,7 +90,8 @@ public class SharedPrefsDetector extends Detector implements Detector.JavaScanne } @Override - public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) { + public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull MethodInvocation node) { assert node.astName().astValue().equals("edit"); if (node.astOperand() == null) { return; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/StateListDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/StateListDetector.java index 3235c9a..d7f0d99 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/StateListDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/StateListDetector.java @@ -18,6 +18,7 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.ANDROID_URI; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; @@ -57,17 +58,17 @@ public class StateListDetector extends ResourceXmlDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.DRAWABLE; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public void visitDocument(XmlContext context, Document document) { + public void visitDocument(@NonNull XmlContext context, @NonNull Document document) { // TODO: Look for views that don't specify // Display the error token somewhere so it can be suppressed // Emit warning at the end "run with --help to learn how to suppress types of errors/checks"; diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/StringFormatDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/StringFormatDetector.java index 5fae363..f5d6d80 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/StringFormatDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/StringFormatDetector.java @@ -20,6 +20,8 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_NAME; import static com.android.tools.lint.detector.api.LintConstants.DOT_JAVA; import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.annotations.VisibleForTesting; import com.android.resources.ResourceFolderType; import com.android.tools.lint.client.api.IJavaParser; @@ -35,7 +37,6 @@ import com.android.tools.lint.detector.api.Position; import com.android.tools.lint.detector.api.ResourceXmlDetector; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; -import com.android.tools.lint.detector.api.Speed; import com.android.tools.lint.detector.api.XmlContext; import com.android.util.Pair; @@ -162,12 +163,12 @@ public class StringFormatDetector extends ResourceXmlDetector implements Detecto } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.VALUES; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { if (LintUtils.endsWith(file.getName(), DOT_JAVA)) { return mFormatStrings != null; } @@ -176,17 +177,12 @@ public class StringFormatDetector extends ResourceXmlDetector implements Detecto } @Override - public Speed getSpeed() { - return Speed.NORMAL; - } - - @Override public Collection getApplicableElements() { return Collections.singletonList(TAG_STRING); } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { NodeList childNodes = element.getChildNodes(); if (childNodes.getLength() > 0) { if (childNodes.getLength() == 1) { @@ -309,7 +305,7 @@ public class StringFormatDetector extends ResourceXmlDetector implements Detecto } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mFormatStrings != null) { Formatter formatter = new Formatter(); @@ -773,7 +769,8 @@ public class StringFormatDetector extends ResourceXmlDetector implements Detecto } @Override - public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) { + public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull MethodInvocation node) { if (mFormatStrings == null) { return; } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/StyleCycleDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/StyleCycleDetector.java index f248d6e..03766b7 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/StyleCycleDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/StyleCycleDetector.java @@ -21,6 +21,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_PARENT; import static com.android.tools.lint.detector.api.LintConstants.STYLE_RESOURCE_PREFIX; import static com.android.tools.lint.detector.api.LintConstants.TAG_STYLE; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; @@ -58,12 +59,12 @@ public class StyleCycleDetector extends ResourceXmlDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.VALUES; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -73,7 +74,7 @@ public class StyleCycleDetector extends ResourceXmlDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { Attr parentNode = element.getAttributeNode(ATTR_PARENT); if (parentNode != null) { String parent = parentNode.getValue(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextFieldDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextFieldDetector.java index 2cc81ab..c133ce2 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextFieldDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextFieldDetector.java @@ -22,6 +22,7 @@ import static com.android.tools.lint.detector.api.LintConstants.ATTR_INPUT_METHO import static com.android.tools.lint.detector.api.LintConstants.ATTR_INPUT_TYPE; import static com.android.tools.lint.detector.api.LintConstants.EDIT_TEXT; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -63,7 +64,7 @@ public class TextFieldDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -73,7 +74,7 @@ public class TextFieldDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (!element.hasAttributeNS(ANDROID_URI, ATTR_INPUT_TYPE) && !element.hasAttributeNS(ANDROID_URI, ATTR_HINT)) { // Also make sure the EditText does not set an inputMethod in which case diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextViewDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextViewDetector.java index 09608b1..e6e0371 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextViewDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TextViewDetector.java @@ -44,6 +44,7 @@ import static com.android.tools.lint.detector.api.LintConstants.VALUE_EDITABLE; import static com.android.tools.lint.detector.api.LintConstants.VALUE_NONE; import static com.android.tools.lint.detector.api.LintConstants.VALUE_TRUE; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -91,7 +92,7 @@ public class TextViewDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -109,7 +110,7 @@ public class TextViewDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { NamedNodeMap attributes = element.getAttributes(); for (int i = 0, n = attributes.getLength(); i < n; i++) { Attr attribute = (Attr) attributes.item(i); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ToastDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ToastDetector.java index f199438..d876c53 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ToastDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ToastDetector.java @@ -15,6 +15,8 @@ */ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Detector; @@ -22,7 +24,6 @@ import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.JavaContext; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; -import com.android.tools.lint.detector.api.Speed; import java.io.File; import java.util.Collections; @@ -60,16 +61,11 @@ public class ToastDetector extends Detector implements Detector.JavaScanner { } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } - @Override - public Speed getSpeed() { - return Speed.NORMAL; - } - // ---- Implements JavaScanner ---- @Override @@ -93,7 +89,8 @@ public class ToastDetector extends Detector implements Detector.JavaScanner { } @Override - public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) { + public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull MethodInvocation node) { assert node.astName().astValue().equals("makeText"); if (node.astOperand() == null) { // "makeText()" in the code with no operand diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TooManyViewsDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TooManyViewsDetector.java index 257d06c..ed3480a 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TooManyViewsDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TooManyViewsDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; import com.android.tools.lint.detector.api.Issue; @@ -102,12 +103,12 @@ public class TooManyViewsDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { mViewCount = mDepth = 0; mWarnedAboutDepth = false; } @@ -118,7 +119,7 @@ public class TooManyViewsDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { mViewCount++; mDepth++; @@ -140,7 +141,7 @@ public class TooManyViewsDetector extends LayoutDetector { } @Override - public void visitElementAfter(XmlContext context, Element element) { + public void visitElementAfter(@NonNull XmlContext context, @NonNull Element element) { mDepth--; } } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java index 98d56b0..70e0723 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java @@ -24,6 +24,7 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_ITEM; import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING; import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING_ARRAY; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; @@ -33,7 +34,6 @@ import com.android.tools.lint.detector.api.Location; import com.android.tools.lint.detector.api.ResourceXmlDetector; import com.android.tools.lint.detector.api.Scope; import com.android.tools.lint.detector.api.Severity; -import com.android.tools.lint.detector.api.Speed; import com.android.tools.lint.detector.api.XmlContext; import com.google.common.collect.Sets; @@ -116,16 +116,11 @@ public class TranslationDetector extends ResourceXmlDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.VALUES; } @Override - public Speed getSpeed() { - return Speed.NORMAL; - } - - @Override public Collection getApplicableElements() { return Arrays.asList( TAG_STRING, @@ -134,14 +129,14 @@ public class TranslationDetector extends ResourceXmlDetector { } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { if (context.getDriver().getPhase() == 1) { mFileToNames = new HashMap>(); } } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { if (context.getPhase() == 1) { mNames = new HashSet(); } @@ -151,7 +146,7 @@ public class TranslationDetector extends ResourceXmlDetector { } @Override - public void afterCheckFile(Context context) { + public void afterCheckFile(@NonNull Context context) { if (context.getPhase() == 1) { // Store this layout's set of ids for full project analysis in afterCheckProject mFileToNames.put(context.file, mNames); @@ -161,7 +156,7 @@ public class TranslationDetector extends ResourceXmlDetector { } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { // NOTE - this will look for the presence of translation strings. // If you create a resource folder but don't actually place a file in it @@ -406,7 +401,7 @@ public class TranslationDetector extends ResourceXmlDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (mIgnoreFile) { return; } diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java index c5a9302..5ad52b3 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java @@ -19,6 +19,7 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING; import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING_ARRAY; +import com.android.annotations.NonNull; import com.android.annotations.VisibleForTesting; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; @@ -192,12 +193,12 @@ public class TypographyDetector extends ResourceXmlDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.VALUES; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -210,7 +211,7 @@ public class TypographyDetector extends ResourceXmlDetector { } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { mCheckDashes = context.isEnabled(DASHES); mCheckQuotes = context.isEnabled(QUOTES); mCheckFractions = context.isEnabled(FRACTIONS); @@ -219,7 +220,7 @@ public class TypographyDetector extends ResourceXmlDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { NodeList childNodes = element.getChildNodes(); for (int i = 0, n = childNodes.getLength(); i < n; i++) { Node child = childNodes.item(i); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java index 3ea1c14..f9b5a67 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java @@ -38,6 +38,8 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_STRING_ARRAY import static com.android.tools.lint.detector.api.LintConstants.TAG_STYLE; import static com.android.tools.lint.detector.api.LintUtils.endsWith; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.resources.ResourceType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; @@ -121,17 +123,17 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public void run(Context context) { + public void run(@NonNull Context context) { assert false; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public void beforeCheckProject(Context context) { + public void beforeCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { mDeclarations = new HashSet(300); mReferences = new HashSet(300); @@ -141,7 +143,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec // ---- Implements JavaScanner ---- @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { File file = context.file; String fileName = file.getName(); @@ -188,7 +190,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (context.getPhase() == 1) { mDeclarations.removeAll(mReferences); Set unused = mDeclarations; @@ -330,7 +332,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (TAG_RESOURCES.equals(element.getTagName())) { for (Element item : LintUtils.getChildren(element)) { String name = item.getAttribute(ATTR_NAME); @@ -401,7 +403,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String value = attribute.getValue(); if (value.startsWith("@+") && !value.startsWith("@+android")) { //$NON-NLS-1$ //$NON-NLS-2$ @@ -437,7 +439,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.SLOW; } @@ -452,8 +454,9 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public void visitResourceReference(JavaContext context, AstVisitor visitor, - lombok.ast.Node node, String type, String name, boolean isFramework) { + public void visitResourceReference(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull lombok.ast.Node node, @NonNull String type, @NonNull String name, + boolean isFramework) { if (mReferences != null && !isFramework) { String reference = R_PREFIX + type + '.' + name; mReferences.add(reference); @@ -461,7 +464,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { if (mReferences != null) { return new UnusedResourceVisitor(); } else { diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UseCompoundDrawableDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UseCompoundDrawableDetector.java index 540a0f1..d091ce1 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UseCompoundDrawableDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UseCompoundDrawableDetector.java @@ -23,6 +23,7 @@ import static com.android.tools.lint.detector.api.LintConstants.IMAGE_VIEW; import static com.android.tools.lint.detector.api.LintConstants.LINEAR_LAYOUT; import static com.android.tools.lint.detector.api.LintConstants.TEXT_VIEW; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -63,7 +64,7 @@ public class UseCompoundDrawableDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -75,7 +76,7 @@ public class UseCompoundDrawableDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { int childCount = LintUtils.getChildCount(element); if (childCount == 2) { List children = LintUtils.getChildren(element); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UselessViewDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UselessViewDetector.java index fd4ff58..b913588 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UselessViewDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UselessViewDetector.java @@ -33,6 +33,7 @@ import static com.android.tools.lint.detector.api.LintConstants.SCROLL_VIEW; import static com.android.tools.lint.detector.api.LintConstants.TABLE_LAYOUT; import static com.android.tools.lint.detector.api.LintConstants.TABLE_ROW; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -85,7 +86,7 @@ public class UselessViewDetector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -127,7 +128,7 @@ public class UselessViewDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { int childCount = LintUtils.getChildCount(element); if (childCount == 0) { // Check to see if this is a leaf layout that can be removed diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/Utf8Detector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/Utf8Detector.java index 6a87e94..875de62 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/Utf8Detector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/Utf8Detector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Issue; import com.android.tools.lint.detector.api.LayoutDetector; @@ -57,12 +58,12 @@ public class Utf8Detector extends LayoutDetector { } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @Override - public void visitDocument(XmlContext context, Document document) { + public void visitDocument(@NonNull XmlContext context, @NonNull Document document) { String xml = context.getContents(); // AAPT: The prologue must be in the first line diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewConstructorDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewConstructorDetector.java index 72aaa77..538c0d6 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewConstructorDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewConstructorDetector.java @@ -18,6 +18,7 @@ package com.android.tools.lint.checks; import static com.android.tools.lint.detector.api.LintConstants.CONSTRUCTOR_NAME; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.ClassContext; import com.android.tools.lint.detector.api.Context; @@ -73,19 +74,19 @@ public class ViewConstructorDetector extends Detector implements Detector.ClassS } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { return true; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } // ---- Implements ClassScanner ---- @Override - public void checkClass(ClassContext context, ClassNode classNode) { + public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { if (classNode.name.indexOf('$') != -1 && (classNode.access & Opcodes.ACC_STATIC) == 0) { // Ignore inner classes that aren't static: we can't create these diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewTypeDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewTypeDetector.java index 78a06af..30def17 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewTypeDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ViewTypeDetector.java @@ -23,6 +23,8 @@ import static com.android.tools.lint.detector.api.LintConstants.ID_RESOURCE_PREF import static com.android.tools.lint.detector.api.LintConstants.NEW_ID_RESOURCE_PREFIX; import static com.android.tools.lint.detector.api.LintConstants.VIEW_TAG; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.resources.ResourceFolderType; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Context; @@ -69,17 +71,17 @@ public class ViewTypeDetector extends ResourceXmlDetector implements Detector.Ja private Map mIdToViewTag = new HashMap(50); @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.SLOW; } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.LAYOUT; } @Override - public boolean appliesTo(Context context, File file) { + public boolean appliesTo(@NonNull Context context, @NonNull File file) { if (LintUtils.endsWith(file.getName(), DOT_JAVA)) { return true; } @@ -100,7 +102,7 @@ public class ViewTypeDetector extends ResourceXmlDetector implements Detector.Ja private static final String IGNORE = "#ignore#"; @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { String view = attribute.getOwnerElement().getTagName(); String value = attribute.getValue(); String id = null; @@ -131,7 +133,8 @@ public class ViewTypeDetector extends ResourceXmlDetector implements Detector.Ja } @Override - public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) { + public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, + @NonNull MethodInvocation node) { assert node.astName().getDescription().equals("findViewById"); if (node.getParent() instanceof Cast) { Cast cast = (Cast) node.getParent(); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java index ef45c09..a9652d1 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java @@ -28,6 +28,7 @@ import static com.android.tools.lint.detector.api.LintConstants.TAG_ITEM; import static com.android.tools.lint.detector.api.LintConstants.VALUE_ID; import static com.android.tools.lint.detector.api.LintUtils.stripIdPrefix; +import com.android.annotations.NonNull; import com.android.resources.ResourceFolderType; import com.android.tools.lint.client.api.IDomParser; import com.android.tools.lint.detector.api.Category; @@ -127,12 +128,12 @@ public class WrongIdDetector extends LayoutDetector { } @Override - public boolean appliesTo(ResourceFolderType folderType) { + public boolean appliesTo(@NonNull ResourceFolderType folderType) { return folderType == ResourceFolderType.LAYOUT || folderType == ResourceFolderType.VALUES; } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -147,13 +148,13 @@ public class WrongIdDetector extends LayoutDetector { } @Override - public void beforeCheckFile(Context context) { + public void beforeCheckFile(@NonNull Context context) { mFileIds = new HashSet(); mRelativeLayouts = null; } @Override - public void afterCheckFile(Context context) { + public void afterCheckFile(@NonNull Context context) { if (mRelativeLayouts != null) { for (Element layout : mRelativeLayouts) { NodeList children = layout.getChildNodes(); @@ -196,7 +197,7 @@ public class WrongIdDetector extends LayoutDetector { } @Override - public void afterCheckProject(Context context) { + public void afterCheckProject(@NonNull Context context) { if (mHandles != null) { boolean checkSameLayout = context.isEnabled(UNKNOWN_ID_LAYOUT); boolean checkExists = context.isEnabled(UNKNOWN_ID); @@ -257,7 +258,7 @@ public class WrongIdDetector extends LayoutDetector { } @Override - public void visitElement(XmlContext context, Element element) { + public void visitElement(@NonNull XmlContext context, @NonNull Element element) { if (element.getTagName().equals(RELATIVE_LAYOUT)) { if (mRelativeLayouts == null) { mRelativeLayouts = new ArrayList(); @@ -279,7 +280,7 @@ public class WrongIdDetector extends LayoutDetector { } @Override - public void visitAttribute(XmlContext context, Attr attribute) { + public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { assert attribute.getName().equals(ATTR_ID) || attribute.getLocalName().equals(ATTR_ID); String id = attribute.getValue(); mFileIds.add(id); diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongImportDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongImportDetector.java index 2aa416c..fc6cde2 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongImportDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongImportDetector.java @@ -16,6 +16,7 @@ package com.android.tools.lint.checks; +import com.android.annotations.NonNull; import com.android.tools.lint.detector.api.Category; import com.android.tools.lint.detector.api.Detector; import com.android.tools.lint.detector.api.Issue; @@ -67,7 +68,7 @@ public class WrongImportDetector extends Detector implements Detector.JavaScanne } @Override - public Speed getSpeed() { + public @NonNull Speed getSpeed() { return Speed.FAST; } @@ -80,7 +81,7 @@ public class WrongImportDetector extends Detector implements Detector.JavaScanne } @Override - public AstVisitor createJavaVisitor(JavaContext context) { + public AstVisitor createJavaVisitor(@NonNull JavaContext context) { return new ImportVisitor(context); } diff --git a/rule_api/src/com/android/ide/common/api/AbstractViewRule.java b/rule_api/src/com/android/ide/common/api/AbstractViewRule.java index 3bbf8e7..7f05809 100644 --- a/rule_api/src/com/android/ide/common/api/AbstractViewRule.java +++ b/rule_api/src/com/android/ide/common/api/AbstractViewRule.java @@ -15,6 +15,7 @@ */ package com.android.ide.common.api; +import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.google.common.annotations.Beta; @@ -31,7 +32,7 @@ import java.util.List; @Beta public class AbstractViewRule implements IViewRule { @Override - public boolean onInitialize(String fqcn, IClientRulesEngine engine) { + public boolean onInitialize(@NonNull String fqcn, @NonNull IClientRulesEngine engine) { return true; } @@ -50,22 +51,22 @@ public class AbstractViewRule implements IViewRule { @Override @Nullable - public List getSelectionHint(INode parentNode, INode childNode) { + public List getSelectionHint(@NonNull INode parentNode, @NonNull INode childNode) { return null; } @Override - public void addLayoutActions(List actions, INode parentNode, - List children) { + public void addLayoutActions(@NonNull List actions, @NonNull INode parentNode, + @NonNull List children) { } @Override - public void addContextMenuActions(List actions, INode node) { + public void addContextMenuActions(@NonNull List actions, @NonNull INode node) { } @Override - public void paintSelectionFeedback(IGraphics graphics, INode parentNode, - List childNodes, Object view) { + public void paintSelectionFeedback(@NonNull IGraphics graphics, @NonNull INode parentNode, + @NonNull List childNodes, @Nullable Object view) { } // ==== Drag & drop support ==== @@ -73,66 +74,66 @@ public class AbstractViewRule implements IViewRule { // By default Views do not accept drag'n'drop. @Override @Nullable - public DropFeedback onDropEnter(INode targetNode, Object targetView, IDragElement[] elements) { + public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView, @Nullable IDragElement[] elements) { return null; } @Override @Nullable - public DropFeedback onDropMove(INode targetNode, IDragElement[] elements, - DropFeedback feedback, Point p) { + public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, @NonNull Point p) { return null; } @Override - public void onDropLeave(INode targetNode, IDragElement[] elements, DropFeedback feedback) { + public void onDropLeave(@NonNull INode targetNode, @NonNull IDragElement[] elements, @Nullable DropFeedback feedback) { // ignore } @Override public void onDropped( - INode targetNode, - IDragElement[] elements, - DropFeedback feedback, - Point p) { + @NonNull INode targetNode, + @NonNull IDragElement[] elements, + @Nullable DropFeedback feedback, + @NonNull Point p) { // ignore } @Override - public void onPaste(INode targetNode, Object targetView, IDragElement[] pastedElements) { + public void onPaste(@NonNull INode targetNode, @Nullable Object targetView, @NonNull IDragElement[] pastedElements) { } // ==== Create/Remove hooks ==== @Override - public void onCreate(INode node, INode parent, InsertType insertType) { + public void onCreate(@NonNull INode node, @NonNull INode parent, @NonNull InsertType insertType) { } @Override - public void onChildInserted(INode child, INode parent, InsertType insertType) { + public void onChildInserted(@NonNull INode child, @NonNull INode parent, @NonNull InsertType insertType) { } @Override - public void onRemovingChildren(List deleted, INode parent) { + public void onRemovingChildren(@NonNull List deleted, @NonNull INode parent) { } // ==== Resizing ==== @Override @Nullable - public DropFeedback onResizeBegin(INode child, INode parent, SegmentType horizontalEdge, - SegmentType verticalEdge, Object childView, Object parentView) { + public DropFeedback onResizeBegin(@NonNull INode child, @NonNull INode parent, @Nullable SegmentType horizontalEdge, + @Nullable SegmentType verticalEdge, @Nullable Object childView, @Nullable Object parentView) { return null; } @Override - public void onResizeUpdate(DropFeedback feedback, INode child, INode parent, Rect newBounds, + public void onResizeUpdate(@Nullable DropFeedback feedback, @NonNull INode child, @NonNull INode parent, @NonNull Rect newBounds, int modifierMask) { } @Override - public void onResizeEnd(DropFeedback feedback, INode child, final INode parent, - final Rect newBounds) { + public void onResizeEnd(@Nullable DropFeedback feedback, @NonNull INode child, final @NonNull INode parent, + final @NonNull Rect newBounds) { } } diff --git a/rule_api/src/com/android/ide/common/api/IClientRulesEngine.java b/rule_api/src/com/android/ide/common/api/IClientRulesEngine.java index ec28520..b9ea6cb 100644 --- a/rule_api/src/com/android/ide/common/api/IClientRulesEngine.java +++ b/rule_api/src/com/android/ide/common/api/IClientRulesEngine.java @@ -106,10 +106,10 @@ public interface IClientRulesEngine { /** * Returns a resource name validator for the current project * - * @return an {@link IValidator} for validating new resource name in the current + * @return an {@link IValidator} for validating a new resource name in the current * project */ - @NonNull + @Nullable IValidator getResourceValidator(); /** diff --git a/rule_api/src/com/android/ide/common/api/IMenuCallback.java b/rule_api/src/com/android/ide/common/api/IMenuCallback.java index fd100ee..2ff3f8d 100644 --- a/rule_api/src/com/android/ide/common/api/IMenuCallback.java +++ b/rule_api/src/com/android/ide/common/api/IMenuCallback.java @@ -49,4 +49,17 @@ public interface IMenuCallback { @NonNull List selectedNodes, @Nullable String valueId, @Nullable Boolean newValue); + + /** Callback which does nothing */ + @NonNull + public static final IMenuCallback NONE = new IMenuCallback() { + @Override + public void action( + @NonNull RuleAction action, + @NonNull + List selectedNodes, + @Nullable String valueId, + @Nullable Boolean newValue) { + } + }; } diff --git a/rule_api/src/com/android/ide/common/api/INode.java b/rule_api/src/com/android/ide/common/api/INode.java index d957419..b137699 100644 --- a/rule_api/src/com/android/ide/common/api/INode.java +++ b/rule_api/src/com/android/ide/common/api/INode.java @@ -180,7 +180,7 @@ public interface INode { * @param value It's value. Cannot be null. An empty value removes the attribute. * @return Whether the attribute was actually set or not. */ - boolean setAttribute(@Nullable String uri, @NonNull String localName, @NonNull String value); + boolean setAttribute(@Nullable String uri, @NonNull String localName, @Nullable String value); /** * Returns a given XML attribute. diff --git a/rule_api/src/com/android/ide/common/api/RuleAction.java b/rule_api/src/com/android/ide/common/api/RuleAction.java index f6c7e8c..489a3cc 100644 --- a/rule_api/src/com/android/ide/common/api/RuleAction.java +++ b/rule_api/src/com/android/ide/common/api/RuleAction.java @@ -448,9 +448,9 @@ public class RuleAction implements Comparable { return mCallback; } - // Implements Comparable + // Implements Comparable @Override - public int compareTo(@NonNull RuleAction other) { + public int compareTo(RuleAction other) { if (mSortPriority != other.mSortPriority) { return mSortPriority - other.mSortPriority; } @@ -468,7 +468,7 @@ public class RuleAction implements Comparable { public static class Separator extends RuleAction { /** Construct using the factory {@link #createSeparator(int)} */ private Separator(int sortPriority, boolean supportsMultipleNodes) { - super("_separator", "", null, sortPriority, //$NON-NLS-1$ //$NON-NLS-2$ + super("_separator", "", IMenuCallback.NONE, sortPriority, //$NON-NLS-1$ //$NON-NLS-2$ supportsMultipleNodes); } } @@ -689,13 +689,13 @@ public class RuleAction implements Comparable { } @Override - public List getIds() { + public @NonNull List getIds() { ensureInitialized(); return mIds; } @Override - public List getTitles() { + public @NonNull List getTitles() { ensureInitialized(); return mTitles; } diff --git a/rule_api/src/com/android/ide/common/api/Segment.java b/rule_api/src/com/android/ide/common/api/Segment.java index 9f03286..d31d9f8 100644 --- a/rule_api/src/com/android/ide/common/api/Segment.java +++ b/rule_api/src/com/android/ide/common/api/Segment.java @@ -51,7 +51,7 @@ public class Segment { public final MarginType marginType; /** The node that contains this edge */ - @NonNull + @Nullable public final INode node; /** @@ -61,7 +61,7 @@ public class Segment { @Nullable public final String id; - public Segment(int at, int from, int to, @NonNull INode node, @Nullable String id, + public Segment(int at, int from, int to, @Nullable INode node, @Nullable String id, @NonNull SegmentType edgeType, @NonNull MarginType marginType) { this.at = at; this.from = from; diff --git a/rule_api/src/com/android/ide/common/api/SegmentType.java b/rule_api/src/com/android/ide/common/api/SegmentType.java index 25635c7..9da248a 100644 --- a/rule_api/src/com/android/ide/common/api/SegmentType.java +++ b/rule_api/src/com/android/ide/common/api/SegmentType.java @@ -27,7 +27,22 @@ import com.google.common.annotations.Beta; */ @Beta public enum SegmentType { - LEFT, TOP, RIGHT, BOTTOM, BASELINE, CENTER_VERTICAL, CENTER_HORIZONTAL, UNKNOWN; + /** Segment is on the left edge */ + @NonNull LEFT, + /** Segment is on the top edge */ + @NonNull TOP, + /** Segment is on the right edge */ + @NonNull RIGHT, + /** Segment is on the bottom edge */ + @NonNull BOTTOM, + /** Segment is along the baseline */ + @NonNull BASELINE, + /** Segment is along the center vertically */ + @NonNull CENTER_VERTICAL, + /** Segment is along the center horizontally */ + @NonNull CENTER_HORIZONTAL, + /** Segment is on an unknown edge */ + @NonNull UNKNOWN; public boolean isHorizontal() { return this == TOP || this == BOTTOM || this == BASELINE || this == CENTER_HORIZONTAL; diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java index dc19287..768a835 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.avd; +import com.android.annotations.Nullable; import com.android.io.FileWrapper; import com.android.prefs.AndroidLocation; import com.android.prefs.AndroidLocation.AndroidLocationException; @@ -1404,14 +1405,14 @@ public class AvdManager { Wait.WAIT_FOR_READERS, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { stdOutput.add(line); } } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { errorOutput.add(line); } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/build/KeystoreHelper.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/build/KeystoreHelper.java index af5b401..ba4ce8c 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/build/KeystoreHelper.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/build/KeystoreHelper.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.build; +import com.android.annotations.Nullable; import com.android.sdklib.internal.build.DebugKeyProvider.IKeyGenOutput; import com.android.sdklib.internal.build.DebugKeyProvider.KeytoolException; import com.android.sdklib.util.GrabProcessOutput; @@ -111,7 +112,7 @@ public final class KeystoreHelper { Wait.WAIT_FOR_READERS, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { if (output != null) { output.out(line); @@ -122,7 +123,7 @@ public final class KeystoreHelper { } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { if (output != null) { output.err(line); diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/archives/ArchiveInstaller.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/archives/ArchiveInstaller.java index 3addb31..c2e11cd 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/archives/ArchiveInstaller.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/archives/ArchiveInstaller.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.archives; +import com.android.annotations.Nullable; import com.android.annotations.VisibleForTesting; import com.android.annotations.VisibleForTesting.Visibility; import com.android.sdklib.SdkConstants; @@ -609,14 +610,14 @@ public class ArchiveInstaller { Wait.WAIT_FOR_READERS, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { result.append(line).append("\n"); } } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { monitor.logError("[find_lock] Error: %1$s", line); } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java index 8ae469e..e2052c4 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/packages/ToolPackage.java @@ -16,6 +16,7 @@ package com.android.sdklib.internal.repository.packages; +import com.android.annotations.Nullable; import com.android.annotations.VisibleForTesting; import com.android.annotations.VisibleForTesting.Visibility; import com.android.sdklib.SdkConstants; @@ -315,14 +316,14 @@ public class ToolPackage extends FullRevisionPackage implements IMinPlatformTool Wait.WAIT_FOR_PROCESS, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { monitor.log("[%1$s] %2$s", tag, line); } } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { monitor.logError("[%1$s] Error: %2$s", tag, line); } diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java index daacf10..5d24a07 100644 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java @@ -16,6 +16,7 @@ package com.android.sdkuilib.internal.widgets; +import com.android.annotations.Nullable; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.ISdkLog; @@ -1112,14 +1113,14 @@ public final class AvdSelector { Wait.ASYNC, new IProcessOutput() { @Override - public void out(String line) { + public void out(@Nullable String line) { if (line != null) { filterStdOut(line); } } @Override - public void err(String line) { + public void err(@Nullable String line) { if (line != null) { filterStdErr(line); } -- cgit v1.1