# HG changeset patch # User Vladimir Kvashin # Date 1398111054 -14400 # Tue Apr 22 00:10:54 2014 +0400 # Node ID 6d2ed5cb6889b08ce52ad8bc9584395ae800a06d # Parent 9beccf3636b97e0efda12b7469e1f09089ce55fb fixing #243960 - OutOfMemoryError in code model tests diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterEllipsisImpl.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterEllipsisImpl.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterEllipsisImpl.java Tue Apr 22 00:10:54 2014 +0400 @@ -109,7 +109,7 @@ super.write(output); } - public ParameterEllipsisImpl(RepositoryDataInput input) throws IOException { - super(input); + public ParameterEllipsisImpl(RepositoryDataInput input, CsmUID scopeUID) throws IOException { + super(input, scopeUID); } } diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterImpl.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterImpl.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterImpl.java Tue Apr 22 00:10:54 2014 +0400 @@ -108,9 +108,13 @@ @Override public void write(RepositoryDataOutput output) throws IOException { super.write(output); - } - - public ParameterImpl(RepositoryDataInput input) throws IOException { - super(input); + } + + @Override + protected void writeScope(RepositoryDataOutput output) throws IOException { + } + + public ParameterImpl(RepositoryDataInput input, CsmUID scopeUID) throws IOException { + super(input, scopeUID); } } diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterListImpl.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterListImpl.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/ParameterListImpl.java Tue Apr 22 00:10:54 2014 +0400 @@ -49,6 +49,8 @@ import org.netbeans.modules.cnd.api.model.CsmNamedElement; import org.netbeans.modules.cnd.api.model.CsmParameter; import org.netbeans.modules.cnd.api.model.CsmParameterList; +import org.netbeans.modules.cnd.api.model.CsmScope; +import org.netbeans.modules.cnd.api.model.CsmUID; import org.netbeans.modules.cnd.apt.structure.APTDefine; import org.netbeans.modules.cnd.apt.support.APTMacro; import org.netbeans.modules.cnd.apt.support.APTToken; diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/VariableImpl.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/VariableImpl.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/csm/VariableImpl.java Tue Apr 22 00:10:54 2014 +0400 @@ -501,12 +501,22 @@ output.writeByte(pack); PersistentUtils.writeExpression(initExpr, output); PersistentUtils.writeType(type, output); + writeScope(output); + } + protected void writeScope(RepositoryDataOutput output) throws IOException { // could be null UID (i.e. parameter) UIDObjectFactory.getDefaultFactory().writeUID(this.scopeUID, output); } public VariableImpl(RepositoryDataInput input) throws IOException { + this(input, null); + this.scopeUID = UIDObjectFactory.getDefaultFactory().readUID(input); + // could be null UID (i.e. parameter) + this.scopeRef = null; + } + + protected VariableImpl(RepositoryDataInput input, CsmUID scopeUID) throws IOException { super(input); this.name = PersistentUtils.readUTF(input, NameCache.getManager()); assert this.name != null; @@ -516,7 +526,7 @@ this.initExpr = (ExpressionBase) PersistentUtils.readExpression(input); this.type = PersistentUtils.readType(input); - this.scopeUID = UIDObjectFactory.getDefaultFactory().readUID(input); + this.scopeUID = scopeUID; // could be null UID (i.e. parameter) this.scopeRef = null; } diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/fsm/DummyParameterImpl.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/fsm/DummyParameterImpl.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/fsm/DummyParameterImpl.java Tue Apr 22 00:10:54 2014 +0400 @@ -104,7 +104,7 @@ super.write(output); } - public DummyParameterImpl(RepositoryDataInput input) throws IOException { - super(input); + public DummyParameterImpl(RepositoryDataInput input, CsmUID scopeUID) throws IOException { + super(input, scopeUID); } } diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/repository/PersistentUtils.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/repository/PersistentUtils.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/repository/PersistentUtils.java Tue Apr 22 00:10:54 2014 +0400 @@ -49,11 +49,13 @@ import java.util.Collection; import java.util.List; import java.util.Set; -import org.netbeans.modules.cnd.api.model.CsmNamedElement; +import org.netbeans.modules.cnd.api.model.CsmObject; import org.netbeans.modules.cnd.api.model.CsmParameter; import org.netbeans.modules.cnd.api.model.CsmParameterList; +import org.netbeans.modules.cnd.api.model.CsmScope; import org.netbeans.modules.cnd.api.model.CsmSpecializationParameter; import org.netbeans.modules.cnd.api.model.CsmType; +import org.netbeans.modules.cnd.api.model.CsmUID; import org.netbeans.modules.cnd.api.model.CsmVisibility; import org.netbeans.modules.cnd.api.model.deep.CsmCompoundStatement; import org.netbeans.modules.cnd.api.model.deep.CsmExpression; @@ -82,12 +84,14 @@ import org.netbeans.modules.cnd.modelimpl.csm.TemplateParameterTypeImpl; import org.netbeans.modules.cnd.modelimpl.csm.TypeBasedSpecializationParameterImpl; import org.netbeans.modules.cnd.modelimpl.csm.VariadicSpecializationParameterImpl; +import org.netbeans.modules.cnd.modelimpl.csm.core.CsmIdentifiable; import org.netbeans.modules.cnd.modelimpl.csm.core.ErrorDirectiveImpl; import org.netbeans.modules.cnd.modelimpl.csm.deep.CompoundStatementImpl; import org.netbeans.modules.cnd.modelimpl.csm.deep.ExpandedExpressionBase; import org.netbeans.modules.cnd.modelimpl.csm.deep.LazyTryCatchStatementImpl; import org.netbeans.modules.cnd.modelimpl.fsm.DummyParameterImpl; import org.netbeans.modules.cnd.modelimpl.fsm.DummyParametersListImpl; +import org.netbeans.modules.cnd.modelimpl.uid.UIDObjectFactory; import org.netbeans.modules.cnd.repository.spi.RepositoryDataInput; import org.netbeans.modules.cnd.repository.spi.RepositoryDataOutput; import org.netbeans.modules.cnd.repository.support.AbstractObjectFactory; @@ -185,9 +189,19 @@ public static void writeParameters(Collection params, RepositoryDataOutput output) throws IOException { if (params == null || params.isEmpty()) { + //UIDObjectFactory.getDefaultFactory().writeUID(null, output); output.writeShort(0); } else { output.writeShort(params.size()); + CsmUID scopeUID = null; + for (CsmParameter param : params) { + CsmScope scope = param.getScope(); + scopeUID = (scope instanceof CsmIdentifiable) ? ((CsmIdentifiable) scope).getUID() : null; + break; + // we could assert in else, but model tests that dump model and compare with goldens + // will check this perfectly well + } + UIDObjectFactory.getDefaultFactory().writeUID(scopeUID, output); for (CsmParameter param : params) { writeParameter(param, output); } @@ -199,26 +213,27 @@ if (size == 0) { return null; } + CsmUID scopeUID = UIDObjectFactory.getDefaultFactory().readUID(input); ArrayList list = new ArrayList<>(size); for (int i = 0; i < size; i++) { - list.add(readParameter(input)); + list.add(readParameter(input, scopeUID)); } list.trimToSize(); return list; } - private static CsmParameter readParameter(RepositoryDataInput input) throws IOException { + private static CsmParameter readParameter(RepositoryDataInput input, CsmUID scopeUID) throws IOException { byte handler = input.readByte(); CsmParameter obj = null; switch (handler) { case DUMMY_PARAMETER_IMPL: - obj = new ParameterEllipsisImpl(input); + obj = new ParameterEllipsisImpl(input, scopeUID); break; case PARAMETER_ELLIPSIS_IMPL: - obj = new ParameterEllipsisImpl(input); + obj = new ParameterEllipsisImpl(input, scopeUID); break; case PARAMETER_IMPL: - obj = new ParameterImpl(input); + obj = new ParameterImpl(input, scopeUID); break; default: assert false : "unexpected handler" + handler; diff -r 9beccf3636b9 -r 6d2ed5cb6889 cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/repository/RepositoryUtils.java --- a/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/repository/RepositoryUtils.java Mon Apr 21 22:27:51 2014 +0400 +++ b/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/repository/RepositoryUtils.java Tue Apr 22 00:10:54 2014 +0400 @@ -78,7 +78,7 @@ /** * the version of the persistency mechanism */ - private static final int CURRENT_VERSION_OF_PERSISTENCY = 168; + private static final int CURRENT_VERSION_OF_PERSISTENCY = 169; // /** temporary flag, to be removed as soon as relocatable repository is achieved */ // public static final boolean RELOCATABLE = true;