diff --git a/com.google.eclipse.protobuf/.antlr-generator-3.2.0.jar b/com.google.eclipse.protobuf/.antlr-generator-3.2.0.jar
new file mode 100644
index 0000000..4243492
--- /dev/null
+++ b/com.google.eclipse.protobuf/.antlr-generator-3.2.0.jar
Binary files differ
diff --git a/com.google.eclipse.protobuf/.classpath b/com.google.eclipse.protobuf/.classpath
new file mode 100644
index 0000000..7e8449d
--- /dev/null
+++ b/com.google.eclipse.protobuf/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/com.google.eclipse.protobuf/.project b/com.google.eclipse.protobuf/.project
new file mode 100644
index 0000000..b524930
--- /dev/null
+++ b/com.google.eclipse.protobuf/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.google.eclipse.protobuf</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/com.google.eclipse.protobuf/.settings/org.eclipse.jdt.core.prefs b/com.google.eclipse.protobuf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..002551b
--- /dev/null
+++ b/com.google.eclipse.protobuf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,81 @@
+#Wed Apr 06 10:56:09 PDT 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+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.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cbe1187
--- /dev/null
+++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Version: 1.0.0
+Bundle-SymbolicName: com.google.eclipse.protobuf; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext,
+ org.eclipse.xtext.generator;resolution:=optional,
+ org.eclipse.emf.codegen.ecore;resolution:=optional,
+ org.eclipse.emf.mwe.utils;resolution:=optional,
+ org.eclipse.emf.mwe2.launch;resolution:=optional,
+ com.ibm.icu;resolution:=optional,
+ org.eclipse.xtext.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.antlr.runtime,
+ org.eclipse.core.runtime;bundle-version="3.7.0"
+Import-Package: org.apache.log4j,
+ org.apache.commons.logging
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: com.google.eclipse.protobuf,
+ com.google.eclipse.protobuf.parseTreeConstruction,
+ com.google.eclipse.protobuf.parser.antlr,
+ com.google.eclipse.protobuf.parser.antlr.internal,
+ com.google.eclipse.protobuf.protobuf,
+ com.google.eclipse.protobuf.protobuf.impl,
+ com.google.eclipse.protobuf.protobuf.util,
+ com.google.eclipse.protobuf.scoping,
+ com.google.eclipse.protobuf.services,
+ com.google.eclipse.protobuf.util,
+ com.google.eclipse.protobuf.validation
diff --git a/com.google.eclipse.protobuf/OSGI-INF/l10n/bundle.properties b/com.google.eclipse.protobuf/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..a8b3cdb
--- /dev/null
+++ b/com.google.eclipse.protobuf/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,3 @@
+#Properties file for com.google.eclipse.protobuf
+Bundle-Vendor = Google Inc.
+Bundle-Name = com.google.eclipse.protobuf
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf/build.properties b/com.google.eclipse.protobuf/build.properties
new file mode 100644
index 0000000..300fb1a
--- /dev/null
+++ b/com.google.eclipse.protobuf/build.properties
@@ -0,0 +1,6 @@
+source.. = src/,\
+          src-gen/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               OSGI-INF/
diff --git a/com.google.eclipse.protobuf/global.proto b/com.google.eclipse.protobuf/global.proto
new file mode 100644
index 0000000..294cd0e
--- /dev/null
+++ b/com.google.eclipse.protobuf/global.proto
@@ -0,0 +1,22 @@
+message FileOptions {
+
+  optional string java_package = 1;
+  optional string java_outer_classname = 8;
+  optional bool java_multiple_files = 10 [default=false];
+  optional bool java_generate_equals_and_hash = 20 [default=false];
+
+  enum OptimizeMode {
+    SPEED = 1;        // Generate complete code for parsing, serialization, etc.
+    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
+    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
+  }
+
+  optional OptimizeMode optimize_for = 9 [default=SPEED];
+  optional bool cc_generic_services = 16 [default=false];
+  optional bool java_generic_services = 17 [default=false];
+  optional bool py_generic_services = 18 [default=false];
+
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  extensions 1000 to max;
+}
diff --git a/com.google.eclipse.protobuf/plugin.xml b/com.google.eclipse.protobuf/plugin.xml
new file mode 100644
index 0000000..c9018bb
--- /dev/null
+++ b/com.google.eclipse.protobuf/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.google.com/eclipse/protobuf/Protobuf" 
+       class = "com.google.eclipse.protobuf.protobuf.ProtobufPackage"
+       genModel = "com/google/eclipse/protobuf/Protobuf.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2 b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2
new file mode 100644
index 0000000..a954940
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/GenerateProtobuf.mwe2
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Generated by Xtext
+ */
+module com.google.eclipse.protobuf.Protobuf
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.generator.*
+import org.eclipse.xtext.ui.generator.*
+
+var grammarURI = "classpath:/com/google/eclipse/protobuf/Protobuf.xtext"
+var file.extensions = "proto"
+var projectName = "com.google.eclipse.protobuf"
+var runtimeProject = "../${projectName}"
+
+Workflow {
+    bean = StandaloneSetup {
+		platformUri = "${runtimeProject}/.."
+	}
+
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}/src-gen"
+	}
+
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}.ui/src-gen"
+	}
+
+	component = Generator {
+		pathRtProject = runtimeProject
+		pathUiProject = "${runtimeProject}.ui"
+		projectNameRt = projectName
+		projectNameUi = "${projectName}.ui"
+		language = {
+			uri = grammarURI
+			fileExtensions = file.extensions
+
+			// Java API to access grammar elements (required by several other fragments)
+			fragment = grammarAccess.GrammarAccessFragment {}
+
+			// generates Java API for the generated EPackages 
+			fragment = ecore.EcoreGeneratorFragment {
+			// referencedGenModels = "uri to genmodel, uri to next genmodel"
+			}
+
+			// the serialization component
+			fragment = parseTreeConstructor.ParseTreeConstructorFragment {}
+
+			// a custom ResourceFactory for use with EMF 
+			fragment = resourceFactory.ResourceFactoryFragment {
+				fileExtensions = file.extensions
+			}
+
+			// The antlr parser generator fragment.
+			fragment = parser.antlr.XtextAntlrGeneratorFragment {
+			//  options = {
+			//		backtrack = true
+			//	}
+			}
+
+			// java-based API for validation 
+			fragment = validation.JavaValidatorFragment {
+				composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
+				composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+				// registerForImportedPackages = true
+			}
+
+			// scoping and exporting API
+			// fragment = scoping.ImportURIScopingFragment {}
+			// fragment = exporting.SimpleNamesFragment {}
+
+			// scoping and exporting API 
+			fragment = scoping.ImportNamespacesScopingFragment {}
+			fragment = exporting.QualifiedNamesFragment {}
+			fragment = builder.BuilderIntegrationFragment {}
+
+			// formatter API 
+			fragment = formatting.FormatterFragment {}
+
+			// labeling API 
+			fragment = labeling.LabelProviderFragment {}
+
+			// outline API 
+			fragment = outline.OutlineTreeProviderFragment {}
+			fragment = outline.QuickOutlineFragment {}
+
+			// quickfix API 
+			fragment = quickfix.QuickfixProviderFragment {}
+
+			// content assist API  
+			fragment = contentAssist.JavaBasedContentAssistFragment {}
+
+			// generates a more lightweight Antlr parser and lexer tailored for content assist  
+			fragment = parser.antlr.XtextAntlrUiGeneratorFragment {}
+
+			// project wizard (optional) 
+			// fragment = projectWizard.SimpleProjectWizardFragment {
+			// 		generatorProjectName = "${projectName}.generator" 
+			//		modelFileExtension = file.extensions
+			// }
+		}
+	}
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
new file mode 100644
index 0000000..944e1b2
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Author: alruiz@google.com (Alex Ruiz)
+ */
+
+grammar com.google.eclipse.protobuf.Protobuf with org.eclipse.xtext.common.Terminals
+
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+generate protobuf "http://www.google.com/eclipse/protobuf/Protobuf"
+
+Protobuf:
+  (package=Package)?
+  (imports+=Import)*
+  (options+=Option)*
+  (elements+=ProtobufElement)*;
+  
+Package:
+  'package' name=QualifiedName ';';
+
+Import: 
+  'import' importURI=STRING ';';
+
+QualifiedName:
+  ID ('.' ID)*;
+
+Option:
+  'option' name=ID '=' value=ValueRef ';';
+
+ProtobufElement:
+  Type | ExtendMessage;
+
+Type:
+  Message | Enum;
+
+Message:
+  'message' name=ID '{'
+  elements+=MessageElement*
+  ('extensions' extensionsFrom=INT 'to' (extensionsTo=INT | 'max') ';')?
+  '}';
+
+MessageElement:
+  Type | Property;
+
+Property:
+  modifier=Modifier type=AbstractTypeReference name=ID '=' index=INT (('[' 'default' '=' default=ValueRef
+  ']') | ('[' 'packed' '=' packed=BooleanRef ']'))? ';';
+
+enum Modifier:
+  required
+  | optional
+  | repeated;
+
+AbstractTypeReference:
+  ScalarTypeReference | TypeReference;
+
+ScalarTypeReference:
+  scalar=ScalarType;
+
+enum ScalarType:
+  double
+  | float
+  | int32
+  | int64
+  | uint32
+  | uint64
+  | sint32
+  | sint64
+  | fixed32
+  | fixed64
+  | sfixed32
+  | sfixed64
+  | bool
+  | string
+  | bytes;
+
+TypeReference:
+  type=[Type | QualifiedName];
+
+ValueRef:
+  LiteralRef
+  | BooleanRef
+  | IntRef
+  | FloatRef
+  | StringRef;
+
+LiteralRef:
+  literal=[Literal];
+
+BooleanRef:
+  boolean=BOOL;
+
+enum BOOL:
+  true
+  | false;
+
+IntRef:
+  int=INT;
+
+FloatRef:
+  float=FLOAT;
+
+StringRef:
+  string=STRING;
+
+Enum:
+  'enum' name=ID '{'
+  literals+=Literal*
+  '}' ';'?;
+
+Literal:
+  name=ID '=' index=INT ';';
+
+ExtendMessage:
+  'extend' message=[Message] '{'
+  elements+=MessageElement*
+  '}';
+
+terminal INT returns ecore::EInt: ('0'..'9')+;  
+terminal FLOAT returns ecore::EFloat: ('0'..'9')* ('.' ('0'..'9')+)?;
+  
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
new file mode 100644
index 0000000..5492360
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf;
+
+import org.eclipse.xtext.naming.IQualifiedNameProvider;
+import org.eclipse.xtext.scoping.IGlobalScopeProvider;
+import org.eclipse.xtext.scoping.impl.*;
+
+import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameProvider;
+import com.google.eclipse.protobuf.scoping.SimpleImportUriResolver;
+import com.google.inject.Binder;
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class ProtobufRuntimeModule extends com.google.eclipse.protobuf.AbstractProtobufRuntimeModule {
+
+  /** {@inheritDoc} */
+  @Override public Class<? extends IGlobalScopeProvider> bindIGlobalScopeProvider() {
+    return ImportUriGlobalScopeProvider.class;
+  }
+
+  /** {@inheritDoc} */
+  @Override public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
+    return ProtobufQualifiedNameProvider.class;
+  }
+
+  public void configureImportUriResolver(Binder binder) {
+    binder.bind(ImportUriResolver.class).to(SimpleImportUriResolver.class);
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufStandaloneSetup.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufStandaloneSetup.java
new file mode 100644
index 0000000..ac0af7c
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufStandaloneSetup.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf;
+
+/**
+ * Initialization support for running Xtext languages without Equinox extension registry.
+ */
+public class ProtobufStandaloneSetup extends ProtobufStandaloneSetupGenerated{
+
+	public static void doSetup() {
+		new ProtobufStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
+
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
new file mode 100644
index 0000000..10d911a
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/formatting/ProtobufFormatter.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.formatting;
+
+import org.eclipse.xtext.formatting.impl.*;
+
+import com.google.eclipse.protobuf.services.ProtobufGrammarAccess;
+
+/**
+ * This class contains custom formatting description.
+ *
+ * @see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting on how and when to use it
+ * @see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+public class ProtobufFormatter extends AbstractDeclarativeFormatter {
+
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+	  ProtobufGrammarAccess g = (ProtobufGrammarAccess) getGrammarAccess();
+	  c.setLinewrap(0, 1, 2).before(g.getSL_COMMENTRule());
+	}
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
new file mode 100644
index 0000000..2019edc
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/naming/ProtobufQualifiedNameProvider.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.naming;
+
+import java.util.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.naming.*;
+
+import com.google.eclipse.protobuf.protobuf.Package;
+import com.google.eclipse.protobuf.util.EObjectFinder;
+import com.google.inject.Inject;
+
+/**
+ * Provides fully-qualified names for protobuf elements.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider {
+
+  @Inject private EObjectFinder finder;
+
+  /** {@inheritDoc} */
+  @Override public QualifiedName getFullyQualifiedName(EObject obj) {
+    QualifiedName fqn = super.getFullyQualifiedName(obj);
+    if (fqn == null || obj instanceof Package) return fqn;
+    Package p = finder.findPackage(obj);
+    if (p == null) return fqn;
+    List<String> segments = new ArrayList<String>(fqn.getSegments());
+    String packageName = p.getName();
+    if (packageName != null && !segments.isEmpty() && !packageName.equals(segments.get(0))) 
+      segments.add(0, packageName);
+    return QualifiedName.create(segments.toArray(new String[segments.size()]));
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/GlobalScope.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/GlobalScope.java
new file mode 100644
index 0000000..0e3dfc2
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/GlobalScope.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.scoping;
+
+import static java.util.Collections.unmodifiableCollection;
+import static org.eclipse.core.runtime.FileLocator.*;
+
+import java.io.*;
+import java.net.URL;
+import java.util.*;
+
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.xtext.parser.IParseResult;
+import org.eclipse.xtext.parser.IParser;
+import org.eclipse.xtext.resource.XtextResource;
+import org.osgi.framework.Bundle;
+
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Enum;
+import com.google.eclipse.protobuf.util.EObjectFinder;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+/**
+ * Protobuf elements accesible to any .proto file.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+public class GlobalScope {
+
+  private Protobuf root;
+
+  private boolean initialized;
+  private Map<String, Property> fileOptions = new LinkedHashMap<String, Property>();
+  private Enum optimizedMode;
+
+  @Inject EObjectFinder finder;
+
+  @Inject public GlobalScope(IParser parser) {
+    try {
+      XtextResource resource = new XtextResource(URI.createURI(""));
+      IParseResult result = parser.parse(new InputStreamReader(globalScopeContents(), "UTF-8"));
+      root = (Protobuf) result.getRootASTElement();
+      resource.getContents().add(root);
+    } catch (IOException e) {
+      throw new IllegalStateException("Unable to parse global scope", e);
+    }
+  }
+
+  private static InputStream globalScopeContents() throws IOException {
+    Bundle bundle = Platform.getBundle("com.google.eclipse.protobuf");
+    Path originPath = new Path("global.proto");
+    URL bundledFileURL = find(bundle, originPath, null);
+    return (InputStream) resolve(bundledFileURL).getContent();
+  }
+
+  private void init() {
+    if (initialized) return;
+    initialized = true;
+    Message m = fileOptionsMessage();
+    for (MessageElement e : m.getElements()) {
+      if (e instanceof Property) {
+        addFileOption((Property) e);
+        continue;
+      }
+      if (e instanceof Enum && "OptimizeMode".equals(e.getName())) {
+        optimizedMode = (Enum) e;
+        continue;
+      }
+    }
+  }
+
+  private Message fileOptionsMessage() {
+    for (ProtobufElement e : root.getElements()) {
+      if (!(e instanceof Message)) continue;
+      Message m = (Message) e;
+      if ("FileOptions".equals(m.getName())) return m;
+    }
+    return null;
+  }
+
+  private void addFileOption(Property p) {
+    fileOptions.put(p.getName(), p);
+  }
+
+  public Collection<Property> fileOptions() {
+    init();
+    return unmodifiableCollection(fileOptions.values());
+  }
+
+  public Enum optimizedMode() {
+    init();
+    return optimizedMode;
+  }
+
+  public boolean isOptimizeForOption(Option option) {
+    init();
+    return "optimize_for".equals(option.getName());
+  }
+
+  public Property lookupFileOption(String name) {
+    init();
+    return fileOptions.get(name);
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
new file mode 100644
index 0000000..2a32b85
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.scoping;
+
+import static org.eclipse.xtext.resource.EObjectDescription.create;
+
+import java.util.*;
+
+import org.eclipse.emf.ecore.*;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.scoping.IScope;
+import org.eclipse.xtext.scoping.impl.*;
+
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Enum;
+import com.google.eclipse.protobuf.util.EObjectFinder;
+import com.google.inject.Inject;
+
+/**
+ * Custom scoping description.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ *
+ * @see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#scoping
+ */
+public class ProtobufScopeProvider extends AbstractDeclarativeScopeProvider {
+
+  private static final boolean DO_NOT_IGNORE_CASE = false;
+
+  @Inject private EObjectFinder finder;
+  @Inject private GlobalScope globalScope;
+
+  @SuppressWarnings("unused")
+  IScope scope_LiteralRef_literal(LiteralRef literalRef, EReference reference) {
+    EObject container = literalRef.eContainer();
+    if (container instanceof Property) {
+      Enum enumType = finder.enumTypeOfProperty((Property) container);
+      if (enumType != null) return scopeForLiteralsIn(enumType);
+    }
+    if (container instanceof Option && globalScope.isOptimizeForOption((Option) container)) {
+      Enum optimizedMode = globalScope.optimizedMode();
+      return scopeForLiteralsIn(optimizedMode);
+    }
+    return null;
+  }
+
+  private static IScope scopeForLiteralsIn(Enum enumType) {
+    List<IEObjectDescription> descriptions = descriptionsFrom(enumType);
+    return new SimpleScope(descriptions, DO_NOT_IGNORE_CASE);
+  }
+
+  private static List<IEObjectDescription> descriptionsFrom(Enum enumType) {
+    List<IEObjectDescription> descriptions = new ArrayList<IEObjectDescription>();
+    for (Literal literal : enumType.getLiterals())
+      descriptions.add(create(literal.getName(), literal));
+    return descriptions;
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/SimpleImportUriResolver.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/SimpleImportUriResolver.java
new file mode 100644
index 0000000..4e57e85
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/SimpleImportUriResolver.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.scoping;
+
+import java.util.List;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.scoping.impl.ImportUriResolver;
+
+import com.google.eclipse.protobuf.protobuf.Import;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class SimpleImportUriResolver extends ImportUriResolver {
+
+  private static final String PREFIX = "platform:/resource";
+
+  /**
+   * Prefix used by EMF for resource URIs: "platform:/resource/".
+   */
+  public static final String URI_PREFIX = PREFIX + "/";
+
+  /** {@inheritDoc} */
+  @Override public String apply(EObject from) {
+    if (from instanceof Import)
+      fixUri((Import) from);
+    return super.apply(from);
+  }
+
+  /*
+   * The import URI is relative to the file where the import is. Protoc works fine, but the editor doesn't.
+   * In order for the editor to see the import, we need to add to the import URI "platform:resource" and the parent
+   * folder of the file containing the import.
+   *
+   * For example: given the following file hierarchy:
+   *
+   * - protobuf-test (project)
+   *   - folder
+   *     - proto2.proto
+   *   - proto1.proto
+   *
+   * If we import "folder/proto2.proto" into proto1.proto, proto1.proto will compile fine, but the editor will complain.
+   * We need to have the import URI as "platform:/resource/protobuf-test/folder/proto2.proto" for the editor to see it.
+   */
+  private void fixUri(Import i) {
+    String prefix = uriPrefix(i.eResource().getURI());
+    String uri = i.getImportURI();
+    if (!uri.startsWith(prefix)) {
+      if (!uri.startsWith(prefix)) prefix += "/";
+      i.setImportURI(prefix + uri);
+    }
+  }
+
+  private String uriPrefix(URI containerUri) {
+    StringBuilder prefix = new StringBuilder();
+    prefix.append(PREFIX);
+    int start = (containerUri.scheme() == null) ? 0 : 1; // ignore the scheme if present (e.g. "resource")
+    List<String> segments = containerUri.segmentsList();
+    int end = segments.size() - 1; // ignore file name (at the end of the URI)
+    for (int j = start; j < end; j++)
+      prefix.append("/").append(segments.get(j));
+    return prefix.toString();
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/EObjectFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/EObjectFinder.java
new file mode 100644
index 0000000..82c470a
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/EObjectFinder.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.util;
+
+import org.eclipse.emf.ecore.EObject;
+
+import com.google.eclipse.protobuf.protobuf.*;
+import com.google.eclipse.protobuf.protobuf.Enum;
+import com.google.eclipse.protobuf.protobuf.Package;
+import com.google.inject.Singleton;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+public class EObjectFinder {
+
+  public Enum enumTypeOfProperty(Property p) {
+    AbstractTypeReference aTypeRef = (p).getType();
+    if (aTypeRef instanceof TypeReference) {
+      Type type = ((TypeReference) aTypeRef).getType();
+      if (type instanceof Enum) return (Enum) type;
+    }
+    return null;
+  }
+
+  public ScalarType scalarTypeOfProperty(Property p) {
+    AbstractTypeReference aTypeRef = (p).getType();
+    if (aTypeRef instanceof ScalarTypeReference)
+      return ((ScalarTypeReference) aTypeRef).getScalar();
+    return null;
+  }
+
+  public Package findPackage(EObject o) {
+    EObject current = o;
+    while (current != null) {
+      if (current instanceof Protobuf) return ((Protobuf) current).getPackage();
+      current = current.eContainer();
+    }
+    return null;
+  }
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
new file mode 100644
index 0000000..5932ad4
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.validation;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufJavaValidator extends AbstractProtobufJavaValidator {
+
+//	@Check
+//	public void checkGreetingStartsWithCapital(Greeting greeting) {
+//		if (!Character.isUpperCase(greeting.getName().charAt(0))) {
+//			warning("Name should start with a capital", MyDslPackage.GREETING__NAME);
+//		}
+//	}
+
+}
