From a3d2e1581e56e3ea405df9a99112a03eb9053a6c Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sun, 16 Mar 2014 20:18:40 -0700 Subject: [PATCH] Implement initial SmaliPrimitiveType --- smalidea/src/main/antlr3/smalideaParser.g | 15 ++++-- .../jf/smalidea/psi/SmaliElementTypes.java | 2 + .../psi/impl/SmaliPrimitiveTypeElement.java | 47 +++++++++++++++++++ 3 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliPrimitiveTypeElement.java diff --git a/smalidea/src/main/antlr3/smalideaParser.g b/smalidea/src/main/antlr3/smalideaParser.g index 2ab5c53a..0884e0c7 100644 --- a/smalidea/src/main/antlr3/smalideaParser.g +++ b/smalidea/src/main/antlr3/smalideaParser.g @@ -258,7 +258,7 @@ registers_directive ); param_list_or_id - : PARAM_LIST_OR_ID_START PRIMITIVE_TYPE+ PARAM_LIST_OR_ID_END; + : PARAM_LIST_OR_ID_START primitive_type+ PARAM_LIST_OR_ID_END; /*identifiers are much more general than most languages. Any of the below can either be the indicated type OR an identifier, depending on the context*/ @@ -312,17 +312,22 @@ method_prototype param_list : PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END - | PARAM_LIST_OR_ID_START PRIMITIVE_TYPE* PARAM_LIST_OR_ID_END + | PARAM_LIST_OR_ID_START primitive_type* PARAM_LIST_OR_ID_END | nonvoid_type_descriptor*; +primitive_type + @init { Marker marker = mark(); } + : PRIMITIVE_TYPE; + finally { marker.done(SmaliElementTypes.PRIMITIVE_TYPE); } + type_descriptor : VOID_TYPE - | PRIMITIVE_TYPE + | primitive_type | CLASS_DESCRIPTOR | ARRAY_DESCRIPTOR; nonvoid_type_descriptor - : PRIMITIVE_TYPE + : primitive_type | CLASS_DESCRIPTOR | ARRAY_DESCRIPTOR; @@ -402,7 +407,7 @@ type_field_method_literal ) | /* epsilon */ ) - | PRIMITIVE_TYPE + | primitive_type | VOID_TYPE; finally { marker.done(SmaliElementTypes.LITERAL); } diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java b/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java index 3c6de6ed..0a06d5da 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java @@ -51,4 +51,6 @@ public class SmaliElementTypes { new SmaliCompositeElementType("IMPLEMENTS_STATEMENT", SmaliImplementsStatement.FACTORY); public static final SmaliCompositeElementType SOURCE_STATEMENT = new SmaliCompositeElementType("SOURCE_STATEMENT", SmaliSourceStatement.FACTORY); + public static final SmaliCompositeElementType PRIMITIVE_TYPE = + new SmaliCompositeElementType("PRIMITIVE_TYPE", SmaliPrimitiveTypeElement.FACTORY); } diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliPrimitiveTypeElement.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliPrimitiveTypeElement.java new file mode 100644 index 00000000..1c1ccd45 --- /dev/null +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliPrimitiveTypeElement.java @@ -0,0 +1,47 @@ +/* + * Copyright 2014, 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.psi.impl; + +import org.jf.smalidea.psi.SmaliCompositeElementFactory; +import org.jf.smalidea.psi.SmaliElementTypes; + +public class SmaliPrimitiveTypeElement extends SmaliCompositeElement { + public static final SmaliCompositeElementFactory FACTORY = new SmaliCompositeElementFactory() { + @Override public SmaliCompositeElement createElement() { + return new SmaliPrimitiveTypeElement(); + } + }; + + public SmaliPrimitiveTypeElement() { + super(SmaliElementTypes.PRIMITIVE_TYPE); + } +}