diff options
author | Alex Light <allight@google.com> | 2016-04-08 14:42:05 -0700 |
---|---|---|
committer | Alex Light <allight@google.com> | 2016-04-08 14:42:05 -0700 |
commit | edc88aff44ff80f969df61725a992680cd0c464c (patch) | |
tree | 53e8ba5a33270814a3df2bf493967a8eb15ca33f /smalidea/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java | |
parent | 504acc06a865d5b0e2d3e08111ffe71ccea8ca26 (diff) | |
parent | 267cf99aae855d3d8cbd2b919f3e9aeceabfb7c3 (diff) | |
download | smali-edc88aff44ff80f969df61725a992680cd0c464c.tar.gz |
Merge commit 'refs/changes/32/214432/1' of persistent-https://android.git.corp.google.com/platform/external/smali into incr-dexandroid-cts_7.1_r1android-cts-7.1_r9android-cts-7.1_r8android-cts-7.1_r7android-cts-7.1_r6android-cts-7.1_r5android-cts-7.1_r4android-cts-7.1_r3android-cts-7.1_r29android-cts-7.1_r28android-cts-7.1_r27android-cts-7.1_r26android-cts-7.1_r25android-cts-7.1_r24android-cts-7.1_r23android-cts-7.1_r22android-cts-7.1_r21android-cts-7.1_r20android-cts-7.1_r2android-cts-7.1_r19android-cts-7.1_r18android-cts-7.1_r17android-cts-7.1_r16android-cts-7.1_r15android-cts-7.1_r14android-cts-7.1_r13android-cts-7.1_r12android-cts-7.1_r11android-cts-7.1_r10android-cts-7.1_r1android-cts-7.0_r9android-cts-7.0_r8android-cts-7.0_r7android-cts-7.0_r6android-cts-7.0_r5android-cts-7.0_r4android-cts-7.0_r33android-cts-7.0_r32android-cts-7.0_r31android-cts-7.0_r30android-cts-7.0_r3android-cts-7.0_r29android-cts-7.0_r28android-cts-7.0_r27android-cts-7.0_r26android-cts-7.0_r25android-cts-7.0_r24android-cts-7.0_r23android-cts-7.0_r22android-cts-7.0_r21android-cts-7.0_r20android-cts-7.0_r2android-cts-7.0_r19android-cts-7.0_r18android-cts-7.0_r17android-cts-7.0_r16android-cts-7.0_r15android-cts-7.0_r14android-cts-7.0_r13android-cts-7.0_r12android-cts-7.0_r11android-cts-7.0_r10android-cts-7.0_r1android-7.1.2_r9android-7.1.2_r8android-7.1.2_r6android-7.1.2_r5android-7.1.2_r4android-7.1.2_r39android-7.1.2_r38android-7.1.2_r37android-7.1.2_r36android-7.1.2_r33android-7.1.2_r32android-7.1.2_r30android-7.1.2_r3android-7.1.2_r29android-7.1.2_r28android-7.1.2_r27android-7.1.2_r25android-7.1.2_r24android-7.1.2_r23android-7.1.2_r2android-7.1.2_r19android-7.1.2_r18android-7.1.2_r17android-7.1.2_r16android-7.1.2_r15android-7.1.2_r14android-7.1.2_r13android-7.1.2_r12android-7.1.2_r11android-7.1.2_r10android-7.1.2_r1android-7.1.1_r9android-7.1.1_r8android-7.1.1_r7android-7.1.1_r61android-7.1.1_r60android-7.1.1_r6android-7.1.1_r59android-7.1.1_r58android-7.1.1_r57android-7.1.1_r56android-7.1.1_r55android-7.1.1_r54android-7.1.1_r53android-7.1.1_r52android-7.1.1_r51android-7.1.1_r50android-7.1.1_r49android-7.1.1_r48android-7.1.1_r47android-7.1.1_r46android-7.1.1_r45android-7.1.1_r44android-7.1.1_r43android-7.1.1_r42android-7.1.1_r41android-7.1.1_r40android-7.1.1_r4android-7.1.1_r39android-7.1.1_r38android-7.1.1_r35android-7.1.1_r33android-7.1.1_r32android-7.1.1_r31android-7.1.1_r3android-7.1.1_r28android-7.1.1_r27android-7.1.1_r26android-7.1.1_r25android-7.1.1_r24android-7.1.1_r23android-7.1.1_r22android-7.1.1_r21android-7.1.1_r20android-7.1.1_r2android-7.1.1_r17android-7.1.1_r16android-7.1.1_r15android-7.1.1_r14android-7.1.1_r13android-7.1.1_r12android-7.1.1_r11android-7.1.1_r10android-7.1.1_r1android-7.1.0_r7android-7.1.0_r6android-7.1.0_r5android-7.1.0_r4android-7.1.0_r3android-7.1.0_r2android-7.1.0_r1android-7.0.0_r9android-7.0.0_r8android-7.0.0_r7android-7.0.0_r6android-7.0.0_r5android-7.0.0_r4android-7.0.0_r36android-7.0.0_r35android-7.0.0_r34android-7.0.0_r33android-7.0.0_r32android-7.0.0_r31android-7.0.0_r30android-7.0.0_r3android-7.0.0_r29android-7.0.0_r28android-7.0.0_r27android-7.0.0_r24android-7.0.0_r21android-7.0.0_r19android-7.0.0_r17android-7.0.0_r15android-7.0.0_r14android-7.0.0_r13android-7.0.0_r12android-7.0.0_r11android-7.0.0_r10android-7.0.0_r1nougat-releasenougat-mr2.3-releasenougat-mr2.2-releasenougat-mr2.1-releasenougat-mr2-security-releasenougat-mr2-releasenougat-mr2-pixel-releasenougat-mr2-devnougat-mr1.8-releasenougat-mr1.7-releasenougat-mr1.6-releasenougat-mr1.5-releasenougat-mr1.4-releasenougat-mr1.3-releasenougat-mr1.2-releasenougat-mr1.1-releasenougat-mr1-volantis-releasenougat-mr1-security-releasenougat-mr1-releasenougat-mr1-flounder-releasenougat-mr1-devnougat-mr1-cts-releasenougat-mr0.5-releasenougat-dr1-releasenougat-devnougat-cts-releasenougat-bugfix-release
- Merges in upstream smali into nyc-dev for dex version 37 support.
Bug: 27809626
Change-Id: Iff12b1e384355bcb261b55afd16af3bcac6ef1a0
Diffstat (limited to 'smalidea/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java')
-rw-r--r-- | smalidea/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/smalidea/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java b/smalidea/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java new file mode 100644 index 00000000..7b98174a --- /dev/null +++ b/smalidea/src/main/java/org/jf/smalidea/dexlib/SmalideaField.java @@ -0,0 +1,116 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.jf.smalidea.dexlib; + +import com.google.common.collect.ImmutableSet; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiField; +import com.intellij.psi.PsiModifierList; +import org.jf.dexlib2.AccessFlags; +import org.jf.dexlib2.base.reference.BaseFieldReference; +import org.jf.dexlib2.iface.Annotation; +import org.jf.dexlib2.iface.Field; +import org.jf.dexlib2.iface.value.EncodedValue; +import org.jf.smalidea.psi.impl.SmaliField; +import org.jf.smalidea.util.NameUtils; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Set; + +public class SmalideaField extends BaseFieldReference implements Field { + private final PsiField psiField; + + public SmalideaField(PsiField psiField) { + this.psiField = psiField; + } + + @Override public int getAccessFlags() { + if (psiField instanceof SmaliField) { + return ((SmaliField)psiField).getModifierList().getAccessFlags(); + } else { + int flags = 0; + PsiModifierList modifierList = psiField.getModifierList(); + if (modifierList == null) { + return flags; + } + if (modifierList.hasModifierProperty("public")) { + flags |= AccessFlags.PUBLIC.getValue(); + } else if (modifierList.hasModifierProperty("protected")) { + flags |= AccessFlags.PROTECTED.getValue(); + } else if (modifierList.hasModifierProperty("private")) { + flags |= AccessFlags.PRIVATE.getValue(); + } + + if (modifierList.hasModifierProperty("static")) { + flags |= AccessFlags.STATIC.getValue(); + } + + if (modifierList.hasModifierProperty("final")) { + flags |= AccessFlags.FINAL.getValue(); + } + + if (modifierList.hasModifierProperty("volatile")) { + flags |= AccessFlags.VOLATILE.getValue(); + } + // TODO: how do we tell if it's an enum? + + return flags; + } + } + + @Nonnull @Override public String getDefiningClass() { + PsiClass containingClass = psiField.getContainingClass(); + if (containingClass == null) { + throw new RuntimeException("I don't know what to do here... Is this even possible?"); + } + return NameUtils.javaToSmaliType(containingClass); + } + + @Nonnull @Override public String getName() { + return psiField.getNameIdentifier().getText(); + } + + @Nonnull @Override public String getType() { + return NameUtils.javaToSmaliType(psiField.getType()); + } + + @Nullable @Override public EncodedValue getInitialValue() { + // TODO: implement this. Not needed for method analysis + return null; + } + + @Nonnull @Override public Set<? extends Annotation> getAnnotations() { + // TODO: implement this. Not needed for method analysis + return ImmutableSet.of(); + } +} |