mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-10 17:55:39 +02:00
Bug 184083 - Patch for Bryan - Add base classes to for class instances and specialization in the PDOM.
This commit is contained in:
parent
b1cf95a962
commit
6342a2854c
8 changed files with 138 additions and 53 deletions
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
|
* Bryan Wilkinson (QNX)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -30,8 +31,8 @@ import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
|
||||||
/**
|
/**
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
*/
|
*/
|
||||||
public class CPPBaseClause implements ICPPBase {
|
public class CPPBaseClause implements ICPPBase, ICPPInternalBase {
|
||||||
static public class CPPBaseProblem extends ProblemBinding implements ICPPBase {
|
static public class CPPBaseProblem extends ProblemBinding implements ICPPBase, ICPPInternalBase {
|
||||||
private ICPPClassType classProblem = null;
|
private ICPPClassType classProblem = null;
|
||||||
public CPPBaseProblem( IASTNode node, int id, char[] arg ) {
|
public CPPBaseProblem( IASTNode node, int id, char[] arg ) {
|
||||||
super( node, id, arg );
|
super( node, id, arg );
|
||||||
|
@ -53,6 +54,9 @@ public class CPPBaseClause implements ICPPBase {
|
||||||
public IName getBaseClassSpecifierName() {
|
public IName getBaseClassSpecifierName() {
|
||||||
return (IName) node;
|
return (IName) node;
|
||||||
}
|
}
|
||||||
|
public void setBaseClass(IBinding binding) throws DOMException {
|
||||||
|
throw new DOMException( this );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private ICPPASTBaseSpecifier base = null;
|
private ICPPASTBaseSpecifier base = null;
|
||||||
private IBinding baseClass = null;
|
private IBinding baseClass = null;
|
||||||
|
@ -107,7 +111,7 @@ public class CPPBaseClause implements ICPPBase {
|
||||||
return base.isVirtual();
|
return base.isVirtual();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBaseClass(ICPPClassType cls) {
|
public void setBaseClass(IBinding cls) {
|
||||||
baseClass = cls;
|
baseClass = cls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,4 +119,13 @@ public class CPPBaseClause implements ICPPBase {
|
||||||
return base.getName();
|
return base.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object clone(){
|
||||||
|
ICPPBase t = null;
|
||||||
|
try {
|
||||||
|
t = (ICPPBase) super.clone();
|
||||||
|
} catch ( CloneNotSupportedException e ) {
|
||||||
|
//not going to happen
|
||||||
|
}
|
||||||
|
return t;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
|
||||||
|
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
||||||
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexType;
|
import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
|
|
||||||
|
@ -54,18 +55,21 @@ public class CPPClassInstance extends CPPInstance implements ICPPClassType, ICPP
|
||||||
public ICPPBase[] getBases() throws DOMException {
|
public ICPPBase[] getBases() throws DOMException {
|
||||||
ICPPClassType cls = (ICPPClassType) getSpecializedBinding();
|
ICPPClassType cls = (ICPPClassType) getSpecializedBinding();
|
||||||
if( cls != null ){
|
if( cls != null ){
|
||||||
|
ICPPBase[] result = null;
|
||||||
ICPPBase [] bindings = cls.getBases();
|
ICPPBase [] bindings = cls.getBases();
|
||||||
for (int i = 0; i < bindings.length; i++) {
|
for (int i = 0; i < bindings.length; i++) {
|
||||||
|
ICPPBase specBinding = (ICPPBase) ((ICPPInternalBase)bindings[i]).clone();
|
||||||
IBinding base = bindings[i].getBaseClass();
|
IBinding base = bindings[i].getBaseClass();
|
||||||
if (bindings[i] instanceof CPPBaseClause && base instanceof IType) {
|
if (base instanceof IType) {
|
||||||
IType specBase = CPPTemplates.instantiateType((IType) base, argumentMap);
|
IType specBase = CPPTemplates.instantiateType((IType) base, argumentMap);
|
||||||
specBase = CPPSemantics.getUltimateType(specBase, false);
|
specBase = CPPSemantics.getUltimateType(specBase, false);
|
||||||
if (specBase instanceof ICPPClassType) {
|
if (specBase instanceof IBinding) {
|
||||||
((CPPBaseClause)bindings[i]).setBaseClass((ICPPClassType)specBase);
|
((ICPPInternalBase)specBinding).setBaseClass((IBinding)specBase);
|
||||||
}
|
}
|
||||||
|
result = (ICPPBase[]) ArrayUtil.append(ICPPBase.class, result, specBinding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bindings;
|
return (ICPPBase[]) ArrayUtil.trim(ICPPBase.class, result);
|
||||||
}
|
}
|
||||||
return ICPPBase.EMPTY_BASE_ARRAY;
|
return ICPPBase.EMPTY_BASE_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,18 +75,21 @@ public class CPPClassSpecialization extends CPPSpecialization implements
|
||||||
*/
|
*/
|
||||||
public ICPPBase[] getBases() throws DOMException {
|
public ICPPBase[] getBases() throws DOMException {
|
||||||
if( getDefinition() == null ){
|
if( getDefinition() == null ){
|
||||||
|
ICPPBase[] result = null;
|
||||||
ICPPBase[] bindings = ((ICPPClassType)getSpecializedBinding()).getBases();
|
ICPPBase[] bindings = ((ICPPClassType)getSpecializedBinding()).getBases();
|
||||||
for (int i = 0; i < bindings.length; i++) {
|
for (int i = 0; i < bindings.length; i++) {
|
||||||
|
ICPPBase specBinding = (ICPPBase) ((ICPPInternalBase)bindings[i]).clone();
|
||||||
IBinding base = bindings[i].getBaseClass();
|
IBinding base = bindings[i].getBaseClass();
|
||||||
if (bindings[i] instanceof CPPBaseClause && base instanceof IType) {
|
if (base instanceof IType) {
|
||||||
IType specBase = CPPTemplates.instantiateType((IType) base, argumentMap);
|
IType specBase = CPPTemplates.instantiateType((IType) base, argumentMap);
|
||||||
specBase = CPPSemantics.getUltimateType(specBase, false);
|
specBase = CPPSemantics.getUltimateType(specBase, false);
|
||||||
if (specBase instanceof ICPPClassType) {
|
if (specBase instanceof IBinding) {
|
||||||
((CPPBaseClause)bindings[i]).setBaseClass((ICPPClassType)specBase);
|
((ICPPInternalBase)specBinding).setBaseClass((IBinding)specBase);
|
||||||
}
|
}
|
||||||
|
result = (ICPPBase[]) ArrayUtil.append(ICPPBase.class, result, specBinding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bindings;
|
return (ICPPBase[]) ArrayUtil.trim(ICPPBase.class, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
ICPPASTBaseSpecifier[] bases = getCompositeTypeSpecifier().getBaseSpecifiers();
|
ICPPASTBaseSpecifier[] bases = getCompositeTypeSpecifier().getBaseSpecifiers();
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 QNX Software Systems and others.
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* QNX - Initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.core.dom.parser.cpp;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bryan Wilkinson
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ICPPInternalBase extends Cloneable {
|
||||||
|
public Object clone();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the base class.
|
||||||
|
*/
|
||||||
|
public void setBaseClass(IBinding binding) throws DOMException;
|
||||||
|
}
|
|
@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBase;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding;
|
import org.eclipse.cdt.internal.core.index.IIndexFragmentBinding;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexType;
|
import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
|
import org.eclipse.cdt.internal.core.index.composite.ICompositesFactory;
|
||||||
|
@ -47,28 +48,43 @@ class CompositeCPPClassType extends CompositeCPPBinding implements ICPPClassType
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class CPPBaseDelegate implements ICPPBase, ICPPInternalBase {
|
||||||
|
private ICPPBase base;
|
||||||
|
|
||||||
|
CPPBaseDelegate(ICPPBase b) {
|
||||||
|
this.base = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBinding getBaseClass() throws DOMException {
|
||||||
|
return cf.getCompositeBinding((IIndexFragmentBinding)base.getBaseClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
public IName getBaseClassSpecifierName() {
|
||||||
|
return base.getBaseClassSpecifierName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVisibility() throws DOMException {
|
||||||
|
return base.getVisibility();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVirtual() throws DOMException {
|
||||||
|
return base.isVirtual();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseClass(IBinding binding) throws DOMException {
|
||||||
|
((ICPPInternalBase)base).setBaseClass(binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object clone(){
|
||||||
|
return ((ICPPInternalBase)base).clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ICPPBase[] getBases() throws DOMException {
|
public ICPPBase[] getBases() throws DOMException {
|
||||||
final ICPPBase[] preresult = ((ICPPClassType)rbinding).getBases();
|
final ICPPBase[] preresult = ((ICPPClassType)rbinding).getBases();
|
||||||
ICPPBase[] result = new ICPPBase[preresult.length];
|
ICPPBase[] result = new ICPPBase[preresult.length];
|
||||||
for(int i=0; i<preresult.length; i++) {
|
for(int i=0; i<preresult.length; i++) {
|
||||||
final int n = i;
|
result[i] = new CPPBaseDelegate(preresult[i]);
|
||||||
result[i] = new ICPPBase() {
|
|
||||||
public IBinding getBaseClass() throws DOMException {
|
|
||||||
return cf.getCompositeBinding((IIndexFragmentBinding)preresult[n].getBaseClass());
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getVisibility() throws DOMException {
|
|
||||||
return preresult[n].getVisibility();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isVirtual() throws DOMException {
|
|
||||||
return preresult[n].isVirtual();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IName getBaseClassSpecifierName() {
|
|
||||||
return preresult[n].getBaseClassSpecifierName();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,16 +16,18 @@ import org.eclipse.cdt.core.dom.IName;
|
||||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBase;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.cdt.internal.core.pdom.db.Database;
|
import org.eclipse.cdt.internal.core.pdom.db.Database;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
*/
|
*/
|
||||||
class PDOMCPPBase implements ICPPBase {
|
class PDOMCPPBase implements ICPPBase, ICPPInternalBase {
|
||||||
|
|
||||||
private static final int BASECLASS_SPECIFIER = 0;
|
private static final int BASECLASS_SPECIFIER = 0;
|
||||||
private static final int NEXTBASE = 4;
|
private static final int NEXTBASE = 4;
|
||||||
|
@ -126,15 +128,25 @@ class PDOMCPPBase implements ICPPBase {
|
||||||
pdom.getDB().free(record);
|
pdom.getDB().free(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class PDOMCPPBaseSpecialization implements ICPPBase {
|
public void setBaseClass(IBinding binding) {
|
||||||
private PDOMCPPBase base;
|
throw new PDOMNotImplementedError();
|
||||||
private IBinding baseClass;
|
}
|
||||||
|
|
||||||
public PDOMCPPBaseSpecialization(PDOMCPPBase base, IBinding baseClass) {
|
public Object clone() {
|
||||||
|
return new PDOMCPPBaseClone(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class PDOMCPPBaseClone implements ICPPBase, ICPPInternalBase {
|
||||||
|
private ICPPBase base;
|
||||||
|
private IBinding baseClass = null;
|
||||||
|
|
||||||
|
public PDOMCPPBaseClone(ICPPBase base) {
|
||||||
this.base = base;
|
this.base = base;
|
||||||
this.baseClass = baseClass;
|
|
||||||
}
|
}
|
||||||
public IBinding getBaseClass() throws DOMException {
|
public IBinding getBaseClass() throws DOMException {
|
||||||
|
if (baseClass == null) {
|
||||||
|
return base.getBaseClass();
|
||||||
|
}
|
||||||
return baseClass;
|
return baseClass;
|
||||||
}
|
}
|
||||||
public IName getBaseClassSpecifierName() {
|
public IName getBaseClassSpecifierName() {
|
||||||
|
@ -146,9 +158,11 @@ class PDOMCPPBase implements ICPPBase {
|
||||||
public boolean isVirtual() throws DOMException {
|
public boolean isVirtual() throws DOMException {
|
||||||
return base.isVirtual();
|
return base.isVirtual();
|
||||||
}
|
}
|
||||||
}
|
public void setBaseClass(IBinding binding) {
|
||||||
|
baseClass = binding;
|
||||||
public ICPPBase createSpecialization(IBinding baseClass) {
|
}
|
||||||
return new PDOMCPPBaseSpecialization(this, baseClass);
|
public Object clone() {
|
||||||
|
return new PDOMCPPBaseClone(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassScope;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassScope;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBase;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexScope;
|
import org.eclipse.cdt.internal.core.index.IIndexScope;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexType;
|
import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
@ -85,13 +86,16 @@ class PDOMCPPClassInstance extends PDOMCPPInstance implements
|
||||||
ICPPBase[] result = null;
|
ICPPBase[] result = null;
|
||||||
|
|
||||||
for (int i = 0; i < pdomBases.length; i++) {
|
for (int i = 0; i < pdomBases.length; i++) {
|
||||||
PDOMCPPBase pdomBase = (PDOMCPPBase) pdomBases[i];
|
ICPPBase origBase = pdomBases[i];
|
||||||
IType type = (IType) pdomBase.getBaseClass();
|
ICPPBase specBase = (ICPPBase) ((ICPPInternalBase)origBase).clone();
|
||||||
type = CPPTemplates.instantiateType(type, getArgumentMap());
|
IBinding origClass = origBase.getBaseClass();
|
||||||
type = CPPSemantics.getUltimateType(type, false);
|
if (origClass instanceof IType) {
|
||||||
if (type instanceof IBinding) {
|
IType specClass = CPPTemplates.instantiateType((IType) origClass, getArgumentMap());
|
||||||
result = (ICPPBase[]) ArrayUtil.append(ICPPBase.class, result,
|
specClass = CPPSemantics.getUltimateType(specClass, true);
|
||||||
pdomBase.createSpecialization((IBinding) type));
|
if (specClass instanceof IBinding) {
|
||||||
|
((ICPPInternalBase)specBase).setBaseClass((IBinding) specClass);
|
||||||
|
}
|
||||||
|
result = (ICPPBase[]) ArrayUtil.append(ICPPBase.class, result, specBase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassScope;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassScope;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplates;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBase;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexScope;
|
import org.eclipse.cdt.internal.core.index.IIndexScope;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexType;
|
import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
@ -150,13 +151,16 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements
|
||||||
ICPPBase[] result = null;
|
ICPPBase[] result = null;
|
||||||
|
|
||||||
for (int i = 0; i < pdomBases.length; i++) {
|
for (int i = 0; i < pdomBases.length; i++) {
|
||||||
PDOMCPPBase pdomBase = (PDOMCPPBase) pdomBases[i];
|
ICPPBase origBase = pdomBases[i];
|
||||||
IType type = (IType) pdomBase.getBaseClass();
|
ICPPBase specBase = (ICPPBase) ((ICPPInternalBase)origBase).clone();
|
||||||
type = CPPTemplates.instantiateType(type, getArgumentMap());
|
IBinding origClass = origBase.getBaseClass();
|
||||||
type = CPPSemantics.getUltimateType(type, false);
|
if (origClass instanceof IType) {
|
||||||
if (type instanceof IBinding) {
|
IType specClass = CPPTemplates.instantiateType((IType) origClass, getArgumentMap());
|
||||||
result = (ICPPBase[]) ArrayUtil.append(ICPPBase.class, result,
|
specClass = CPPSemantics.getUltimateType(specClass, true);
|
||||||
pdomBase.createSpecialization((IBinding) type));
|
if (specClass instanceof IBinding) {
|
||||||
|
((ICPPInternalBase)specBase).setBaseClass((IBinding) specClass);
|
||||||
|
}
|
||||||
|
result = (ICPPBase[]) ArrayUtil.append(ICPPBase.class, result, specBase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue