Loading de.ugoe.cs.swe.T3Q/T3Q.launch +1 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ </listAttribute> <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="de.ugoe.cs.swe.T3Q.T3Q"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--config config/t3q.cfg --profile defaultProfile resources/IMS_PART4_IWD_14wk37"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--config config/t3q.cfg --profile defaultProfile resources/checkNoUnusedImports"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="de.ugoe.cs.swe.T3Q"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx4g"/> <stringAttribute key="yk-options" value=" additional-options2=onexit\=snapshot "/> Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/ImportData.java 0 → 100644 +70 −0 Original line number Diff line number Diff line package de.ugoe.cs.swe.scoping; import java.util.List; import org.eclipse.xtext.resource.IEObjectDescription; import com.google.common.collect.Lists; import de.ugoe.cs.swe.tTCN3.ImportDef; import de.ugoe.cs.swe.tTCN3.TTCN3Module; //TODO: consider restrictions of the imported scope public class ImportData { private String name; private ImportDef importDef; private TTCN3Module module; private List<IEObjectDescription> exportedObjects; public ImportData(String name, ImportDef importDef) { super(); this.name = name; this.importDef = importDef; exportedObjects = Lists.newArrayList(); } public TTCN3Module getModule() { return module; } public void setModule(TTCN3Module module) { this.module = module; } public String getName() { return name; } public ImportDef getImportDef() { return importDef; } public List<IEObjectDescription> getExportedObjects() { return exportedObjects; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ImportData other = (ImportData) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3GlobalScopeProvider.java +42 −7 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import org.antlr.misc.MultiMap; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.resource.Resource; Loading @@ -21,8 +22,13 @@ import org.eclipse.xtext.scoping.impl.MultimapBasedSelectable; import org.eclipse.xtext.util.IResourceScopeCache; import com.google.common.base.Predicate; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import com.google.inject.Inject; import com.google.inject.Provider; Loading @@ -36,6 +42,8 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { // TODO: do not use this map when using the xtext eclipse editor private static final Map<Resource, IScope> staticScope = Maps.newHashMap(); private static final ListMultimap<Resource, ImportData> imports = ArrayListMultimap.create(); @Inject private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; Loading @@ -53,10 +61,10 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { } protected IScope getImportedScope(final Resource resource, final EReference reference) { ISelectable allDescriptions = getAllDescriptions(resource); List<String> imports = getImports(allDescriptions); List<String> importsString = getImports(resource); List<IEObjectDescription> objects = Lists.newArrayList(); if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && staticScope.containsKey(resource)) { return staticScope.get(resource); } else { Loading @@ -65,7 +73,7 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { ISelectable descriptions = getAllDescriptions(r); IEObjectDescription module = descriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getTTCN3Module()).iterator() .next(); if (imports.contains(((TTCN3Module) module.getEObjectOrProxy()).getName())) { if (importsString.contains(((TTCN3Module) module.getEObjectOrProxy()).getName())) { for (IEObjectDescription e : descriptions.getExportedObjects()) { IEObjectDescription d = null; Loading Loading @@ -128,6 +136,14 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { objects.add(d); } } // add exported objects to import list if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && module != null && objects.size() > 0) { ImportData m = new ImportData(((TTCN3Module) module.getEObjectOrProxy()).getName(), null); for (ImportData d : imports.get(resource)) { if (d.equals(m)) d.getExportedObjects().addAll(objects); } } } } } Loading @@ -140,11 +156,22 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { } } protected List<String> getImports(final ISelectable allDescriptions) { protected List<String> getImports(final Resource resource) { ISelectable allDescriptions = getAllDescriptions(resource); List<String> list = Lists.newArrayList(); boolean exists = imports.containsKey(resource); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getImportDef())) { list.add(((ImportDef) d.getEObjectOrProxy()).getName()); ImportDef def = (ImportDef) d.getEObjectOrProxy(); list.add(def.getName()); if (!exists && TTCN3StatisticsProvider.getInstance().isParsingCompleted() && imports.containsKey(resource)) { imports.get(resource).add(new ImportData(def.getName(), def)); } else if (!exists && TTCN3StatisticsProvider.getInstance().isParsingCompleted() && !imports.containsKey(resource)) { imports.put(resource, new ImportData(def.getName(), def)); } } return list; } Loading @@ -167,4 +194,12 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { return new MultimapBasedSelectable(allDescriptions); } public List<ImportData> importedObjects(final Resource resource) { if (imports.containsKey(resource)) { return imports.get(resource); } else { return Lists.newArrayList(); } } } de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +19 −2 Original line number Diff line number Diff line Loading @@ -73,6 +73,10 @@ import org.eclipse.xtext.validation.EValidatorRegistrar import static extension de.ugoe.cs.swe.common.TTCN3ReferenceHelper.* import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import static extension org.eclipse.xtext.EcoreUtil2.* import org.eclipse.xtext.scoping.IGlobalScopeProvider import com.google.inject.Inject import de.ugoe.cs.swe.scoping.TTCN3GlobalScopeProvider import de.ugoe.cs.swe.scoping.ImportData class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading @@ -86,6 +90,9 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { final Stopwatch stopwatch = Stopwatch.createUnstarted(); final TTCN3StatisticsProvider statistics = TTCN3StatisticsProvider.getInstance @Inject private IGlobalScopeProvider globalScopeProvider; @Check def checkNoGotoStatements(GotoStatement goto) { goto.checkNoLabelsOrGotoStatements Loading Loading @@ -1031,6 +1038,16 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { } } @Check def checkNoUnusedImports(TTCN3Module module) { val TTCN3GlobalScopeProvider scopeProvider = globalScopeProvider as TTCN3GlobalScopeProvider if (scopeProvider == null) { return } val List<ImportData> data = scopeProvider.importedObjects(module.eResource); //TODO: implement validations } override register(EValidatorRegistrar registrar) { //not needed for classes used as ComposedCheck } Loading Loading
de.ugoe.cs.swe.T3Q/T3Q.launch +1 −1 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ </listAttribute> <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="de.ugoe.cs.swe.T3Q.T3Q"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--config config/t3q.cfg --profile defaultProfile resources/IMS_PART4_IWD_14wk37"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--config config/t3q.cfg --profile defaultProfile resources/checkNoUnusedImports"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="de.ugoe.cs.swe.T3Q"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx4g"/> <stringAttribute key="yk-options" value=" additional-options2=onexit\=snapshot "/> Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/ImportData.java 0 → 100644 +70 −0 Original line number Diff line number Diff line package de.ugoe.cs.swe.scoping; import java.util.List; import org.eclipse.xtext.resource.IEObjectDescription; import com.google.common.collect.Lists; import de.ugoe.cs.swe.tTCN3.ImportDef; import de.ugoe.cs.swe.tTCN3.TTCN3Module; //TODO: consider restrictions of the imported scope public class ImportData { private String name; private ImportDef importDef; private TTCN3Module module; private List<IEObjectDescription> exportedObjects; public ImportData(String name, ImportDef importDef) { super(); this.name = name; this.importDef = importDef; exportedObjects = Lists.newArrayList(); } public TTCN3Module getModule() { return module; } public void setModule(TTCN3Module module) { this.module = module; } public String getName() { return name; } public ImportDef getImportDef() { return importDef; } public List<IEObjectDescription> getExportedObjects() { return exportedObjects; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ImportData other = (ImportData) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3GlobalScopeProvider.java +42 −7 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import org.antlr.misc.MultiMap; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.resource.Resource; Loading @@ -21,8 +22,13 @@ import org.eclipse.xtext.scoping.impl.MultimapBasedSelectable; import org.eclipse.xtext.util.IResourceScopeCache; import com.google.common.base.Predicate; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import com.google.inject.Inject; import com.google.inject.Provider; Loading @@ -36,6 +42,8 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { // TODO: do not use this map when using the xtext eclipse editor private static final Map<Resource, IScope> staticScope = Maps.newHashMap(); private static final ListMultimap<Resource, ImportData> imports = ArrayListMultimap.create(); @Inject private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; Loading @@ -53,10 +61,10 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { } protected IScope getImportedScope(final Resource resource, final EReference reference) { ISelectable allDescriptions = getAllDescriptions(resource); List<String> imports = getImports(allDescriptions); List<String> importsString = getImports(resource); List<IEObjectDescription> objects = Lists.newArrayList(); if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && staticScope.containsKey(resource)) { return staticScope.get(resource); } else { Loading @@ -65,7 +73,7 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { ISelectable descriptions = getAllDescriptions(r); IEObjectDescription module = descriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getTTCN3Module()).iterator() .next(); if (imports.contains(((TTCN3Module) module.getEObjectOrProxy()).getName())) { if (importsString.contains(((TTCN3Module) module.getEObjectOrProxy()).getName())) { for (IEObjectDescription e : descriptions.getExportedObjects()) { IEObjectDescription d = null; Loading Loading @@ -128,6 +136,14 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { objects.add(d); } } // add exported objects to import list if (TTCN3StatisticsProvider.getInstance().isParsingCompleted() && module != null && objects.size() > 0) { ImportData m = new ImportData(((TTCN3Module) module.getEObjectOrProxy()).getName(), null); for (ImportData d : imports.get(resource)) { if (d.equals(m)) d.getExportedObjects().addAll(objects); } } } } } Loading @@ -140,11 +156,22 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { } } protected List<String> getImports(final ISelectable allDescriptions) { protected List<String> getImports(final Resource resource) { ISelectable allDescriptions = getAllDescriptions(resource); List<String> list = Lists.newArrayList(); boolean exists = imports.containsKey(resource); for (IEObjectDescription d : allDescriptions.getExportedObjectsByType(TTCN3Package.eINSTANCE.getImportDef())) { list.add(((ImportDef) d.getEObjectOrProxy()).getName()); ImportDef def = (ImportDef) d.getEObjectOrProxy(); list.add(def.getName()); if (!exists && TTCN3StatisticsProvider.getInstance().isParsingCompleted() && imports.containsKey(resource)) { imports.get(resource).add(new ImportData(def.getName(), def)); } else if (!exists && TTCN3StatisticsProvider.getInstance().isParsingCompleted() && !imports.containsKey(resource)) { imports.put(resource, new ImportData(def.getName(), def)); } } return list; } Loading @@ -167,4 +194,12 @@ public class TTCN3GlobalScopeProvider extends AbstractGlobalScopeProvider { return new MultimapBasedSelectable(allDescriptions); } public List<ImportData> importedObjects(final Resource resource) { if (imports.containsKey(resource)) { return imports.get(resource); } else { return Lists.newArrayList(); } } }
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +19 −2 Original line number Diff line number Diff line Loading @@ -73,6 +73,10 @@ import org.eclipse.xtext.validation.EValidatorRegistrar import static extension de.ugoe.cs.swe.common.TTCN3ReferenceHelper.* import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import static extension org.eclipse.xtext.EcoreUtil2.* import org.eclipse.xtext.scoping.IGlobalScopeProvider import com.google.inject.Inject import de.ugoe.cs.swe.scoping.TTCN3GlobalScopeProvider import de.ugoe.cs.swe.scoping.ImportData class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading @@ -86,6 +90,9 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { final Stopwatch stopwatch = Stopwatch.createUnstarted(); final TTCN3StatisticsProvider statistics = TTCN3StatisticsProvider.getInstance @Inject private IGlobalScopeProvider globalScopeProvider; @Check def checkNoGotoStatements(GotoStatement goto) { goto.checkNoLabelsOrGotoStatements Loading Loading @@ -1031,6 +1038,16 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { } } @Check def checkNoUnusedImports(TTCN3Module module) { val TTCN3GlobalScopeProvider scopeProvider = globalScopeProvider as TTCN3GlobalScopeProvider if (scopeProvider == null) { return } val List<ImportData> data = scopeProvider.importedObjects(module.eResource); //TODO: implement validations } override register(EValidatorRegistrar registrar) { //not needed for classes used as ComposedCheck } Loading