// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.collide.dto; import com.google.collide.dtogen.shared.CompactJsonDto; import com.google.collide.dtogen.shared.RoutingType; import com.google.collide.dtogen.shared.SerializationIndex; import com.google.collide.dtogen.shared.ServerToClientDto; import com.google.collide.json.shared.JsonArray; /** * An interface representing a continuous namespace in the source code. It may * be a function, a class, an object or just anonymous namespace. * * Code blocks have start offset relative to the file start, length, * type and optional name. * * This interface is based on CodeBlock proto from Code Search */ @RoutingType(type = RoutingTypes.CODEBLOCK) public interface CodeBlock extends ServerToClientDto, CompactJsonDto { /** * Enumeration of currently supported code block types. */ public static enum Type { UNDEFINED(0), FUNCTION(1), FIELD(2), FILE(3), CLASS(4), UNRESOLVED_REFERENCE(5), PACKAGE(6); public static final int VALUE_UNDEFINED = 0; public static final int VALUE_FUNCTION = 1; public static final int VALUE_FIELD = 2; public static final int VALUE_FILE = 3; public static final int VALUE_CLASS = 4; public static final int VALUE_UNRESOLVED_REFERENCE = 5; public static final int VALUE_PACKAGE = 6; public final int value; public static Type valueOf(int value) { switch (value) { case VALUE_UNDEFINED: return UNDEFINED; case VALUE_FUNCTION: return FUNCTION; case VALUE_FIELD: return FIELD; case VALUE_FILE: return FILE; case VALUE_CLASS: return CLASS; case VALUE_UNRESOLVED_REFERENCE: return UNRESOLVED_REFERENCE; case VALUE_PACKAGE: return PACKAGE; } throw new IllegalStateException("Unknown type value: " + value); } Type(int serializedValue) { this.value = serializedValue; } } /** * The semantics of ID is different depending on code block type. * For FILE code blocks it is a workspace-unique long, for other code blocks * it is a file-unique int. Full ID will involve both components. * * @return id */ @SerializationIndex(1) String getId(); /** * @return the type of this code block */ @SerializationIndex(2) int getBlockType(); /** * @return the end column of this code block relative to the first column on the line */ @SerializationIndex(3) int getEndColumn(); /** * @return the end line number of this code block relative to the file start */ @SerializationIndex(4) int getEndLineNumber(); /** * @return the name of this code block or {@code null} if the code block * is anonymous */ @SerializationIndex(5) String getName(); /** * @return the start column of this code block relative to the first column on the line */ @SerializationIndex(6) int getStartColumn(); /** * @return the start line number of this code block relative to the file start */ @SerializationIndex(7) int getStartLineNumber(); /** * @return the list of the nested code blocks */ @SerializationIndex(8) JsonArray<CodeBlock> getChildren(); }