Skip to content

Commit

Permalink
first implementation of model inferrer for the test language
Browse files Browse the repository at this point in the history
  • Loading branch information
LorenzoBettini committed Feb 5, 2024
1 parent d7e50c9 commit 4cc8ad6
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,21 @@
*******************************************************************************/
package org.eclipse.xtext.xbase.testlanguages;

import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.xbase.jvmmodel.IJvmModelInferrer;
import org.eclipse.xtext.xbase.testlanguages.jvmmodel.JvmGenericTypeValidatorTestLangJmvModelInferrer;
import org.eclipse.xtext.xbase.testlanguages.scoping.JvmGenericTypeValidatorTestLangQualifiedNameProvider;

/**
* Use this class to register components to be used at runtime / without the Equinox extension registry.
* @author Lorenzo Bettini
*/
public class JvmGenericTypeValidatorTestLangRuntimeModule extends AbstractJvmGenericTypeValidatorTestLangRuntimeModule {
public Class<? extends IJvmModelInferrer> bindIJvmModelInferrer() {
return JvmGenericTypeValidatorTestLangJmvModelInferrer.class;
}

@Override
public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
return JvmGenericTypeValidatorTestLangQualifiedNameProvider.class;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*******************************************************************************
* Copyright (c) 2024 itemis AG (http://www.itemis.eu) and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.xtext.xbase.testlanguages.jvmmodel;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.common.types.JvmGenericType;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.xbase.jvmmodel.AbstractModelInferrer;
import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor;
import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder;
import org.eclipse.xtext.xbase.testlanguages.jvmGenericTypeValidatorTestLang.MyClass;
import org.eclipse.xtext.xbase.testlanguages.jvmGenericTypeValidatorTestLang.MyInterface;

import com.google.inject.Inject;

/**
* @author Lorenzo Bettini
*
*/
public class JvmGenericTypeValidatorTestLangJmvModelInferrer extends AbstractModelInferrer {
@Inject
private JvmTypesBuilder jvmTypesBuilder;

@Inject
private IQualifiedNameProvider qualifiedNameProvider;

protected void _infer(MyClass myClass, IJvmDeclaredTypeAcceptor acceptor, boolean prelinkingPhase) {
acceptor.accept(jvmTypesBuilder.toClass(myClass, qualifiedNameProvider.getFullyQualifiedName(myClass)),
(JvmGenericType it) -> {
jvmTypesBuilder.setDocumentation(it, jvmTypesBuilder.getDocumentation(myClass));
if (myClass.getExtends() != null) {
it.getSuperTypes().add(jvmTypesBuilder.cloneWithProxies(myClass.getExtends()));
}
for (var interf : myClass.getImplements()) {
it.getSuperTypes().add(jvmTypesBuilder.cloneWithProxies(interf));
}
});
}

protected void _infer(MyInterface myInterface, IJvmDeclaredTypeAcceptor acceptor, boolean prelinkingPhase) {
acceptor.accept(jvmTypesBuilder.toClass(myInterface, qualifiedNameProvider.getFullyQualifiedName(myInterface)),
(JvmGenericType it) -> {
it.setInterface(true);
jvmTypesBuilder.setDocumentation(it, jvmTypesBuilder.getDocumentation(myInterface));
for (var interf : myInterface.getExtends()) {
it.getSuperTypes().add(jvmTypesBuilder.cloneWithProxies(interf));
}
});
}

@Override
public void infer(EObject element, IJvmDeclaredTypeAcceptor acceptor, boolean prelinkingPhase) {
if (element instanceof MyClass) {
_infer((MyClass) element, acceptor, prelinkingPhase);
return;
} else if (element instanceof MyInterface) {
_infer((MyInterface) element, acceptor, prelinkingPhase);
return;
} else {
super.infer(element, acceptor, prelinkingPhase);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.eclipse.xtext.xbase.testlanguages.scoping;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.xbase.scoping.XbaseQualifiedNameProvider;
import org.eclipse.xtext.xbase.testlanguages.jvmGenericTypeValidatorTestLang.JvmGenericTypeValidatorTestLangModel;

/**
* @author Lorenzo Bettini
*
*/
public class JvmGenericTypeValidatorTestLangQualifiedNameProvider extends XbaseQualifiedNameProvider {

@Override
public QualifiedName getFullyQualifiedName(EObject obj) {
if (obj instanceof JvmGenericTypeValidatorTestLangModel) {
JvmGenericTypeValidatorTestLangModel model = (JvmGenericTypeValidatorTestLangModel) obj;
if (model.getPackage() != null)
return getConverter().toQualifiedName(model.getPackage());
}
return super.getFullyQualifiedName(obj);
}
}
9 changes: 7 additions & 2 deletions org.eclipse.xtext.xbase/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,11 @@ Export-Package: org.eclipse.xtext.xbase;version="2.34.0",
org.eclipse.xtext.xbase.debug;version="2.34.0";x-internal:=true,
org.eclipse.xtext.xbase.featurecalls;version="2.34.0";x-internal:=true,
org.eclipse.xtext.xbase.formatting;version="2.34.0";x-friends:="org.eclipse.xtend.ide,org.eclipse.xtend.ide.common,org.eclipse.xtext.xbase.junit",
org.eclipse.xtext.xbase.formatting2;version="2.34.0";x-friends:="org.eclipse.xtext.purexbase,org.eclipse.xtend.core,org.eclipse.xtend.core.tests,org.eclipse.xtext.xbase.tests",
org.eclipse.xtext.xbase.formatting2;version="2.34.0";
x-friends:="org.eclipse.xtext.purexbase,
org.eclipse.xtend.core,
org.eclipse.xtend.core.tests,
org.eclipse.xtext.xbase.tests",
org.eclipse.xtext.xbase.impl;version="2.34.0";x-internal:=true,
org.eclipse.xtext.xbase.imports;version="2.34.0";
x-friends:="org.eclipse.xtext.xbase.ide,
Expand Down Expand Up @@ -100,7 +104,8 @@ Export-Package: org.eclipse.xtext.xbase;version="2.34.0",
org.eclipse.xtext.xbase.ui,
org.eclipse.xtend.core,
org.eclipse.xtend.ide,
org.eclipse.xtend.ide.common",
org.eclipse.xtend.ide.common,
org.eclipse.xtext.xbase.testlanguages",
org.eclipse.xtext.xbase.scoping.batch;version="2.34.0";
x-friends:="org.eclipse.xtext.xbase.ide,
org.eclipse.xtext.xbase.ui,
Expand Down

0 comments on commit 4cc8ad6

Please sign in to comment.